BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Nadra999
Calcite | Level 5

… I am trying to use the Hochberg correction on some data I have.

 

 

The unadjusted ps look like this:

 

Brids p=0.0001

Fish p=0.0009

Mammals = 0.1402

 

And after Hochberg like this using SAS PROC MULTEST:

 

Brids p=0.0004

Fish p=0.0018

Mammals = 0.1402

 

The values in the correction just don’t seem right…

 

For reference:

http://www.statisticshowto.com/benjamini-hochberg-procedure/

 

How to Run the Benjamini–Hochberg procedure

  1. Put the individual p-values in ascending order.
  2. Assign ranks to the p-values. For example, the smallest has a rank of 1, the second smallest has a rank of 2.
  3. Calculate each individual p-value’s Benjamini-Hochberg critical value, using the formula (i/m)Q, where:
    • i = the individual p-value’s rank,
    • m = total number of tests,
    • Q = the false discovery rate (a percentage, chosen by you).
  4. Compare your original p-values to the critical B-H from Step 3; find the largest p value that is smaller than the critical value.

 

Step 1:

 

So with our data they are already in order:

 

Brids p=0.0001

Fish p=0.0009

Mammals = 0.1402

 

Step 2:

 

Birds Rank 1

Fish Rank 2

Mammals Rank 3

 

Step 3:

 

Birds:

i=1

m=3

Q=0.05

 

(i/m)Q=(1/3)0.05=0.016

 

I am not sure what the Q value is in SAS and cannot find documentation. But, if you work back from the values provided by SAS 1/3x=0.016, then you get a Q of 0.0012. That seems like a strange value…

 

also the Q would change….

 

For fish if 2/3Q=0.0018 then Q=0.0027

 

For mammals 3/3Q=0.1402, then Q=0.1402

 

1 ACCEPTED SOLUTION

Accepted Solutions
ballardw
Super User

I don't see a Q in the documentation under Hochberg for Multtest:

The Hochberg-adjusted p-values are defined in reverse order of the step-down Bonferroni:

\begin{equation*} \tilde{p}_{(i)} = \begin{cases} p_{(m)} & \mbox{for } i=m \\ \min \left( \tilde{p}_{(i+1)} , (m-i+1) p_{(i)} \right) & \mbox{for } i=m-1,\ldots ,1 \end{cases}\end{equation*}
shows that the adjusted p-values for the highest ranked (I=m) = to the original p-value, hence 0.1402 for mammals in your case.
For m=2, it would be the minimum of p-value for i=3 (0.1402), (3-2+1)(0.0009) {the second ranked p-value], or min(0.1402, 2*0.0009)=0.0018.
 
So the adjustment used by Multtest does calculate the results you show from the documentation but there is no assumed Q. It appears that the Benjamini–Hochberg is a different adjustment than the Hochberg that Multtest uses. I have to admit that I am always uncomfortable with a process including something like: Q = the false discovery rate (a percentage, chosen by you).
What would you say is the false discovery rate from your data?

View solution in original post

1 REPLY 1
ballardw
Super User

I don't see a Q in the documentation under Hochberg for Multtest:

The Hochberg-adjusted p-values are defined in reverse order of the step-down Bonferroni:

\begin{equation*} \tilde{p}_{(i)} = \begin{cases} p_{(m)} & \mbox{for } i=m \\ \min \left( \tilde{p}_{(i+1)} , (m-i+1) p_{(i)} \right) & \mbox{for } i=m-1,\ldots ,1 \end{cases}\end{equation*}
shows that the adjusted p-values for the highest ranked (I=m) = to the original p-value, hence 0.1402 for mammals in your case.
For m=2, it would be the minimum of p-value for i=3 (0.1402), (3-2+1)(0.0009) {the second ranked p-value], or min(0.1402, 2*0.0009)=0.0018.
 
So the adjustment used by Multtest does calculate the results you show from the documentation but there is no assumed Q. It appears that the Benjamini–Hochberg is a different adjustment than the Hochberg that Multtest uses. I have to admit that I am always uncomfortable with a process including something like: Q = the false discovery rate (a percentage, chosen by you).
What would you say is the false discovery rate from your data?

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 1 reply
  • 3030 views
  • 0 likes
  • 2 in conversation