Ошибка документации пакета NLME: суммы квадратов anova.gls() и anova.lme()
Документация по функциям nlme anova.lme()
а также anova.gls()
четко говорится:
"Когда присутствует только один подобранный объект модели, возвращается фрейм данных с суммами квадратов...".
При выполнении приведенного ниже примера сумма квадратов не печатается:
library(nlme)
fm1 <- lme(distance ~ age, Orthodont, random = ~ 1 | Subject)
anova(fm1)
# numDF denDF F-value p-value
# (Intercept) 1 80 3126.1443 <.0001
# age 1 80 114.8383 <.0001
Это похоже на ошибку для меня. Я полагаю, что об этом следует сообщить на странице R bugzilla, но у меня нет доступа к нему.
Запуск той же модели с использованием aov()
Результаты следующие:
summary(aov(distance ~ age + Error(Subject), Orthodont))
# Error: Subject
# Df Sum Sq Mean Sq F value Pr(>F)
# Residuals 26 518.4 19.94
# Error: Within
# Df Sum Sq Mean Sq F value Pr(>F)
# age 1 235.4 235.36 114.8 <2e-16 ***
# Residuals 80 164.0 2.05
Это обходной путь для расчета сумм квадратов для фиксированных эффектов и остатков вручную.
Основываясь на комментарии @Drey, я попытался получить суммы квадратов непосредственно из anova.lme()
функция. Исходный код можно увидеть, выполнив anova.lme
, Соответствующие строки выглядят так, как показано ниже (для последовательных и предельных сумм квадратов)
for (i in 1:nTerms) {
nDF[i] <- length(assign[[i]])
if (type == "sequential") {
c0i <- c0[assign[[i]]]
}
else {
c0i <- c(qr.qty(qr(vFix[, assign[[i]], drop = FALSE]),
c0))[1:nDF[i]]
}
Fval[i] <- sum(c0i^2)/nDF[i]
Pval[i] <- 1 - pf(Fval[i], nDF[i], dDF[i])
Для приведенной выше модели, c0i
= 55,9 для первой итерации и 10,7 для второй.
sum(c0i^2)
= 3126,1 для первой итерации (F-значение Intercept) и 114,8 для второй итерации (F-значение для возраста).
F-значение для возраста можно рассчитать путем деления среднего Sq возраста (235,36) на среднее Sq остатков (2,05), как показано в таблице из aov()
, anova.lme
здесь делает что-то другое, но я не знаю что. Кто-нибудь знает, что здесь происходит и как сделать это более aov()
реализация?