Хи-квадрат numpy.polyfit (numpy)

Может ли кто-нибудь объяснить, как получить Chi ^ 2/doF с помощью numpy.polyfit?


person casper    schedule 29.03.2011    source источник


Ответы (2)


Предположим, у вас есть некоторые точки данных

x = numpy.array([0.0, 1.0, 2.0, 3.0])
y = numpy.array([3.6, 1.3, 0.2, 0.9])

Чтобы подогнать параболу к этим точкам, используйте numpy.polyfit():

p = numpy.polyfit(x, y, 2)

Чтобы получить значение хи-квадрат для этой подгонки, оцените полином в значениях x ваших точек данных, вычтите значения y, возведите в квадрат и суммируйте:

chi_squared = numpy.sum((numpy.polyval(p, x) - y) ** 2)

Вы можете разделить это число на количество степеней свободы, если хотите.

person Sven Marnach    schedule 30.03.2011
comment
Большое спасибо, Свен Марнах. Ваш ответ полностью решает мой вопрос. - person casper; 30.03.2011
comment
@casper: Основываясь на вашем комментарии выше, примите этот ответ :) - person SabreWolfy; 17.02.2012
comment
Для справки: здесь предполагается унитарная неопределенность. Формула для chi_square, имеющего массив s с неопределенностью меры: chi_squared = numpy.sum(((numpy.polyval(p, x) - y)/s) ** 2) - person Daniele; 11.06.2015
comment
без дополнительного взвешивания, разве это не просто sum of squared error (не хи-квадрат)? или я ошибаюсь? - person Trevor Boyd Smith; 21.11.2019
comment
@TrevorBoydSmith Это значение χ² при условии, что все ошибки измерения одинаковы. Если у вас просто есть набор точек и вы ищете полином, который лучше всего приближает эти точки, вы обычно используете это. Если, с другой стороны, ваши данные получены из некоторых измерений, то у вас также будут значения ошибок, связанные с точками данных, и вы должны соответствующим образом масштабировать члены в сумме. - person Sven Marnach; 22.11.2019
comment
Я понимаю всю вещь взвешивания. мой вопрос был больше о понимании what is chi squared против what is sum of squared errors. - person Trevor Boyd Smith; 22.11.2019
comment
@TrevorBoydSmith Если для всех ошибок установлено значение один, то они оба одинаковы. :) - person Sven Marnach; 22.11.2019

polyfit Numpy, по крайней мере, начиная с версии 1.3, поддерживает параметр full. Если установлено значение True, polyfit вернет еще несколько значений, включая квадрат остатков. Это хи-квадрат (ненормированный по степеням свободы).

Итак, простой пример будет

p, residuals, _, _, _ = numpy.polyfit(x, y, 2, full=True)
chisq_dof = residuals / (len(x) - 3)

Я сам не пробовал это с весами, но я предполагаю, что polyfit делает здесь правильную вещь (начиная с numpy 1.7, polyfit принимает параметр w для предоставления весов для подгонки).

person Community    schedule 18.04.2016