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