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
196
197
198
* Ray
* I am sending you an improved version of the syntax for p-values
* adjustment algorithms. I have added some step-up methods and
* documentation for every algorithm.
* Marta Garcia-Granero 2002/04/17.

**************************
ADJUSTP SYNTAX:

DISCLAIMER

ADJUSTP is provided "as is" without warranty of any kind.
The entire risk as to the quality, performance, and fitness
for intended purpose is with you. You assume responsibility
for the selection of the program and for the use of results
obtained from that program.

DESCRIPTION

There are 8 p-value adjustment algorithms available. They include
one-step, step-down and step-up adjustment methods.

1. One-Step Bonferroni
2. One-Step Sidak [References 1 and 2]
3. Step-Down Holm [3]
4. Step-Down Sidak [1,2,4 and 5]
5. Step-Down Finner [4 and 5]
6. Step-Up Hommel [6 and 7]
7. Step-Up Hochberg [8]
8. Step-Up Simes [9]

All the results have been tested with Multiplicity program (2.0) ,
by Barry W. Brown, The University of Texas M D Anderson Cancer Center.

ALGORITHMS

The following nomenclature will be used:

n =     number of p-values
p(i)  = ith smallest p-value
p#(i) = adjusted value of p(i)

In one-step adjustment methods p-values are compared to a
predetermined value that is a function of alfa, the significance
level, and n, the number of p-values.

- One-step Bonferroni:
  p#(i)=n*p(i)

- One-Step Sidak:
  p#(i)=1-(1-p(i))^n

In step-down methods p-values are examined in order, from smallest
to largest. Once a p-value is found that is large according to a
criterion based on alfa and the p-value's position in the list, that
p-value and all larger p-values are accepted.

- Step-down Holm:
  p#(i)=(n-i+1)*p(i)

- Step-down Sidak:
  p#(i)=1-(1-p(i))^(n-i+1)

- Step-down Finner:
  p#(i)=1-(1-p(i))^(n/i)

In step-up methods p-values are examined in order, from largest to
smallest. Once a p-value is found that is small according to a
criterion based on alfa and the p-value's position in the list,
that p-value and all smaller p-values are rejected.

- Step-up Hommel:
  p#(i)=n*Cn*p(i)/i
  Cn=1+1/2+ ... +1/n

- Step-up Hochberg:
  p#(i)=(n-i+1)*p(i)

- Step-up Simes:
  p#(i)=n*p(i)/i

See [10] for a general reference on p-value adjustment algorithms.

REFERENCES

 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.

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

* BEGINNING OF SYNTAX

* Create dataset with p-values. Replace by your own *.
DATA LIST list / pvalue(f9.4).
BEGIN DATA
0.0728
0.0023
0.3829
0.0041
0.0101
0.4557
END DATA.

* SOME AUXILIARY VARIABLES *.
COMPUTE id=$CASENUM.
FORMAT id (F2.0).
SORT CASES BY  pvalue (A) .
COMPUTE pos=$CASENUM.
FORMAT pos (F2.0).
*>>>>> This section added by Ray Levesque <<<<<<<.
* Calculate the number of p values.
RANK pvalue /n into N /PRINT=NO.
* N contains the number of cases in the file.
*>>>>>> End of section added by Ray <<<<<<<.

* ADJUSTED P-VALUES *.
* (1) One step methods *.
COMPUTE bonferr=pvalue*n.
IF bonferr>1 bonferr=1.
COMPUTE sidak=1-(1-pvalue)**n.
* (2) Step-down methods *.
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) Step-up methods *.
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).

* FINAL REPORTS *.
FORMAT bonferr to simes (f9.4).
VARIABLE LABELS id 'Nr.' /pvalue 'Original' /pos 'Rank'
        /bonferr 'One-step Bonferroni' /sidak 'One-step Sidak'
        /holm 'Step-down Holm' /downsidk 'Step-down Sidak'
        /finner 'Step-down Finner' /hommel 'Step-up Hommel'
        /hochberg 'Step-up Hochberg' /simes 'Step-up Simes'.
SORT CASES BY pos (A).
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue bonferr sidak
  /TITLE "Original and one-step adjusted p-values".
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue holm downsidk finner
  /TITLE "Original and step-down adjusted p-values".
REPORT FORMAT=LIST AUTOMATIC ALIGN(CENTER)
  /VARIABLES=pos id pvalue hommel hochberg simes
  /TITLE "Original and step-up adjusted p-values".

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

* END OF SYNTAX.