我试图在模拟遗传学问题中应用 Fisher 的精确检验,但 p 值似乎向右倾斜。作为一名生物学家,我想我只是错过了对每个统计学家来说显而易见的东西,所以我非常感谢你的帮助。
我的设置是这样的:(设置 1,边际不固定)
在 R 中随机生成 0 和 1 的两个样本。每个样本 n = 500,采样 0 和 1 的概率相等。然后,我将每个样本中 0/1 的比例与 Fisher 精确检验进行比较(只是fisher.test
; 还尝试了具有类似结果的其他软件)。采样和测试重复 30 000 次。生成的 p 值分布如下:
所有 p 值的平均值约为 0.55,第 5 个百分位为 0.0577。甚至分布在右侧也显得不连续。
我一直在阅读我所能阅读的所有内容,但我没有发现任何迹象表明这种行为是正常的——另一方面,它只是模拟数据,所以我看不到任何偏见的来源。有什么我错过的调整吗?样本量太小?或者它不应该是均匀分布的,并且 p 值的解释不同?
或者我应该重复一百万次,找到 0.05 分位数,并在将其应用于实际数据时将其用作显着性截止值?
谢谢!
更新:
Michael M 建议修复 0 和 1 的边际值。现在 p 值给出了更好的分布 - 不幸的是,它不是统一的,也不是我认识的任何其他形状:
添加实际的 R 代码:(设置 2,边缘固定)
samples=c(rep(1,500),rep(2,500))
alleles=c(rep(0,500),rep(1,500))
p=NULL
for(i in 1:30000){
alleles=sample(alleles)
p[i]=fisher.test(samples,alleles)$p.value
}
hist(p,breaks=50,col="grey",xlab="p-values",main="")
最终编辑:
正如 whuber 在评论中指出的那样,由于分箱,这些区域看起来只是扭曲了。我附上了设置 1(自由边际)和设置 2(固定边际)的 QQ 图。在下面的格伦模拟中可以看到类似的图,所有这些结果实际上看起来相当一致。谢谢您的帮助!