问题描述
我在下面的代码下写
from pylab import *
from scipy.optimize import curve_fit
data=concatenate((normal(1,.2,5000),normal(2,2500)))
y,x,_=hist(data,100,alpha=.3,label='data')
x=(x[1:]+x[:-1])/2 # for len(x)==len(y)
def gauss(x,mu,sigma,A):
return A*exp(-(x-mu)**2/2/sigma**2)
def bimodal(x,mu1,sigma1,A1,mu2,sigma2,A2):
return gauss(x,A1)+gauss(x,A2)
expected=(1,250,2,125)
params,cov=curve_fit(bimodal,y,expected)
sigma=sqrt(diag(cov))
plot(x,bimodal(x,*params),color='red',lw=3,label='model')
legend()
print(params,'\n',sigma)
我得到了这个情节:
现在,我想通过计算卡方值来检验拟合优度,我如何找出卡方值?
解决方法
您可以利用numpys数组的操作功能进行操作
import numpy as np
diff = np.array(bimodal(x,*params)) - np.array(y)
chi2 = np.sum( diff**2 / np.array(sigma)**2 )