Вычислить ошибки при подгонке параметров в подгонке Scipy Curve - PullRequest
0 голосов
/ 30 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...