2010-09-17 65 views
7

昨天我worked up an example of普通最小二乘(OLS)與主成分分析(PCA)之間的差異。爲了說明這個例子,我想通過OLS和PCA來顯示最小化的錯誤,所以我繪製了實際值,預測線,然後手動(使用GIMP)繪製了一條下拉線來說明幾個誤差項。我如何編寫R中錯誤行的創建?下面是我用我的例子代碼:從實際模型點到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

回答

8

?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]) 
+0

我沒有用過'segments'命令!謝謝你指點我。 – 2010-09-17 16:49:22

+0

不客氣,並感謝您提供豐富的博客文章。 – 2010-09-17 17:08:05

6

約書亞提到,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) 

HTH

+0

-1(對我來說)沒有矢量化。感謝您的澄清! – 2010-09-22 16:09:27