GLMERTREE:防止聚类观察在 2 个终端节点之间拆分

GLMERTREE: Prevent clustered observations from being split among 2 terminal nodes

我有一个数据集,其中在 72 个不同的地点重复进行了观察。我正在使用 GLMERTREE 包中的 lmertree 模型,其中包含随机截距、处理变量和许多 "partitioning" 变量,以确定是否存在根据分区在处理变量和响应变量之间具有不同关系的站点集群变量。在大多数情况下,该模型不会在不同终端节点之间拆分来自同一站点的观测值,但在少数情况下会这样做。

有没有什么方法可以约束模型以确保非独立观测值包含在同一个终端节点中?

最简单的方法是只考虑站点级别的分区变量。如果这些站点变量在站点的观察中不是恒定的,则对每个站点进行平均可能是有意义的。例如,要在数据 d:

中对 x2x2m 进行平均
d$x2m <- tapply(d$x2, d$site, mean)[d$site]

如果您在观察级别而不是站点级别有其他变量,则将它们 (a) 包含在公式的回归部分中可能有意义,以便相应的系数在树中 site-specific , 或 (b) 在公式的随机效应部分,以便仅估计全局系数。例如,如果您有一个要用于分区的 observation-level 回归量 z 和两个 site-level 回归量 x1x2,您可以考虑

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

最后,我们最近发现,在 cluster-level(又名 site-level)协变量具有强随机效应的情况下,用随机效应初始化模型的估计可能是有意义的,并且不与树。原因很简单,如果我们从树开始估计,这将通过 cluster-level 变量中的拆分捕获随机截距。我们计划相应地调整包,但尚未这样做。但是,您自己很容易这样做。您只需从仅估计随机截距的空模型开始:

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.

在站点级别对协方差进行额外聚类