Отбросьте линии от фактических до смоделированных точек в R - PullRequest
7 голосов
/ 17 сентября 2010

Вчера я разработал пример разницы между Обыкновенными наименьшими квадратами (OLS) и анализом основных компонентов (PCA).Для этой иллюстрации я хотел показать ошибки, минимизированные OLS и PCA, поэтому я нанес на график фактические данные, прогнозируемую линию, а затем вручную (с помощью GIMP) нарисовал линию капли, чтобы проиллюстрировать пару терминов ошибок.Как я могу кодировать создание строк ошибок в 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")

Затем я вручную добавил желтые линии, чтобы получить следующее:

alt text

Ответы [ 2 ]

9 голосов
/ 17 сентября 2010

?segments

Я бы привел пример, но сегодня я довольно занят, и не так уж сложно выбрать точки. ; -)

Хорошо, так что я не , что занят ...

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])
7 голосов
/ 21 сентября 2010

Как упоминал Иисус Навин, segments() - это путь сюда. И так как он полностью векторизован, мы можем добавить все ошибки сразу, следуя вашему примеру

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

Если вы хотите выделить только пару ошибок, измените пример, приведенный Джошуа:

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

НТН

G

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...