NLME包文档错误:anova.gls()和anova.lme()平方和

时间:2016-10-12 09:46:26

标签: r nlme

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值)和第二次迭代的114.8(年龄的F值)。

age 的F值可以通过将年龄均值Sq(235.36)除以残差的均值Sq(2.05)来计算,如{{1}中的表所示}。 aov()在这里做了不同的事情,但我不知道是什么。有人知道这里发生了什么以及如何使其与anova.lme实施更加一致吗?

0 个答案:

没有答案