2010-09-17 31 views
7

Hôm qua I worked up an example of sự khác biệt giữa các ô tối thiểu bình thường (OLS) so với phân tích thành phần chính (PCA). Đối với hình minh họa đó, tôi muốn hiển thị các lỗi được giảm thiểu bởi OLS và PCA vì vậy tôi đã vẽ các thực tế, dòng dự đoán và sau đó tôi theo cách thủ công (với GIMP) vẽ trong một dòng thả để minh họa một vài điều khoản lỗi. Làm thế nào tôi có thể mã việc tạo ra các dòng lỗi trong R? Dưới đây là đoạn code tôi sử dụng ví dụ của tôi:Thả các dòng từ điểm thực tế đến các điểm được mô hình hóa trong 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") 

Sau đó, tôi tự thêm các dòng vàng để sản xuất như sau:

alt text

Trả lời

8

?segments

tôi muốn cung cấp một ví dụ, nhưng Tôi khá bận rộn ngày hôm nay và nó không phải là phức tạp để chọn các điểm. ;-)

Được rồi, vì vậy tôi không rằng bận rộn ...

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

tôi đã không bao giờ sử dụng các 'lệnh segments'! Cảm ơn bạn đã chỉ cho tôi. –

+0

Bạn được chào đón; và cảm ơn bạn vì bài đăng blog thông tin. –

6

Như Joshua đã đề cập, segments() là con đường để đi đây. Và vì nó hoàn toàn được vectorised, chúng ta có thể thêm vào tất cả các lỗi cùng một lúc, sau ngày từ ví dụ của bạn

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ếu bạn chỉ muốn nhấn mạnh một vài sai sót, sau đó để điều chỉnh ví dụ Joshua đã:

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

HTH

G

+0

-1 (đối với tôi) vì không vector hóa. Cảm ơn bạn đã làm rõ! –

Các vấn đề liên quan