如何找到双峰高斯拟合的卡方值?

问题描述

我在下面的代码下写

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)    

我得到了这个情节:

I got this plot

现在,我想通过计算卡方值来检验拟合优度,我如何找出卡方值?

解决方法

您可以利用numpys数组的操作功能进行操作

import numpy as np

diff = np.array(bimodal(x,*params)) - np.array(y)
chi2 = np.sum( diff**2 / np.array(sigma)**2 )

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...