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
* Макрос для проверок 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.