2010-09-17 9 views
7

Wczoraj I worked up an example of różnica między zwykłymi najmniejszymi kwadratami (OLS) a analizą głównych składowych (PCA). Dla tej ilustracji chciałem pokazać błędy zminimalizowane przez OLS i PCA, więc wykreśliłem rzeczywiste, przewidywaną linię, a następnie ręcznie (z GIMP) narysowałem linię kropli, aby zilustrować kilka terminów błędów. Jak mogę zakodować tworzenie linii błędu w R? Oto kod użyłem na moim przykładzie:Upuszczanie linii od rzeczywistych do wymodelowanych punktów w 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") 

Potem ręcznie dodane żółte linie do produkcji, co następuje:

alt text

Odpowiedz

8

?segments

będę stanowić przykład, ale Jestem dzisiaj dość zajęty i nie jest tak trudno zebrać punkty. ;-)

Ok, więc nie jestem że zajęty ...

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

nie kiedykolwiek wykorzystał 'polecenie segments'! Dzięki za wskazanie mi tego. –

+0

Nie ma za co; i dziękuję za informacyjny wpis na blogu. –

6

Jak wspomniano Joshua, segments() jest do zrobienia tutaj. A jak to jest całkowicie wektoryzowane, możemy dodać wszystkie błędy na raz, opierając się na swoim przykładzie

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

Jeśli tylko chcesz wyróżnić kilka błędów, a następnie zmodyfikować przykład Jozue dał:

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

HTH

G

+0

-1 (dla mnie) za nie wektoryzację. Dziękuję za wyjaśnienie! –

Powiązane problemy