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


* Сводный (агрегированный) набор данных 
  (замените его вашими собственными данными)
  Предусмотрен анализ только одной зависимой переменной*.

data list list/groups(A10) n(F5.0) mean(f8.1) sd(f8.3).
begin data
Контрольн. 10 62.8 6.9730
Респир.  10 70.2 6.2147
Метабол. 10 79.4 6.2397
Смешанн.   10 80.2 6.1065
end data.

set mxloop=30000.
matrix.
* Чтение данных *.
get names/var=groups.
get n/var=n.
get mean/var=mean.
get sd/var=sd.
* Вычисления общего характера *.
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 /outfile=*.
MSAVE sd /TYPE=STDDEV /fnames=group /factor=group.
MSAVE n       /TYPE=N /fnames=group /factor=group.
print /title='Данные записаны в текущий файл в матричном формате'.
end matrix.

************ Дисперсионный анализ с данными в матричном формате на входе *****************

* Если проверки Бартлетта (Хартли, Кочрена) оказались незначимыми *.
ONEWAY depvar BY group
 /STATISTICS=DESCRIPTIVES
 /POSTHOC=TUKEY
 /MATRIX=IN(*).

* Если проверки Бартлетта (Хартли, Кочрена) оказались значимыми *.
ONEWAY depvar BY group
 /STATISTICS=DESCRIPTIVES WELCH
 /POSTHOC=T2
 /MATRIX=IN(*).

***************************************************************

* Исходные данные (для сравнения результатов по сгруппированным и по несгруппированным данным)*.
data list free/group(f8.0) glucose(f8.0).
begin data
1 51 1 56 1 58 1 60 1 62 1 63 1 65 1 68 1 72 1 73
2 60 2 65 2 66 2 68 2 68 2 69 2 73 2 75 2 78 2 80
3 69 3 73 3 74 3 78 3 79 3 79 3 82 3 85 3 87 3 88
4 70 4 75 4 76 4 77 4 79 4 80 4 82 4 86 4 88 4 89
end data.

VAR LABEL group 'Тип группы' /glucose 'Уровень глюкозы'.
VALUE LABELS group 1 'Контрольн.' 2 'Респир.' 3 'Метабол.' 4'Смешанн.'.
ONEWAY glucose BY group
 /STATISTICS=DESCRIPTIVES HOMOGENEITY WELCH
 /POSTHOC=TUKEY T2.

* Отличия: в случае сгруппированных данных проверка Ливина
  заменяется проверками Кочрена, Хартли и Бартлетта,
  а в описательной статистике отсутствуют минимальное/
  максимальное значения.
* Матричный код дополнительно выводит статистики:
  - Доверительные интервалы для средних Альтмана (более узкие);
  - Внутригрупповые и общий внутригрупповой коэффициенты вариации (%).

* Литература:

* Проверка Бартлетта:
*  - Armitage and Berry (1987) "Statistical Methods in Medical Research", p 209.

* Доверительные интервалы Альтмана для средних:
*  - Altman (1991) "Practical Statistics for Medical Research", p 209-210.