View Javadoc

    1   package baseCode.math;
    2
    3   import cern.colt.list.DoubleArrayList;
    4
    5   /***
    6    * Methods for p-value correction of sets of hypothesis tests.
    7    * <p>
    8    * Copyright (c) 2004
    9    * </p>
    10   * <p>
    11   * Institution:: Columbia University
    12   * </p>
    13   *
    14   * @author Paul Pavlidis
    15   * @version $Id: MultipleTestCorrection.java,v 1.6 2004/07/27 03:18:57 pavlidis Exp $
    16   */
    17  public class MultipleTestCorrection {
    18
    19     /***
    20      * Determine the Bonferroni pvalue threshold to maintain the family wise error rate (assuming pvalues are
    21      * independent).
    22      *
    23      * @param pvalues The pvalues
    24      * @param fwe The family wise error rate
    25      * @return The minimum pvalue that maintains the FWE
    26      */
    27     public static double BonferroniCut( DoubleArrayList pvalues, double fwe ) {
    28        int numpvals = pvalues.size();
    29        return fwe / numpvals;
    30     }
    31
    32     /***
    33      * Benjamini-Hochberg method. Determines the maximum p value to maintain the false discovery rate. (Assuming pvalues
    34      * are independent);
    35      *
    36      * @param pvalues list of pvalues. Need not be sorted.
    37      * @param fdr false discovery rate
    38      * @return The maximum pvalue that maintains the false discovery rate
    39      */
    40     public static double BenjaminiHochbergCut( DoubleArrayList pvalues,
    41           double fdr ) {
    42        int numpvals = pvalues.size();
    43        DoubleArrayList pvalcop = pvalues.copy();
    44        pvalcop.sort();
    45        pvalcop.reverse();
    46
    47        int n = pvalcop.size();
    48        double thresh = fdr * n / numpvals;
    49
    50        for ( int i = 0; i < n; i++ ) {
    51           double p = pvalcop.get( i );
    52
    53           if ( p < thresh ) {
    54              return p;
    55           }
    56        }
    57        return 0.0;
    58     }
    59
    60  }