使用“ 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实现的功能。