This example illustrates how to use PROC MULTTEST to multiplicity-adjust a collection of raw *p*-values obtained from some other source. This is a valuable option for those cases where PROC MULTTEST cannot compute the raw *p*-values directly. The data set a, which follows, contains the unadjusted *p*-values computed in Example 60.4. Note that the data set needs to have one variable containing the *p*-values, but the data set can contain other variables as well.

data a; input Test$ Raw_P @@; datalines; test01 0.28282 test02 0.30688 test03 0.71022 test04 0.77175 test05 0.78180 test06 0.88581 test07 0.54685 test08 0.84978 test09 0.24228 test10 0.58977 test11 0.03498 test12 0.41607 test13 0.31631 test14 0.05254 test15 0.45061 test16 0.75758 test17 0.12496 test18 0.49485 test19 0.21572 test20 0.50505 test21 0.94372 test22 0.81260 test23 0.77596 test24 0.36889 ;

proc multtest inpvalues=a holm hoc fdr; run;

Note that the PROC MULTTEST statement is the only statement that can be specified with the *p*-value input mode. In this example, the raw *p*-values are adjusted by the Holm, Hochberg, and FDR methods.

The "P-Value Adjustment Information" table, displayed in Output 60.5.1, provides information about the requested adjustments and replaces the usual "Model Information" table. The adjusted *p*-values are displayed in Output 60.5.2

The Multtest Procedure

P-Value Adjustment Information | |
---|---|

P-Value Adjustment | Stepdown Bonferroni |

P-Value Adjustment | Hochberg |

P-Value Adjustment | False Discovery Rate |

p-Values | ||||
---|---|---|---|---|

Test | Raw | Stepdown Bonferroni | Hochberg | False Discovery Rate |

1 | 0.2828 | 1.0000 | 0.9437 | 0.9243 |

2 | 0.3069 | 1.0000 | 0.9437 | 0.9243 |

3 | 0.7102 | 1.0000 | 0.9437 | 0.9243 |

4 | 0.7718 | 1.0000 | 0.9437 | 0.9243 |

5 | 0.7818 | 1.0000 | 0.9437 | 0.9243 |

6 | 0.8858 | 1.0000 | 0.9437 | 0.9243 |

7 | 0.5469 | 1.0000 | 0.9437 | 0.9243 |

8 | 0.8498 | 1.0000 | 0.9437 | 0.9243 |

9 | 0.2423 | 1.0000 | 0.9437 | 0.9243 |

10 | 0.5898 | 1.0000 | 0.9437 | 0.9243 |

11 | 0.0350 | 0.8395 | 0.8395 | 0.6305 |

12 | 0.4161 | 1.0000 | 0.9437 | 0.9243 |

13 | 0.3163 | 1.0000 | 0.9437 | 0.9243 |

14 | 0.0525 | 1.0000 | 0.9437 | 0.6305 |

15 | 0.4506 | 1.0000 | 0.9437 | 0.9243 |

16 | 0.7576 | 1.0000 | 0.9437 | 0.9243 |

17 | 0.1250 | 1.0000 | 0.9437 | 0.9243 |

18 | 0.4949 | 1.0000 | 0.9437 | 0.9243 |

19 | 0.2157 | 1.0000 | 0.9437 | 0.9243 |

20 | 0.5051 | 1.0000 | 0.9437 | 0.9243 |

21 | 0.9437 | 1.0000 | 0.9437 | 0.9437 |

22 | 0.8126 | 1.0000 | 0.9437 | 0.9243 |

23 | 0.7760 | 1.0000 | 0.9437 | 0.9243 |

24 | 0.3689 | 1.0000 | 0.9437 | 0.9243 |

Note that the adjusted *p*-values for the Hochberg method are less than or equal to those for the Holm (Step-down Bonferroni) method. In turn, the adjusted *p*-values for the FDR method (False Discovery Rate) are less than or equal to those for the Hochberg method. These comparisons hold generally for all *p*-value configurations. The FDR method controls the false discovery rate and not the familywise error rate. The Hochberg method controls the familywise error rate under independence. The Holm method controls the familywise error rate without assuming independence.