Как агрегировать по IQR в SPSS? - PullRequest
1 голос
/ 08 апреля 2011

Я должен агрегировать (конечно, с категориальной переменной разрыва) довольно большую таблицу данных, содержащую некоторые непрерывные переменные, получая среднее значение, медиану, стандартное отклонение и межквартильный диапазон (IQR) требуемых переменных.

Первые три - это простая команда SPSS Aggregate , но я не знаю, как вычислить IQR путем агрегирования таблицы данных.

Я знаю, что мог бы вычислить IQR, используя Описательные данные (по квартилам), но, поскольку мне нужны вычисления в агрегации - это не вариант. К сожалению, использование R завершается неудачно также из-за некоторых странных обстоятельств (невозможно загрузить огромный разделенный запятыми файл в R ни с помощью base :: read.table, ни с sqldf , ни с bigmemory и ни с ff пакетами).

Любая идея приветствуется! И конечно: заранее спасибо.


П.С .: Я думал об оценке IQR путем умножения стандартного отклонения на 1,5, но этот метод не будет работать, поскольку распределения искажены, поэтому допущение нормальности не сохраняется.

P.S .: Как вы думаете, использование R в SPSS не приведет к проблемам с памятью, как при открытии набора данных в чистом R?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Этот синтаксис должен помочь. Для выполнения этой задачи нет необходимости мигрировать назад и вперед между SPSS и R.

*making fake data, 4 million records and 150 variables.
input program.
loop i = 1 to 4000000.
end case.
end loop.
end file.
end input program.
dataset name Temp.
execute.

vector X(150).
do repeat X = X1 to X150.
compute X = RV.NORMAL(0,1).
end repeat.

*This is the command you are interested in, puts the stats table into a new dataset.
Dataset declare IQR.
OMS
/SELECT TABLES
/IF SUBTYPES = 'Statistics'
/DESTINATION FORMAT = SAV outfile = 'IQR' VIEWER=NO.
freq var = X1
/format = notable
/ntiles = 4.
OMSEND.

Это занимает много времени с таким большим набором данных, но этого и следовало ожидать. Просто найдите в файлах справки SPSS «OMS», чтобы найти пример синтаксиса с описанием работы OMS.


Учитывая дальнейшее ограничение, которое вы хотите рассчитать IQR для многих групп, есть несколько разных способов, чтобы я мог продолжить. Можно просто использовать команду split file и снова запустить указанную выше команду частоты.

split file by group.
freq var = X1 X2
/format = notable
/ntiles = 4.
split file end.

Вы также можете получить определенные процентили в ctables (и можете делать для этого любую группировку / вложение). Потенциально более полезным решением на данный момент является создание программы, которая фактически сохраняет отдельные файлы (или сокращает полный набор данных конкретной группы, пока она еще загружена), выполняет вычисления для каждого отдельного файла и выгружает его в набор данных. Работать с набором данных, содержащим 4 миллиона записей, очень сложно, и в этом нет необходимости, если вы все равно разбиваете файл на части. Это может быть достигнуто с помощью макрокоманд.

2 голосов
/ 09 апреля 2011

OMS может захватывать любую сводную таблицу в качестве набора данных, поэтому любые статистические результаты, отображаемые таким образом, могут использоваться в качестве набора данных.Однако в этом случае другим подходом будет использование команды RANK.RANK позволяет группировать переменные, чтобы вы могли получить ранг в группе, и он может вычислять квартили и процентили в группе.Например, RANK VARIABLES = зарплата (A) BY jobcat меньшинством / RANK / NTILES (4) / PERCENT.Затем агрегирование с FIRST и групповыми переменными в качестве разрывов даст вам набор данных квартилей по группам, из которого можно вычислить iqr.

Множество способов скиновать кошку.

-Jon Peck

...