Fisher’s精确检验:小样本统计推断的黄金标准

深入解析2x2列联表分析,掌握医学、生物学及社会科学中的精确统计方法,解决卡方检验失效难题。

什么是 Fisher’s精确检验?

Fisher’s精确检验(Fisher's Exact Test)是一种在统计上分析分类数据(特别是2x2列联表)显著性的方法。由英国统计学家 Ronald A. Fisher 于1935年提出,最初用于分析一位女士品尝茶味道的实验("女士品茶"实验)。

与依赖于大样本渐近理论的卡方检验(Chi-square test)不同,Fisher’s精确检验基于超几何分布,能够计算出确切的概率值(P值),因此特别适用于样本量小、频数低的数据集。在临床试验、基因关联分析及社会调查等场景中,当数据不满足卡方检验的假设条件时,Fisher’s精确检验往往是唯一可靠的选择。

⚡ 核心应用场景
  • 医学研究:评估某种罕见药物对少量患者疗效的影响。
  • 生物学:分析基因突变在实验组与对照组中的分布差异。
  • 质量控制:小批量生产中的次品率对比分析。
  • 市场调研:针对特定小众群体的偏好调查,样本量有限。

为什么选择 Fisher’s精确检验 而非卡方检验?

许多初学者在面对分类数据时,习惯性地使用卡方检验,但在某些情况下这会导致错误的结论。以下是两者的关键区别及选择策略。

特性 卡方检验 (Chi-Square) Fisher’s精确检验
样本量要求 大样本(通常 n > 40) 适用于所有样本量,尤其小样本
期望频数 所有单元格期望频数 ≥ 5 无限制,即使期望频数 < 1 也可用
计算原理 基于卡方分布的近似值 基于超几何分布的精确概率
计算速度 极快 样本量大时计算较慢(需算法优化)
结果性质 渐近近似 精确概率

选择指南:何时使用?

✅ 使用卡方检验

当你的总样本量大于40,且所有单元格的期望频数都大于5时,卡方检验是高效且足够的选择。它在大数据集上计算速度极快,结果稳定。

✅ 使用 Fisher’s精确检验

当总样本量小于40,或任何单元格的期望频数小于5(特别是小于1)时,必须使用Fisher’s精确检验。它能提供真实的P值,避免假阳性或假阴性结果。

Fisher’s精确检验 的计算原理详解

理解Fisher’s精确检验的核心在于理解“固定边际总和”的概念。假设我们有一个2x2列联表:

组别 A 组别 B 合计
事件发生 a b a+b
事件未发生 c d c+d
合计 a+c b+d n

超几何分布公式

Fisher’s精确检验假设行合计和列合计是固定的。在零假设(H0:两个变量独立,无关联)成立的前提下,观察到当前表格概率 P 由超几何分布公式给出:

P = [(a+b)! (c+d)! (a+c)! (b+d)!] / [n! a! b! c! d!]

其中,! 表示阶乘。例如,5! = 5×4×3×2×1 = 120。

双侧与单侧P值

为了得到最终的P值,我们需要计算所有可能出现的、概率小于或等于当前观测表格概率的所有表格的概率之和。

💡 示例计算

假设我们研究两种药物对10名患者的疗效:

药物A:3人有效,2人无效

药物B:1人有效,4人无效

表格如下:

32
14

Fisher’s精确检验会计算在当前边际总和(行和:5,5;列和:4,6)下,出现这个表格以及更极端表格(如4,0 / 0,6 或 2,3 / 2,3等)的概率总和。如果这个总和(P值)很小(如<0.05),则拒绝零假设,认为两种药物疗效有显著差异。

实操指南:如何在主流软件中进行 Fisher’s精确检验?

手动计算Fisher’s精确检验非常繁琐,尤其是当表格较大时。以下是使用SPSS、R语言和Python进行计算的详细步骤。

SPSS 操作步骤

  1. 数据录入:将数据录入SPSS,包含三个变量:行变量、列变量和频数权重变量(Freq)。
  2. 加权个案:点击 数据(Data) -> 加权个案(Weight Cases),选择“加权个案”,将频数变量选入“频率变量”框。
  3. 交叉表分析:点击 分析(Analyze) -> 描述统计(Descriptive Statistics) -> 交叉表(Crosstabs)。
  4. 设置统计量:将行和列变量放入对应框,点击右侧“统计(Statistics)”按钮,勾选“卡方(Chi-square)”。虽然叫卡方,但这里会同时输出Fisher的结果。
  5. 精确检验设置:点击“精确(Exact)”按钮,选择“精确(Exact)”或“蒙特卡洛(Monte Carlo)”(样本量大时用蒙特卡洛近似)。
  6. 运行:点击确定,在输出窗口查看“精确检验”表格中的“精确显著性(双侧)”。
注意:如果单元格期望频数<5,SPSS默认会标注“注意”,此时应直接读取Fisher's精确检验的P值,忽略卡方P值。

R 语言代码示例

R语言内置了 fisher.test() 函数,使用极其简便。

# 创建2x2矩阵
data <- matrix(c(3, 2, 1, 4), nrow=2, byrow=TRUE)
rownames(data) <- c("DrugA", "DrugB")
colnames(data) <- c("Success", "Failure")

执行Fisher's精确检验

result <- fisher.test(data)

查看结果

print(result)

输出结果将包含:

  • p-value:双侧检验的P值。
  • odds ratio estimate:优势比估计值。
  • 95 percent confidence interval:优势比的95%置信区间。

对于RxC大表,可使用 fisher.test(data, simulate.p.value=TRUE, B=10000) 进行蒙特卡洛模拟。

Python 代码示例

使用 scipy.stats 库可以轻松完成计算。

from scipy.stats import fisher_exact

定义2x2列联表

[[a, b],

[c, d]]

oddsratio, p_value = fisher_exact([[3, 2], [1, 4]]) print(f"Odds Ratio: {oddsratio}") print(f"P-value: {p_value}")

如果需要进行单侧检验,可以使用 alt='greater' 或 alt='less' 参数:

# 单侧检验:检验A组成功率是否显著高于B组
oddsratio, p_value = fisher_exact([[3, 2], [1, 4]], alternative='greater')

Fisher’s精确检验 的历史演变

1935年

理论诞生

Ronald A. Fisher 在《Statistical Methods for Research Workers》中首次提出该方法,用于分析“女士品茶”实验,奠定了精确检验的基础。

1950s

计算机辅助

随着电子计算机的出现,手动计算阶乘变得可行,Fisher’s精确检验开始被广泛应用于医学和生物学研究。

1980s

算法优化

Mehta 和 Patel 开发了网络算法(Network Algorithm),大幅提高了大样本下精确检验的计算效率,使其在统计软件中得到普及。

21世纪

蒙特卡洛模拟

对于超大型RxC表,蒙特卡洛模拟成为标准解决方案,允许在合理时间内获得高精度的P值估计。

常见问题解答 (FAQ)

Q1: 什么时候应该使用 Fisher’s精确检验 而不是卡方检验?

当样本量较小(通常总样本数n<40)或列联表中任何单元格的期望频数小于5(甚至小于1)时,卡方检验的近似性较差,此时应优先使用Fisher’s精确检验。它是基于超几何分布的精确计算方法,不依赖大样本渐近理论。

Q2: Fisher’s精确检验 的P值是如何计算的?

Fisher’s精确检验在固定边际总和的前提下,计算观察到当前数据以及更极端情况(即差异更大)的概率总和。它利用超几何分布公式,列出所有可能的列联表组合,计算每种组合发生的概率,然后将小于或等于当前观测概率的所有情况的概率相加,得到双侧或单侧P值。

Q3: Fisher’s精确检验 能否用于大于2x2的列联表?

可以。虽然最初是为2x2表设计的,但该方法已扩展至RxC(R行C列)列联表。对于较大的表格,由于可能的排列组合数量呈阶乘级增长,计算量巨大,通常需要使用蒙特卡洛模拟(Monte Carlo simulation)来近似计算P值,或者使用精确检验的渐近近似方法。

Q4: 在SPSS中如何进行 Fisher’s精确检验?

在SPSS中,进入'分析' -> '描述统计' -> '交叉表'。将变量放入行和列后,点击'统计'按钮,勾选'精确'选项(选择'精确'、'蒙特卡洛'或'双侧精确')。点击确定运行后,在输出结果的'精确检验'表中即可看到Fisher’s精确检验的双侧和单侧P值。

Q5: Fisher’s精确检验 和 Barnard 检验有什么区别?

Barnard 检验也是用于2x2表的精确检验,但它不固定两个边际总和,只固定总样本量。理论上,Barnard 检验的效能略高于 Fisher's 精确检验,但计算更为复杂,且在双侧检验中存在一些争议。Fisher's 精确检验因其计算简便和广泛接受度,成为更常用的选择。

总结

Fisher’s精确检验是统计学工具箱中不可或缺的工具,尤其在小样本和稀疏数据领域具有不可替代的价值。它通过提供精确的概率估计,帮助研究者避免卡方检验在小样本下的偏差,确保统计推断的可靠性。

在实际应用中,建议首先检查数据的期望频数,若不符合卡方检验假设,应立即转向Fisher’s精确检验。结合优势比(OR)和置信区间,可以更全面地解读数据背后的统计意义。随着计算能力的提升,精确检验的应用范围也在不断扩大,成为现代数据分析中的重要组成部分。

希望本篇指南能帮助您深入理解并正确应用 Fisher’s精确检验。

✨ 更多精彩
🏷️ 标签:fisher精确检验小样本数据生物统计学分类数据显著性测试
研
墨卷研习录
墨卷研习录
CopyRight@educfa.com.cn