有限サイズの物理システムのコンピューター シミュレーションを行っています。この後、無限大 (熱力学的限界) への外挿を行っています。一部の理論では、データはシステムのサイズに比例してスケーリングする必要があるため、線形回帰を行っています。
私が持っているデータにはノイズがありますが、データ ポイントごとに誤差範囲を推定できます。たとえば、データ ポイントは次のようになります。
x_list = [0.3333333333333333, 0.2886751345948129, 0.25, 0.23570226039551587, 0.22360679774997896, 0.20412414523193154, 0.2, 0.16666666666666666]
y_list = [0.13250359351851854, 0.12098339583333334, 0.12398501145833334, 0.09152715, 0.11167239583333334, 0.10876248333333333, 0.09814170444444444, 0.08560799305555555]
y_err = [0.003306749165349316, 0.003818446389148108, 0.0056036878203831785, 0.0036635292592592595, 0.0037034897788415424, 0.007576672222222223, 0.002981084130692832, 0.0034913019065973983]
Pythonでこれをやろうとしているとしましょう。
私が知っている最初の方法は次のとおりです。
m, c, r_value, p_value, std_err = scipy.stats.linregress(x_list, y_list)
これにより結果のエラーバーが得られることは理解していますが、これは初期データのエラーバーを考慮していません。
私が知っている2番目の方法は次のとおりです。
m, c = numpy.polynomial.polynomial.polyfit(x_list, y_list, 1, w = [1.0 / ty for ty in y_err], full=False)
ここでは、最小二乗近似で使用される重みとして、各ポイントのエラーバーの逆数を使用します。したがって、ポイントがそれほど信頼できない場合、結果に大きな影響を与えることはありません。これは合理的です。
しかし、これらの両方の方法を組み合わせたものを取得する方法がわかりません。
私が本当に欲しいのは、2番目の方法が何をするかです。つまり、すべてのポイントが異なる重みで結果に影響を与える場合に回帰を使用します。しかし同時に、結果がどれほど正確かを知りたい、つまり、結果の係数の誤差範囲を知りたいのです。
これどうやってするの?