代码之家  ›  专栏  ›  技术社区  ›  Nick_89

GLMERTREE:防止在2个终端节点之间拆分群集观测

  •  4
  • Nick_89  · 技术社区  · 6 年前

    我有一个在72个不同地点重复观测的数据集。我正在使用GLMERTREE包中的lmertree模型,该模型带有一个随机截距、一个治疗变量和许多“分区”变量,以确定是否存在在治疗变量和反应变量之间具有不同关系的站点集群,这取决于分区变量。在大多数情况下,该模型不会在不同的终端节点之间分割来自同一站点的观测值,但在少数情况下确实如此。

    是否有某种方法约束模型,以确保非独立观测值包含在同一终端节点中?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Achim Zeileis    6 年前

    最简单的方法是只考虑站点级别的分区变量。如果这些站点变量在站点的观测值中不是常数,则可以对每个站点进行平均。例如,对回归器求平均值 x2 x2m 在数据中 d :

    d$x2m <- tapply(d$x2, d$site, mean)[d$site]
    

    如果在观测级别而不是站点级别上有其他变量,则可以将它们(a)包含在公式的回归部分中,以便相应的系数在树中是特定于站点的, 或(b)在公式的随机效应部分,以便仅估计全局系数。例如,如果您有一个观测水平回归器 z 和两个站点级回归器 x1 x2个 您可能会考虑

    ## (a)
    y ~ treatment + z | site | x1 + x2
    ## (b)
    y ~ treatment | (1 + site) + z | x1 + x2
    

    最后,我们最近发现,在集群级(又名站点级)协变量具有强随机效应的情况下,用随机效应而不是树来初始化模型的估计可能是有意义的。原因很简单,如果我们从树开始估算,那么这将通过集群级变量中的拆分捕获随机截取。我们计划相应地调整方案,但尚未这样做。然而,你自己很容易做到这一点。您只需从仅估计随机截距的空模型开始:

    null_lmm <- lmer(y ~ (1 | site), data = d)
    

    然后提取随机截距并将其包含在数据中:

    d$ranef <- ranef(null_lmm)$site[[1]][d$site]
    

    并将其作为随机效果的起始值:

    tree_lmm <- lmertree(y ~ treatment | site | x1 + x2 + ...,
      data = d, ranefstart = d$ranef, ...)
    

    您可以通过设置 cluster = site