Я использую scipy.optimize.leastsq
для подгонки некоторых данных. Я хотел бы получить некоторые доверительные интервалы по этим оценкам, поэтому я смотрю на вывод cov_x
, но документация очень неясна в отношении того, что это такое и как получить из этого ковариационную матрицу для моих параметров.В Scipy как и почему curve_fit вычисляет ковариацию оценок параметров
Прежде всего, это говорит, что это якобиан, но в notes он также говорит, что «cov_x
является якобиан приближение к Гессу», так что это на самом деле не якобиан но Hessian используя некоторую аппроксимацию от якобиану , Какое из этих утверждений верно?
Во-вторых, это предложение для меня это сбивает с толку:
Эта матрица должна быть умножена на остаточной дисперсии, чтобы получить ковариации оценок параметров - см
curve_fit
.
Я действительно посмотрите на исходный код для curve_fit
, где они делают:
s_sq = (func(popt, *args)**2).sum()/(len(ydata)-len(p0))
pcov = pcov * s_sq
, который соответствует умножению cov_x
на s_sq
, но я не могу найти это уравнение в какой-либо ссылки. Может ли кто-нибудь объяснить, почему это уравнение верно? Моя интуиция говорит мне, что это должно быть наоборот, поскольку cov_x
должен быть производным (якобиан или гессиан), поэтому я думал: cov_x * covariance(parameters) = sum of errors(residuals)
, где sigma(parameters)
- это то, что я хочу.
Как подключить вещь curve_fit делает то, что я вижу, например. wikipedia: http://en.wikipedia.org/wiki/Propagation_of_uncertainty#Non-linear_combinations
Формула для хи-квадрата должна быть умножена на 1.0/errors^2, я думаю? – user3728501
«Кажется, что результат curve_fit фактически не учитывает абсолютный размер ошибок, а учитывает только относительный размер предоставленных сигм». Для этого есть флаг: absolute_sigma. Если он выключен (по умолчанию), тогда 'curve_fit' будет оценивать var (y) на основе ваших данных; в противном случае он будет использовать ваши предоставленные значения 'sigma'. – Rufflewind