Ковариационные числа из якобианской матрицы в scipy.optimize.least_squares - PullRequest
1 голос
/ 27 апреля 2020

Я хотел бы подогнать кривую логистики c к некоторым данным. Я использовал общее уравнение кривой logisti c, чтобы соответствовать моим данным. Найдите его здесь .

def generate_data(t, A, K, C, Q, B, v):

    y = A+ (K-A)*((C+Q*np.exp(-B*t))**(1/v))

    return y

Здесь A, K, C, Q, B и v - переменные, которые я хотел найти.

Я использовал * Функция 1008 * для получения значений для создания моей кривой.

Это была функция аргумента.

def fun(x, t, y):
    return x[0] + (x[1]-x[0])*((x[2]+x[3]*np.exp(-x[4]*t))**(1/x[5])) - y

И вот как я назвал его действительной функцией оптимизации.

res_lsq= least_squares(fun, x0, args=(x_coord, y_coord))

Визуально кривая отлично вписывается в данные. enter image description here

Затем я рассчитал ковариационную матрицу этим методом.

J = res_lsq.jac
cov = np.linalg.inv(J.T.dot(J))

А затем дисперсию, используя этот метод.

var = np.sqrt(np.diagonal(cov))

Проблема в том, что для них были значения для моих параметров.

Parameters= [ 1.94624122  5.66832958  5.21005677 -4.87025481  0.02520876  0.15057123 ]

И это были мои значения дисперсии.

Variance= [3.38436210e-01 3.94262000e+03 8.30968350e+02 7.76773161e+02
 6.44604446e-05 6.49474460e-04]

Одно значение равно 3942, для параметра - 5.66. Что эти значения означают? Эти данные действительно показывают, насколько хорошо кривая соответствует данным? Как мне получить такое количество, как аналог p-значения et c.

...