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

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


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

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

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

Частоты множественных строковых значений

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


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

Частоты множественных строковых значений

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

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

Ответ на такой вопрос вводился вместе с остальными ответами в файл данных SPSS в длинную (300 символов) строковую переменную. Такая длина "с запасом" предполагала ввод в одну переменную нескольких качеств, которые будут перечислены респондентом в анкете. При вводе данных условились вводить перечисления качеств, используя символ-разделитель ";" (точку с запятой).

Судьба подобных открытых вопросов при статистическом анализе, как правило, незавидная. Часто они вводятся, но либо вовсе не обрабатываются в силу "неудобности" их обработки, либо исследователь строит общий перечень ответов на вопрос, пытаясь (пусть и достаточно субъективно) уловить общий настрой респондентов, узреть характерные и нехарактерные ответы.

В нашем исследовании мы поставили задачу построить такой перечень, но подсчитать при этом частоту встречаемости одинаковых ответов. "Одинаковость", разумеется, может проявляться и в схожих формулировках, и в схожих по смыслу словах. В данном случае мы будем понимать одинаковость лишь как единообразную запись слова или словосочетания (с точностью до регистра). Пример переменной spos, которая содержит список положительных качеств сверстников, которые упомянул каждый из респондентов, содержится ниже. Мы определяем новый файл данных с помощью инструкции DATA LIST. Переменная spos является строковой и может содержать до 300 символов. Ниже, между инструкциями BEGIN DATA - END DATA, в кавычках содержатся формулировки, которые давали респонденты, отвечая на открытый вопрос.

 

DATA LIST LIST /spos(A300).

BEGIN DATA
' откровенность; Искренность; живость ума;'
'предприимчивость; вкус; увер. в себе '
'открытость; искренность; предприимчивость'
''
'Нацеленность на успех; '
' Открытость;жизнерадостность;доброта;общит-ть'

END DATA.

 

Технически наша задача сводится к тому, чтобы подсчитать частоту встречаемости слов и словосочетаний "откровенность", "искренность", "живость ума" и т.д. в ответах респондентов. Задача не тривиальная, поскольку в одной переменной содержится, порой, по нескольку ответов. Ответы не проходили предварительного кодирования и представлены здесь как текстовые строки, возможности статистического анализа которых ограничены.

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

Итак, этапы решения задачи:

1. Скопировать исходную переменную в рабочую. "Причесать" исходные данные. В частности, обратить все символы в нижний регистр (для возможности последующего сравнения), удалить возможно существующие пробелы в начале каждой текстовой строки, добавить первым символом в каждую строку символ-разделитель ";" (этого требует дальнейший алгоритм).

2. Создать вектор переменных, которые будут принимать отщепляемые от строки-источника текстовые значения, стоящие между знаками ";". Количество компонент вектора можно взять с запасом. Например, если мы знаем, что в анкете было место для того, чтобы вписать 3-4 качества, можно создать вектор из 9 переменных.

3. Для каждого наблюдения последовательно отщепим от строки-источника указанные респондентами качества и поместим их в векторные переменные.

4. Предоставим пользователю посмотреть, сколько векторных переменных из 9 участвовали в распределении значений переменной-источника.

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

6. К этому моменту мы имеем некоторое число новых переменных, содержащих закодированные качества, указанные респондентами. Причём одно и то же качество, даже находясь в разных переменных, будет иметь одинаковый код. Это даёт нам возможность построить частотное распределение упомянутых респондентами качеств с помощью анализа множественных ответов (команда Multiple Response).

 

Приступим...

1. Создаём рабочую переменную и "причёсываем" данные:

 

STRING mystr (A300).

COMPUTE mystr=LOWER(LTRIM(spos)).

IF (SUBSTR(mystr,1,1)<>';') mystr=CONCAT(';',mystr).

EXE.

 

Суть команд, представленных выше. Перед тем, как приписать рабочей переменной значения переменной-источника, необходимо объявить, что новая переменная mystr будет иметь текстовый формат (команда STRING). Если этого не сделать, при исполнении следующей команды COMPUTE возникнет ошибка. По умолчанию тип новой переменной определяется как NUMERIC (числовой), вследствие чего в указанной инструкции возникнет несоответствие типов. Копирование значений из spos в mystr мы осуществляем с привлечением функций LOWER (перевести все символы в нижний регистр) и LTRIM (отсечь все пробелы, стоящие в начале текстовой строки).

В инструкции IF мы проверяем, не является ли первый символ строки символом ";" и, если не является, вставляем его перед строкой посредством функции CONCAT. Запустим вычисления командой EXE(CUTE), так как закончился логический кусок программы.

 

2. Создаём векторные переменные (9 штук строковых переменных, каждая с длиной до, скажем, 33 символов. Этим мы, вообще говоря, накладываем ограничение на разнообразие ответов (если респондент перечислит более 9 качеств, будут учтены в дальнейшем анализе только первые 9) и на длину записи каждого качества (не более 33 символов). Если подобные ограничения кажутся слишком жёсткими, их без труда можно расширить. Предварительно мы инициализируем новую переменную cnt (счётчик), который будет сообщать, сколько векторных переменных потребовалось для расщепления исходной строки в каждом случае.

 

COMPUTE cnt=1.

VECTOR tmp (9A33).

 

3. "Пробегание" по исходной текстовой строке мы осуществляем циклом LOOP, который выполняется для каждого наблюдения в отдельности. Логика следующая. С помощью функции RINDEX ищем первое вхождение СПРАВА символа ";" в строку mystr. Если вхождение найдено, индекс, который сохраняем в виртуальной переменной #idx, будет больше нуля. По этому условию (#idx>0) входим в условный оператор DO IF. Присваиваем переменной tmp c индексом cnt подстроку из строки mystr, которую начинаем выделять с позиции, следующей за позицией символа ";" (индекс #idx+1). При присвоении мы "очищаем" отщеплённое значение справа и слева от ведущих и замыкающих пробелов (соответственно, функции LTRIM и RTRIM). Обратите внимание, что если символ ";" окажется замыкающим (частный случай - единственным) символом в строке, произойдёт копирование в переменную tmp(cnt) пустой строки. Это не должно создать серьёзных проблем, если только таких символов не будет идти подряд слишком много.

Затем увеличиваем счётчик для этого наблюдения на единицу.

Следующим шагом убираем из рабочей строки то значение, которое только что скопировали в переменную tmp(cnt). Действие условного оператора заканчивается. Теперь проверяем условие выхода из цикла. Если ранее ни одного символа ";" в строке mystr не было найдено, #idx=0, цикл завершается. Программа как бы переходит к анализу следующего наблюдения.

Символы "-" перед командами COMPUTE внутри оператора DO IF служат лишь для обозначения структуры программы (игнорируются интерпретатором) и никак не связаны с выполнением арифметических действий.

 

LOOP.

COMPUTE #idx=RINDEX(mystr,';').

DO IF (#idx>0).

-COMPUTE tmp(cnt)=LTRIM(RTRIM(SUBSTR(mystr,#idx+1))).

-COMPUTE cnt=cnt+1.

-COMPUTE mystr=SUBSTR(mystr,1,#idx-1).

END IF.

END LOOP IF #idx=0.

 

4. Команды в цикле LOOP вызывают лишь отложенные вычисления. После закрытия цикла их следует произвести. Можно не пользоваться лишний раз инструкцией EXECUTE. Нам как раз требуется узнать, сколько было занято векторных переменных разносимыми текстовыми значениями. Вычисления вызовет команда DESCRIPTIVES. Тут пользователю нужно заглянуть в окно результатов, убедиться, что не произошло никаких ошибок (а может, увы, и в обратном!) и посмотреть на максимальное значение переменной cnt. Для данных примера оно будет составлять 5, что означает пиковую занятость 4 (т.е. 5-1) переменных из 9-компонентного вектора.

 

DESCRIPTIVES
VARIABLES=cnt /STATISTICS=MAX .

 

5. Корректируем команду AUTORECODE. Перекодируем первые 4 занятые переменные tmp в переменные t. Параметр GROUP - очень ценное в данном случае указание на то, что схема перекодирования должна быть одинаковой для всех перекодируемых переменных, а не отдельной для каждой переменной. Это будет гарантировать, например, что качество "откровенность" получит один и тот же код в независимости от того, в какой из переменных tmp1-tmp4 оно встретится. Подкоманда PRINT выводит таблицу перекодировки в окно результатов.

 

AUTORECODE
VARIABLES=tmp1 to tmp4 /INTO t1 to t4
/GROUP
/PRINT.

 

Теперь лишние переменные можно удалить:

 

DELETE VARIABLES tmp1 to tmp9 cnt.

 

6. Вот, собственно, то, к чему мы стремились. Тут снова не обойтись без услуг наиболее интеллектуального компонента современного компьютера - старого доброго пользователя... Команда MULT RESPONSE своей подкомандой GROUPS создаёт виртуальную "групповую" переменную $pos на основе переменных t1-t4 (точное количество требуется отредактировать). Принимаются к рассмотрению лишь коды со 2 по 12, поскольку кодом 1 были закодированы пропуски, мало интересующие нас. Подкоманда FREQUENCIES строит таблицу частот.

MULT RESPONSE
GROUPS=$pos 'Что нравится в сверстниках' (t1 to t4 (2,12))
/FREQUENCIES=$pos.

 

Творческих успехов!

 

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

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

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

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

Рассчитать число дней, попадающих в заданный интервал.SPS

Подсчитать число минут между двумя временными отметками (в том числе, в разных сутках).SPS

Вычислить число месяцев между 2 датами.SPS

Вычислить время ожидания, когда время закодировано как hh min.SPS

Получить число рабочих дней между 2 датами.SPS

Получить число рабочих дней, исключить праздники.SPS

Подсчитать время сна.SPS

Конвертировать дату и время из формата SPSS в ACCESS.SPS

Конвертация строки в число.SPS (переменная содержит возраст в одном из следующих представлений "7 Y" – 7 лет, "3m"– 3 месяца, "28D" – 28 дней. Требуется всё это перевести в года.)

Конвертация строки вида hhmmss в числовую переменную формата времени.SPS (Спасибо Jim Marks)

Конвертация строки вида "01Jan1992" в формат даты.SPS

Конвертация строки вида "1997-08-22" в формат даты.SPS

Конвертация строки в формат даты и времени.SPS

Конвертация строки вида 04Apri03 в дату.SPS

Добавить 3 месяца к дате.SPS

 

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

Автоматизация отладки.SBS

Убрать таблицы "Statistics", "Notes" и "Сase processing summary".sbs

 

Новые ссылки

Несколько новых ссылок, почерпнутых из учебного пособия "SPSS для социологов" В.В и В.В Пациорковских (ИСЭПН РАН, М., 2005):

"SPSS для социологов" (домашняя страница и рабочее место авторов учебного пособия). Валентина Викторовна и Валерий Валентинович Пациорковские - авторы серии учебных пособий, подготовленных в рамках проекта "Использование SPSS в социологии". В 2005 году вышло объёмное пособие, в которое вошли переработанные и новые материалы из ранее выпущенных публикаций: SPSS для социологов. Учебное пособие. ИСЭПН РАН. - М., 2005 - 433 с.

MarketResearch.ru. Документы, которые могут быть полезны при проведении маркетинговых исследований. Имеется англо-русский словарь по SPSS, перевод отрывков документации по SPSS на русский язык.

Подборка ссылок на сайте факультета социальных наук ННГУ. Ссылки на литературу и он-лайн источники к курсу "Компьютер и Интернет для социолога".

Кубанский госуниверситет физической культуры, спорта и туризма. Раздел дистанционного обучения. Спортивная метрология. Учебное пособие. Раскрываются основы таких методов статистического анализа, как сравнение средних, корреляционный, регрессионный анализ. Методы тестирования и контроля в спорте.

 

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


В избранное