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

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


Информационный Канал Subscribe.Ru

Уважаемые подписчики,

рад приветствовать вас в первом выпуске рассылки «Статистика в SPSS: за пределами кнопочного интерфейса», время выхода которого практически совпало с началом Нового, 2006 года, что, безусловно, символично.

Как и следует из аннотации рассылки, сегодня и в будущем мы «препарируем» выбранный мной синтаксис SPSS из коллекции Рейналя (www.spsstools.net). Мы постараемся разобрать (и запомнить) каждую команду чтобы понять принцип работы команд по отдельности и вместе и суметь при необходимости составить полезный синтаксис для своей рабочей ситуации.

 

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

1. Рассылка не является выборочным копированием оригинального сайта коллекции Рейналя www.spsstools.net или его русскоязычной версии www.spsstools.ru, редактором которой является ведущий рассылки. Мы подробно разбираем некоторый файл синтаксиса с целью помочь пользователям SPSS в изучении синтаксиса (внутреннего языка) этой замечательной программы.

2. Мы не будем делать акцента на полезности или бесполезности рассматриваемого файла синтаксиса. Нас интересует действие отдельных команд и искусство их комбинирования в рабочую программу. Многие из рассматриваемых программ покажутся почти бесполезными пользователям современных версий SPSS, в которых уже включены в качестве дополнительных опций те возможности, которые пытались реализовать авторы программ во время их составления. Полезные программы для решения конкретной задачи лучше попробовать отыскать в Коллекции. Рассылка, скорее, ориентирована на тех, кто будет писать программы самостоятельно. С другой стороны, каждый наш пример решает проблему, с которой когда-то сталкивался какой-то пользователь SPSS. В этом смысле в наших упражнениях теория не расходится с практикой.

3. Автор рассылки не является профессиональным программистом. В некоторых случаях будет заметен отход от точных терминов и правил программирования. При желании на эти и другие неточности вы можете указать автору посредством формы отзывов на веб-сайте www.spsstools.ru. Таким же образом можно переправить мне разного рода предложения и впечатления.

4. В рассылке мы придерживаемся тех же принципов защиты авторских прав и ограничения ответственности, что изложены в русской версии коллекции Рейналя (www.spsstools.ru).

 

Если вы только начинаете работать с синтаксисом и фразы «редактор синтаксиса», «файл *.sps», «запустить синтаксис» кажутся вам не вполне понятными, лучше прочитать вводные рекомендации на сайте www.spsstools.ru.

 

Итак, рассмотрим первый синтаксис.

В нём мы увидим примеры использования команд

DATA LIST

BEGIN DATA – END DATA

COMPUTE

WEIGHT

SAVE

TABLES

ADD FILES.

Нам попался файл ShowEmptyCategoriesInTablesSecondMethod.txt, который вы можете загрузить по адресу http://www.spsstools.net/Syntax/ChartsTables/ShowEmptyCategoriesInTablesSecondMethod.txt, переименовать его в ShowEmptyCategoriesInTablesSecondMethod.sps, сохранить и затем использовать его как полноценный файл синтаксиса. А можете просто копировать из текста рассылки нужные вам команды в редактор синтаксиса и запускать их на исполнение.

----------------------------------

Исходный вопрос (обозначение проблемы) звучал следующим образом: «В моём исследовании на некоторый вопрос можно выбрать один из 10 вариантов ответа. Однако, в ходе опроса некоторые варианты не выбирались ни разу. Как включить в таблицу частот все варианты ответа, т.е. не выбранные варианты должны иметь частоту 0?»

 

Ответ (программу) поместил Raynald Levesque в новостную группу SPSS 10.05.2002.

 

* Подготовительная работа.

DATA LIST FREE /a.

BEGIN DATA

1 2 3 4 5 6 7 8 9 10.

END DATA.

COMPUTE wgt=.00001.

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

 

* Сгенерируем данные для иллюстрации.

DATA LIST LIST /a.

BEGIN DATA

1

2

4

2

4

END DATA.

LIST.

 

COMPUTE wgt=1.

TABLES

  /FORMAT BLANK MISSING('.')

  /TABLES a

  BY (STATISTICS)

  /STATISTICS

  count((F5.0)).

 

ADD FILES FILE=* /FILE='c:\temp\temp.sav'.

WEIGHT BY wgt.

 

* Результирующая таблица включает все 10 категорий.

TABLES

  /FORMAT BLANK MISSING('.')

  /TABLES a

  BY (STATISTICS)

  /STATISTICS

  count((F5.0)).

-------------------------------------

 

Разбор

Проблема заключается в том, что стандартные команды построения частотных таблиц (как, например, команда FREQUENCIES, которую можно вызвать из кнопочного меню Analyze -> Descriptive Statistics -> Frequencies) игнорируют (не выводят в таблицу) категории, ни разу не встречавшиеся в данных для конкретной переменной. Хотя многие желали бы видеть данную категорию в таблице с частотой, равной нулю.

Например, если в переменной были предусмотрены коды «1», «2», «3» для вариантов ответа «хорошо», «нормально», «плохо», соответственно, но ни одно наблюдение из данных не содержит ответа «плохо» (код 3), в стандартной частотной таблице мы не увидим нулевой частоты против варианта «плохо». Если такую таблицу вставить в отчёт без изменений, у человека, читающего отчёт, может возникнуть обманчивое ощущение, что вариант «плохо» и не предлагался в качестве ответа. Поэтому иногда ни разу не встретившиеся в данных, но реально существующие категории переменных бывает необходимо вывести в таблицу частот.

Это делается достаточно просто через кнопочное меню при наличии дополнительного модуля Tables (соответствующая команда синтаксиса: CTABLES). В отсутствие дополнительного модуля мы можем прибегнуть к помощи предложенного синтаксиса.

Идея разбираемого синтаксиса заключается в том, что мы «добавляем» к реальным данным фиктивные данные таким образом, чтобы в данных присутствовали все категории переменной по крайней мере один раз. Затем мы производим так называемое «взвешивание». Взвешивание – искусственное изменение частоты встречаемости наблюдений. Например, если наблюдение со значением переменной «плохо» взвешено с весом 2, статистическая программа будет считать, что данное наблюдение встретилось дважды. Взвешивание часто используется, например, в ходе коррекции (исправления) «перекосов» в выборках, когда «недобранные» категории опрошенных «добираются» за счёт увеличения их веса в выборочных данных. Мы можем приписать любому наблюдению любой неотрицательный вес, чем и воспользуемся. Реальным данным мы оставим вес, равный единице, фиктивным припишем малый, но отличный от нуля вес. В результате все категории будут выведены в таблицу частот, но, поскольку частоты будут округлены до целого, небольших весовых искажений мы не увидим и получим нужный нам результат.

 

Как следует из вопроса, у нас есть переменная, содержащая 10 категорий. Нужно, чтобы все они отображались в таблице частот. Пусть это будет переменная a. Последовательностью команд

DATA LIST LIST /a.

BEGIN DATA

1

2

4

2

4

END DATA.

мы вводим в файл данных пример, как могли бы выглядеть переменная и её значения в реальном случае. Командой DATA LIST мы говорим программе, что сейчас последуют данные, которые нужно будет поместить в окно редактора данных. Ключевым словом LIST указываем, что данные следует принимать как «одна строка – одно наблюдение». При этом в данные будут помещаться в переменную «a».

Затем набором значений между командами BEGIN-END DATA, мы указываем конкретные значения переменной «a». Видно, что в данных дважды встречается значение 2, 4, один раз – значение 1, а вот 3, 5-10 не встречаются ни разу, т.е. их частоты должны быть равны 0.

 

Однако ещё раньше мы знали о существовании «пустых» категорий и сделали вспомогательный файл temp.sav.

DATA LIST FREE /a.

BEGIN DATA

1 2 3 4 5 6 7 8 9 10.

END DATA.

Для этого использовали ту же команду DATA LIST, однако в этот раз использовали ключевое слово FREE (ещё один способ ввода данных). При этом значения можно располагать последовательно в одну строку. В данном случае все значения будут отнесены к переменной «a».

Затем во вспомогательном файле мы создаём переменную wgt и для всех 10 наблюдений устанавливаем её значение в 0,00001.

COMPUTE wgt=.00001.

Командой SAVE сохраняем файл во временной папке (при этом команда SAVE выполняет отложенные вычисления (transformations pending), то есть вставлять команду EXECUTE после COMPUTE необязательно). Аналогичным свойством обладают и многие другие команды SPSS.

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

 

После этого вводим реальные данные как это было рассмотрено выше.

Командой LIST мы выводим содержимое файла данных в окно результатов

Получается примерно следующее:

    a

 

    1.00

    2.00

    4.00

    2.00

    4.00

 

Number of cases read:  5    Number of cases listed:  5

 

Затем создаём такую же переменную wgt, однако для реальных данных она принимает значение, равное единице.

COMPUTE wgt=1.

Выводим частотную таблицу, чтобы убедиться в наличии проблемы: категории 3 и 5-10 отсутствует:

TABLES

  /FORMAT BLANK MISSING('.')

  /TABLES a

  BY (STATISTICS)

  /STATISTICS

  count( ( F5.0 )).

 

Добавляем к нашим данным наблюдения из вспомогательного файла temp.sav, созданного ранее. Указание «*» обозначает, что наблюдения из внешнего файла будут добавляться к открытому в данный момент файлу. А поскольку переменные в исходном файле и внешнем имеют одни и те же названия и формат (он определился по умолчанию), данные из внешнего файла будут «подшиты» к текущему. В результате есть исходные данные в переменной «a» и значениями «1» в переменной «wgt» и «фиктивные» данные в переменной «a» ниже и значениями «0,00001» в переменной «wgt».

ADD FILES FILE=* /FILE='c:\temp\temp.sav'.

Теперь мы «взвешиваем» (т.е. приписываем частоту встречаемости каждому наблюдению), беря вес из переменной wgt.

WEIGHT BY wgt.

Что в результате? Исходные данные имеют вес, равный «1», как это есть на самом деле, а фиктивные данные из переменной «a» (1-10) имеют очень малый (но все же отличный от нуля) вес.

 

Теперь, когда мы вновь построим частотную таблицу с помощью команды

TABLES

  /FORMAT BLANK MISSING('.')

  /TABLES a

  BY (STATISTICS)

  /STATISTICS

  count( ( F5.0 )).

… мы получим все категории, частота каждой из которых определена в соответствии с весом. Поскольку значения частот округлены до целых (см. параметр count ((F5.0))), мы не увидим, что на самом деле частоты категорий 2 или 4 на самом деле чуть больше, чем 2, а частоты категорий 5 или 6 чуть больше 0.

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

 

Обратите внимание, что в процессе работы и достижения результата синтаксис изменяет исходные данные, т.е. добавляет «фиктивные» наблюдения! Наблюдения по окончании работы остаются «взвешенными».

 

С уважением,

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

 

 

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

 


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.others.spss
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное