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

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


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

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

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

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

Строим эффекты взаимодействия для регрессионного анализа
Новое на сайте www.spsstools.ru

 

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

Строим эффекты взаимодействия для регрессионного анализа

Рассмотрим синтаксис "Построить взаимодействия между 2 категориальными переменными.SPS" (http://www.spsstools.ru/Syntax/Combinations/CalculateInteractionTermsBetween2CategoricalVariables.txt). Автору вопроса требовалось автоматизировать построение фиктивных переменных, в которых бы отражался эффект взаимодействия между категориями двух номинальных переменных. В случае, если количество категорий в той и другой переменной достаточно велико, построение взаимодействий вручную - достаточно утомительный процесс.

Вопрос звучал следующим образом:

"Есть большой массив данных и мне необходимо посмотреть эффекты взаимодействия двух номинальных переменных (первая с 4 категориями и вторая с 12 категориями) в регрессионном анализе. Есть способ заставить SPSS построить 33 переменных, означающих взаимодействия ((4-1)X(12-1))?"

В вопросе предполагается построить 33 фиктивных (dummy) переменных вместо 4 Х 12 = 48, так как последняя категория каждой переменной является базовой (референтной) и кодируется нулём.

Автор ответа, David Matheson, предложил вариант автоматизации кодирования, при котором референтной категорией является последняя категория переменной (т.е. нулём кодируется наибольший код):

"В приведённом ниже коде я полагаю, что "a" - это ваша переменная с 4 категориями и "b" - ваша переменная с 12 категориями. Я также полагаю, что вы используете схему двоичного кодирования категориальных переменных, в которой базовой (reference) является последняя категория. Иные варианты кодирования (как, например, схема эффектов - effect coding, где базовая категория кодируется "-1" вместо "0"), потребуют чуть более сложного решения.

Вам потребуется заменить "a" и "b" именами ваших переменных в логическом выражении "(a = #i) & (b= #j)" во второй команде COMPUTE".

Далее приводим разбор предложенного синтаксиса.

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

DATA LIST LIST /a b.

BEGIN DATA
1 1
2 2
3 3
4 4
1 5
2 6
3 7
4 8
1 9
2 10
2 11
3 12

END DATA.

LIST.

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

Теперь наша задача - создать переменные вида a1b1, a1b2, a1b3, ..., a1b11, a2b1, ..., a3b11 и заполнить их нулями и единицами таким образом, что единица в переменной a1b3, например, будет стоять в том случае, если имелось взаимодействие (сочетание в одном наблюдении) категории 1 переменной "a" и категории 3 переменной "b".

Для начала мы создаём вектор таких переменных:

vector a1b a2b a3b (11) .

Команда VECTOR создаст 33 переменных того вида, который мы указали выше и разрешит адресацию к ним в виде a1b(i), где i - индекс, изменяющийся от 1 до 11. Автор, впрочем, предпочёл определить после этого ещё один вектор (уже на основе имеющихся переменных), с помощью которого будет осуществляться сквозная адресация ко всем 33 переменным (индекс может меняться от 1 до 33):

vector x = a1b1 to a3b11 .

Затем следуют два вложенных цикла LOOP, завершающихся командой выполнения отложенных вычислений EXECUTE:

loop #i = 1 to 3.

compute #k = (#i-1)*11.

loop #j = 1 to 11 .

compute x(#k + #j) = ((a = #i) & (b= #j)) .

end loop.

end loop.

execute.

В первом цикле, по временной переменной #i от 1 до 3, сначала создаётся ещё один индекс: #k, который позже будет использоваться для адресации векторной переменной x. Он вычисляется как "(#i-1)*11" в связи с особым порядком, в котором были определены векторные переменные. Так, новая категория переменной "a" встретится нам в первой из 33 переменных, затем в 12-й, затем в 23-й. Удобно определить индекс #k для таких случаев как 0, 11 и 22, соответственно, и затем обращаться с его помощью в инструкции "compute x(#k + #j) = ((a = #i) & (b= #j))." к нужной компоненте вектора "x".

Вычисления единиц и нулей (эффектов взаимодействий) происходит в команде compute второго цикла, вложенного в первый. В том случае, если в текущем наблюдении произошло сочетаний категорий #i и #j, логическое выражение"(a = #i) & (b= #j))" будет истинно (равно единице). В противном случае - равно нулю.

 

Пример использования синтаксиса при проведении регрессионного анализа

Рассмотрим, как действует данный синтаксис в более широком контексте - как один из этапов подготовки данных к регрессионному анализу. Для примера возьмём стандартный файл данных, поставляющийся с SPSS:

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

Поставим себе задачу определить, как влияет категория служащего (переменная jobcat) и отнесение служащего к меньшинствам (национальным, надо полагать. Переменная minority) на текущую заработную плату (salary). Поскольку нас будут интересовать не только взаимодействия, но и главные эффекты, требуется предварительно преобразовать переменную jobcat в две двоичных переменных, оставив последнюю категорию (с кодом 3) в качестве базисной. Переменная minority уже является двоичной и в преобразовании не нуждается.

compute j1 = (jobcat=1).

compute j2 = (jobcat=2).

VAR LABEL j1 'clerk' /j2 'custodial'.

Единицы в переменной j1 и j2 будут означать, соответственно, принадлежность служащего к категориям clerk и custodial. Категория manager будет представлена нулями в каждой из этих переменных. Для удобства мы дали названия новым переменным командой VARIABLE LABEL.

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

vector j1m j2m (1) .

vector x = j1m1 to j2m1 .

loop #i = 1 to 2.

compute #k = (#i-1)*1.

loop #j = 1 to 1 .

compute x(#k + #j) = ((jobcat = #i) & (minority= #j)) .

end loop.

end loop.

execute.

 

Теперь строим регрессионную модель:

REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R ANOVA
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT salary
/METHOD=ENTER minority j1 j2 j1m1 j2m1.

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

UNIANOVA
salary BY minority jobcat
/METHOD = SSTYPE(3)
/INTERCEPT = INCLUDE
/PRINT = DESCRIPTIVE
/CRITERIA = ALPHA(.05)
/DESIGN = minority jobcat minority*jobcat .

 

На этом сегодня всё. Всего доброго! Буду признателен за расширенные критические замечания по поводу содержания материала рассылки, качества и манеры его изложения. Отзывы можно направлять на адрес автора a-balabanov@yandex.ru, либо заполнить форму отзывов на сайте www.spsstools.ru.

 

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

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

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

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

 

Все сочетания по 3 буквы из n.SPS (с возвращением)

Построить взаимодействия между 2 категориальными переменными.SPS (в контексте регрессионного анализа)

Создать новую переменную для каждой комбинации значений 2 переменных.SPS

Найти перестановки чисел от 1 до n.SPS Максимальное число n = 7. В сочетании с командой RECODE, может использоваться для поиска перестановок строк и чисел.

Сгенерировать случайные последовательности для блочного эксперимента.SPS

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

 

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


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

В избранное