Scipy曲线拟合中拟合参数的计算误差

时间:2018-09-30 19:08:49

标签: python-3.x numpy scipy

使用“ scipy.optimize.curve_fit”,我们可以确定使用x和y进行曲线拟合的拟合参数,

popt, pcov = curve_fit(func, xdata, ydata)

在此功能的文档中,他们指出:要使用参数计算一个标准偏差,请使用

perr = np.sqrt(np.diag(pcov))

这里是我正在阅读的文档的链接。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

如果我想对参数误差进行简单的计算而不是简单的1个标准偏差,该怎么办?特别是如果我要寻找2个标准差(参数的置信区间为95%),该怎么办?

需要明确的是,我不是在寻找10行以上的解决方案。我已经知道如何以线性方式“计算”这些错误:

def get_slope_params(data1, data2):
    x_mean = mean(data1)
    y_mean = mean(data2)
    N = len(data1)

    sum_xy = 0
    for (x, y) in zip(data1, data2):
        sum_xy = sum_xy + x*y

     sum_xsq = 0
    for x in data1:
        sum_xsq = sum_xsq + x*x

    b = (sum_xy-N*x_mean*y_mean)/(sum_xsq-N*x_mean**2)
    a = y_mean - b*x_mean

     return (a,b)

# 95%
def get_slope_params_uncertainties(data1, data2):
    N = len(data1)
    a, b = get_slope_params(data1, data2)
    y_approx = a+b*data1

    s_eps = 0
    for (y, y_app) in zip(data2, y_approx):
        s_eps = s_eps + (y-y_app)**2
    s_eps = np.sqrt(s_eps/(N-2))

    s_x = np.sqrt(cov(data1, data1))

    delta_b = (1/np.sqrt(N-1))*(s_eps/s_x)*sp.stats.t.ppf(1-0.05/2, N-2)
    delta_a = mean(data1)*delta_b

    return delta_a, delta_b

我想要的是一个完全由scipy实现的功能。

0 个答案:

没有答案