J'ai fait mesures de deux variables x et y . Ils ont tous deux des incertitudes connues σ x et σ y qui leur sont associées. Je veux trouver la relation entre x et y . Comment puis-je le faire?
EDIT : chaque a un σ x différent , i lui est associé, et le même avec le y i .
Exemple R reproductible:
## pick some real x and y values
true_x <- 1:100
true_y <- 2*true_x+1
## pick the uncertainty on them
sigma_x <- runif(length(true_x), 1, 10) # 10
sigma_y <- runif(length(true_y), 1, 15) # 15
## perturb both x and y with noise
noisy_x <- rnorm(length(true_x), true_x, sigma_x)
noisy_y <- rnorm(length(true_y), true_y, sigma_y)
## make a plot
plot(NA, xlab="x", ylab="y",
xlim=range(noisy_x-sigma_x, noisy_x+sigma_x),
ylim=range(noisy_y-sigma_y, noisy_y+sigma_y))
arrows(noisy_x, noisy_y-sigma_y,
noisy_x, noisy_y+sigma_y,
length=0, angle=90, code=3, col="darkgray")
arrows(noisy_x-sigma_x, noisy_y,
noisy_x+sigma_x, noisy_y,
length=0, angle=90, code=3, col="darkgray")
points(noisy_y ~ noisy_x)
## fit a line
mdl <- lm(noisy_y ~ noisy_x)
abline(mdl)
## show confidence interval around line
newXs <- seq(-100, 200, 1)
prd <- predict(mdl, newdata=data.frame(noisy_x=newXs),
interval=c('confidence'), level=0.99, type='response')
lines(newXs, prd[,2], col='black', lty=3)
lines(newXs, prd[,3], col='black', lty=3)
Le problème avec cet exemple est que je pense qu'il suppose qu'il n'y a pas d'incertitudes dans . Comment puis-je réparer cela?
r
regression
deming-regression
rhombidodécaèdre
la source
la source
lm
Deming
fonction dans le package R MethComp .Réponses:
La vraie ligne est représentée en bleu pointillé. Le long de celui-ci, les points d'origine sont tracés sous forme de cercles creux. Des flèches grises les relient aux points observés, tracées sous forme de disques noirs solides. La solution est dessinée sous forme d'une ligne rouge continue. Malgré la présence de grands écarts entre les valeurs observées et réelles, la solution est remarquablement proche de la ligne correcte dans cette région.
la source
deming
fonction puisse également gérer les erreurs variables. Il devrait probablement donner un ajustement très similaire au vôtre.L'optimisation du maximum de vraisemblance pour le cas d'incertitudes en x et y a été traitée par York (2004). Voici le code R pour sa fonction.
"YorkFit", écrit par Rick Wehr, 2011, traduit en R par Rachel Chang
Routine universelle pour trouver le meilleur ajustement en ligne droite aux données avec des erreurs corrélées variables, y compris l'erreur et la qualité des estimations de l'ajustement, suivant l'équation. (13) de York 2004, American Journal of Physics, qui était basé à son tour sur York 1969, Earth and Planetary Sciences Letters
Fonction YorkFit <- (X, Y, Xstd, Ystd, Ri = 0, b0 = 0, printCoefs = 0, makeLine = 0, eps = 1e-7)
X, Y, Xstd, Ystd: ondes contenant des points X, des points Y et leurs écarts-types
AVERTISSEMENT: Xstd et Ystd ne peuvent pas être nuls car cela fera que Xw ou Yw soit NaN. Utilisez plutôt une très petite valeur.
Ri: coefficients de corrélation pour les erreurs X et Y - longueur 1 ou longueur de X et Y
b0: estimation initiale approximative de la pente (peut être obtenue à partir d'un ajustement des moindres carrés standard sans erreurs)
printCoefs: mis égal à 1 pour afficher les résultats dans la fenêtre de commande
makeLine: mis égal à 1 pour générer une onde Y pour la ligne d'ajustement
Renvoie une matrice avec l'ordonnée à l'origine et la pente plus leurs incertitudes
Si aucune supposition initiale pour b0 n'est fournie, utilisez simplement OLS si (b0 == 0) {b0 = lm (Y ~ X) $ coefficients [2]}
a, b: interception finale et pente a.err, b.err: incertitudes estimées en interception et en pente
la source