2011-11-10 15 views
5

Quiero trazar una línea de regresión con (a = 0 yb = 1) y agregar las desviaciones de punto individuales de esto junto con la identificación del punto de datos con el nombre.Trazado de las desviaciones de la línea de regresión

set.seed(123) 
namelab <- paste ("ET", 1:10, sep = "") 
xvar <- 1:10 
yvar <- rnorm(10, 5, 5) 
myd <- data.frame(namelab, xvar, yvar) 
plot(xvar, yvar) 
abline (a= 0, b = 1, col = "red", lty = 2) 

Apenas bosquejo manual de mi intención, acabo de etiquetar un solo punto, por ejemplo. La línea dibujada necesita un delgado. enter image description here

+2

Posible duplicado: http://stackoverflow.com/questions/2639430/graphing-perpendicular-offsets-in-a-least-squares-regression-plot-in-r –

+2

Pero lo que realmente desea trazar * ¿compensaciones perpendiculares *? La regresión generalmente minimiza las compensaciones * verticales *. –

+0

@JohnColby Buena captura – Andrie

Respuesta

13
dev.new(width=4, height=4) 
plot(xvar, yvar, asp=1) 

a = 0 
b = 1 

abline (a, b, col = "red", lty = 2) 

myd$xint = with(myd, (b*yvar + xvar - b*a)/(b^2 + 1)) 
myd$yint = with(myd, (b*yvar + b*xvar + a)/(b^2 + 1)) 

with(myd, segments(xvar, yvar, xint, yint)) 
with(myd, text(xvar, yvar, labels=namelab, pos=3, cex=0.5)) 

enter image description here

+1

Gracias por eso. He estado mirando un punto para las perpendiculares a una línea y pude encontrarlo. Y también muestra cómo reducir las ilustraciones para SQ. Doubleplusgood. –

4

... y si lo hizo querer vertical, en oposición a las compensaciones perpendiculares, aquí es una opción bastante sencillo:

set.seed(123) 
namelab <- paste ("ET", 1:10, sep = "") 
xvar <- 1:10 
yvar <- rnorm(10, 5, 5) 

plot(xvar, yvar) 
abline (a= 0, b = 1, col = "red", lty = 2) 
segments(xvar,yvar,xvar,xvar) 
text(xvar,yvar,namelab,pos=3) 

enter image description here

Por esta para trabajar por cualquier valor de ayb, usaría:

segments(xvar,yvar,xvar,((xvar*b)+a)) 
Cuestiones relacionadas