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
186
187
188
189
190
191
192
193
194
195
* Поправки для собственных уровней значимости при множественных сравнениях.

* Рей,
* посылаю улучшенную версию синтаксиса с реализацией алгоритмов
* расчета скорректированных уровней значимости (p, p-values).
* Я добавила несколько "восходящих" (step-up) методов и описание к каждому
* алгоритму.

* Marta Garcia-Granero. 14.04.2002.

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

Заявление о снятии ответственности

Данный синтаксис предоставляется "как есть" без каких-либо гарантий.
Риск, связанный с качеством, производительностью и пригодностью его
для ваших целей вы полностью принимаете на себя. Пользуясь данной программой,
вы также принимаете на себя всю ответственность, связанную с выбором конкретного
алгоритма и последующим использованием результатов, полученных с помощью данной
программы.

ОПИСАНИЕ

Реализовано 8 алгоритмов корректировки уровня значимости. Они разделяются на
"одношаговые" (one-step), "нисходящие" (step-down) и "восходящие" (step-up) алгоритмы.

1. "Одношаговый" алгоритм Бонферрони (Bonferroni)
2. "Одношаговый" алгоритм Сидака (Sidak, см. ссылки 1 и 2]
3. "Нисходящий" алгоритм Холма (Holm, см. 3)
4. "Нисходящий" алгоритм Сидака (Sidak, см. 1,2,4 и 5)
5. "Нисходящий" алгоритм Финнера (Finner, 4 и 5]
6. "Восходящий" алгоритм Хоммеля (Hommel, см. 6 и 7)
7. "Восходящий" алгоритм Хокберга (Hochberg, 8)
8. "Восходящий" алгоритм Саймса (Simes, 9)

Корректность реализации проверена утилитой Multiplicity (2.0) 
(автор - Barry W. Brown. Университет Техаса, Раковый центр Андерсона (M D Anderson Cancer Center)).

АЛГОРИТМЫ

Используем следующие обозначение:

n =     число уровней значимости (p-values)
p(i)  = i-й уровень значимости по порядку, начиная с наименьшего, i=1..n
p#(i) = скорректированный (исправленный) вариант уровня значимости p(i)

В одношаговых алгоритмах собственные уровни значимости (p-values)
сравниваются с предопределенным значением, которое является функцией от альфа (заданного
уровня значимости) и n - числа уровней значимости.

(Здесь и далее автор дает классическое словесное описание алгоритмов, когда предполагается
корректировка наперед заданного уровня значимости "альфа" для сравнения с собственными уровнями значимости
проверок (обычно это предполагает уменьшение "альфа"). На самом же деле синтаксис проводит корректировку собственных уровней значимости, чтобы упростить процедуру
сравнения с наперед заданным значением альфа (например, 0.05, 0.01, 0.001 и т.д.) (обычно это предполагает
увеличение p(i) - примеч. перев.)

- "Одношаговый" алгоритм Бонферрони:
  p#(i)=n*p(i)

- "Одношаговый" алгоритм Сидака:
  p#(i)=1-(1-p(i))^n


В нисходящих методах значения p-values обрабатываются в порядке от 
меньшего к большему. Как только обнаруживается p-value, достаточно большое (с точки зрения
критерия на основе альфа и позиции значения p-value в упорядоченном списке), данное p-value
и ВСЕ последующие (большие, чем данное), не позволяют отвергнуть соответствующие нулевые гипотезы.

- "Нисходящий" алгоритм Холма:
  p#(i)=(n-i+1)*p(i)

- "Нисходящий" алгоритм Сидака:
  p#(i)=1-(1-p(i))^(n-i+1)

- "Нисходящий" алгоритм Финнера:
  p#(i)=1-(1-p(i))^(n/i)


В восходящих алгоритмах значения p-values исследуются в порядке от большего
к меньшему. Как только обнаруживается значение p-value, достаточно малое (с точки зрения
критерия, основанного на альфа и позиции p-value в упорядоченном списке), данное p-value и
ВСЕ последующие (меньшие, чем данное) ведут к отвержению соответствующих нулевых гипотез.

- "Восходящий" алгоритм Хоммеля:
  p#(i)=n*Cn*p(i)/i
  Cn=1+1/2+ ... +1/n

- "Восходящий" алгоритм Хокберга:
  p#(i)=(n-i+1)*p(i)

- "Восходящий" алгоритм Саймса:
  p#(i)=n*p(i)/i

См. в [10] общий справочный материал по алгоритмам коррекции собственных уровней значимости.

ЛИТЕРАТУРА

 1. Sidak Z (1967) "Rectangular Confidence Regions for the Means of
    Multivariate Normal Distributions" American Statistical Association, 62, 626-633.
 2. Sidak Z (1971) "On probabilities of rectangles in multivariate Student
    distributions: their dependence on correlations" Ann Math Statist, 42, 169-175.
 3. Holm S (1979) "A Simple Sequentially Rejective Multiple Test Procedure"
    Scandinavian Journal of Statistics, 6, 65-70.
 4. Finner H (1990) "Some New Inequalities for the Rnad Distribution With
    Application to the determination of Optimum Significance Levels of
    Multiple Range Tests" Journal of the American Statistical Association, 85, 191-194.
 5. Finner H (1993) "On A Monotonicity Problem in Step-Down Multiple Test
    Procedures" Journal of the American Statistical Association, 88, 920-923.
 6. Hommel G (1988) "A stagewise rejective multiple test procedure based on
    a modified Bonferroni test" Biometrika, 75, 383-386.
 7. Falk RW (1989) "Hommel's Bonferroni-type inequality for unequally
    spaced levels" Biometrika, 76, 190-191.
    8. Hochberg Y and Benjamini Y (1990) "More powerful procedures for multiple
    significance testing" Statistics in Medicine, 9, 811-818.
 9. Simes RJ (1986) "An improved Bonferroni procedure for multiple tests
    of significance" Biometrika, 73, 751-754.
10. Westfall PH and Young SS (1993), Resampling-Based Multiple Testing:
    examples and methods for p-value adjustment. New York: John Wiley and Sons.

********************************************************************************.

* НАЧАЛО СИНТАКСИСА

* Создадим набор данных с собственными уровнями значимости. Замените их на те, что есть у вас *.
DATA LIST list / pvalue(f9.4).
BEGIN DATA
0.0728
0.0023
0.3829
0.0041
0.0101
0.4557
END DATA.

* НЕКОТОРЫЕ ДОПОЛНИТЕЛЬНЫЕ ПЕРЕМЕННЫЕ *.
COMPUTE id=$CASENUM.
FORMAT id (F2.0).
SORT CASES BY  pvalue (A) .
COMPUTE pos=$CASENUM.
FORMAT pos (F2.0).
*>>>>> Этот раздел добавлен Реем Левеком <<<<<<<.
* Найдем число значений p-value.
RANK pvalue /n into N /PRINT=NO.
* Переменная N содержит икомую величину (фактически - число наблюдений в файле).
*>>>>>> Конец раздела, добавленного Реем <<<<<<<.

* РАСЧЕТ ИСПРАВЛЕННЫХ ЗНАЧЕНИЙ P-VALUES *.
* (1) Одношаговые методы *.
COMPUTE bonferr=pvalue*n.
IF bonferr>1 bonferr=1.
COMPUTE sidak=1-(1-pvalue)**n.
* (2) Нисходящие методы *.
COMPUTE holm=(n-pos+1)*pvalue.
IF holm>1 holm=1.
IF (holm<LAG(holm,1)) holm=LAG(holm,1).
COMPUTE downsidk=1-(1-pvalue)**(n-pos+1).
IF (downsidk<LAG(downsidk,1)) downsidk=LAG(downsidk,1).
COMPUTE finner=1-(1-pvalue)**(n/pos).
IF (finner<LAG(finner,1)) finner=LAG(finner,1).
* (3) Восходящие методы *.
COMPUTE cn=1/pos.
DO IF $casenum>1.
COMPUTE cn=cn+lag(cn,1).
END IF.
SORT CASES BY pos(D).
IF cn<lag(cn,1) cn=lag(cn,1).
COMPUTE hommel = cn*n*pvalue/pos.
IF hommel>1 hommel=1.
IF (hommel>LAG(hommel,1)) hommel=LAG(hommel,1).
COMPUTE hochberg=(n-pos+1)*pvalue.
IF (hochberg>LAG(hochberg,1)) hochberg=LAG(hochberg,1).
COMPUTE simes=n*pvalue/pos.
IF (simes>LAG(simes,1)) simes=LAG(simes,1).

* ВЫВОД РЕЗУЛЬТАТОВ *.
FORMAT bonferr to simes (f9.4).
VARIABLE LABELS id '№№' /pvalue 'p исходн.' /pos 'Ранг'
        /bonferr 'Одношаговый Бонферрони' /sidak 'Одношаговый Сидака'
        /holm 'Нисходящий Холма' /downsidk 'Нисходящий Сидака'
        /finner 'Нисходящий Финнера' /hommel 'Восходящий Хоммеля'
        /hochberg 'Восходящий Хокберга' /simes 'Восходящий Саймса'.
SORT CASES BY pos (A).
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue bonferr sidak
  /TITLE "Исходные и скорректированные величины p (одношаговые алгоритмы)".
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue holm downsidk finner
  /TITLE "Исходные и исправленные величины p (нисходящие алгоритмы)".
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue hommel hochberg simes
  /TITLE "Исходные и исправленные величины p (восходящие алгоритмы)".

********************************************************************************.

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