これらのデータポイントのx座標とy座標の両方にエラーのあるデータポイントがあります。したがって、私はpythonのODRツールを使って、最適な傾きとこの傾きの誤差を計算したいと考えています。私は私の実際のデータのためにそれをやってみましたが、良い結果は得られません。直交距離回帰(ODR)の簡単な理解
import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *
def linear_func(B, x):
return B[0]*x+B[1]
x_data=np.array([0.0, 1.0, 2.0, 3.0])
y_data=np.array([0.0, 1.0, 2.0, 3.0])
x_err=np.array([1.0, 1.0, 1.0, 1.0])
y_err=np.array([5.0, 5.0, 5.0, 5.0])
linear=Model(linear_func)
data=RealData(x_data, y_data, sx=x_err, sy=y_err)
odr=ODR(data, linear, beta0=[1.0, 0.0])
out=odr.run()
out.pprint()
pprint()
線が得られる:
Beta: [ 1. 0.]
Beta Std Error: [ 0. 0.]
Beta Covariance: [[ 5.20000039 -7.80000026]
[ -7.80000026 18.1999991 ]]
Residual Variance: 0.0
Inverse Condition #: 0.0315397386692
Reason(s) for Halting:
Sum of squares convergence
resutlingベータ値は、1.0と0.0すべき私はだろう示されている次のようにそのため、私は最初の単純な例でODRを使用することを試みました見通ししかし、なぜ標準誤差、Beta Std Error
も、データポイント上の私のエラーがかなり大きい場合は両方ともゼロですか?誰かがいくつかの洞察力を提供できますか?
素敵な答え、Vlasありがとうございました。私が理解できないことは、斜面に基本的な誤差がない理由です。私はODRが、エラーバーがあるデータがあれば、その値と同様に、ラインの傾きに固有の誤差を計算することになっていたと考えました。この方法でなければ、斜面の固有の誤差をどのようにして計算しますか? – user4437416
'Beta Std Error'の値は、あなたが渡した絶対的なエラーを反映しません - データポイントに割り当てられた相対的な"重み "だけです。これらの値がどのように計算されているかを完全には理解していませんが、おそらくordpack [documentation](http://docs.scipy.org/doc/external/odrpack_guide.pdf)を読んで理解することができます。 –
'x_err'と' y_err'の絶対的なスケーリングを考慮する一つの方法は、パラメータの不確実性を 'B_err = np.sqrt(np.diag(out.cov_beta))'とすることです - 対角成分の平方根共分散行列。上のリンク先の '4.B'セクションは、これがどれほど近似しているかについて少し詳しく説明しています。 –