バックグラウンド
モデルのフィッティングのコースの最初の例を理解しようとしています(これはばかげて単純に見えるかもしれません)。私は手作業で計算を行っており、例と一致していますが、Rでそれらを繰り返すと、モデル係数はオフになります。Rは標本分散()を使用しているのに対し、母分散()を使用している教科書に違いがあるのではないかと考えましたが、これらが計算でどこで使用されているかわかりません。たとえば、どこかで使用している場合
、メモに関するヘルプセクション:lm()
var()
var()
分母n-1が使用され、iid観測の(共)分散の不偏推定量が得られます。
私は両方のコードを見てlm()
おりlm.fit()
、どちらも使用していませんが、そのデータをコンパイルされたCコード()に渡しますがvar()
、アクセスできません。lm.fit()
z <- .Call(C_Cdqrls, x, y, tol, FALSE)
質問
Rが異なる結果を出している理由を誰でも説明できますか?サンプルの使用と母集団の分散に違いがある場合でも、係数の推定値が異なるのはなぜですか?
データ
学校の成績から靴のサイズを予測するために線を合わせます。
# 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
編集
ベンBolkerが示されている教師が、時には間違いを犯すように、それが見えます。Rの計算は正しいようです。教訓:教師がそれが真実だと言っているからといって、何かを信じないでください。自分で確認してください!
lm
R の関数の場合、文字通り何万人もの人々が結果を他のものと比較することで結果をチェックlm
し、コードの何かが変更されるたびに既知の例に対して出力がチェックされます。ここに答えがあれば、少なくとも数人がチェックする可能性があります(あなたの質問は29回見られています)。
mod.m=8/3
。を設定mod.m=2.5714
すると、同じように見えるためです。