FAQ/CombiningPvalues - CBU statistics Wiki

Revision 2 as of 2008-02-11 16:45:45

Clear message
location: FAQ / CombiningPvalues

Combining p-values by Fisher's method

The basic idea is that if $$p_i (i=1 \ldots n)$$ are the one-sided $$p$$-values for $$n$$ independent statistics then $$-2 \sum\log(p_i)$$ has is a $$\chi^2(2n)$$ statistic which reflects whether the combined $$p$$-values are smaller than would be expected if they were Uniform(0,1) variates.

The following MATLAB code evaluates this statistic and its p-value.

function p = pfast(p) % Fisher's method for combination of independent p-values

  • product=prod(p); n=length(p);

    if n<=0

    • error('pfast was passed an empty array of p-values')
    elseif n==1
    • p = product; return
    elseif product == 0
    • p = 0; return
    else
    • x = -log(product); t=product; p=product; for i = 1:n-1
      • t = t * x / i; p = p + t;
      end
    end

>> pvals=[0.1 0.01 0.01 0.7 0.3 0.1]; >> pfast(pvals)

ans =

  • 0.0021

I.e. the combined p-value is 0.0021 for this array of 6 $$p$$-values..