2013-04-22 34 views
14

Próbuję narysować linię regresji najmniejszych kwadratów przy użyciu abline(lm(...)), która również musi przejść przez określony punkt. Widzę, że this question jest powiązany, ale nie do końca tego, co chcę. Oto przykład:R draw (abline + lm) linia najlepszego dopasowania przez dowolny 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") 

ta wygląda następująco:

enter image description here

Teraz jak bym go o zmuszanie linię przez oznaczonego dowolnego punktu (x=10,y=50) jednocześnie minimalizując dystans do innych punktów?

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

Odpowiedz

13

A rough rozwiązaniem byłoby przesunięcie pochodzenia dla danego modelu do tej pory i stworzyć model bez przecięcia

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

Nice. Wydaje się, że nie jest to szorstkie rozwiązanie. – thelatemail

+0

Szorstki? Nie z komputerowego punktu widzenia, ale raczej statystycznego. Znajdziesz kilka rants na ten temat przez Billa Venablesa (jak z Venables/Ripley MASS) –

+0

To właśnie miałem na myśli. – mnel

3

można zmodyfikować formułę lm() i offsetowego dane:

p=10 
q=50 

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

Tak. Edytowane teraz. – Nishanth

Powiązane problemy