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 fitvà 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 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')

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_bvà fit2_bđều giống nhau; sau tất cả các ma trận mô hình từ fit_bvà fit2_bkhông giống nhau về mệnh giá . Ở đây chúng ta chỉ cần nhớ rằng cuối cùng fit_bvà fit2_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.)
=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ó.