2011-11-10 11 views
5

Chcę wykreślić linię regresji z (a = 0 i b = 1) i dodać indywidualne odchylenia od punktów wraz z identyfikacją punktu danych z nazwą.Wykreślanie odchyleń od linii regresji

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) 

Po prostu ręczny szkic mojej intencji, właśnie na przykład oznaczyłem pojedynczy punkt. Wylosowana linia musi być cienka. enter image description here

+2

Możliwy duplikat: http://stackoverflow.com/questions/2639430/graphing-perpendicular-offsets-in-a-least-squares-regression-plot-in-r –

+2

Ale czy naprawdę chcesz wykreślić * prostopadłe * przesunięcia *? Regresja zazwyczaj minimalizuje przesunięcia * pionowe *. –

+0

@JohnColby Dobry połów – Andrie

Odpowiedz

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

Dzięki za to. Spoglądałem na jeden punkt dla prostopadłych do linii i mogłem go znaleźć. Pokazujesz także, jak starannie ograniczać ilustracje do SQ. Doubleplusgood. –

4

... a jeśli chciał pionowy w przeciwieństwie do prostopadłych offsetu, tutaj jest całkiem prosta opcja:

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

Do tego do pracy dla dowolnej wartości aib, używałbyś:

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