10

誰かが numpy.polyfit を使用して Chi^2/doF を取得する方法を説明できますか?

4

2 に答える 2

17

いくつかのデータ ポイントがあるとします。

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)

このフィットのカイ 2 乗値を取得するにxは、データ ポイントの値で多項式を評価し、値を減算しy、2 乗して合計します。

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

必要に応じて、この数を自由度の数で割ることができます。

于 2011-03-30T08:57:29.410 に答える
4

Numpypolyfitは、少なくともリリース 1.3 以降、fullパラメーターをサポートしています。それが に設定されている場合Truepolyfit残差の 2 乗を含む、さらにいくつかの値が返されます。これはカイ二乗です (自由度によって正規化されていません)。

したがって、簡単な例は次のようになります

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

私は重みでこれを自分で試したことはありませんがpolyfit、ここで正しいことをすると思います(numpy 1.7以降、フィットの重みを提供するpolyfitパラメーターを受け入れます)。w

于 2016-04-18T06:59:46.853 に答える