使用 Fisher 方法 matlab 组合 P 值?
Combining P values using Fisher method matlab?
完成 CDF 后,我收到以下值 P
(其中的样本)
[0.43 0.12 0.0021 0.05 0.017 0.001 0.025 0.038 0.35 0.29]
我想在 Fisher 方法的帮助下合并我的 P
值,并按以下方式获得输出:
Select 前 3 个 P
值并将它们组合起来并从中得到结果(使用 fisher 方法)。例如,我的第一个组合 P
值将是:0.43 ,0.12 0.0021
,我的下一个 P
组合值将是 0.12, 0.0021 ,0.05
等等。
谁能告诉我如何使用 MATLAB 应用 Fisher 方法解决这个问题?
我无法使用 MATLAB 找到任何解决方案。
Fisher 方法使用以下公式将每个测试的极值概率(通常称为 "p-values")组合到一个测试统计量 (X2) 中:
documents讲了fisher方法,我在圆圈里标出了可以用fisher方法组合p值的公式请看:)
其中 pi 是第 i 个假设检验的 p 值。当 p 值趋于较小时,检验统计量 X2 会较大,这表明原假设并非对每个检验都成立。
我认为 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
完成 CDF 后,我收到以下值 P
(其中的样本)
[0.43 0.12 0.0021 0.05 0.017 0.001 0.025 0.038 0.35 0.29]
我想在 Fisher 方法的帮助下合并我的 P
值,并按以下方式获得输出:
Select 前 3 个 P
值并将它们组合起来并从中得到结果(使用 fisher 方法)。例如,我的第一个组合 P
值将是:0.43 ,0.12 0.0021
,我的下一个 P
组合值将是 0.12, 0.0021 ,0.05
等等。
谁能告诉我如何使用 MATLAB 应用 Fisher 方法解决这个问题?
我无法使用 MATLAB 找到任何解决方案。
Fisher 方法使用以下公式将每个测试的极值概率(通常称为 "p-values")组合到一个测试统计量 (X2) 中:
documents讲了fisher方法,我在圆圈里标出了可以用fisher方法组合p值的公式请看:)
其中 pi 是第 i 个假设检验的 p 值。当 p 值趋于较小时,检验统计量 X2 会较大,这表明原假设并非对每个检验都成立。
我认为 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:
% 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