* Макрос для проверок BREUSCH-PAGAN & KOENKER на гетероскедастичность * * См. технические подробности в Gwilym Pryce, Heteroscedasticity: Testing and correcting in SPSS. * Автор кода: Marta Garcia-Granero, 28.10.2002. * МАКРОС требует 3 аргумента: * зависимая переменная, число предикторов, список предикторов * (если последние располагаются в файле последовательно, можно использовать ключевое слово "TO") . * (1) Определение МАКРОСА (выделите и запустите ОДИН раз). DEFINE bpktest(!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1) /!POSITIONAL !CMDEND). * Строим регрессию для получения остатков и их графиков. REGRESSION /STATISTICS R ANOVA /DEPENDENT !1 /METHOD=ENTER !3 /SCATTERPLOT=(*ZRESID,*ZPRED) /RESIDUALS HIST(ZRESID) NORM(ZRESID) /SAVE RESID(residual) . do if $casenum=1. print /"Исследуйте диаграмму разброса остатков. На ней" /"иногда можно увидеть проблемы с видом модели и/или гетероскедастичностью" /"" /"Проверьте также гистограмму и нормальный вероятностный график остатков" /"для проверки нормальности распределения остатков." /"Асимметрия и эксцесс, более, чем" /"в 2 раза превосходящие их стандартные ошибки - симптом ненормальности остатков". end if. * Проверка нормальности остатков. DESCRIPTIVES VARIABLES=residual /STATISTICS=KURTOSIS SKEWNESS . * Создание новой зависимой переменной (g). COMPUTE sq_res=residual**2. compute constant=1. AGGREGATE /OUTFILE='tempdata.sav' /BREAK=constant /rss = SUM(sq_res) /N=N. MATCH FILES /FILE=* /FILE='tempdata.sav'. EXECUTE. if missing(rss) rss=lag(rss,1). if missing(n) n=lag(n,1). compute g=sq_res/(rss/n). execute. * Проверки BP&K. * Regression of g on the predictors. REGRESSION /STATISTICS R ANOVA /DEPENDENT g /METHOD=ENTER !3 /SAVE RESID(resid) . *Выдача. do if $casenum=1. print /" Проверки BP&K" /" ==========". end if. * Алгоритм адаптирован по Gwilym Pryce. matrix. compute p=!2. get g /variables=g. get resid /variables=resid. compute sq_res2=resid&**2. compute n=nrow(g). 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(g)*m0*g. 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 bp_test=0.5*regss. print bp_test /format="f8.3" /title="Проверка Breusch-Pagan'а на гетероскедастичность" + " (Хи-квадрат, df=P)". compute sig=1-chicdf(bp_test,p). print sig /format="f8.4" /title="Уровень значимости статистики хи-квадрат, df=P (H0:" + "гомоскедастичность)". compute k_test=n*r_sq. print k_test /format="f8.3" /title="Проверка Koenker'а на гетероскедастичность" + " (Хи-квадрат, df=P)". compute sig=1-chicdf(k_test,p). print sig /format="f8.4" /title="Уровень значимости статистики хи-квадрат, df=P (H0:" + "гомоскедастичность)". end matrix. !ENDDEFINE. * (2) Пример данных (вообще данные должны быть вашими)*. INPUT PROGRAM. - VECTOR x(20). - LOOP #I = 1 TO 50. - LOOP #J = 1 TO 20. - COMPUTE x(#J) = NORMAL(1). - END LOOP. - END CASE. - END LOOP. - END FILE. END INPUT PROGRAM. execute. * x1 - зависимая переменная, а x2 TO x20 - предикторы. * (3) ВЫЗОВ МАКРОСА (выделите и запустите). BPKTEST x1 19 x2 TO x20.