Как агрегировать по IQR в SPSS?

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

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

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

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


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

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

2 ответа

Решение

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

Много способов снять шкуру с кошки.

Джон Пек

Этот синтаксис должен сделать свое дело. Нет необходимости мигрировать назад и вперед между 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 миллиона записей, очень сложно, и в этом нет необходимости, если вы все равно разбиваете файл на части. Это может быть достигнуто с помощью макрокоманд.

Другие вопросы по тегам