|
Size: 1060
Comment:
|
Size: 1094
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 7: | Line 7: |
| {{{ | |
| Line 29: | Line 29: |
| }}} | |
| Line 30: | Line 31: |
| Let's try it out: {{{ |
|
| Line 33: | Line 36: |
| Line 38: | Line 40: |
| }}} | |
| Line 39: | Line 42: |
| I.e. the combined p-value is 0.0021 for this array of 6 $$p$$-values.. | I.e. the combined p-value is 0.0021 for this array of 6 $$p$$-values. |
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 Let's try it out:
>> pvals=[0.1 0.01 0.01 0.7 0.3 0.1];
>> pfast(pvals)
ans =
0.0021I.e. the combined p-value is 0.0021 for this array of 6 $$p$$-values.
