Mengapa saya mendapatkan prediksi berbeda untuk ekspansi polinomial manual dan menggunakan poly
fungsi 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)
Usaha saya:
Tampaknya menjadi masalah dengan mencegat, ketika saya cocok dengan model mencegat, yaitu, tidak ada
-1
dalam modelformula
, dua garis itu sama. Tetapi mengapa tanpa intersep kedua garis itu berbeda?"Perbaikan" lainnya menggunakan
raw
ekspansi polinomial alih-alih polinomial ortogonal. Jika kita mengubah kode menjadifit2 = lm(y~ poly(x,degree=2, raw=T) -1)
, akan membuat 2 baris sama. Tapi kenapa?
r
regression
polynomial
Haitao Du
sumber
sumber
=
dan<-
untuk penugasan tidak konsisten. Saya benar-benar tidak akan melakukan ini, itu tidak benar-benar membingungkan, tetapi menambahkan banyak suara visual ke kode Anda tanpa manfaat. Anda harus memilih satu atau yang lain untuk digunakan dalam kode pribadi Anda, dan tetap menggunakannya.<-
kurang dari kerumitan untuk mengetik:alt+-
.Jawaban:
Seperti yang Anda perhatikan dengan benar, perbedaan aslinya adalah karena dalam kasus pertama Anda menggunakan polinomial "mentah" sedangkan dalam kasus kedua Anda menggunakan polinomial ortogonal. Karenanya jika
lm
panggilan selanjutnya diubah menjadi:fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
kami akan mendapatkan hasil yang sama antarafit
danfit3
. Alasan mengapa kami mendapatkan hasil yang sama dalam kasus ini adalah "sepele"; kami cocok dengan model yang sama persis seperti yang kami cocokkanfit<-lm(y~.-1,data=x_exp)
, tidak ada kejutan di sana.Seseorang dapat dengan mudah memeriksa bahwa matriks model oleh kedua model itu sama
all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE
).Yang lebih menarik adalah mengapa Anda akan mendapatkan plot yang sama saat menggunakan intersep. Hal pertama yang perlu diperhatikan adalah bahwa, saat memasang model dengan intersep
Dalam kasus
fit2
kami hanya memindahkan prediksi model secara vertikal; bentuk kurva yang sebenarnya sama.Di sisi lain termasuk intersep dalam hal
fit
hasil menjadi tidak hanya garis yang berbeda dalam hal penempatan vertikal tetapi dengan keseluruhan bentuk yang berbeda secara keseluruhan.Kita dapat dengan mudah melihat bahwa hanya dengan menambahkan kecocokan berikut pada plot yang ada.
OKE ... Mengapa cocok no-intersep berbeda sedangkan cocok intercept-termasuk adalah sama? Tangkapan sekali lagi pada kondisi orthogonality.
Dalam kasus
fit_b
matriks model yang digunakan mengandung unsur-unsur non-ortogonal, matriks Gramcrossprod( model.matrix(fit_b) )
jauh dari diagonal; dalam kasusfit2_b
unsur-unsurnya ortogonal (crossprod( model.matrix(fit2_b) )
efektif diagonal).Seperti halnya dalam kasusXTX
fit
ketika kami memperluasnya untuk memasukkan intersep dalamfit_b
kami mengubah entri off-diagonal dari matriks Gram dan dengan demikian cocok yang dihasilkan berbeda secara keseluruhan (kelengkungan berbeda, intersep, dll.) Sebagai perbandingan dengan fit yang disediakan oleh . Dalam kasus ketika kita memperluasnya untuk memasukkan intersep seperti pada kita hanya menambahkan kolom yang sudah ortogonal ke kolom yang kita miliki, ortogonalitas berlawanan dengan polinomial konstan derajat 0 . Ini hanya menghasilkan memindahkan garis dipasang secara vertikal oleh intersep. Inilah sebabnya mengapa plotnya berbeda.fit
fit2
fit2_b
Yang menarik dari pertanyaan adalah mengapa
fit_b
danfit2_b
itu sama; setelah semua model dari matriksfit_b
danfit2_b
tidak sama dalam nilai nominal . Di sini kita hanya perlu mengingat itu pada akhirnyafit_b
danfit2_b
memiliki informasi yang sama.fit2_b
hanya kombinasi linear darifit_b
jadi pada dasarnya cocok mereka akan sama. Perbedaan yang diamati dalam koefisien yang sesuai mencerminkan rekombinasi linear dari nilai-nilaifit_b
untuk membuatnya ortogonal. (lihat G. Grothendieck menjawab di sini juga untuk contoh berbeda.)sumber