Чому lm () R повертає різні оцінки коефіцієнта, ніж мій підручник?


13

Фон

Я намагаюся зрозуміти перший приклад в курсі пристосування моделей (тому це може здатися смішно простим). Я зробив обчислення вручну, і вони відповідають прикладу, але коли я повторюю їх у R, коефіцієнти моделі вимкнено. Я вважав, що різниця може бути пов’язана з підручником із застосуванням дисперсії сукупності ( ), тоді як R може використовувати вибіркові дисперсії ( S 2 ), але я не можу побачити, де вони використовуються в обчисленнях. Наприклад, якщо використовується десь, довідковий розділ щодо приміток:σ2S2lm()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.
Juho Kokkala

2
Важливо пам’ятати, що будь-хто може помилитися - ваш вчитель, ви, відповідачі тут, програмісти R - будь-хто. Тому, намагаючись розібратися, де можуть бути помилки, коли речі не згодні, подумайте, скільки інших людей перевіряють кожну річ. У випадку lmфункції в R буквально десятки тисяч людей перевіряли результати, порівнюючи їх з іншими речами, а вихідний результат lmперевіряється на відомих прикладах щоразу, коли щось змінюється в коді. З відповідями тут принаймні кілька людей, ймовірно, перевірять (ваше запитання було переглянуто 29 разів).
Glen_b -Встановіть Моніку

1
@Glen_b Ваша думка насправді є причиною, чому я прийшов сюди запитати. Я не міг зрозуміти, як R може помилятися в такому базовому розрахунку, але я не міг зрозуміти, чому вони різні. Я подію прокрутив навколо вихідного коду. Але врешті-решт помилка опинилась на останньому місці, на яке я думав шукати, здебільшого тому, що частина обчислення знаходиться в межах моїх знань. Хоча я багато чого навчився з відповіді!
post-hoc

2
Так, важливо спробувати з'ясувати, чому вони відрізняються; є сенс запитати тут, чи не можете ви це зробити. Я намагався підказати, чому саме останнє місце, яке ви розглядали, могло бути одним із перших місць, яке слід подивитися. Мене піймали, коли я один чи два рази робив "спрощення" змін у останніх хвилинах.
Glen_b -Встановіть Моніку

Відповіді:


25

Схоже, автор десь допустив математичну помилку.

Якщо розгорнути відхилення суми квадратів

S=((b+m)1)2+((b+2m)5)2+((b+4m)9)2
S=b2+2bm+m2+12b2m+b2+4bm+4m2+2510b20m+b2+8bm+16m2+8118b72m

3b2+14bm+21m2+10730b94m

Sbm

dS/db=6b+14m303b+7m15=0
dS/dm=14b+42m947b+21m47=0

Вирішити

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

R каже, що це справді 2,5571429 ...

На основі цього посилання це здається з курсу Coursera ...? Може десь сталася помилкова транскрипція даних?

(yy¯)(xx¯)(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

{1,11/3,9}{1,5,9}


2
Ого. Так, ти правий. Це з курсу Coursera, це відео, а не транскрипція. Тому я здогадуюсь, що він спростив це, щоб зробити обчислення простішими для відео, і не сподівався, що хтось спробує повторити його. Щойно це було перше відео, яке я побачив, тому я спробував перейти далі. Зрозуміло, що мені потрібно підвищити кваліфікацію, якщо мова йде про математику. Я думаю, що знайшов помилку, хоча. Постійний термін, який, на вашу думку, не має значення, є, мабуть, правильним значенням, яке випливає з його розрахунків. Я ще раз перегляну вашу відповідь, щоб навчити себе. Я дійсно ціную це!
post-hoc

Я не думаю, що постійний термін викине розрахунки. Це не вплине на оцінки схилу та перехоплення (воно зникає, коли ми беремо похідну), лише оцінки залишкового SSQ / стандартного відхилення.
Бен Болкер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.