Latar Belakang
Saya mencoba untuk memahami contoh pertama dalam kursus model pas (jadi ini mungkin tampak sangat sederhana). Saya sudah melakukan perhitungan dengan tangan dan mereka cocok dengan contoh, tetapi ketika saya ulangi dalam R, koefisien model tidak aktif. Saya pikir perbedaannya mungkin karena buku teks menggunakan varians populasi ( ) sedangkan R mungkin menggunakan varians sampel ( ), tapi saya tidak bisa melihat di mana ini digunakan dalam perhitungan. Misalnya, jika
lm()
menggunakan var()
suatu tempat, bagian bantuan pada var()
catatan:
Penyebut n - 1 digunakan yang memberikan penaksir yang tidak bias dari varians (co) untuk pengamatan iid.
Saya telah melihat kode untuk keduanya lm()
dan lm.fit()
dan tidak menggunakan var()
, tetapi lm.fit()
melewati data itu untuk mengkompilasi kode C ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)
) yang saya tidak punya akses.
Pertanyaan
Adakah yang bisa menjelaskan mengapa R memberikan hasil yang berbeda? Bahkan jika ada perbedaan dalam menggunakan varians sampel vs populasi, mengapa estimasi koefisien berbeda?
Data
Sesuaikan garis untuk memprediksi ukuran sepatu dari kelas di sekolah.
# model data
mod.dat <- read.table(
text = 'grade shoe
1 1
2 5
4 9'
, header = T);
# mean
mod.mu <- mean(mod.dat$shoe);
# variability
mod.var <- sum((mod.dat$shoe - mod.mu)^2)
# model coefficients from textbook
mod.m <- 8/3;
mod.b <- -1;
# predicted values ( 1.666667 4.333333 9.666667 )
mod.man.pred <- mod.dat$grade * mod.m + mod.b;
# residuals ( -0.6666667 0.6666667 -0.6666667 )
mod.man.resid <- (mod.dat$shoe - mod.man.pred)
# residual variance ( 1.333333 )
mod.man.unexpl.var <- sum(mod.man.resid^2);
# r^2 ( 0.9583333 )
mod.man.expl.var <- 1 - mod.man.unexpl.var / mod.var;
# but lm() gives different results:
summary(lm(shoe ~ grade, data = mod.dat))
Call:
lm(formula = shoe ~ grade, data = mod.dat)
Residuals:
1 2 3
-0.5714 0.8571 -0.2857
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.0000 1.3093 -0.764 0.585
grade 2.5714 0.4949 5.196 0.121
Residual standard error: 1.069 on 1 degrees of freedom
Multiple R-squared: 0.9643, Adjusted R-squared: 0.9286
F-statistic: 27 on 1 and 1 DF, p-value: 0.121
Edit
Seperti yang ditunjukkan Ben Bolker , guru terkadang membuat kesalahan. Tampaknya perhitungan R sudah benar. Moral cerita: jangan percaya sesuatu hanya karena seorang guru mengatakan itu benar. Verifikasi sendiri!
sumber
mod.m=8/3
. Karena jika Anda mengaturmod.m=2.5714
, maka mereka tampaknya identik.lm
fungsi dalam R, secara harfiah puluhan ribu orang telah memeriksa hasilnya dengan membandingkannya dengan hal-hal lain, dan outputnyalm
diperiksa terhadap contoh-contoh yang diketahui setiap kali ada perubahan kode. Dengan jawaban di sini, setidaknya beberapa orang cenderung memeriksa (pertanyaan Anda telah dilihat sebanyak 29 kali).Jawaban:
Sepertinya penulis membuat kesalahan matematis di suatu tempat.
Jika Anda memperluas jumlah penjumlahan kuadrat
Memecahkan
R mengatakan ini memang 2.571429 ...
Berdasarkan tautan ini, sepertinya ini berasal dari kursus Coursera ...? Mungkin ada salah-transkripsi data di suatu tempat?
sumber