python - 卡方分析 - 预期频率在 (0,) 处有一个零元素。错误

标签 python machine-learning scipy statistics chi-squared

我正在处理数据,试图查看两个变量之间的关联,并在 Python 的 Scipy 包中使用卡方分析。

这是两个变量的交叉表结果:

pd.crosstab(data['loan_default'],data['id_proofs'])

结果:

   id_proofs    2   3   4   5
  loan_default              
    0   167035  15232   273 3
    1   46354   4202    54  1

如果我对相同数据应用卡方,我会看到一条错误:ValueError:内部计算的预期频率表在 (0,) 处有一个零元素。

代码:

from scipy.stats import chi2_contingency
stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
print(stat,p,dof,expec)

错误报告:

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-154-63c6f49aec48> in <module>()
      1 from scipy.stats import chi2_contingency
----> 2 stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
      3 print(stat,p,dof,expec)

~/anaconda3/lib/python3.6/site-packages/scipy/stats/contingency.py in chi2_contingency(observed, correction, lambda_)
    251         zeropos = list(zip(*np.where(expected == 0)))[0]
    252         raise ValueError("The internally computed table of expected "
--> 253                          "frequencies has a zero element at %s." % (zeropos,))
    254 
    255     # The degrees of freedom

ValueError: The internally computed table of expected frequencies has a zero element at (0,).

问题的原因可能是什么?我该如何克服这个问题?

最佳答案

再看一下 chi2_contingency 的文档字符串。第一个参数,observed,必须是列联表。您必须计算列联表(就像使用 pd.crosstab(data['loan_default'],data['id_proofs']) 所做的那样)并将其传递给 chi2_contingency

关于python - 卡方分析 - 预期频率在 (0,) 处有一个零元素。错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689261/

相关文章:

math - 多元线性回归本质上如何是线性的?

python - 多元 LSTM 股票预测

python - python 中的 3D 外推(基本上,scipy.griddata 扩展为外推)

python - 减去 ndarray 的最后一个轴

java - 实现可导航图的优雅方式?

machine-learning - 如何在机器学习中对不平衡数据进行建模?

python - Scipy optimize.curve_fit 有时不会收敛

python - 从 scipy.interpolate.splrep 获取三次样条的系数

python - 编写一个程序,在Python中显示 "abcdef"的所有字谜

python - 每 5 m 运行并刷新一个 jupyter 笔记本