ARTICLE
Fisher's exact test
Fisher's Exact Test(费希尔精确检验) Fisher's Exact Test(费希尔精确检验)是一种用于分析列联表(Contingency Table)中两个分类变量(Categorical Variables)之间关联性的统计显著性检验方法。与卡方检验(Chi-squared Test)不同,Fisher's Exact Test不依赖
Fisher's Exact Test(费希尔精确检验)
Fisher's Exact Test(费希尔精确检验)是一种用于分析列联表(Contingency Table)中两个分类变量(Categorical Variables)之间关联性的统计显著性检验方法。与卡方检验(Chi-squared Test)不同,Fisher's Exact Test不依赖于大样本近似,而是通过直接计算超几何分布(Hypergeometric Distribution)的精确概率值来判断变量的独立性。该方法由英国统计学家与遗传学家Ronald Fisher于1922年在其著作《Statistical Methods for Research Workers》中提出,最初应用于遗传学领域的实验数据分析。
基本概念与适用条件
Fisher's Exact Test最经典的应用场景是2×2列联表。在2×2列联表中,两个分类变量各有两个水平(即每个变量可以取两种可能的值),数据被汇总为一个2行2列的表格。该检验的核心零假设()是:行变量与列变量之间相互独立,即两个分类变量不存在关联。
由于Fisher's Exact Test计算的是精确概率,它特别适用于以下情形:当样本量较小,或列联表中某些单元格的期望频数(Expected Frequency)过低时,卡方检验的近似效果会变差,此时Fisher's Exact Test是最佳选择。具体而言,以下条件通常建议使用Fisher's Exact Test而非卡方检验:
- 总样本量小于20;
- 任何单元格的期望频数小于5;
- 表格中存在零频数单元格。
需要注意的是,Fisher's Exact Test的计算量较大,对于大样本或行列数较多的表格,计算精确概率可能需要大量的计算资源。在这种情况下,可以使用该检验的近似算法或直接使用卡方检验。
数学原理:超几何分布
Fisher's Exact Test的数学基础是超几何分布。考虑一个典型的2×2列联表,其一般形式如下:
| | 成功 (Success) | 失败 (Failure) | 行合计 | |-----------|:------------:|:------------:|:----:| | 处理组 (Treatment) | | | | | 对照组 (Control) | | | | | 列合计 | | | |
其中 为总样本量。在行合计和列合计均保持不变的条件下,单元格 的取值服从超几何分布。具体而言,在零假设(行变量与列变量独立)成立的条件下,观察到特定表格的概率为:
这个公式计算的是,在行合计和列合计已被固定的情况下,随机获得当前这种单元格频数分布的概率。
双侧检验与单侧检验
Fisher's Exact Test可以执行单侧检验(One-tailed Test)和双侧检验(Two-tailed Test)。
单侧检验用于检验某一方向上的关联性。例如,检验处理组是否更可能出现成功的结果。单侧p值的计算方法是:将零假设下所有与观测表格同方向且概率相等或更小的表格的概率相加。
双侧检验用于检验两个变量之间是否存在任何方向的关联,而不关注方向本身。双侧p值的计算较为复杂,常见的方法包括:
- 直接法:将所有概率小于等于观测表格概率的表格的概率相加。
- 加倍法:将单侧p值乘以2,这种方法虽然简单,但有时会过于保守。
- 中值校正法:将两侧尾部概率相加,但分别取各自方向上的尾部。
在大多数统计软件中,当要求进行Fisher's Exact Test时,默认输出的是双侧检验的p值。
计算示例
下面通过一个简单的例子来说明Fisher's Exact Test的计算过程。假设某研究者想研究一种新型药物对某种疾病的治疗效果。实验结果如下:
| | 有效 | 无效 | 合计 | |-----------|:---:|:---:|:--:| | 药物组 | 3 | 1 | 4 | | 安慰剂组 | 1 | 3 | 4 | | 合计 | 4 | 4 | 8 |
总样本量仅为8,且期望频数较小,因此适合使用Fisher's Exact Test。
固定行合计和列合计后,单元格 (药物组有效人数)可以取值0, 1, 2, 3, 4。观测到的值为3。我们需要计算在零假设下,获得与观测表格一样极端或更极端结果的概率。
首先,计算观测表格()的概率:
对于单侧检验(检验药物组是否更有效),需要将 和 的概率相加。 的表格概率为:
因此单侧p值 = 。在显著性水平 下,该p值大于0.05,因此不能拒绝零假设,即没有足够的统计证据表明药物组比安慰剂组更有效。
与卡方检验的比较
Fisher's Exact Test和卡方检验都用于分析分类变量间的关联,但两者存在重要区别:
- 近似性质:卡方检验的检验统计量近似服从卡方分布,因此是一种近似检验;而Fisher's Exact Test计算的是精确概率,是一种精确检验。
- 适用范围:卡方检验适用于大样本情况;Fisher's Exact Test适用于小样本情况。当样本量较大时,两者的结果趋近一致。
- 计算复杂度:卡方检验计算简单,适用于任意行列数的列联表;Fisher's Exact Test的计算量随样本量和表格大小的增加而呈指数增长。
- 保守性:Fisher's Exact Test通常被认为比卡方检验略为保守,即其实际显著性水平可能略低于名义显著性水平。
局限性与注意事项
尽管Fisher's Exact Test具有精确性的优势,但在实际应用中仍需注意以下问题:
- 条件性推断:该检验的条件是行合计和列合计都固定不变。在许多实际的实验设计中,只有行合计或列合计是固定的,同时固定两者的情况并不常见。这可能导致检验结果的外推性受到一定限制。
- 保守性问题:由于该检验基于离散分布,其实际显著性水平通常小于名义显著性水平(如0.05)。这意味着检验可能倾向于低估效应,即真实的Type I错误率低于预设值。
- 计算复杂度:当样本量较大或表格维度较高时,计算精确概率需要枚举大量可能的表格组合,计算量呈阶乘级增长。尽管现代计算机和算法(如网络算法)已经大大提高了计算效率,但对于非常大的数据集,仍建议使用卡方检验或其他近似方法。
- 结果解读:p值大于显著性水平仅表示没有足够的证据拒绝零假设,而不能直接证明两个变量独立。研究者应结合效应量(如比值比Odds Ratio)和置信区间来全面评估变量间的关系。
在统计软件中的应用
在现代统计软件中,Fisher's Exact Test得到了广泛支持:
- R语言:使用 \texttt{fisher.test()} 函数,默认执行双侧检验,支持任意 的列联表。
- Python (SciPy):使用 \texttt{scipy.stats.fisher\_exact()} 函数,目前仅支持2×2列联表。
- SPSS:在交叉表分析中,当任一单元格期望频数小于5时,自动输出Fisher's Exact Test结果。
- SAS:使用 \texttt{PROC FREQ} 中的 \texttt{FISHER} 选项。
- Stata:使用 \texttt{tabulate} 命令后加 \texttt{, exact} 选项。
扩展与推广
原始的Fisher's Exact Test仅适用于2×2列联表,但现代统计学将其推广到了更一般的 列联表(其中 为行数, 为列数)。这个推广版本通常称为Fisher-Freeman-Halton精确检验,其原理与原检验相同,但计算复杂度更高。
此外,Fisher's Exact Test的思想也被应用于其他领域,如生物信息学中的基因集富集分析、自然语言处理中的搭配提取等。在这些领域中,研究者需要从小样本的离散数据中判断两个事件之间的关联是否具有统计显著性,Fisher's Exact Test提供了一种稳健而精确的方法。