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
* ОПРЕДЕЛЕНИЕ РАЗМЕРА ВЫБОРКИ ДЛЯ ПРОВЕРКИ ГИПОТЕЗ О КОЭФФИЦИЕНТАХ КОРРЕЛЯЦИИ *.
* Автор: Marta Garcia-Granero, biostatistics@terra.es .

* Создадим дополнительный файл с условиями проверки: значениями 
  заданного уровня значимости (альфа) и мощности проверки.
* В файле представлено большинство традиционных вариантов задания 
  условий для определения размера выборки (при необходимости вы можете добавить свои):
  - альфа=5% и 1% (для одно- и двусторонних проверок)
  - мощность=80%, 90%, 95% и 99%.
* При запуске макроса созданный дополнительный файл должен быть активным файлом данных.

DATA LIST LIST /id(F2.0) alfa(f8.3) tails(F2.0) power(F8.3).
BEGIN DATA
 1 0.05 1 0.80
 2 0.05 2 0.80
 3 0.05 1 0.90
 4 0.05 2 0.90
 5 0.05 1 0.95
 6 0.05 2 0.95
 7 0.05 1 0.99
 8 0.05 2 0.99
 9 0.01 1 0.80
10 0.01 2 0.80
11 0.01 1 0.90
12 0.01 2 0.90
13 0.01 1 0.95
14 0.01 2 0.95
15 0.01 1 0.99
16 0.01 2 0.99
END DATA.
COMPUTE zalfa = IDF.NORMAL(1-(alfa/tails),0,1) .
COMPUTE zbeta = IDF.NORMAL(1-power,0,1) .
EXEC.

DEFINE onecorr(r0=!DEFAULT(0) !TOKENS(1)/r1=!TOKENS(1)).
* Этот макрос требует наличия дополнительного файла *. 
MATRIX.
PRINT  /TITLE 'ОБЪЕМ ВЫБОРКИ: ОДНОВЫБОРОЧНАЯ ПРОВЕРКА ДЛЯ КОЭФФИЦИЕНТА КОРРЕЛЯЦИИ'.
get id /var=id.
get alfa /var=alfa.
get tails/ var=tails.
get power /var=power.
get zalfa /var=zalfa.
get zbeta /var=zbeta.
compute r0=!r0.
compute r1=!r1.
COMPUTE zr0=.5*(LN((1+r0)/(1-r0))).
COMPUTE zr1=.5*(LN((1+r1)/(1-r1))).
compute zdiff=abs(zr1-zr0).
print {r0,r1,zr0,zr1,zdiff}
 /format="f8.2"
 /clabels="H0 rho","H1 rho","Zr0","Zr1","Dif. Z"
 /title="Коэффициенты корреляции для гипотез H0 и H1".
compute n=TRUNC(((zalfa-zbeta)/zdiff)&**2)+4.
print {id,100*alfa,tails,100*power,n}
 /format="f8.0"
 /clabels="NN","Альфа(%)","Хвосты","Мощн.(%)","N"
 /title="Необходимый размер выборки для следующих значений альфа и бета".
END MATRIX.
!ENDDEFINE.

DEFINE onecorrp(r0=!DEFAULT(0) !TOKENS(1)/r1=!TOKENS(1) /n=!TOKENS(1)
 /alfa=!DEFAULT(0.05) !TOKENS(1) /tails=!DEFAULT(2) !TOKENS(1)). 
* Дополнительный файл НЕ требуется *. 
MATRIX.
PRINT  /TITLE 'ОБЪЕМ ВЫБОРКИ: МОЩНОСТЬ ОДНОВЫБОРОЧНОЙ ПРОВЕРКИ ДЛЯ КОЭФФИЦИЕНТОВ КОРРЕЛЯЦИИ'.
compute r0=!r0.
compute r1=!r1.
compute n=!n.
compute alfa=!alfa.
compute tails=!tails.
compute pval=alfa/tails.
do if pval=0.05.
compute zalfa=1.645.
end if.
do if pval=0.025.
compute zalfa=1.96.
end if.
do if pval=0.01.
compute zalfa=2.326.
end if.
do if pval=0.005.
compute zalfa=2.576.
end if.
COMPUTE zr0=.5*(LN((1+r0)/(1-r0))).
COMPUTE zr1=.5*(LN((1+r1)/(1-r1))).
compute zdiff=abs(zr1-zr0).
print {r0,r1,zr0,zr1,zdiff}
 /format="f8.2"
 /clabels="H0 rho","H1 rho","Zr0","Zr1","Dif. Z"
 /title="Коэффициенты корреляции для H0 & H1".
print {100*alfa,tails,n}
 /format="f8.0"
 /clabels="Альфа(%)","Хвосты","N"
 /title="Входные данные".
compute power=100*(1-cdfnorm(zalfa-abs(zdiff*sqrt(n-3)))).
print power
 /format="f8.1"
 /title="Мощность проверки (%)".
END MATRIX.
!ENDDEFINE.

DEFINE twocorr(r1=!TOKENS(1)/ r2=!TOKENS(1)/ ratio=!DEFAULT(1)!TOKENS(1)). 
* Этот макрос требует наличия дополнительного файла *. 
MATRIX.
PRINT  /TITLE 'ОБЪЕМ ВЫБОРКИ: ДВУХВЫБОРОЧНАЯ ПРОВЕРКА ДЛЯ КОЭФФИЦИЕНТОВ КОРРЕЛЯЦИИ'.
get id /var=id.
get alfa /var=alfa.
get tails/ var=tails.
get power /var=power.
get zalfa /var=zalfa.
get zbeta /var=zbeta.
compute k=!ratio.
compute r1=!r1.
compute r2=!r2.
COMPUTE zr1=.5*(LN((1+r1)/(1-r1))).
COMPUTE zr2=.5*(LN((1+r2)/(1-r2))).
compute zdiff=abs(zr1-zr2).
print {r1,r2,zr1,zr2,zdiff}
 /format="f8.2"
 /clabels="Корр.1","Корр.2","Zr1","Zr2","Dif. Z"
 /title="Минимальное статистически значимое различие".
print k
 /format="f8.0"
 /title="Отношение (N2/N1)".
compute n=TRUNC(2*((zalfa-zbeta)/zdiff)&**2)+4.
COMPUTE n1=n*(k+1)/(2*k).
COMPUTE n2=n*(1+k)/2.
print {id,100*alfa,tails,100*power,n1,n2,n1+n2}
 /format="f8.0"
 /clabels="NN","Альфа(%)","Хвосты","Мощн.(%)","N1","N2","N общий"
 /title="Требуемые размеры выборок для следующих значений альфа и бета".
END MATRIX.
!ENDDEFINE.

DEFINE twocorrp(r1=!TOKENS(1) /r2=!TOKENS(1) /n1=!TOKENS(1) /n2=!TOKENS(1)
 /alfa=!DEFAULT(0.05) !TOKENS(1) /tails=!DEFAULT(2) !TOKENS(1)). 
* Дополнительный файл НЕ требуется *. 
MATRIX.
PRINT  /TITLE 'ОБЪЕМ ВЫБОРКИ: МОЩНОСТЬ ДВУХВЫБОРОЧНОЙ ПРОВЕРКИ ДЛЯ КОЭФФИЦИЕНТОВ КОРРЕЛЯЦИИ'.
compute r1=!r1.
compute r2=!r2.
compute n1=!n1.
compute n2=!n2.
compute n=2*n1*n2/(n1+n2).
compute alfa=!alfa.
compute tails=!tails.
compute pval=alfa/tails.
do if pval=0.05.
compute zalfa=1.645.
end if.
do if pval=0.025.
compute zalfa=1.96.
end if.
do if pval=0.01.
compute zalfa=2.326.
end if.
do if pval=0.005.
compute zalfa=2.576.
end if.
COMPUTE zr1=.5*(LN((1+r1)/(1-r1))).
COMPUTE zr2=.5*(LN((1+r2)/(1-r2))).
compute zdiff=abs(zr1-zr2).
print {r1,r2,zr1,zr2,zdiff}
 /format="f8.2"
 /clabels="Корр.1","Корр.2","Zr1","Zr2","Разн. Z"
 /title="Сравниваемые корреляции".
print {100*alfa,tails,n1,n2}
 /format="f8.0"
 /clabels="Альфа(%)","Хвосты","N1","N2"
 /title="Входные данные".
compute power=100*(1-cdfnorm(zalfa-abs(zdiff*sqrt((n-3)/2)))).
print power
 /format="f8.1"
 /title="Мощность проверки(%)".
END MATRIX.
!ENDDEFINE.

* ВЫЗОВ макроса (несколько примеров):.

ONECORR  r1=0.5.
ONECORR  r0=0.3 r1=0.6.
ONECORRP r1=0.5 n=25 alfa=0.05 tails=1.
TWOCORR  r1=0.3 r2=0.6 ratio=2.
TWOCORRP r1=0.3 r2=0.6 n1=110 n2=220.