Почему R's lm () возвращает оценки коэффициентов, отличные от моего учебника?


13

Фон

Я пытаюсь понять первый пример в курсе по подгонке моделей (так что это может показаться до смешного простым). Я сделал вычисления вручную, и они соответствуют примеру, но когда я повторяю их в R, коэффициенты модели отключены. Я думал, что разница может быть связана с тем, что в учебнике используется дисперсия совокупности ( σ2 ), тогда как R может использовать выборочную дисперсию ( S2 ), но я не вижу, где они используются в расчетах. Например, если где-то 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 расчеты верны. Мораль истории: не верьте чему-то только потому, что учитель говорит, что это правда. Проверьте это сами!


2
Двойная проверка mod.m=8/3. Потому что если вы установите mod.m=2.5714, то они кажутся идентичными.
Стат

2
Насколько я понимаю, коэффициенты mod.m = 8/3 и mod.b = -1 не вычисляются нигде в комментариях, поэтому это не очевидно. Как отмечает @Stat выше, ошибка, по-видимому, связана с вычислением mod.m.
Юхо Коккала

2
Важно помнить, что любой может совершить ошибки - ваш учитель, вы, ответчики здесь, программисты R - любой. Поэтому, пытаясь понять, где могут быть ошибки, когда что-то не так, подумайте, сколько других людей проверяют каждую вещь. В случае lmфункции в R буквально десятки тысяч людей проверили результаты, сравнив их с другими вещами, и выходные данные lmпроверяются по известным примерам каждый раз, когда что-либо изменяется в коде. С ответами здесь, по крайней мере, несколько человек могут проверить (ваш вопрос был просмотрен 29 раз).
Glen_b

1
@Glen_b Ваша точка зрения - причина, по которой я пришел сюда, чтобы спросить. Я не мог понять, как R мог ошибаться в таких базовых вычислениях, но я не мог понять, почему они были разными. Я событие слонялась вокруг исходного кода. Но, в конце концов, ошибка была в последнем месте, которое я думал искать, главным образом потому, что часть исчисления находится в пределах моих знаний. Хотя я многому научился из ответа!
ретроспективный

2
Да, важно попытаться выяснить, почему они отличаются; имеет смысл спросить здесь, если вы не можете решить это. Я пытался предположить, почему последнее место, которое вы рассмотрели, могло бы быть одним из первых мест, которые нужно посмотреть. Меня поймали на том, что я сам в последний момент «упрощал» изменения в примерах один или два раза.
Glen_b

Ответы:


25

Похоже, автор где-то допустил математическую ошибку.

Если вы расширяете отклонение суммы квадратов

S=((b+m)1)2+((b+2m)5)2+((b+4m)9)2
Sзнак равноб2+2бм+м2+1-2б-2м+б2+4бм+4м2+25-10б-20м+б2+8бм+16м2+81-18б-72м

3б2+14бм+21м2+107-30б-94м
что совпадает с выражением автора, за исключением постоянного члена, который в любом случае не имеет значения).

Sбм

dS/dбзнак равно6б+14м-303б+7м-15знак равно0
dS/dмзнак равно14б+42м-947б+21м-47знак равно0

Решить

b=(157m)/30=7(157m)/3+21m474735=(49/3+21)mm=(4735)/(2149/3)=18/7

R says this is indeed 2.571429 ...

Based on this link this seems to be from a Coursera course ... ? Maybe there was a mis-transcription of the data somewhere?

The other, independent way to do this calculation is to know that the estimated regression slope is equal to the sum of cross products ((yy¯)(xx¯)) divided by the sum of squares ((xx¯)2).

g <- c(1,2,4)
g0 <- g - mean(g)
s <- c(1,5,9)
s0 <- s- mean(s)
sum(g0*s0)/(sum(g0^2))
## [1] 2.571429

If think if the shoe sizes were {1,11/3,9} instead of {1,5,9} then the slope would come out to 8/3 ...


2
Wow. Yes, you are right. It's from a Coursera course and it's from the video, not transcription. So I'm guessing he simplified it to make the calculations simpler for the video and didn't expect anyone to try and repeat it. It just happened to be the first video that I saw so I tried to follow along. It's clear that I need to upskill when it comes to maths. I think found the error though. The constant term, which you say doesn't matter, is probably the correct value which through off his calculations. I'll look through your answer a few more times to teach myself. I really appreciate it!
post-hoc

I don't think the constant term will throw off the calculations. It won't affect the estimates of the slope and intercept (it disappears when we take the derivative), only the estimates of the residual SSQ/standard deviation.
Ben Bolker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.