J'ai quelques points de données avec des erreurs dans les coordonnées x et y sur ces points de données. Je veux donc utiliser l'outil ODR de python pour calculer la pente la mieux ajustée et l'erreur sur cette pente. J'ai essayé de le faire pour mes données réelles mais je ne trouve pas de bons résultats. Par conséquent, j'ai d'abord essayé d'utiliser ODR avec un exemple simple comme suit:Compréhension simple de la régression orthogonale de distance (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()
La ligne pprint()
donne:
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
Les valeurs bêta resutling sont présentés à 1,0 et 0,0, que je épect. Mais pourquoi les erreurs standard, Beta Std Error
, sont-elles toutes les deux nulles si mes erreurs sur les points de données sont assez importantes? Quelqu'un peut-il offrir un aperçu?
Merci pour votre réponse, Vlas. Ce que je ne comprends pas, c'est pourquoi il n'y a pas d'erreur fondamentale sur la pente. Je pensais que ODR était supposé calculer l'erreur inhérente à la pente de la ligne ainsi que sa valeur si on donnait des données avec des barres d'erreur. Comment calcule-t-on l'erreur inhérente à la pente si ce n'est pas ainsi? – user4437416
La valeur de 'Beta Std Error' ne reflète pas l'erreur absolue que vous lui transmettez - seulement les" poids "relatifs assignés aux points de données. Je ne comprends pas vraiment comment ces valeurs sont calculées, mais peut-être que vous pouvez le comprendre en lisant ordpack [documentation] (http://docs.scipy.org/doc/external/odrpack_guide.pdf). –
Une façon de prendre en compte vos scalages absolus de 'x_err' et' y_err' est d'estimer vos incertitudes de paramètre comme 'B_err = np.sqrt (np.diag (out.cov_beta))' - la racine carrée des entrées diagonales de la matrice de covariance. La section "4.B" dans le document lié ci-dessus va dans un peu de détail sur la qualité d'une approximation c'est. –