Используя "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, уже реализована.