You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中多变量卡方检验p值批量计算方法咨询

自动化批量计算分类变量卡方检验p值的方案

实现思路

利用scipy.stats的chi2_contingency函数,通过循环遍历所有目标变量(性别、职业等)和待检验分类变量,自动生成列联表并计算卡方检验的p值,最终将结果整理为结构化表格方便查看。

代码实现

  1. 导入依赖库
import pandas as pd
from scipy.stats import chi2_contingency
  1. 定义批量检验函数
def batch_chi2_test(df, target_cols):
    # 筛选所有非目标列的分类变量(默认识别object类型列,可根据实际调整)
    cat_vars = [col for col in df.columns if col not in target_cols and df[col].dtype == 'object']
    results = []
    
    # 遍历每个目标变量与分类变量的组合
    for target in target_cols:
        for var in cat_vars:
            # 构建列联表
            crosstab = pd.crosstab(df[var], df[target])
            # 执行卡方检验
            chi2, p_val, dof, expected = chi2_contingency(crosstab)
            # 记录结果(保留4位小数便于阅读)
            results.append({
                '目标变量': target,
                '分类变量': var,
                '卡方值': round(chi2, 4),
                'p值': round(p_val, 4),
                '自由度': dof
            })
    
    # 转为DataFrame返回,支持导出或直接查看
    return pd.DataFrame(results)
  1. 调用示例
    假设你的数据集名为data,目标列是['性别', '职业', '教育程度', '居住地'],直接执行以下代码:
# 定义需要检验的目标列
target_columns = ['性别', '职业', '教育程度', '居住地']
# 执行批量卡方检验
chi2_results = batch_chi2_test(data, target_columns)

# 可选:将结果导出为CSV文件
chi2_results.to_csv('卡方检验结果.csv', index=False, encoding='utf-8-sig')

注意事项

  • 如果你的分类变量是数值编码类型(比如用数字代表分类),需先转为分类类型:df[var] = df[var].astype('category'),或修改函数中cat_vars的筛选逻辑
  • 卡方检验的前提是列联表中多数单元格的期望频数≥5,若大量单元格期望频数过小,结果可靠性会下降,此时可考虑合并类别,或改用scipy.stats.fisher_exact进行Fisher精确检验
  • 当p值小于0.05(或你设定的显著性水平)时,说明对应分类变量与目标变量存在显著关联

内容的提问来源于stack exchange,提问作者marwan albadawi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:16:07