데이터 포인트의 x 좌표와 y 좌표에 오류가있는 데이터 포인트가 있습니다. 따라서 파이썬의 ODR 도구를 사용하여 가장 적합한 경사와이 경사면의 오차를 계산하려고합니다. 나는 나의 실제 데이터를 위해 그것을 시도했지만 좋은 결과를 찾지 못한다.ODR (Orthogonal Distance Regression)에 대한 간단한 이해
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로하는 I는 것이 도시되어 다음 따라서 I 먼저 간단한 예 ODR을 사용하도록 시도 전망. 하지만 왜 표준 오류, Beta Std Error
, 또한 데이터 포인트에서 내 오류가 상당히 큰 경우 모두 0입니까? 누구나 통찰력을 제공 할 수 있습니까?
멋진 답변, 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' 절은 근사값이 얼마나 좋은지에 대해 약간 자세히 설명합니다. –