背景
我正在嘗試了解關於擬合模型的課程中的 first 示例(因此,這似乎很簡單)。我已經手工完成了計算,並且它們與示例匹配,但是當我在R中重複計算時,模型係數不可用。我以為差異可能是由於教科書使用總體方差($ \ sigma ^ 2 $)而R可能是使用樣本方差($ S ^ 2 $),但我看不到這些在計算中的位置。例如,如果 lm()
在某處使用 var()
,則 var()
上的幫助部分將指出:
使用分母n-1給出iid(協)方差的無偏估計觀察。
我已經查看了 lm()
和 lm.fit()
的代碼,但都沒有使用 var()
,但 lm.fit()
會將數據傳遞到編譯的Ccode( z <- .Call(C_Cdqrls,x,y,tol,FALSE)代碼>)我無法訪問。
問題
有人可以解釋為什麼R給出不同的結果嗎?即使使用樣本方差與總體方差有差異,為什麼係數估計也不同?
數據
適合一條線以根據學校年級預測鞋子的大小。
#模型datamod.dat <- read.table(text ='grade shoe 1 1 2 5 4 9',header = T);#meanmod.mu <-均值(mod.dat $ shoe);#變異性mod.var <- sum((mod.dat $ shoe-mod.mu)^ 2)#來自教科書的模型係數mod.m <-8 / 3; mod.b <- -1;#預測值(1.666667 4.333333 9.666667)mod.man.pred <- mod.dat $ grade * mod.m + mod.b;#殘差(-0.6666667 0.6666667 -0.6666667)mod.man.resid <-(mod .dat $ shoe-mod.man.pred)#剩餘方差(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;#但lm()給出不同的結果:摘要(lm(鞋〜等級,數據= mod .dat)) Call:lm(公式=鞋子〜成績,數據= mod.dat)殘差:1 2 3- 0.5714 0.8571 -0.2857係數:估計標準誤差t值Pr(> | t |)(攔截)-1.0000 1.3093 -0.764 0.585級2.5714 0.4949 5.196 0.121殘餘標準誤差:1個自由度上為1.069多個R平方:0.9643,調整後R平方:0.9286 F統計:在1對1和1對DF上,p值:0.121
Edit
如 Ben Bolker所示,看起來老師在犯錯誤有時。看來R的計算是正確的。這個故事的寓意:不要僅僅因為老師說的是真實而相信某事。親自驗證!