Фон
Я пытаюсь понять первый пример в курсе по подгонке моделей (так что это может показаться до смешного простым). Я сделал вычисления вручную, и они соответствуют примеру, но когда я повторяю их в R, коэффициенты модели отключены. Я думал, что разница может быть связана с тем, что в учебнике используется дисперсия совокупности ( ), тогда как R может использовать выборочную дисперсию ( ), но я не вижу, где они используются в расчетах. Например, если
где-то lm()
используется var()
, раздел справки по var()
заметкам:
Используется знаменатель n - 1, который дает несмещенную оценку (со) дисперсии для наблюдений iid.
Я рассмотрел код для обоих, lm()
и lm.fit()
ни один из них не использует var()
, но lm.fit()
передает эти данные в скомпилированный код C ( 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
редактировать
Как показал Бен Болкер , учителя иногда делают ошибки. Кажется, что R расчеты верны. Мораль истории: не верьте чему-то только потому, что учитель говорит, что это правда. Проверьте это сами!
lm
функции в R буквально десятки тысяч людей проверили результаты, сравнив их с другими вещами, и выходные данные lm
проверяются по известным примерам каждый раз, когда что-либо изменяется в коде. С ответами здесь, по крайней мере, несколько человек могут проверить (ваш вопрос был просмотрен 29 раз).
mod.m=8/3
. Потому что если вы установитеmod.m=2.5714
, то они кажутся идентичными.