用于测试 MCAR 的分类数据的 Chi2 热图:无法解压不可迭代的 rv_frozen 对象

Chi2 heat map for categorical data to test for MCAR: cannot unpack non-iterable rv_frozen object

我想知道我丢失的数据是否是 MCAR。

我有一个这样的数据集,其中 0 表示数据存在,1 表示数据缺失:

a  b  c  d  e
0  1  0  0  0  
0  0  0  0  0
0  0  0  0  0
0  1  0  0  0
0  0  0  0  0

我想了解 B 列中的数据是否为 ​​MCAR,所以我想在所有列之间制作 chi2 的热图(如果所有 p 值 >0.5,就我而言,数据可能被视为 MCAR明白)。

我写了这个:

import pandas as pd
import numpy as np
from scipy.stats import chi2

df = pd.read_csv('binary_to_check_for_missing_data.txt',header=0,sep='\t')
column_names = df.columns

resultant = pd.DataFrame(data=[(0 for i in range(len(df.columns))) for i in range(len(df.columns))],
                         columns=list(df.columns))
resultant.set_index(pd.Index(list(df.columns)), inplace = True)
for i in list(df.columns):
        for j in list(df.columns):
                if i != j:
                        chi2_val, p_val = chi2(np.array(df[i]).reshape(-1, 1), np.array(df[j]).reshape(-1, 1))
                        resultant.loc[i,j] = p_val
print(resultant)

我收到错误:

追溯(最近调用最后):

  File "chi2_contingency.py", line 16, in <module>
    chi2_val, p_val = chi2(np.array(df[i]).reshape(-1, 1), np.array(df[j]).reshape(-1, 1))
TypeError: cannot unpack non-iterable rv_frozen object

我只是不太明白这个错误。我在想,也许因为数据是类别,它是否告诉我我不打算将数据变成 np.array?

chi2 更改为 chisquare

scipy.stats.chi2 is the SciPy implementation of the chi-squared probability distribution。调用它不会执行 chi-squared test.

函数scipy.stats.chisquare performs the chi-squared test。它 returns 您期望的 chi-squared 统计数据和 p-value。