掌握小样本与稀疏数据下的精确统计推断
在统计学研究中,当我们面对的是分类变量(如有效/无效,男性/女性)构成的列联表时,通常使用卡方检验(Chi-square test)来分析变量间的相关性。然而,Fisher确切概率法操作步骤的核心应用场景在于当样本量较小(如总样本量N < 40)或理论频数小于1的格子比例超过20%时,卡方检验的近似性不再成立,此时必须采用基于超几何分布原理的Fisher确切概率法。
传统的卡方检验依赖于大样本理论,当数据稀疏时,其计算出的P值往往偏小,导致假阳性率增加。Fisher确切概率法通过计算在边缘合计固定的情况下,出现当前表格及更极端表格的概率之和,从而得到精确的P值。这种方法不依赖于渐近分布,因此被称为“确切”概率法。
理解Fisher确切概率法操作步骤是进行正确数据分析的关键。虽然现代软件可以一键完成计算,但手动理解其逻辑有助于判断结果的合理性。以下是标准的操作逻辑流程:
将数据整理为标准的四格表形式。例如:
| 组别 | 事件发生 | 事件未发生 | 合计 |
|---|---|---|---|
| 实验组 | a | b | R1 |
| 对照组 | c | d | R2 |
| 合计 | C1 | C2 | N |
利用超几何分布公式计算当前观测表格出现的概率 P0:
P = (R1! R2! C1! C2!) / (N! a! b! c! d!)
保持行合计(R1, R2)和列合计(C1, C2)不变,改变内部频数 a, b, c, d,列出所有可能的四格表组合。所谓“更极端”,是指这些表格出现的概率 Pi 小于或等于当前观测表格的概率 P0。
单侧检验:将所有小于等于 P0 且方向一致(即偏离零假设方向相同)的概率相加。
双侧检验:将所有小于等于 P0 的概率相加(包括两个尾部)。注意,有些软件采用“两倍单侧P值”或“最小双尾概率法”,结果可能略有差异,但通常结论一致。
在实际科研工作中,我们很少手动计算阶乘。以下介绍如何在SPSS和R语言中执行Fisher确切概率法操作步骤。
注意:如果SPSS提示“精确检验需要大量时间”,说明数据组合过多,此时Fisher法计算量巨大,可考虑使用蒙特卡洛模拟法。
使用 base R 中的 fisher.test() 函数是最简便的方法。
创建矩阵
data <- matrix(c(1, 9, 9, 1), nrow=2, byrow=TRUE) rownames(data) <- c("Group1", "Group2") colnames(data) <- c("Event", "NoEvent")执行Fisher确切概率法
result <- fisher.test(data)查看结果
print(result)输出包含 Odds Ratio 估计值和 P-value
使用 scipy.stats 模块。
from scipy.stats import fisher_exact import numpy as np定义四格表
table = [[1, 9], [9, 1]]执行检验
oddsratio, p_value = fisher_exact(table) print(f"Odds Ratio: {oddsratio}") print(f"P-value: {p_value}")
为了更直观地展示Fisher确切概率法操作步骤的应用,我们来看一个临床研究的例子。
某医院研究一种新药对某种罕见副作用的影响。研究人员招募了10名患者,随机分为两组(每组5人)。结果显示:实验组有1人出现副作用,对照组有4人出现副作用。
| 组别 | 出现副作用 | 未出现副作用 | 合计 |
|---|---|---|---|
| 实验组 | 1 | 4 | 5 |
| 对照组 | 4 | 1 | 5 |
| 合计 | 5 | 5 | 10 |
1. 检查条件:总样本量 N=10 < 40,且存在理论频数 < 1 的情况(如果均匀分布,期望频数为2.5,但实际有1和4,偏差较大),因此必须使用Fisher确切概率法,不能使用卡方检验。
2. 计算概率:
3. 寻找更极端情况:
4. 双侧P值计算:
由于对称性,另一侧的极端情况是实验组5人,对照组0人,概率同为0.0095。 双侧P值 = P(更极端左) + P(当前) + P(更极端右) = 0.0095 + 0.1071 + 0.0095 = 0.1261。
因为 P = 0.1261 > 0.05,所以我们不能拒绝零假设。即在该小样本下,没有足够证据表明新药与副作用发生率之间存在统计学差异。
A: 不一定。但在小样本且存在稀疏单元格时,Fisher法通常比未校正的卡方检验更保守,P值往往较大,从而降低假阳性风险。然而,它比校正卡方检验(Yates)有时会更敏感或更保守,具体取决于数据分布。
A: 不建议。当样本量很大时(如N > 1000),Fisher确切概率法的计算量会随着组合数的增加呈指数级增长,可能导致计算时间过长甚至软件崩溃。此时,卡方检验的近似结果已经非常精确,使用卡方检验更高效。
A: 除非你的研究假设具有明确的方向性(例如,你只关心新药是否比旧药好,而不关心是否更差),否则应选择“双侧”。在大多数医学和社科研究中,默认报告双侧P值。
A: 可以。对于RxC表(R>2或C>2),也有Fisher-Freeman-Halton确切概率法。SPSS和R语言(fisher.test)均支持扩展的列联表分析,但计算复杂度会更高。