Ошибка документации пакета 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() реализация?

0 ответов

Другие вопросы по тегам