2010-09-17 8 views
7

Gestern I worked up an example of der Unterschied zwischen Ordinary Least Squares (OLS) vs. Hauptkomponentenanalyse (PCA). Für diese Illustration wollte ich die Fehler zeigen, die von OLS und PCA minimiert wurden, also zeichnete ich die tatsächlichen Werte, die vorhergesagte Linie und dann zeichnete ich manuell (mit GIMP) eine Dropline, um einige der Fehlerterme zu illustrieren. Wie kann ich die Erstellung der Fehlerzeilen in R codieren? Hier ist der Code, den ich für mein Beispiel verwendet:Drop-Linien von tatsächlichen zu modellierten Punkten in R

set.seed(2) 
x <- 1:100 

y <- 20 + 3 * x 
e <- rnorm(100, 0, 60) 
y <- 20 + 3 * x + e 

plot(x,y) 
yx.lm <- lm(y ~ x) 
lines(x, predict(yx.lm), col="red") 

Dann manuell ich die gelben Linien hinzugefügt folgendes zu erzeugen:

alt text

Antwort

8

?segments

ich ein Beispiel nennen würde, aber Ich bin heute ziemlich beschäftigt und es ist nicht so kompliziert die Punkte zu sammeln. ;-)

Okay, also bin ich nicht dass beschäftigt ...

n=58; segments(x[n],y[n],x[n],predict(yx.lm)[n]) 
n=65; segments(x[n],y[n],x[n],predict(yx.lm)[n]) 
+0

ich den 'segments' Befehl nicht immer hatte! Danke, dass du mich darauf hingewiesen hast. –

+0

Gern geschehen; und danke für den informativen Blogpost. –

6

Als Joshua erwähnt, segments() der Weg hier zu gehen. Und wie es total vektorisiert ist, können wir sofort in allen Fehlern hinzuzufügen, im Anschluss an Ihrem Beispiel

set.seed(2) 
x <- 1:100 

y <- 20 + 3 * x 
e <- rnorm(100, 0, 60) 
y <- 20 + 3 * x + e 

plot(x,y) 
yx.lm <- lm(y ~ x) 
lines(x, predict(yx.lm), col="red") 
## Add segments 
segments(x, y, x, fitted(yx.lm), col = "blue") 

Wenn Sie nur ein paar der Fehler hervorheben möchten, dann das Beispiel zu ändern Joshua gab:

n <- c(58,65) 
segments(x[n], y[n], x[n], fitted(yx.lm)[n], col = "orange", lwd = 3) 

HTH

G

+0

-1 (für mich) für nicht vektorisieren. Danke für die Klarstellung! –