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

时间:2015-07-24 06:29:48

标签: python numpy statistics scipy

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

输入文件长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

我还尝试了其他几种语法调整,但没有任何效果。如果有人能帮助我开始运行,我会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,请确保从scipy.stats导入chisquare。 Numpy具有函数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)。 axis的默认chisquare参数为0.因此,当您调用chisquare(f_obs, f_exp)时,您要求chisquare执行500次卡方检验,每次测试都会观察到一次和期望值。