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
* Тема: Однофакторный дисперсионный анализ по сгруппированным данным (II): случай нескольких подмассивов в одном файле.
* Ключевые слова: однофакторный, дисперсионный, сгруппированные, агрегированные, обобщенные, подмассив, подгруппа, MATRIX, SPLIT, INCLUDE, макрос.
* Опубликован: ?, перевод: 27.10.2008.
* Автор: Marta Garcia-Granero.
* Перевод: А. Балабанов.
* Размещение: http://www.spsstools.ru/Syntax/T-Test/ONEWAYwithSummaryDataI2.txt (.sps).
* Проверено: SPSS 15.0.0.


* Команды MATRIX...END MATRIX распознают включенное расщепление файла (SPLIT) только в пакетном режиме (через INCLUDE).

* Переменная testnum определяет подмассивы, которые должны анализироваться отдельно друг от друга - примеч. перев.

* (A) ПРИМЕР ДАННЫХ *.
data list list/testnum(F4.0) groups(A8) n(F5.0) mean(F8.1) sd(F8.3).
begin data
1 Control 10 62.8 6.9730
1 Respir  10 70.2 6.2147
1 Metabol 12 79.4 6.2397
1 Mixed   10 80.2 6.1065
2 Control 15 72.8 7.7703
2 Respir  15 80.4 7.3174
2 Metabol 15 89.4 7.4379
2 Mixed   15 90.2 8.1056
end data.

* (B) СКОПИРУЙТЕ И СОХРАНИТЕ СЛЕДУЮЩИЙ СИНТАКСИС В ПАПКУ "C:\\Temp\\SummaryANOVA.sps".

******************** НАЧАЛО СИНТАКСИСА *******************.
matrix.
* Загрузка данных в матрицы *.
get varnum /var=testnum.
get names/var=groups.
get n/var=n.
get mean/var=mean.
get sd/var=sd.
print /title="-------------------------------------------".
print varnum(1)
 /format="f8.0"
 /title="Расщепление файла:"
 /rlabel="Группа"
* Основные вычисления *.
compute k=nrow(n).
compute totaln=msum(n).
compute var=sd&**2.
compute dfwithin=totaln-k.
compute poolvar=msum((n-1)&*var)/dfwithin.
* Проверки однородности дисперсий *.
do if cmax(n)=cmin(n).
print /title="Сбалансированный план. Возможны проверки Хартли и Кочрена".
compute cochran=cmax(var)/msum(var).
compute fmax=cmax(var)/cmin(var).
print {cmax(var),cmin(var),fmax}
 /title="Проверка Fmax Хартли: см. таблицы критических значений"
 /format="f8.3"
 /clabels="Макс S^2","Мин S^2","Значение H".
print cochran
 /title="Проверка Кочрена: см. таблицы критических значений"
 /format="f8.3"
 /clabel="Значение C".
print (n(1)-1)
 /title="Число степеней свободы (DF) для всех групп"
 /format="f8.0".
end if.
print k
 /title="Число групп (K)"
 /format="f8.0".
compute x2=dfwithin*ln(poolvar)-msum((n-1)&*ln(var)).
compute cc=1+(msum(1/(n-1))-1/dfwithin)/(3*(k-1)).
compute chi2=x2/cc.
compute chisig=1-chicdf(chi2,k-1).
print {chi2,chisig}
 /title="Проверка Бартлетта на однородность диспресий (df=K-1)"
 /format="f8.3"
 /clabels="Хи^2","Знач.".
* Описательная статистика по выборкам и в целом *.
compute gmean=(msum(n&*mean))/totaln.
compute totsd=sqrt((msum((n-1)&*var+n&*(mean&**2))-(gmean&**2)*totaln)/(totaln-1)).
compute eem=sd&/sqrt(n).
compute toteem=totsd/sqrt(msum(n)).
compute samplecv=100*sd/mean.
compute totalcv=100*totsd/gmean.
* 95% ДИ Альтамна для средних (используя внутригрупповые суммы квадратов и степени свободы
  вместо данных по каждой выборке) *.
loop tvalue95=1960 to 12706.
compute t95=tvalue95/1000.
compute onetail=1-tcdf(t95,dfwithin).
do if abs(onetail-0.025) lt 0.00005.
break.
end if.
end loop.
compute low95=mean-t95*sqrt(poolvar/n).
compute upp95=mean+t95*sqrt(poolvar/n).
compute lowgmean=gmean-t95*sqrt(poolvar/totaln).
compute uppgmean=gmean+t95*sqrt(poolvar/totaln).
* Вывод результатов *.
compute names={names;'Total'}.
print {n,mean,sd,samplecv,eem,low95,upp95;totaln,gmean,totsd,totalcv,toteem,lowgmean,uppgmean}
 /title="Описательные:                                    95% ДИ для средних (*) "
 /clabels='N','Среднее','SD','CV (%)','SE средн.','НГ','ВГ'
 /rnames=names
 /format='F7.2'.
* Общий внутригрупповой (остаточный) коэффициент вариации (CV) *.
compute cvar=100*sqrt(poolvar)/gmean.
print cvar
 /title="Общий внутригрупповой коэффициент вариации (*)"
 /format="F5.2"
 /rlabels="CV (%)".
print /title="(*) 95% ДИ Альтмана и внутригрупповые коэффициенты вариации основаны на предположении о равенстве дисперсий".
* Запись данных в файл в матричном формате *.
compute group=T({1:k}).
MSAVE mean /TYPE=MEAN /fnames=group /factor=group
 /variable=depvar /snames=testnum /split=varnum /outfile=*.
MSAVE sd /TYPE=STDDEV /fnames=group /factor=group
 /variable=depvar /snames=testnum /split=varnum /outfile=*.
MSAVE n       /TYPE=N /fnames=group /factor=group
 /variable=depvar /snames=testnum /split=varnum /outfile=*.
print /title='Данные записаны в текущий файл в матричном формате'.
end matrix.

**************************** КОНЕЦ СИНТАКСИСА **************************.

* (C) ТЕПЕРЬ "РАСЩЕПЛЯЕМ" ФАЙЛ ПО ПЕРЕМЕННОЙ "testnum" И ВЫЗЫВАЕМ СИНТАКСИС.

set mxloop=30000.
split file layered by testnum.
include "C:\\Temp\\SummaryANOVA.sps".

* Заключительным этапом будет выполнение однофакторного дисперсионного анализа для обоих подмассивов. 
* Если бы команда ONEWAY с матричными данными и включенным расщеплением файла работала нормально,
  то следующий синтаксис был бы решением данной задачи.

ONEWAY depvar BY group
 /STATISTICS=DESCRIPTIVES WELCH
 /POSTHOC=TUKEY T2
 /MATRIX=IN(*).

*********************************************.
* Но, поскольку это не работает (глюк SPSS?), решением будет следующий МАКРОС *.
* Примеч. перев.: проверка синтаксиса в SPSS 15 показала, что указанная автором ошибка, вероятно, 
  была исправлена разработчиком. Поэтому решение, приведённое выше, также работает.

(D) ОПРЕДЕЛЕНИЕ МАКРОСА *.

DEFINE !oneway (!POSITIONAL !TOKENS(1)).
!DO !cnt=1 !TO !1.
TEMPORARY.
SELECT IF(testnum = !cnt).
* Можете указать в подкоманде POSTHOC привычные вам апостериорные проверки.
ONEWAY depvar BY group
 /STATISTICS=DESCRIPTIVES WELCH
 /POSTHOC=TUKEY T2
 /MATRIX=IN(*).
!DOEND.
!ENDDEFINE.

(E) ЗАПУСК МАКРОСА *.
!oneway 2.