Tại sao tôi nhận được các dự đoán khác nhau cho việc mở rộng đa thức thủ công và sử dụng hàm R `poly`?


10

Tại sao tôi nhận được các dự đoán khác nhau cho việc mở rộng đa thức thủ công và sử dụng polyhàm R ?

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

nhập mô tả hình ảnh ở đây

Nỗ lực của tôi:

  • Nó dường như là một vấn đề với đánh chặn, khi tôi phù hợp với mô hình với đánh chặn, tức là không có -1trong mô hình formula, hai dòng là như nhau. Nhưng tại sao không có hai dòng chặn thì khác nhau?

  • Một "sửa chữa" khác là sử dụng khai rawtriển đa thức thay vì đa thức trực giao. Nếu chúng ta thay đổi mã thành fit2 = lm(y~ poly(x,degree=2, raw=T) -1), sẽ tạo 2 dòng giống nhau. Nhưng tại sao?


4
Đây là chủ đề từ câu hỏi của bạn, nhưng bạn thường rất cởi mở để bình luận. Khi đọc mã của bạn, điều đầu tiên tôi nhận thấy là bạn sử dụng =<-gán không nhất quán. Tôi thực sự sẽ không làm điều này, nó không thực sự khó hiểu, nhưng nó thêm nhiều nhiễu hình ảnh vào mã của bạn không có lợi. Bạn nên giải quyết cái này hay cái kia để sử dụng trong mã cá nhân của bạn và chỉ cần sử dụng nó.
Matthew Drury

cảm ơn vì đã giúp tôi viết mã! câu hỏi cố định. @MatthewDrury
Haitao Du

3
Mẹo theo dõi ngẫu nhiên để <-giảm bớt rắc rối khi gõ : alt+-.
JAD

@JarkoDubbeldam cảm ơn vì mẹo mã hóa. Tôi thích bàn phím ngắn
Haitao Du

Câu trả lời:


12

Như bạn lưu ý chính xác sự khác biệt ban đầu là vì trong trường hợp đầu tiên bạn sử dụng đa thức "thô" trong khi trong trường hợp thứ hai, bạn sử dụng đa thức trực giao. Do đó, nếu lmcuộc gọi sau được thay đổi thành: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)chúng ta sẽ nhận được kết quả tương tự giữa fitfit3. Lý do tại sao chúng tôi nhận được kết quả tương tự trong trường hợp này là "tầm thường"; chúng tôi phù hợp với mô hình chính xác giống như chúng tôi đã trang bị fit<-lm(y~.-1,data=x_exp), không có gì ngạc nhiên ở đó.

Người ta có thể dễ dàng kiểm tra xem ma trận mô hình của hai mô hình có giống nhau không all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE).


Điều thú vị hơn là tại sao bạn sẽ có được những âm mưu tương tự khi sử dụng một đòn đánh chặn. Điều đầu tiên cần chú ý là, khi lắp một mô hình với một đánh chặn

  • Trong trường hợp fit2chúng ta chỉ cần di chuyển các dự đoán mô hình theo chiều dọc; hình dạng thực tế của đường cong là như nhau.

  • Mặt khác, bao gồm cả việc đánh chặn trong trường hợp fitkết quả không chỉ là một dòng khác nhau về vị trí dọc mà với toàn bộ hình dạng khác nhau.

Chúng ta có thể dễ dàng nhận thấy điều đó bằng cách đơn giản nối thêm các phần sau vào cốt truyện hiện có.

fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)

fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')

nhập mô tả hình ảnh ở đây

OK ... Tại sao các khớp không chặn lại khác nhau trong khi các khớp nối bao gồm cả giống nhau? Việc bắt là một lần nữa về điều kiện trực giao.

Trong trường hợp fit_bma trận mô hình được sử dụng chứa các phần tử không trực giao, ma trận Gram crossprod( model.matrix(fit_b) )nằm xa đường chéo; trong trường hợp fit2_bcác phần tử là trực giao ( crossprod( model.matrix(fit2_b) )có hiệu quả là đường chéo).

fitfit_b XTXfitfit2fit2_b

Các thú by-câu hỏi là tại sao fit_bfit2_bđều giống nhau; sau tất cả các ma trận mô hình từ fit_bfit2_bkhông giống nhau về mệnh giá . Ở đây chúng ta chỉ cần nhớ rằng cuối cùng fit_bfit2_bcó cùng thông tin. fit2_bchỉ là một sự kết hợp tuyến tính của fit_bvì vậy về cơ bản kết quả phù hợp của họ sẽ giống nhau. Sự khác biệt quan sát được trong hệ số phù hợp phản ánh sự tái hợp tuyến tính của các giá trị fit_bđể có được chúng trực giao. (xem câu trả lời của G. Grothendieck ở đây cũng cho ví dụ khác.)


+2,5 cảm ơn vì câu trả lời tuyệt vời. Đối với đồ thị cuối cùng, tôi đã học được từ @kjetilb halvorsen: Một cách mô tả trừu tượng hơn nữa là bản thân mô hình chỉ phụ thuộc vào một không gian con tuyến tính nhất định, cụ thể là không gian cột được xác định bởi ma trận thiết kế. Nhưng các tham số, không chỉ phụ thuộc vào không gian con này, mà dựa trên cơ sở cho không gian con đó, được đưa ra bởi các biến cụ thể được sử dụng, đó là, chính các cột. Dự đoán từ mô hình, ví dụ, sẽ chỉ phụ thuộc vào không gian con tuyến tính, không phụ thuộc vào cơ sở được chọn.
Haitao Du

hy vọng bạn không phiền, tôi đã định dạng lại một chút ..
Haitao Du

@ hxd1011: Không có vấn đề gì cả, cảm ơn vì đã dành thời gian để "chải" nó một chút.
usεr11852
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.