Fisher确切概率法操作步骤

掌握小样本与稀疏数据下的精确统计推断

什么是Fisher确切概率法?

在统计学研究中,当我们面对的是分类变量(如有效/无效,男性/女性)构成的列联表时,通常使用卡方检验(Chi-square test)来分析变量间的相关性。然而,Fisher确切概率法操作步骤的核心应用场景在于当样本量较小(如总样本量N < 40)或理论频数小于1的格子比例超过20%时,卡方检验的近似性不再成立,此时必须采用基于超几何分布原理的Fisher确切概率法。

1.1 为什么需要它?

传统的卡方检验依赖于大样本理论,当数据稀疏时,其计算出的P值往往偏小,导致假阳性率增加。Fisher确切概率法通过计算在边缘合计固定的情况下,出现当前表格及更极端表格的概率之和,从而得到精确的P值。这种方法不依赖于渐近分布,因此被称为“确切”概率法。

1.2 核心假设

Fisher确切概率法操作步骤详解

理解Fisher确切概率法操作步骤是进行正确数据分析的关键。虽然现代软件可以一键完成计算,但手动理解其逻辑有助于判断结果的合理性。以下是标准的操作逻辑流程:

第一步:构建2×2列联表

将数据整理为标准的四格表形式。例如:

组别 事件发生 事件未发生 合计
实验组 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。

第四步:计算单侧/双侧P值

单侧检验:将所有小于等于 P0 且方向一致(即偏离零假设方向相同)的概率相加。
双侧检验:将所有小于等于 P0 的概率相加(包括两个尾部)。注意,有些软件采用“两倍单侧P值”或“最小双尾概率法”,结果可能略有差异,但通常结论一致。

主流统计软件中的实现

在实际科研工作中,我们很少手动计算阶乘。以下介绍如何在SPSS和R语言中执行Fisher确切概率法操作步骤。

SPSS操作步骤

  1. 录入数据:通常需要将原始数据加权(Weight Cases),或者录入汇总后的频数数据。
  2. 选择菜单:分析(Analyze) → 描述统计(Descriptive Statistics) → 交叉表(Crosstabs)。
  3. 将变量分别放入行和列。
  4. 点击统计(Statistics)按钮,勾选精确(Exact)选项。在弹出的对话框中,选择“精确检验”(Exact test)。
  5. 点击继续,确定。输出结果中查看“精确显著性(双侧)”和“精确显著性(单侧)”。
注意:如果SPSS提示“精确检验需要大量时间”,说明数据组合过多,此时Fisher法计算量巨大,可考虑使用蒙特卡洛模拟法。

R语言代码示例

使用 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

Python (SciPy) 实现

使用 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,所以我们不能拒绝零假设。即在该小样本下,没有足够证据表明新药与副作用发生率之间存在统计学差异。

常见问题解答 (FAQ)

Q1: Fisher确切概率法计算结果中的P值总是比卡方检验大吗?

A: 不一定。但在小样本且存在稀疏单元格时,Fisher法通常比未校正的卡方检验更保守,P值往往较大,从而降低假阳性风险。然而,它比校正卡方检验(Yates)有时会更敏感或更保守,具体取决于数据分布。

Q2: 如果我的样本量很大,应该用Fisher法吗?

A: 不建议。当样本量很大时(如N > 1000),Fisher确切概率法的计算量会随着组合数的增加呈指数级增长,可能导致计算时间过长甚至软件崩溃。此时,卡方检验的近似结果已经非常精确,使用卡方检验更高效。

Q3: SPSS中显示的“精确显著性(双侧)”和“精确显著性(单侧)”我该看哪个?

A: 除非你的研究假设具有明确的方向性(例如,你只关心新药是否比旧药好,而不关心是否更差),否则应选择“双侧”。在大多数医学和社科研究中,默认报告双侧P值。

Q4: Fisher确切概率法可以用于大于2x2的列联表吗?

A: 可以。对于RxC表(R>2或C>2),也有Fisher-Freeman-Halton确切概率法。SPSS和R语言(fisher.test)均支持扩展的列联表分析,但计算复杂度会更高。

✨ 更多精彩
🏷️ 标签:Fisher确切概率法小样本数据四格表分析分类变量卡方检验替代
墨卷研习录
CopyRight@educfa.com.cn