Consider the 15 p-values shown below derived from a series of hypothesis tests. Following the p-values are the commands for computing the Šidák-Holm adjusted p-values. Also shown are the Bonferroni adjusted p-values for comparison. The Šidák-Holm adjusted values are slightly less conservative than the Bonferroni adjusted values.
pvalue
1. .2703633
2. .2861805
3. .0674455
4. .2884618
5. .0522945
6. .0094186
7. .0412532
8. .1566575
9. .00296
10. .0068728
11. .025553
12. .3102804
13. .0042578
14. .0031542
15. .000024
sort pvalue
gen k=(_N+1)-_n
clist
pvalue k
1. .000024 15
2. .00296 14
3. .0031542 13
4. .0042578 12
5. .0068728 11
6. .0094186 10
7. .025553 9
8. .0412532 8
9. .0522945 7
10. .0674455 6
11. .1566575 5
12. .2703633 4
13. .2861805 3
14. .2884618 2
15. .3102804 1
generate sidak=1-(1-pvalue)^k
replace sidak=sidak[_n-1] if sidak[_n-1]>sidak in 2/L
clist /* .05 significant p-values manually annotated */
pvalue k sidak
1. .000024 15 .0003597 /* <- sig at .05 */
2. .00296 14 .0406521 /* <- sig at .05 */
3. .0031542 13 .0406521 /* <- sig at .05 */
4. .0042578 12 .0499139 /* <- sig at .05 */
5. .0068728 11 .0730554
6. .0094186 10 .0902925
7. .025553 9 .2078198
8. .0412532 8 .2861095
9. .0522945 7 .313384
10. .0674455 6 .3422735
11. .1566575 5 .573401
12. .2703633 4 .7165824
13. .2861805 3 .7165824
14. .2884618 2 .7165824
15. .3102804 1 .7165824
/* Bonferroni adjusted values for comparison */
generate bonferroni=pvalue*15
clist /* .05 significant p-values manually annotated */
pvalue k sidak bonferroni
1. .000024 15 .0003597 .0003598 /* <- sig at .05 */
2. .00296 14 .0406521 .0444 /* <- sig at .05 */
3. .0031542 13 .0406521 .0473124 /* <- sig at .05 */
4. .0042578 12 .0499139 .063867
5. .0068728 11 .0730554 .1030915
6. .0094186 10 .0902925 .1412788
7. .025553 9 .2078198 .383295
8. .0412532 8 .2861095 .6187974
9. .0522945 7 .313384 .784417
10. .0674455 6 .3422735 1.011683
11. .1566575 5 .573401 2.349863
12. .2703633 4 .7165824 4.055449
13. .2861805 3 .7165824 4.292707
14. .2884618 2 .7165824 4.326927
15. .3102804 1 .7165824 4.654205
If we put all of the pieces of code together, we get the following.
sort pvalue gen k=(_N+1)-_n generate sidak=1-(1-pvalue)^k replace sidak=sidak[_n-1] if sidak[_n-1]>sidak in 2/L generate bonferroni=pvalue*15
