* Тема: Проверка Уайта (White's test) на гетероскедастичность в SPSS. * Ключевые слова: гомоскедастичность, гетероскедастичность, регрессия, проверка, Уайт, White's test, сумма квадратов, R, REGRESSION, MATRIX, регрессор, предиктор, LOOP. * Опубликован: 04.04.2002, перевод: 02.11.2008. * Автор: Marta Garcia-Granero / Gwillym Pryce / Ray Levesque. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/RegressionRepeatedMeasure/WhiteTestStatisticsAndSignificance.txt (.sps). * Проверено: SPSS 13.0. ********************************************************************** * Рекомендую, прежде всего, внимательно прочесть статью "Heterocedasticity: testing and correcting in SPSS" ("Проверка и коррекция гетероскедастичности в SPSS"), автор: Gwilym Pryce (см. http://www.spsstools.ru/spss.htm#Heteroscedasticity). Этот макрос основывается на данной статье. * Код SPSS: Marta Garcia-Granero, 04.04.2002. * Последовательность действий: * (Провести исходный регрессионный анализ, сохранив нестандартизированные остатки - добавлено перев). * Потребуется вычислить некоторые дополнительные переменные: * Квадраты нестандартизированных остатков; * Квадраты значений каждого предиктора модели, который подлежит проверке; * Попарные произведения всех предикторов. * Построить регрессионную модель для предсказания квадратов остатков с помощью предикторов, их квадратов и попарных произведений. * Умножить R-квадрат этой модели на размер выборки (n*R-square). * Это и будет статистикой Уайта. Её значимость проверяется сравнением с критическим значением из распределения Хи-квадрат с "p" степенями свободы, где "p" есть общее число регрессоров в последней регрессионной модели (предикторы+квадраты+попарные произведения). * ВАЖНО: * Если какой-либо из исходный предикторов является двоичным (фиктивная переменная), его квадрат будет идентичен оригинальной переменной, т.е. они будут идеально коррелировать. * В этом случае алгоритм регрессии выкинет одну из этих переменных из модели (либо исходную переменную, либо её квадрат), и "p", таким образом, следует уменьшить на 1 единицу для каждой двоичной переменной, включаемой в модель. * МАКРОС ДЛЯ ПРОВЕРКИ УАЙТА * * МАКРОС требует указания 5 аргументов: * а) числа предикторов, * б) числа попарных произведений, которые будут вычислены: " число предикторов*(число предикторов-1)/2" * [я не смогла найти другого способа, чтобы передать в команду VECTOR это число], * в) "p" (число предикторов+число квадратов+число попарных произведений), скорректированное на число двоичных предикторов, * г) имя зависимой переменной и * д) список предикторов в виде "первый предиктор TO последний предиктор" * (предикторы должны быть соответственно упорядочены и расположены по соседству в файле данных). * Определение МАКРОСА. DEFINE whitest(!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1) /!POSITIONAL !CMDEND). * >>>> Первая регрессионная модель для получения остатков <<<< *. REGRESSION /STATISTICS R ANOVA /DEPENDENT !4 /METHOD=ENTER !5 /SCATTERPLOT=(*ZRESID,*ZPRED) /SAVE RESID(residual) . * >>>> Новые переменные <<<< *. * Новая зависимая переменная. COMPUTE sq_res=residual**2. * Избавимся от лишних переменных (зависимая и остатки). * Проверьте, чтобы указанные пути для сохранения временных файлов существовали у вас на компьютере - примеч. перев. SAVE OUTFILE='c:\\temp\\tempdat_.sav' /keep=sq_res !5. GET FILE='c:\\temp\\tempdat_.sav'. EXECUTE. * Векторы для новых предикторов. VECTOR v=!5 /sq(!1) /cp(!2). * Квадраты всех предикторов. LOOP #i=1 to !1. COMPUTE sq(#i)=v(#i)**2. END LOOP. * Попарные произведения всех предикторов. * (алгоритм вычисления модифицировал Ray Levesque). COMPUTE #idx=1. LOOP #cnt1=1 TO !1-1. LOOP #cnt2=#cnt1+1 TO !1. COMPUTE cp(#idx)=v(#cnt1)*v(#cnt2). COMPUTE #idx=#idx+1. END LOOP. END LOOP. EXECUTE. * >>>> Проверка Уайта <<<< *. * Регрессия переменной sq_res на все прежние и вновь созданные предикторы. REGRESSION /VARIABLES=ALL /STATISTICS R /DEPENDENT sq_res /METHOD= ENTER /SAVE RESID(residual) . * Выдача результатов. * Исходный код: Gwilym Pryce (сделаны незначительные изменения). matrix. compute p=!3. get sq_res /variables=sq_res. get residual /variables=residual. compute sq_res2=residual&**2. compute n=nrow(sq_res). compute rss=msum(sq_res2). compute ii_1=make(n,n,1). compute i=ident(n). compute m0=i-((1/n)*ii_1). compute tss=transpos(sq_res)*m0*sq_res. compute regss=tss-rss. print regss /format="f8.4" /title="Сумма квадратов модели". print rss /format="f8.4" /title="Сумма квадратов остатков". print tss /format="f8.4" /title="Общая сумма квадратов". compute r_sq=1-(rss/tss). print r_sq /format="f8.4" /title="R-квадрат". print n /format="f4.0" /title="Объем выборки (N)". print p /format="f4.0" /title="Число (новых) предикторов (P)". compute wh_test=n*r_sq. print wh_test /format="f8.3" /title="Общая проверка Уайта на гетероскедастичность"+ " (Хи-квадрат, df=P)". compute sig=1-chicdf(wh_test,p). print sig /format="f8.4" /title="Собств. уровень значимости для Хи-квадрат, df=P (H0:"+ "гомоскедастичность)". end matrix. !ENDDEFINE. * Пример данных №1: числовые предикторы *. INPUT PROGRAM. - VECTOR x(5). - LOOP #I = 1 TO 100. - LOOP #J = 1 TO 5. - COMPUTE x(#J) = NORMAL(1). - END LOOP. - END CASE. - END LOOP. - END FILE. END INPUT PROGRAM. execute. * x1 - зависимая, x2 TO x5 - предикторы. rename variables x1=y. execute. * Вызов МАКРОСА: есть 4 предиктора, следовательно, 6 попарных произведений и 14 регрессоров в проверке. whitest 4 6 14 y x2 TO x5. * Пример данных №2: один двоичный предиктор *. INPUT PROGRAM. - VECTOR x(5). - LOOP #I = 1 TO 100. - LOOP #J = 1 TO 5. - COMPUTE x(#J) = NORMAL(1). - END LOOP. - END CASE. - END LOOP. - END FILE. END INPUT PROGRAM. execute. RECODE x2 (Lowest thru 0=0) (0 thru Highest=1) . EXECUTE . * x1 - зависимая, x2 TO x5 - предикторы. rename variables x1=y. execute. * Вызов МАКРОСА: как и в №1, 4 предиктора, 6 попарных произведений, но ТОЛЬКО 13 регрессоров. whitest 4 6 13 y x2 TO x5. * Как можно видеть в выдаче, X2 не был включён в модель.