Линии падения от фактических к смотровым точкам в R
Вопрос
Вчера я Работал пример Разница между простыми квадратами (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")
Затем я вручную добавил желтые линии, чтобы произвести следующее:
Решение
?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])
Другие советы
Как упомянул Джошуа, 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")
Если вы хотите выделить пару ошибок, то для модификации пример Joshua дал:
n <- c(58,65)
segments(x[n], y[n], x[n], fitted(yx.lm)[n], col = "orange", lwd = 3)
Емкость
грамм