首页 > 解决方案 > 来自 lmfit 的卡方值

问题描述

我一直在尝试对一组图像进行像素到像素的拟合,即我在不同的图像中有不同波长的数据,并且我试图分别为每个像素拟合一个函数。我已经使用 lmfit 进行了拟合,并获得了每个像素的未知参数的值。现在,我想获得每个拟合的卡方值。我知道 lmfit 有一个名为 chisqr 的属性,它可以给我相同的结果,但让我感到困惑的是 lmfit github 网站上的这一行:“请注意,卡方和约简卡方的计算假设返回的残差函数是适当地缩放到数据中的不确定性。为了使这些统计数据有意义,编写要最小化的函数的人必须适当地缩放它们。“我怀疑我从 chisqr 属性获得的值不完全正确,需要进行一些缩放。有人可以解释一下 lmfit 如何计算卡方值以及我需要做什么缩放吗?

这是我的拟合函数的示例

def fcn2fit(params,freq,F,sigma):
    colden=params['colden'].value
    tk=params['tk'].value
    model = greybodyfit(np.array(freq),colden,tk)
    return (model - F)/sigma

Colden 和 tk 是自由参数,freq 是自变量,F 是因变量,sigma 是 F 中的误差。返回 (model-F)/sigma 是缩放残差的正确方法,因此 chisqr 属性给出了正确的卡方值?

标签: pythonchi-squaredlmfit

解决方案


卡方报告的值是拟合残差的平方和。Lmfit 无法判断残差函数是否通过数据的标准误差正确缩放 - 如果您正在使用,则必须在目标函数中完成此缩放,lmfit.minimize或者如果使用,则作为权重传入lmfit.Model


推荐阅读