用于差异甲基化分析的 p 值直方图解释:什么可以解释大 p 值的普遍性?

机器算法验证 r t检验 p 值 偏度 生物信息学
2022-03-28 23:21:21

我正在对约 20k+ 基因的甲基化数据进行分析。

对于 n = 3,我正在对每个基因进行 t 检验,以查看它是否在治疗后被差异甲基化。甲基化值范围为 [0,1]。

因此,在我的数据中,我有 6 行,每个患者有一个前后行,# 列 = # 个基因(~20k)。

这是生成 p 值的代码:

for (i in 1:ncol(df))
{
  alpha = c(df[c(1,3,5),i])
  beta = c(df[c(2,4,6),i])
  df.p[i] = t.test(alpha,beta,paired=TRUE)$p.value
}

hist(df.p)

这可以很好地生成 p 值,但是当我制作得到的 p 值的直方图时,它强烈地向左倾斜,这很奇怪,因为如果没有的话,你至少会期望均匀分布任何显着的甲基化差异。下面是分发的截图。

在此处输入图像描述

旁注:我也使用了这个limmaBioConductor并得到了相同的结果。

我是否进行了错误的 t 检验?我该如何解释这些结果?感谢任何建议,因为我是一名新手生物统计学家。

1个回答

编辑:正如 Amoeba 指出的那样,我的代码中有一个错误,第一个图来自 未配对的 t 检验。我用配对 t 检验和不同的 alpha 和 beta 重新运行,结果在底部。

我用下面的代码在 Matlab 中模拟了它。我生成了 1000 个随机 alpha(1x3 向量);相应的 beta 是通过向每个 alpha 添加一个较小幅度的随机 1x3 向量来制作的。结果是 alpha 和 beta 是相关的。此处给出了由此产生的 p 值分布(未配对t 检验)。如您所见,它偏向接近 1 的值。

非配对 t 检验

在此处输入图像描述

pp = zeros(1000,1);
for iter = 1:1000
  alpha = rand(1,3);
  beta = alpha + rand(1,3)*.1;
  [~,pp(iter)] = ttest2(alpha,beta);
end

编辑:配对t检验 在此处输入图像描述

pp = zeros(10000,1);
for iter = 1:10000
  alpha = randn(1,3);
  beta = alpha + [rand 0.1 -1*rand];
  [~,pp(iter)] = ttest(alpha,beta);
end

为了通过配对 t 检验实现右偏分布,我必须对 beta 做出不同的假设:beta = alpha + [r1 0.1 r2]其中是均匀随机数,在 [0 1] 范围内,在 [- 1 0]。始终为正,始终为负,它们的综合影响平均为 0。其效果是公平地再现您的原始直方图。r1r2r1r2r1r2alpha-beta

如果这实际上描述了您的数据,则意味着如果例如基因甲基化在一个复制中很高,那么在另一个复制中则很低。这很奇怪。尽管如果您的数据是一个比率并且您在一次复制中交换了分子和分母,则可能会发生这种情况。为了测试这一点,您能否制作散点图/计算每对复制品之间的相关性,即在df[1,]and 和df[3,]anddf[1,]之间df[5,]等。如果您的复制品很好,它们都应该具有很高的相关性 - 如果有任何负相关性,那么这就是交换的证据分子和分母。