如何让 scipy.stats.chisquare 正常运行

How to get scipy.stats.chisquare to function properly

我有 2 个相同的输入文件 size/shape,但是它们包含的数据具有不同的分辨率,我希望对它们执行卡方检验。

输入文件长 500 行,包含 4 列,用空格分隔,我正在尝试将每个输入文件的第二列与另一列进行比较。

我的代码如下:

# Import statements

C = pl.loadtxt("input_1.txt")
D = pl.loadtxt("input_2.txt")

col2_C = C[:,1]
col2_D = D[:,1]

f_obs = np.array([col2_C])
f_exp = np.array([col2_D])

chisquare(f_obs, f_exp)

这给我一个错误提示:

ValueError: df <= 0

我什至不明白它在这里抱怨什么。

我在脚本中尝试了其他几种语法,每一种都导致了各种错误:

找到这个 here

chisquare = f_obs=[col2_C], f_exp=[col2_D])

TypeError: chisquare() takes at least one positional argument

然后我试了

chisquare = f_obs(col2_C), F_exp=[col2_D)

NameError: name 'f_obs' is not defined

我还尝试了其他几种语法调整,但无济于事。如果有人能帮我弄到这个运行,我将不胜感激。

提前致谢。

首先,请确保您正在导入 chisquare from scipy.stats. Numpy has the function numpy.random.chisquare,但这不会进行统计测试。它根据卡方概率分布生成样本。

所以请务必使用:

from scipy.stats import chisquare

还有第二个问题。 由于loadtxtcol2_Ccol2_D返回的二维数组的切片是一维numpy数组,所以不需要使用,例如np.array([col2_C])当您将这些传递给 chisquare 时。直接用col2_Ccol2_D即可:

chisquare(col2_C, col2_D)

像您一样用 np.array 包裹数组是导致问题的原因。 chisquare 接受多维数组和一个 axis 参数。当您执行 f_exp = np.array([col2_C])(带有额外的方括号)时,f_exp 实际上是一个二维数组,形状为 (1, 500)。同样,f_obs 的形状为 (1, 500)。 chisquare 的默认 axis 参数为 0。因此,当您调用 chisquare(f_obs, f_exp) 时,您要求 chisquare 执行 500 个卡方检验,每个检验都有一个观察值和期望值。