Вы можете найти рассылки сходной тематики в Каталоге рассылок.
В рассылке используются материалы веб-сайта 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 'Среднее жалованье по категориям'.
На сегодня это все упражнения.
Всего доброго и приятных выходных!
Ведущий рассылки,
Балабанов Антон
Переведены и добавлены примеры синтаксиса:
Уменьшить ширину колонок в редакторе данных.SPS
Выравнивание строковых переменных по правому краю.SPS
Проверка формата текстового поля.SPS
Проверить шкалу Лайкерта и непрерывную переменную.SPS
Добавить 60 дней к дате и найти последний день месяца.SPS
Добавить ведущие нули к дате в строковом формате.SPS
Вычислить возраст, если он введён как nnH nnD nnM и nnA.SPS
Разложить период госпитализации по месяцам.SPS
Вычислить разницу во времени в миллисекундах.SPS
Вычислить среднюю дату и стандартное отклонение в днях.SPS
Переведены и добавлены скрипты:
Установить число десятичных знаков для процентов.SBS
Заменить процентный формат.SBS
© См. www.spsstools.ru, 2005-2006
В избранное | ||