如何改善此线性拟合考虑误差线以使其更健壮?

问题描述

我正在尝试对以下定义的一组度量进行线性拟合:

def leastsq_lin_fit(x,y,yerr=[]):
    fit_func = lambda p,x: p[0] * x  + p[1] 
    model=scipy.odr.Model(fit_func)
    if len(yerr)>0: data = scipy.odr.RealData(x,sy=yerr)
    else: data = scipy.odr.RealData(x,y)
    odr = scipy.odr.ODR(data,model,beta0=[0.,1.])
    out = odr.run()

    a=out.beta[0]
    aErr=out.sd_beta[0]
    b=out.beta[1]
    bErr=out.sd_beta[1]

但是我注意到当我将yerr解析为拟合例程时,我得到一个奇怪的结果,如下所示:

enter image description here

当我在不考虑y值的误差线的情况下进行拟合时,得到:

enter image description here

我并不是说第一个结果是错误的,我怀疑这个结果是由于以下事实导致的:我的数据中的误差线可能太小而无法容纳有意义的行(特别是对于较小的X值)。我想了解的是,因为这是我必须处理的数据,因此我如何才能提高这种拟合度(考虑误差线)以使其更加健壮。您如何用线性函数拟合这样的分布?

Here,您可以下载包含我用来绘制这些图的数据的文件,并且可以通过以下方式加载该文件

with open('test.np','rb') as f:
    xdata = np.load(f)
    ydata = np.load(f)
    yerr = np.load(f)

(如果有更好的方法上传文件,请告诉我)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)