Проверка Уайта (White's test) на гетероскедастичность: статистика и значимость
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | * Тема: Проверка Уайта (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 не был включён в модель. |