Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Статистика в SPSS: за пределами кнопочного интерфейса. Выпуск 11


Статистика в SPSS: за пределами кнопочного интерфейса. Выпуск 11

В рассылке используются материалы веб-сайта www.spsstools.ru

Содержание выпуска

Пример агрегирования данных

Новое на сайте www.spsstools.ru


Здравствуйте, уважаемые подписчики!

Пример агрегирования данных

В коллекции Рейналя имеется синтаксис Создать переменную со средними значениями другой переменной.SPS (Ray, 17.06.2003), который, как следует из названия, создаёт новую переменную, помещая в неё среднее значение существующей переменной файла данных. Подобная задача является характерным примером того, когда особая логика организации данных в статистическом пакете создаёт определённые трудности в использовании статистики по файлу данных в дальнейших расчётах. Поскольку данная операция хотя и требуется, но не слишком часто, её реализация в SPSS хотя и возможна, но чуть более сложна, чем, например, простое вычисление среднего значения.

Если бы мы работали в пакете MS Excel, то, наверное, сначала рассчитали бы среднее, а затем "размножили" его по всем наблюдениям с помощью специальных символов закрепления "$" при адресации на ячейку, содержащую среднее. В SPSS процедура также включает 2 этапа, схожих по своему содержанию с действиями в Excel, но иных по техническому исполнению: создание внешнего файла со статистикой (средними значениями) и затем "подшивание" этой статистики к исходному файлу данных.

Безусловно, на месте среднего значения могут быть и другие обобщающие характеристики переменной, такие, как минимум, максимум, дисперсия, процент наблюдений, превышающих установленный порог и так далее. Команда AGGREGATE, использующаяся на первом этапе, предоставляет широкий спектр соответствующих функций.

В примере синтаксиса, который мы разберём, будут задействованы 2 ключевые команды: AGGREGATE - расчёт статистики и помещение её во внешний файл данных и MATCH FILES (буквально - сопоставление файлов), т.е. слияние исходного файла и файла статистических показателей. Данные команды доступны и через кнопочный интерфейс программы (AGGREGATE - через Data - Aggregate, MATCH FILES - через Data - Merge Files - Add Variables).

Откроем файл примера, поставляющегося с SPSS (Employee data.sav); на вашем компьютере может потребоваться изменить путь к этому файлу...

 

GET FILE = 'C:\Program Files\SPSS\Employee data.sav'.

 

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

Благо, пакет SPSS, как правило, предоставляет несколько вариантов получения того или иного результата, поэтому посмотрим в начале, как можно построить отклонения от общей средней и от средней по группам работников (например, по категориям, jobcat) с помощью иных средств, отличных от AGGREGATE и MATCH FILES.

 

1. Вычисляем отклонения от общей средней посредством сохранения и последующей модификации стандартизированных значений.

В меню Analyze - Descriptive Statistics - Descriptives присутствует опция "Save standardized values as variables" - "сохранить стандартизированные значения как переменные". Воспользуемся ей, чтобы получить отклонения заработков относительно средней величины, выраженные в количестве стандартных отклонений. Эквивалент этой операции на командном языке выглядит следующим образом:

 

DESCRIPTIVES
VARIABLES=salary /SAVE
/STATISTICS=MEAN STDDEV MIN MAX.

 

Опция /SAVE обеспечила создание новой переменной (zsalary), содержащей стандартизированные значения переменной salary. Из таблицы Descriptive Statistics в окне результатов видим, что стандартное отклонение составило 17 075.6 условных единиц. Таким образом, чтобы получить абсолютные отклонения жалованья от собственного среднего, достаточно теперь умножить стандартизированные значения на 17 075.6:

 

COMPUTE saldev=zsalary*17075.6.

EXECUTE.

 

2. Вычисляем отклонения от среднего жалованья по категориям служащих (переменная jobcat) посредством одномерного однофакторного дисперсионного анализа.

В самом деле, если использовать переменную jobcat как фактор в дисперсионном анализе, возможности команды UNIANOVA по сохранению прогнозов (Predicted) и остатков (невязок модели - Residuals), обеспечат нам появление в файле данных соответствующих переменных.

 

UNIANOVA
salary BY jobcat
/INTERCEPT = INCLUDE
/SAVE = PRED RESID
/DESIGN = jobcat.

 

После выполнения этой команды в переменных pre_1 и res_1 оказались, соответственно, средние размеры жалованья по категориям служащих и отклонения от среднего жалованья в своей категории для каждого работника.

 

3. То же самое, через команды AGGREGATE и MATCH FILES.

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

Задачи с общими и частными средними реализуются аналогичными сочетаниями команд AGGREGATE и MATCH FILES.

Вариант А: общее среднее.

Команда AGGREGATE предназначена для расчёта статистик по группам наблюдений. В её теле присутствует подкоманда /BREAK, устанавливающая переменную, относящую наблюдения к той или иной группе. Соответственно, количество рассчитанных статистик будет определяться числом уникальных значений переменной, указанной в параметре /BREAK (включая пропущенные значения). В данном случае, поскольку нас интересует общее среднее, необходимо указать, что все наблюдения относятся к одной и той же группе. В этом нам поможет константа nobreak:

 

COMPUTE nobreak=1.

 

После инструкции COMPUTE вычисления принудительно можно не выполнять, так как следующая команда AGGREGATE всё равно будет обрабатывать весь файл данных - заодно и произведёт те вычисления, которые были запрошены ранее.

В команде AGGREGATE мы указываем имя внешнего файла, который будет содержать статистику ('c:\temp\temp.sav'), а также имя группирующей переменной (nobreak) и тот факт, что наблюдения были отсортированы по значениям этой переменной (/PRESORTED). В самом деле, хотя сортировка и не производилась, она была и не нужна, т.к. nobreak имеет значение 1 для всех наблюдений. Вообще же, если группирующая переменная действительно имеет разные значения, знатоки рекомендуют заранее отсортировать файл данных командой SORT CASES BY, а затем использовать AGGREGATE именно с параметром /PRESORTED. Это освобождает AGGREGATE от необходимости выполнять сортировку по ходу своего алгоритма, что благоприятно сказывается на объёме требуемой памяти и скорости преобразований. Для больших файлов такое разнесение сортировки и агрегирования может оказаться очень полезным. Ну а в данном случае мы просто выпендрились...

Ключевым параметром является указание того, что переменная msal в новом файле должна содержать среднее (MEAN) по переменной salary из текущего файла.

 

AGGREGATE OUTFILE='c:\temp\temp.sav'
/PRESORTED
/BREAK=nobreak
/msal=MEAN(salary).


Агрегирование произведено. Если раньше вы никогда не использовали AGGREGATE, на этом этапе полезно прервать чтение и заглянуть в получившийся файл (c:\temp\temp.sav), дабы увидеть, что он из себя представляет. Затем вновь откройте исходный файл данных и доведите исполнение синтаксиса вновь до этого места.

Теперь наша задача - сделать так, чтобы единственное наблюдение переменной msal из файла c:\temp\temp.sav оказалось размножено по всем наблюдениям текущего файла. Это сделает команда сопоставления файлов MATCH FILES. Слияние производится в текущий файл данных (параметр "*"). Внешний файл со статистикой объявляется подстановочной таблицей (/TABLE) по ключу nobreak. Это означает, что значения всех переменных для тех наблюдений из внешнего файла, для которых значения nobreak совпадут со значением nobreak из наблюдений текущего файла, будут приписаны этим наблюдениям в текущий файл по принципу один-ко-многим. Поскольку других значений ключа, кроме 1, у нас нет ни в том, ни в другом файле, а во внешнем файле имеется только две переменные - ключ nobreak и msal, визуально данное действие добавит в текущий файл переменную msal, которая будет иметь значение 34 419 для всех наблюдений.

 

MATCH FILES FILE=*
/TABLE='c:\temp\temp.sav'
/BY nobreak.


Остаётся подсчитать отклонения и дать метки новым переменным:

 

COMPUTE saldif=salary-msal.

EXECUTE.

VARIABLE LABEL saldif 'Жалованье минус среднее жалованье'
/msal 'Среднее жалованье'.

 

Вариант Б. Средние по категориям.

Очень похожими будут наши действия в том случае, если требуется подсчитать средние и отклонения от них по категориям служащих (переменная jobcat). В этом случае мы будем использовать не константу nobreak в качестве разделителя, а непосредственно переменную jobcat. Причём в данном случае важно предварительно произвести сортировку наблюдений по ней, если в последующей команде AGGREGATE мы используем параметр /PRESORTED (предварительно отсортированный файл).

 

SORT CASES BY jobcat.

AGGREGATE OUTFILE='c:\temp\temp.sav'
/PRESORTED
/BREAK=jobcat
/msalj=MEAN(salary).

MATCH FILES FILE=*
/TABLE='c:\temp\temp.sav'
/BY jobcat.

COMPUTE saldifj=salary-msalj.

EXECUTE.

VARIABLE LABEL saldifj 'Жалованье минус среднее жалованье по категориям'
/msalj 'Среднее жалованье по категориям'.

 

На сегодня это все упражнения.

Всего доброго и приятных выходных!

 

Ведущий рассылки,

Балабанов Антон

Новое на сайте www.spsstools.ru

Переведены и добавлены примеры синтаксиса:

Уменьшить ширину колонок в редакторе данных.SPS

Выравнивание строковых переменных по правому краю.SPS

Проверка формата текстового поля.SPS

Проверить шкалу Лайкерта и непрерывную переменную.SPS

Добавить 60 дней к дате и найти последний день месяца.SPS

Добавить ведущие нули к дате в строковом формате.SPS

Вычислить возраст, если он введён как nnH nnD nnM и nnA.SPS

Разложить период госпитализации по месяцам.SPS

Вычислить возраст.SPS

Вычислить разницу во времени в миллисекундах.SPS

Вычислить среднюю дату и стандартное отклонение в днях.SPS

 

Переведены и добавлены скрипты:

Установить число десятичных знаков для процентов.SBS

Заменить процентный формат.SBS

 

© См. www.spsstools.ru, 2005-2006


В избранное