2010-09-17 19 views
7

Ayer I worked up an example of la diferencia entre Mínimos cuadrados ordinarios (OLS) frente a Análisis de componentes principales (PCA). Para esa ilustración, quería mostrar los errores minimizados por OLS y PCA, así que tracé los valores reales, la línea predicha y luego, de forma manual (con GIMP) dibujé una línea para ilustrar algunos de los términos de error. ¿Cómo puedo codificar la creación de las líneas de error en R? Aquí está el código que utilicé para mi ejemplo:Caída de líneas de puntos reales a modelados en 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") 

Luego he añadido manualmente las líneas amarillas para producir el siguiente:

alt text

Respuesta

8

?segments

me gustaría dar un ejemplo, pero Hoy estoy bastante ocupado y no es tan complicado elegir los puntos. ;-)

bien, así que no estoy que ocupado ...

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

que nunca había utilizado el comando 'segments'! Gracias por apuntarme a eso. –

+0

De nada; y gracias por la publicación informativa del blog. –

6

Como se mencionó Joshua, segments() es el camino a seguir aquí. Y ya que está totalmente vectorizado, se puede añadir en todos los errores a la vez, a raíz de su ejemplo

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 sólo desea resaltar un par de errores, a continuación, modificar el ejemplo Joshua dio:

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

HTH

G

+0

-1 (para mí) para no vectorizar. ¡Gracias por la aclaración! –

Cuestiones relacionadas