Python / Scipy - реализация сигмы optimize.curve_fit в optimize.leastsq

Я подбираю точки данных, используя логистическую модель. Поскольку у меня иногда есть данные с ошибкой ydata, я сначала использовал curve_fit и его аргумент sigma, чтобы включить мои индивидуальные стандартные отклонения в подгонку.

Теперь я переключился на leastsq, потому что мне также нужна была оценка качества подгонки, которую curve_fit не могла предоставить. Все работает хорошо, но теперь я упускаю возможность взвесить наименьшее количество квадратов, как "сигма" с curve_fit.

Есть ли у кого-нибудь пример кода о том, как я могу взвесить наименьшие квадраты также в leastsq?

Спасибо, Дровосек


person Woodpicker    schedule 12.05.2013    source источник


Ответы (3)


Я только что обнаружил, что можно объединить лучшее из обоих миров и получить полный вывод leastsq () также из curve_fit (), используя опцию full_output:

popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)

Это дает мне информацию, которую я могу использовать для расчета всего моего материала Goodness of Fit, и позволяет мне одновременно использовать параметр сигмы curve_fit ...

person Woodpicker    schedule 13.05.2013
comment
как вы можете сделать то же самое для модели с трехмерной поверхностью? - person diffracteD; 14.05.2015

Предполагая, что ваши данные находятся в массивах x, y с yerr, а модель - f(p, x), просто определите минимизируемую функцию ошибок как (y-f(p,x))/yerr.

person ev-br    schedule 13.05.2013

В scipy.optimize.curve_fit говорится :

pcov: 2d массив

Расчетная ковариация popt. Диагонали показывают дисперсию оценки параметра. Чтобы вычислить ошибку одного стандартного отклонения для параметров, используйте perr = np.sqrt (np.diag (pcov)). Как параметр сигма влияет на оценочную ковариацию, зависит от аргумента absolute_sigma, как описано выше.

И раздел о

absolute_sigma: bool, необязательный

Если True, сигма используется в абсолютном смысле, и расчетная ковариация параметра pcov отражает эти абсолютные значения.

Если False, имеют значение только относительные величины значений сигмы. Ковариационная матрица возвращаемых параметров pcov основана на масштабировании сигмы с постоянным коэффициентом. Эта константа задается требованием, чтобы сокращенный chisq для оптимальных параметров popt при использовании масштабированной сигмы равнялся единице. Другими словами, сигма масштабируется, чтобы соответствовать выборочной дисперсии остатков после подбора. Математически pcov (absolute_sigma = False) = pcov (absolute_sigma = True) * chisq (popt) / (M-N)

Итак, вы можете просто оставить для absolute_sigma значение по умолчанию (False), а затем использовать

 perr = np.sqrt(np.diag(pcov))
 fitStdErr0 = perr[0]
 fitStdErr1 = perr[1]
 ...

чтобы получить ошибку стандартного отклонения для каждого параметра соответствия (в виде одномерного массива чисел). Теперь вы можете просто выбрать полезные члены (и объединить их таким образом, чтобы наиболее репрезентативны для ваших данных).

person Casey    schedule 20.04.2019