使用Fisher方法matlab组合P值?

时间:2016-08-24 16:01:35

标签: matlab probability static-analysis

做完CDF后,我收到了以下P(他们的样本)

的值
[0.43   0.12    0.0021  0.05    0.017   0.001   0.025   0.038 0.35  0.29]

我想在Fisher方法的帮助下合并我的P值,并按以下方式获取输出:

选择前3个P值并将它们组合起来并从中获得结果(使用fisher方法)。例如,我的第一个合并P值为:0.43 ,0.12 0.0021,我的下一个P合并值为0.12, 0.0021 ,0.05,依此类推。

有人能告诉我如何使用MATLAB对这个问题应用Fisher方法吗? 我无法使用MATLAB找到任何解决方案。

费希尔的方法将每个测试的极值概率(通常称为“p值”)组合成一个测试统计量(X2),使用以下公式:

documents讲述渔夫方法,我在圈子中标出了可以用于通过使用费希尔法合并p值的公式,请看看:)

其中pi是第i个假设检验的p值。当p值趋于较小时,检验统计量X2会很大,这表明每个检验都不存在零假设。

1 个答案:

答案 0 :(得分:1)

我不认为在MATLAB中有一个Fisher的组合概率测试,但实现起来应该不难:

P = [0.43 0.12 0.0021 0.05 0.017 0.001 0.025 0.038 0.35 0.29];
k = length(P);

首先我们将制作一个辅助矩阵,根据需要对P中的元素求和:

% the following matrix is used to sun each n elements in a row:
n = 3;
summer = diag(ones(k,1));
for d = 1:n-1
    summer = summer + diag(ones(k-d,1),-d);
end

如果我们运行P*summer,我们会得到:

ans =
  Columns 1 through 6
       0.5521       0.1721       0.0691        0.068        0.043        0.064
  Columns 7 through 10
        0.413        0.678         0.64         0.29

接下来,我们首先计算所有P的ln,然后将它们与3相加(并乘以-2)来计算统计量:

% compute the combine fisher statistic:
X = -2.*log(P(:).')*summer;

结果:

X =
  Columns 1 through 6
        18.26       22.564       26.472       27.956       29.342       27.734
  Columns 7 through 10
       16.018       11.116       4.5754       2.4757

最后,我们使用2*3 = 6 df:

计算卡方分布的p值
% get the p-values for all combinations:
p_vals = chi2cdf(X(1:end-n+1),6,'upper');

我们得到:

p_vals =
  Columns 1 through 6
     0.005614   0.00095661   0.00018177    9.577e-05   5.2399e-05   0.00010546
  Columns 7 through 8
     0.013659     0.084865