7

昨天我研究了一个普通最小二乘法 (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")

然后我手动添加了黄线以生成以下内容:

替代文字

4

2 回答 2

9

?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])
于 2010-09-17T16:31:06.783 回答
7

正如约书亚所说,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)

高温高压

G

于 2010-09-21T17:44:29.710 回答