2010-09-17 12 views
7

Ieri I worked up an example of la differenza tra minimi quadrati ordinari (OLS) rispetto a Principal Components Analysis (PCA). Per quella illustrazione volevo mostrare gli errori minimizzati da OLS e PCA, quindi ho tracciato i reali, la linea prevista e poi manualmente (con GIMP) ho disegnato una linea di rilascio per illustrare un paio di termini di errore. Come posso codificare la creazione delle righe di errore in R? Ecco il codice che ho usato per il mio esempio:Rilascia linee da reali a punti modellati 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") 

Poi ho aggiunto manualmente le linee gialle per produrre il seguente:

alt text

risposta

8

?segments

mi piacerebbe fornire un esempio, ma Sono abbastanza impegnato oggi e non è così complicato scegliere i punti. ;-)

Va bene, quindi non sono che occupato ...

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

non avevo mai usato il comando 'segments'! Grazie per avermelo fatto notare. –

+0

Prego; e grazie per il post informativo del blog. –

6

Come detto Joshua, segments() è il modo di andare qui. E come è totalmente Vectorised, possiamo aggiungere a tutti gli errori in una sola volta, sulla scia vostro esempio

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

Se si desidera solo evidenziare un paio di errori, quindi modificare l'esempio Joshua ha dato:

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

HTH

G

+0

-1 (per me) per non vettorializzare. Grazie per il chiarimento! –

Problemi correlati