Как правильно получать ошибки в lmfit

Здравствуйте, я пытаюсь узнать, как правильно использовать lmfit, и я думаю, что неправильно рассчитываю ошибки соответствия. У меня есть данные с ошибками по y, и когда я подхожу, я называю это (я пробовал простую линейную подгонку):

weight = 1/err
out = line_fit.fit(y, pars, x=x, weights = weight)

Я предположил, что это позволит вычислить хи-квадрат и использовать ошибки в знаменателе. Однако, похоже, это не работает должным образом. Подгонка выглядит хорошо, и я получаю разумное значение для ошибок, но если я намеренно увеличиваю количество ошибок, например err = 50*err, я получаю точно некоторые параметры соответствия. Но очевидно, что ошибки по параметрам теперь должны быть намного больше (по формуле распространения ошибки), но они точно такие же. Что я делаю неправильно?

Второй вопрос: если у меня есть ошибки по оси x, как я могу включить их в подбор? В вызове функции есть только один весовой параметр.

Спасибо!


person BillKet    schedule 12.12.2019    source источник


Ответы (1)


Это преднамеренная особенность lmfit.Modellmfit в целом), чтобы изменить масштаб неопределенностей так, чтобы они отражали "хорошее соответствие". Вместо неопределенностей параметров, которые увеличивают хи-квадрат на 1, он сообщает о неопределенностях параметров, которые увеличивают хи-квадрат за счет уменьшения хи-квадрат. Это означает, что изменение шкалы неопределенностей или подходящих весов изменит значение статистики соответствия, но не сообщаемые неопределенности значений параметров.

Если вы хотите, чтобы неопределенности параметров были такими, которые увеличивают хи-квадрат на 1, используйте Model.fit(ydata, params, ..., scale_covar=False)

Неопределенности в x или любых независимых данных сложно включить любым автоматическим способом. Подгонка фактически не использует значения независимых данных, кроме как для информирования функции модели о том, как вычислить модель (значения y) для сравнения с предоставленными данными. Вы могли бы рассмотреть

  • увеличивать неопределенность каждого y значения на основе изменения этого y значения, которое могло бы произойти в ответ на неопределенность в x, но нет автоматического способа сделать это с помощью структуры модели - вам нужно будет сделать это в своей модели функция.

  • изучите scipy.ODR, который может обрабатывать неопределенности как в зависимых, так и в независимых данных. Это не поддерживается в lmfit, но может оказаться полезным.

person M Newville    schedule 12.12.2019
comment
Большое спасибо за ваш ответ, это действительно полезно. Я новичок в статистике, поэтому это может быть глупый вопрос, но когда мне следует использовать scale_covar = False? Другими словами, какие значения я должен указать для своих ошибок? Я прочитал несколько экспериментальных статей и действительно не видел упоминаний такого рода, так есть ли общепринятый способ? - person BillKet; 12.12.2019
comment
используйте scale_covar=False, когда вы больше уверены в правильности размера планок погрешностей, чем в том, что посадка хорошая. То есть, можно использовать уменьшенный хи-квадрат, чтобы оценить, является ли соответствие хорошим (оно должно быть ~ 1 для хорошего соответствия), но это зависит от масштаба неопределенностей. Использование scale_covar=True фактически означает корректировку неопределенностей данных так, чтобы уменьшить хи-квадрат равным 1, и сообщать о неопределенностях этих параметров. То есть, если вы беспокоитесь о том, чтобы сообщить о неопределенности параметров, вы, вероятно, считаете, что соответствие хорошее. - person M Newville; 13.12.2019
comment
Еще раз спасибо! Теперь я понимаю, что каждый из них означает. Я до сих пор не уверен на 100%, что смогу на практике понять, какой из них использовать. Например, в моем случае мне нужно провести прямую линию к некоторым данным подсчета. Это ошибки Пуассона (так что я почти уверен в них), и посадка выглядит хорошо. Если я использую по умолчанию scale_covar = True, я получаю ошибку (25 +/- 1) в два раза больше, чем когда я использую scale_covar = False (25 +/- 0,5). Основываясь на вашем объяснении, учитывая, что я уверен в своей пригодности, я должен использовать тот, у которого +/- 1. Будет ли это правильным? - person BillKet; 14.12.2019
comment
Еще одна вещь, в научных публикациях, я не думаю, что когда-либо видел, чтобы кто-нибудь указывал, какой из этих двух способов вычисления ошибок при подгонке они используют. Основываясь на том, что вы беспокоитесь о том, чтобы сообщить о неопределенности параметров, вы, вероятно, считаете, что соответствие хорошее. Я предполагаю, что они используют что-то эквивалентное scale_covar = True. Имеет ли это смысл? Спасибо! - person BillKet; 14.12.2019
comment
@BillKet Какой подход вы выберете, в основном зависит от вас. Конечно, вы хотите быть последовательными. Подход scale_covar довольно распространен в некоторых дисциплинах, но вы можете узнать об этом у других специалистов в вашей области. FWIW Я думаю, что большинство людей действительно верят только первой значащей цифре (или даже порядку величины) шкалы ошибок. Если вы скажете 25 +/- 1, я не думаю, что 27 невозможно. Конечно, некоторые области физики высоких энергий гораздо более строги в отношении бюджетов ошибок, но если вы спрашиваете о Stackoverflow, это, вероятно, к вам не относится;) - person M Newville; 14.12.2019