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 lm
cuộ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 fit
và fit3
. 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 fit2
chú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 fit
kế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')
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_b
ma 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_b
các phần tử là trực giao ( crossprod( model.matrix(fit2_b) )
có hiệu quả là đường chéo).
fit
fit_b
XTXfit
fit2
fit2_b
Các thú by-câu hỏi là tại sao fit_b
và fit2_b
đều giống nhau; sau tất cả các ma trận mô hình từ fit_b
và fit2_b
không giống nhau về mệnh giá . Ở đây chúng ta chỉ cần nhớ rằng cuối cùng fit_b
và fit2_b
có cùng thông tin. fit2_b
chỉ là một sự kết hợp tuyến tính của fit_b
vì 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.)
=
và<-
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ó.