病例组7变异对照组0的组间差异适用什么统计检验?Fisher精确检验可行吗?
针对病例对照研究7:0变异检出差异的检验方案建议
常见误区澄清
你对列联表的维度判断有误:该场景属于标准2×2列联表(行是病例/对照两个分组,列是变异检出/未检出两个分类),不属于1×2列联表,Fisher精确检验完全适配该场景。
Fisher精确检验的合理性
- 该检验基于超几何分布计算精确显著性,天然支持单元格为0的小样本场景,不需要提前对0值做人为校正,是这类小样本频率差异检验的金标准。
- 你提到的给0值加0.5的Haldane校正,仅适用于计算比值比(OR)、相对危险度(RR)时避免出现无穷值的情况,单纯做显著性检验时不需要做该校正,人为校正反而会导致p值计算偏倚。
其他可选适配方案
如果你的研究有特殊设计,可以选择以下更贴合场景的检验方法:
- 二项分布精确检验:如果对照组的变异检出率可以代表人群背景突变率,你可以直接将对照组的检出率作为背景概率,用二项检验计算病例组检出≥7个变异的累积概率,得到显著性结果,该方法计算效率更高。
- 置换检验:如果你的样本量足够(两组总样本量≥50),可以通过10000次以上的病例/对照标签随机置换,统计随机情况下出现病例组比对照组多≥7个变异的频率,得到经验p值。该方法不依赖任何分布假设,结果更稳健,尤其适合存在潜在混杂因素的场景。
- 伯努利混合模型检验:如果你观测的是多个独立位点的变异集合,而非同一个位点的多个携带案例,可以用该模型校正不同位点的突变率异质性,避免高估显著性。
实操示例(R语言)
Fisher精确检验的实现代码非常简单,不需要额外处理0值:
# 替换参数为你实际的病例组总样本量、对照组总样本量 case_total <- 100 control_total <- 100 contingency_table <- matrix(c(7, 0, case_total-7, control_total), nrow = 2, dimnames = list(group = c("case", "control"), mutation = c("yes", "no"))) fisher.test(contingency_table, alternative = "greater") # 单侧检验,预设病例组变异率更高
内容的提问来源于stack exchange,提问作者B.Germ
相关产品推荐
相关产品推荐

