lsmeans包 - Kenward-Roger df调整F测试

时间:2014-04-08 16:30:40

标签: r

我已经查看了R中的lsmeans包。包描述说明如果安装了pbkrtest包,那么对于lme4个对象,F测试的自由度是根据肯沃德和罗杰调整。 但是,安装并加载pbkrtest包后,自由度仍然是默认值(渐近):

示例:

require(lsmeans)
require(nlme)
require(pbkrtest)

Oats.lme <- lme(yield ~ factor(nitro) + Variety, random = ~1 | Block/Variety,
    subset = -c(1,2,3,5,8,13,21,34,55), data = Oats)
lsmeans(Oats.lme, list(poly ~ nitro, pairwise ~ Variety))

输出:

$`lsmeans of nitro`
 nitro    lsmean       SE df asymp.LCL asymp.UCL
   0.0  78.89205 7.280578 NA  64.62065  93.16344
   0.2  97.03422 7.128674 NA  83.06058 111.00785
   0.4 114.19813 7.128853 NA 100.22415 128.17212
   0.6 124.06857 7.067271 NA 110.21529 137.92184

...

P值是渐近的

...

我正在使用R版本3.02并且新安装了软件包。

packageVersion("lsmeans")
[1] '2.0.4'

1 个答案:

答案 0 :(得分:4)

?lsmeans个州(强调补充)

  

对于使用'lme4'软件包的模型,使用Kenward-Roger(1997)方法获得自由度,如果已安装,则使用'pbkrtest'软件包中实现的方法。如果未安装“pbkrtest”,则将自由度设置为“NA”并显示渐近结果。

这意味着您必须使用lme4::lmer而不是nlme::lme才能适合您的模型。

require(lsmeans)
require(lme4)
require(pbkrtest)

Oats.lmer <- lmer(yield ~ factor(nitro) + Variety+
            (1 | Block/Variety),
     subset = -c(1,2,3,5,8,13,21,34,55), data = Oats)
lsmeans(Oats.lmer, list(poly ~ nitro, pairwise ~ Variety))

结果确实调整了df:

## $`lsmeans of nitro`
##  nitro    lsmean       SE   df  lower.CL  upper.CL
##    0.0  78.89207 7.294379 7.78  61.98930  95.79484
##    0.2  97.03425 7.136271 7.19  80.25029 113.81822
##    0.4 114.19816 7.136186 7.19  97.41454 130.98179
##    0.6 124.06857 7.070235 6.95 107.32795 140.80919