如何让 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
还有第二个问题。
由于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)。 chisquare
的默认 axis
参数为 0。因此,当您调用 chisquare(f_obs, f_exp)
时,您要求 chisquare
执行 500 个卡方检验,每个检验都有一个观察值和期望值。
我有 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
还有第二个问题。
由于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)。 chisquare
的默认 axis
参数为 0。因此,当您调用 chisquare(f_obs, f_exp)
时,您要求 chisquare
执行 500 个卡方检验,每个检验都有一个观察值和期望值。