当前位置:首页 > Python > 正文

Python卡方检验完全教程:原理、应用与代码实现

Python卡方检验完全教程

什么是卡方检验?

卡方检验(Chi-square test)是一种常用的非参数统计方法,用于检验两个分类变量之间是否存在显著关联。它通过比较实际观测频数与期望频数之间的差异来判断变量间的独立性。

卡方检验的基本公式:

χ² = Σ[(观测值 - 期望值)² / 期望值]

卡方检验的应用场景

  • 检验两个分类变量是否独立(独立性检验)
  • 检验单个分类变量的分布是否符合预期(拟合优度检验)
  • 分析问卷调查数据中的关联关系
  • 医学研究中检验治疗效果与疾病的关系
  • 市场研究中分析用户偏好与人口统计变量的关系

使用Python实现卡方检验

Python的scipy.stats模块提供了便捷的卡方检验实现:

基本步骤:

  1. 导入必要的库:scipy.stats
  2. 准备观测数据(列联表)
  3. 调用chi2_contingency()函数
  4. 解读结果(卡方值、p值、自由度、期望频数)

示例1:检验两个分类变量的独立性

假设我们调查了200人,研究性别与阅读偏好之间的关系:


# 导入必要的库
from scipy.stats import chi2_contingency

# 创建列联表(性别 vs 阅读偏好)
# 行:男性、女性
# 列:小说、非小说
observed = [[40, 60],   # 男性:40人喜欢小说,60人喜欢非小说
            [50, 50]]   # 女性:50人喜欢小说,50人喜欢非小说

# 执行卡方检验
chi2, p, dof, expected = chi2_contingency(observed)

# 输出结果
print(f"卡方值: {chi2:.4f}")
print(f"P值: {p:.4f}")
print(f"自由度: {dof}")
print("期望频数表:")
print(expected)

            

结果解读:

卡方值:3.6458

P值:0.0562

自由度:1

期望频数:

[[45. 55.]

[45. 55.]]

结论:在0.05显著性水平下(p=0.0562>0.05),没有充分证据表明性别与阅读偏好之间存在显著关联。

卡方检验的假设条件

  • 数据来自随机样本
  • 观测值相互独立
  • 列联表中每个单元格的期望频数应大于5(如果小于5,考虑使用Fisher精确检验)
  • 变量是分类变量(名义或有序)

卡方检验的注意事项

  • 当样本量较小时,卡方检验可能不准确
  • 卡方检验只能检测变量间是否存在关联,不能衡量关联的强度
  • 对于2×2列联表,建议使用Yates连续性校正
  • 如果期望频数过小(小于5),考虑使用Fisher精确检验

高级应用:卡方拟合优度检验

卡方检验也可用于检验单个分类变量的分布是否符合特定比例:


from scipy.stats import chisquare

# 观测频数:不同血型的人数
observed = [25, 30, 20, 25]  # A型, B型, AB型, O型

# 期望比例(假设人群血型均匀分布)
expected = [25, 25, 25, 25]  # 每种血型期望25人

# 执行卡方拟合优度检验
chi2, p = chisquare(f_obs=observed, f_exp=expected)

print(f"卡方值: {chi2:.4f}")
print(f"P值: {p:.4f}")

            

总结

卡方检验是分析分类变量间关系的强大工具,Python的scipy.stats模块提供了简单高效的实现方法。

关键步骤:准备列联表 → 执行chi2_contingency → 解读p值和卡方值 → 根据结果得出结论

掌握卡方检验将帮助你在数据分析、市场研究和科学研究中做出更加准确的统计推断。

发表评论