2010-09-17 9 views
7

Hier, j'ai worked up an example of la différence entre les moindres carrés ordinaires (MCO) et l'analyse en composantes principales (ACP). Pour cette illustration, je voulais montrer les erreurs minimisées par OLS et PCA donc j'ai tracé les réels, la ligne prédite et ensuite manuellement (avec GIMP) dessiné dans une ligne de chute pour illustrer quelques termes d'erreur. Comment puis-je coder la création des lignes d'erreur dans R? Voici le code j'ai utilisé pour mon exemple:Laisser tomber les lignes des points réels aux points modélisés dans 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") 

Puis j'ai ajouté manuellement les lignes jaunes pour produire les éléments suivants:

alt text

Répondre

8

?segments

je donner un exemple, mais Je suis très occupé aujourd'hui et ce n'est pas si compliqué de choisir les points. ;-)

Ok, donc je ne suis pas que occupé ...

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

Je ne l'avais pas déjà utilisé la commande 'segments'! Merci de m'avoir indiqué. –

+0

De rien; et merci pour le blog informatif. –

6

Comme mentionné Joshua, segments() est la voie à suivre ici. Et comme il est tout à fait vectorisé, nous pouvons ajouter à toutes les erreurs à la fois, à la suite de votre exemple

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

Si vous voulez seulement mettre en évidence quelques erreurs, puis de modifier l'exemple Josué donna:

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

HTH

G

+0

-1 (pour moi) pour ne pas vectoriser. Merci pour la clarification! –