假设我有两个数组A1
和A2
:
A1 = [1,2,2,2,3,3,7]
A2 = [0.5,1,1.5,2,7,2,6.9]
假设我还有A1
的错误栏数据:
err_bars = [0.1,0.6,0.9,0.2,0.01,0.8,0.1]
我想看看是否有办法确定A2
中的数据是否与A1
中的数据相符。
考虑到数据中的误差条,有没有办法计算卡方检验,F检验和 p - 值?
到目前为止,我在Python中找不到任何考虑数据误差条的卡方函数。
答案 0 :(得分:1)
试试这个:
# obs -- observed value
# exp -- expected value
def chisqr(obs, exp, error):
chisqr = 0
for i in range(len(obs)):
chisqr = chisqr + ((obs[i]-exp[i])**2)/(error[i]**2)
return chisqr
A1 = [1,2,2,2,3,3,7]
A2 = [0.5,1,1.5,2,7,2,6.9]
err_bars = [0.1,0.6,0.9,0.2,0.01,0.8,0.1]
print chisqr(A1, A2, err_bars)
答案 1 :(得分:0)
如果要处理数字数据,则很可能应该使用numpy
包来执行大多数计算。除了简单的计算之外,它的速度明显更快,并且几乎总是易于阅读(here很好的总结)。切换到numpy
可以将其写为
A1 = np.array([1, 2, 2, 2, 3, 3, 7])
A2 = np.array([0.5, 1, 1.5, 2, 7, 2, 6.9])
err_bars = np.array([0.1, 0.6, 0.9, 0.2, 0.01, 0.8, 0.1])
def chisq(obs, exp, error):
return np.sum((obs - exp) ** 2 / (error ** 2))
print(chisq(A1, A2, err_bars))