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

卡方检验出现NaN值如何解决?用scipy获取有效p值

解决scipy.stats.chisquare返回NaN p值的问题

问题背景

已移除数据集中全部NaN值,尝试用卡方检验判断Scheduled Delivery Date和Product Group两个特征是否独立,但返回的p值全为NaN。

代码与结果

运行代码

t1=pd.crosstab(df['Scheduled Delivery Date'],df['Product Group']).values
stats.chisquare(f_obs=t1,ddof=7084)

返回结果

Power_divergenceResult(statistic=array([ 3306.5       ,  2394.36363636, 13689.2797075 ,  4967.26974144,        1767.        ]), pvalue=array([nan, nan, nan, nan, nan]))

原因分析与解决方案

核心问题

你用错了函数:scipy.stats.chisquare是拟合优度检验工具,默认和均匀分布对比,或需手动传入期望分布f_exp。但判断两个特征是否独立,应该用独立性卡方检验,即scipy.stats.chi2_contingency。

另外,手动设置ddof=7084完全不合理——卡方检验的自由度有固定计算规则,手动设置过大自由度会导致p值计算超出分布范围,直接返回NaN。

正确代码

from scipy.stats import chi2_contingency

# 生成列联表
contingency_table = pd.crosstab(df['Scheduled Delivery Date'], df['Product Group'])
# 执行独立性卡方检验
chi2, p_value, dof, expected = chi2_contingency(contingency_table)

print(f"卡方统计量: {chi2}")
print(f"p值: {p_value}")
print(f"自由度: {dof}")
print("期望频数表:")
print(expected)

结果解释

  • chi2_contingency会自动计算正确的自由度、期望频数,输出的p_value是判断特征独立性的关键:若p值小于显著性水平(如0.05),则拒绝原假设,认为两个特征不独立;反之则认为特征独立。

内容的提问来源于stack exchange,提问作者shiva ashrith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:52:04