代码之家  ›  专栏  ›  技术社区  ›  Mark C.

如何从rlme对象中提取特定组的随机效果?

r
  •  2
  • Mark C.  · 技术社区  · 14 年前

    random.effects(model)
    

    谢谢
    马克·Ch。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Mark C.    14 年前

    事实证明,问题在于我对这些组的索引方式。ranef(lme)返回一个数据帧,其中行名是组名。在我的数据中,我使用了一个很长的数字来区分不同的组,R四舍五入到小数点后的几个小数位。这就意味着不可能准确地引用各个组的名称。

    现在,如果我这样做了:

    M3.ranef <- ranef(M3)
    x <- M3.ranef[group_ID,1]
    

    x是名为groupid的组的随机效应,这是数据帧应该如何工作的。

        2
  •  1
  •   Roman LuÅ¡trik    14 年前

    这就是你要找的吗?

    > library(nlme)    
    > fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
                data = Loblolly,
                fixed = Asym + R0 + lrc ~ 1,
                random = Asym ~ 1,
                start = c(Asym = 103, R0 = -8.5, lrc = -3.3))
    
    > str(random.effects(fm1))
    Classes ‘ranef.lme’ and 'data.frame':   14 obs. of  1 variable:
     $ Asym: num  -5.57 -5.02 -1.69 -2.36 -2.98 ...
     - attr(*, "effectNames")= chr "Asym"
     - attr(*, "label")= chr "Random effects"
     - attr(*, "level")= int 1
     - attr(*, "standardized")= logi FALSE
     - attr(*, "grpNames")= chr "Seed"
    > random.effects(fm1)$Asym
     [1] -5.5654676 -5.0168202 -1.6920794 -2.3587798 -2.9814647 -1.4018554
     [7] -0.1100587 -2.3613150  1.1947892  2.0119121  2.9862349  3.5890462
    [13]  4.6094776  7.0963810
    
        3
  •  0
  •   David F    14 年前
    > library(nlme)
    > d <- data.frame(x=rep(letters, each=5),
                    z=rep(LETTERS[1:13], each=10),
                    y=rep(rnorm(26, sd=2), each=5) + rep(rnorm(13), each=10) + rnorm(26 * 5))
    > r <- ranef(d)   # random.effects is a synonym for this
    # Look at the structure of r
    > str(r)
    List of 2
     $ z:'data.frame':  13 obs. of  1 variable:
      ..$ (Intercept): num [1:13] -1.575 -0.365 -1.817 0.235 2.369 ...
      ..- attr(*, "effectNames")= chr "(Intercept)"
     $ x:'data.frame':  26 obs. of  1 variable:
      ..$ (Intercept): num [1:26] -0.8628 0.0536 1.724 -1.9115 -1.1764 ...
      ..- attr(*, "effectNames")= chr "(Intercept)"
     - attr(*, "label")= chr "Random effects"
     - attr(*, "level")= int 2
     - attr(*, "standardized")= logi FALSE
     - attr(*, "grpNames")= chr [1:2] "z" "x %in% z"
     - attr(*, "class")= chr [1:2] "ranef.lme" "list"
    > head(r$x)
        (Intercept)
    A/a -0.86283867
    A/b  0.05360748
    B/c  1.72401850
    B/d -1.91145501
    C/e -1.17643222
    C/f  0.24315559
    > head(r$z)
      (Intercept)
    A  -1.5752441
    B  -0.3648627
    C  -1.8167101
    D   0.2353324
    E   2.3685118
    F  -1.7544619
    > r$z["A", ]
    [1] -1.575244
    > r$x["A/a", ]
    [1] -0.8628387