Построение отклонений от линии регрессии - PullRequest
5 голосов
/ 10 ноября 2011

Я хочу построить линию регрессии с (a = 0 и b = 1) и добавить отдельные отклонения от этой точки вместе с идентификацией точки данных с именем.

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)

Просто ручной набросок моего намерения, я просто обозначил одну точку, например.Нарисованная линия нужна тонкая.enter image description here

Ответы [ 2 ]

14 голосов
/ 10 ноября 2011
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

4 голосов
/ 10 ноября 2011

... и если вам нужно вертикальное, а не перпендикулярное смещение, вот довольно простой вариант:

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

Чтобы это работало для любого значенияа и б, вы бы использовали:

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