2013-04-22 8 views
14

Ich versuche, eine Regressionslinie der kleinsten Quadrate mit abline(lm(...)) zu zeichnen, die auch gezwungen wird, einen bestimmten Punkt zu durchlaufen. Ich sehe this question ist verwandt, aber nicht ganz das, was ich will. Hier ein Beispiel:R zeichne (abline + lm) Linie-der-beste Anpassung durch einen beliebigen Punkt

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") 

Das sieht aus wie:

enter image description here

Nun, wie würde ich mich über eine Linie durch den markierten beliebigen Punkt (x=10,y=50) zwingen, während immer noch den Abstand zu den anderen Punkten zu minimieren?

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

Antwort

13

Eine grobe Lösung wäre, den Ursprung für Ihr Modell zu diesem Zeitpunkt verschieben und ein Modell ohne Intercept

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

+0

Nizza. Scheint nicht so eine grobe Lösung. – thelatemail

+0

Grob? Nicht rechnerisch, sondern statistisch. Sie werden ein paar Gerüchte über das Thema von Bill Venables finden (wie von Venables/Ripley MASS) –

+0

Das ist, was ich meinte. – mnel

3

Sie können die Formel für lm() ändern erstellen und Offset die Daten:

p=10 
q=50 

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

Ja. Jetzt bearbeitet. – Nishanth

Verwandte Themen