web-dev-qa-db-fra.com

R dessine (abline + lm) la ligne de meilleur ajustement passant par un point arbitraire

J'essaie de tracer une ligne de régression des moindres carrés en utilisant abline(lm(...)) qui est également forcée de passer par un point particulier. Je vois cette question est liée, mais pas tout à fait ce que je veux. Voici un exemple:

test <- structure(list(x = c(0, 9, 27, 40, 52, 59, 76), y = c(50, 68, 
79, 186, 175, 271, 281)), .Names = c("x", "y"))

# set up an example plot
plot(test,pch=19,ylim=c(0,300),
     panel.first=abline(h=c(0,50),v=c(0,10),lty=3,col="gray"))

# standard line of best fit - black line
abline(lm(y ~ x, data=test))

# force through [0,0] - blue line
abline(lm(y ~ x + 0, data=test), col="blue")

Cela ressemble à ceci:

enter image description here

Maintenant, comment pourrais-je forcer une ligne à travers le point arbitraire marqué de (x=10,y=50) tout en minimisant la distance aux autres points?

# force through [10,50] - red line
??
14
thelatemail

Une solution grossière serait de déplacer l'origine de votre modèle à ce point et de créer un modèle sans interception

nmod <- (lm(I(y-50)~I(x-10) +0, test))

abline(predict(nmod, newdata = list(x=0))+50, coef(nmod), col='red')

enter image description here

14
mnel

Vous pouvez modifier la formule de lm() et décaler les données:

p=10
q=50

abline(lm(I(y-q) ~ I(x-p) + 0, data=test), col="red")
3
Nishanth