我有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
我还尝试了其他几种语法调整,但没有任何效果。如果有人能帮助我开始运行,我会非常感激。
提前致谢。
答案 0 :(得分:1)
首先,请确保从scipy.stats
导入chisquare
。 Numpy具有函数numpy.random.chisquare
,但是没有进行统计测试。它从卡方概率分布生成样本。
所以一定要使用:
from scipy.stats import chisquare
还有第二个问题。
由loadtxt
,col2_C
和col2_D
返回的二维数组的切片是一维numpy数组,因此不需要使用,例如np.array([col2_C])
当你将这些传递给chisquare
时。只需直接使用col2_C
和col2_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次卡方检验,每次测试都会观察到一次和期望值。