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

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


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

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

Пример построения графика "под заказ"

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


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

Пример построения графика "под заказ"

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

Примером в нашем случае послужит синтаксис Графики накопленного процента уволившихся к определённому возрасту для разных категорий.SPS из коллекции Рейналя.

В синтаксисе сформулирована задача построения графика особого типа, есть пример данных и предложен вариант решения задачи.


Взглянем сначала на исходные данные.

Набор команд ниже определяет, во-первых, 3 числовые (по умолчанию) переменные (retire, age и rich). Затем внутри команд BEGIN DATA - END DATA помещаются сами данные, в колонках, через пробел. Затем командой LIST созданный набор данных выводится в окно результатов на обозрение пользователя.

DATA LIST LIST /retire age rich.

BEGIN DATA
0 45 0
0 45 0
0 45 0
0 55 0
1 55 0
0 65 0
0 60 0
1 60 0
1 45 0
1 65 0
0 45 0
0 55 1
0 55 1
1 60 1
0 65 1
1 55 1
1 60 0
1 65 1
1 60 1
1 65 1
1 65 1
1 65 1

END DATA.

LIST.

Можно предположить, что указанный фрагмент данных является частью базы данных отдела кадров какого-то предприятия или частью базы данных специального выборочного обследования. Смысл переменных и их значений мы поясним ниже, дав им "говорящие" метки:

VARIABLE LABEL retire 'Увольнение' / age 'Возраст, лет' /rich 'Благосостояние'.

VALUE LABEL retire 0 'работает' 1 'уволился'.

VALUE LABEL rich 0 'бедный' 1 'богатый'.

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

Далее мы хотели бы знать, сколько работников уволилось к каждому возрасту. В этом нам поможет накопленное распределение. График накопленных частот можно построить стандартными средствами:

GRAPH
/LINE(SIMPLE)=CUS(retire) BY age.

Похожий график, но с отдельными линиями для "богатых" и "бедных" работников строится аналогично:

GRAPH
/LINE(MULTIPLE)=CUS(retire) BY age BY rich.

Однако, нагляднее было бы посмотреть на графики накопленных процентных распределений, где процент рассчитывается как отношение накопленной частоты уволившихся к определённому возрасту работников к накопленной частоте всех работников к данному возрасту. Этот график покажет нам динамику увольнения работников по возрастам. Кроме того, нам требуется построить отдельные линии накопленных процентов для тех, кто относится к категории "богатых" и "бедных". Возможно, это укажет на разную динамику для двух категорий работников. Подобную задачу сложно решить стандартными методами.

Преобразуем данные так, чтобы нужный нам график можно было построить стандартной командой GRAPH /LINE.

Во-первых, сохраним исходные данные, так как они подвергнутся преобразованиям.

SAVE OUTFILE='c:\temp\data.sav'.

Произведём сортировку. Обратите внимание, в данном случае сортировка осуществляется сразу по двум переменным. Это значит, наблюдения будут сначала упорядочены по значениям переменной rich, а затем, наблюдения, имеющие одинаковые значения переменной rich будут дополнительно отсортированы в пределах этого значения по переменной age. Поскольку порядок сортировки (A или D) не указан, и в том, и в другом случае по умолчанию она осуществляется по возрастанию.

SORT CASES BY rich age.

Следующей командой AGGREGATE мы считаем статистику для каждой уникальной комбинации значений переменных rich и age. В каждом таком случае в новую переменную retire будет помещена сумма по переменной retire. Мы помним, что в retire содержатся нули и единицы. Последние означают факт увольнения работника. Сумма значений этой переменной для конкретной категории переменной rich и конкретного возраста (age) будет означать количество уволившихся работников попадающих в ту и другую категории одновременно. Переменная n будет содержать общее количество работников, попавших в ту и другую категорию. Поскольку в качестве имени файла для помещения статистики был указан символ "*", статистика заменит открытый файл данных в редакторе. Так как данные были предварительно отсортированы, мы можем быть уверены, что сначала идёт статистика для "бедных" и наиболее молодых работников, затем - для "бедных" и более возрастных, затем - для "богатых" и наиболее молодых и так далее.

AGGREGATE OUTFILE=*
/BREAK rich age
/retire=SUM(retire) /n=n.

Далее следует блок команд, оперирующих уже с новым файлом, содержащим сводную информацию, полученную на предыдущем шаге. Использована сложная конструкция условных вычисление: DO IF - ELSE IF - ELSE - END IF. Цель этих условий - произвести подсчёт накопленных сумм уволившихся и всех работников в каждой возрастной категории отдельно для "бедных" и "богатых" работников. Каждое наблюдение мы проверяем на первые 2 условия и если не выполнено ни первое, ни второе, то выполняем две команды COMPUTE после последнего ELSE. Первое условие после команды DO IF выполняется, если наблюдение является первым наблюдением файла данных (системная переменная $CASENUM равна единице). В этом случае, естественно, накопленные суммы будут совпадать со значениями переменных retire и n. Соответственно, мы приписываем эти значения переменным cretire и clives. В большинстве остальных случаев мы добавляем к предыдущим значениям cretire и clives текущие значения переменных retire и n (команды COMPUTE после последнего ELSE). Для обращения к предыдущим значениям используется функция LAG. Так обеспечивается формирование накопленных сумм. Однако, есть одно исключение, требующее спецификации дополнительного условия (ELSE IF). В случае, если мы закончили формирование накопленных сумм для "бедных" работников и переходим к "богатым", накопленные переменные требуется заново инициализировать, как и в случае с первым наблюдением. Выполнение условия rich=1 AND (И) LAG(rich=0) и показывает этот "переломный" момент - первую возрастную категорию "богатых" работников. После завершения формирования условий мы запускаем сами вычисления командой EXECUTE.

DO IF $CASENUM=1.

+ COMPUTE cretire=retire.

+ COMPUTE clives=n.

ELSE IF (rich=1 AND LAG(rich)=0).

+ COMPUTE cretire=retire.

+ COMPUTE clives=n.

ELSE.

+ COMPUTE cretire=retire + LAG(cretire).

+ COMPUTE clives=n + LAG(clives).

END IF.

EXECUTE.

Теперь накопленные частоты рассчитаны. Осталось подсчитать процент для каждой из категорий (а точнее - долю). Это делается одной командой

COMPUTE pc=cretire/clives.

Теперь графически проиллюстрируем накопленные проценты. Узлы линий на графике будут представлять из себя средние значения доли для каждой возрастной категории отдельно для "богатых" и "бедных" работников. Поскольку каждая такая комбинация представлена всего одним значением доли, на место обобщающей функции можно было бы поместить и минимум, и максимум, например. Подкоманда MISSING = REPORT допускает включение категорий с пропущенными значениями при построении графика. В данном случае таких категорий у нас нет, поэтому при желании подкоманду можно опустить. Комадна GRAPH перед построением графика запустит отложенные вычисления для последней команды COMPUTE.

GRAPH
/LINE(MULTIPLE) MEAN(pc) BY age BY rich
/MISSING=REPORT.

Задача, как будто, решена. Из полученного графика можно сделать вывод, что "богатые" работники с возрастом увольняются более интенсивно. "Бедные" же увольняться не спешат. Отметим, что, хотя для "бедных" работников накопленный процент уволившихся к 65 годам составил 42%, несправедливо утверждать, что 58% работников этого возраста находятся "в строю". Здесь нас интересует лишь факт увольнения, чаще - выход на пенсию. Мы интерпретируем показатель 42% следующим образом: к 65 годам заканчивают трудовую карьеру (в нашей фирме, например) 42% "бедных" работников. Если человек умирает до этого возраста, не выйдя на пенсию, он в данный процент не попадает. Разумеется, наши выводы справедливы лишь для имеющегося примера данных и неизвестно как соотносятся с действительностью.

Всего доброго.

 

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

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

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

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

Проверка согласия для распределения Пуассона.SPS

Проверки и доверительные интервалы для долей.SPS

Проверка линейных ограничений в множественной регрессии.SPS

Подгонка моделей с избыточной дисперсией (экстра-вариация в распределении Пуассона).SPS

Экспорт всех таблиц в MS Word.SPS

Экспорт данных в Excel с метками значений вместо самих значений.SPS

Экспорт содержимого редактора данных на конкретный лист рабочей книги Excel.SPS

Число уникальных значений по 400 переменным.SPS

 

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

 


В избранное