如何解决GLMERTREE ranefstart 和偏移量
我正在使用 lmertree
来拟合形式的退化模型
ln(y)=offset(ln(t0_value))+b*time
其中 y
是感兴趣的结果,t0_value
是物质在时间 0 的初始浓度,b
是要估计的参数,time
是一个可变测量时间。这是一项纵向研究,因此存在一个 id 变量,该变量索引来自同一主题 (HC
) 的度量,最后一些协变量是感兴趣的主题级别(即非时间相关)。>
我一直在试验不同种类的 lmertree
模型并探索函数中的不同选项,我对选项 ranefstart
和 offset
感到困惑,特别是如果我设置了 { {1}} 我得到的结果与 ranefstart=T
现在我展示一些用于拟合模型的代码:
ranefstart=NULL
lmm_tree1 <- lmertree(log(y) ~-1+ time | ((-1+time)|HC) |
TD+EP2+DFA+DTCX+TIF+SCV,data = z0l,offset = log(z0l[,"value_t0"]),ranefstart =T)
lmm_tree2 <- lmertree(log(y) ~-1+ time | ((-1+time)|HC) |
TD+EP2+DFA+DTCX+TIF+SCV,ranefstart =NULL)
请注意,我已经消除了截距并使用了偏移选项来指定我想要的模型。
模型 lmm_tree <- lmertree(log(y) ~-1+ time | ((-1+time)|HC) |
TD+EP2+DFA+DTCX+TIF+SCV,ranefstart = z0l[,"value_t0"])
和 lmm_tree2
非常相似(深度不同但拆分条件非常相似),但是模型 lmm_tree3
只有一个节点。
问题是:我何时以及为什么应该使用 ranefstart 选项?
解决方法
参数 ranefstart
函数 lmertree
在估计模型的 LM 树部分(此处为 log(y) ~ -1 + time | TD + EP2 + DFA + DTCX + TIF + SCV
)和模型的随机效应部分(此处为 log(y) ~ ((-1+time)|HC)
)之间迭代。参数 ranefstart
控制初始化,但这通常无关紧要。当响应中存在变化(此处为 log(y)
)时,这可能是必然的,这可能由 LM 树和随机效应来解释:
-
默认情况下,估计是用LM树部分初始化的;那么这种变化很可能会被树捕获。
-
如果覆盖默认值并指定
ranefstart = TRUE
,lmertree
将使用随机效应部分初始化估计;那么这种变化很可能会被随机效应捕获。
您使用 ranefstart = NULL
和 ranefstart = TRUE
获得了非常相似的结果,表明最终模型对树初始化与随机效应不敏感。在这种情况下,使用默认值就可以了。
通过指定 ranefstart = z0l[,"value_t0"]
,变量 z0l[,"value_t0"]
将作为第一次估计迭代的线性预测变量中的偏移量。在进一步的迭代中,将不再使用此偏移量。因为您已经指定了 offset = log(z0l[,"value_t0"])
,所以在第一次迭代中偏移量加倍;这可能会将迭代估计发送到错误的方向,并且进一步的迭代可能无法再对此进行纠正。这可以解释为什么你得到了如此不同的结果。
使用 ranefstart
参数仅在您预计响应中的大部分方差可能由树和随机效应解释时才有用,并且您更喜欢这种变化由模型的随机效应部分来解释,而不是由树来解释。
参数 cluster
另外:您提到您有主题级(II 级)分区协变量。在这种情况下,我建议使用 cluster
参数,因为默认情况下,用于选择拆分变量的参数稳定性测试假定要在最低级别(级别 I)测量分区变量。通过指定 cluster = HC
,参数稳定性测试将考虑在级别 II 测量的分区变量。当参数稳定性测试在 I 级进行时,测试可能会被压倒。
绘制终端节点中的二级组大小
在 glmertree
的未来版本中,最好有一个绘图函数的参数来指定 n 是否应该反映 I 级的样本量、II 等。目前,我可以建议以下方法:
## Fit an example lmertree with partitioning variables at level II
library("glmertree")
data("GrowthCurveDemo",package = "glmertree")
form <- y ~ time | person | x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
lt <- lmertree(form,cluster = person,data = GrowthCurveDemo)
## Create a tree copy with node sample sizes at level II
node_ids <- predict(lt,type = "node")
lt_node <- as.list(lt$tree$node)
for (i in unique(node_ids)) {
lt_node[[i]]$info$nobs <-
length(unique(lt$tree$data[node_ids == i,"(cluster)"]))
}
lt2 <- lt
lt2$tree$node <- as.partynode(lt_node)
## Compare resulting trees:
plot(lt,which = "tree",fitted = "marginal",main = "n is group size at level I")
plot(lt2,main = "n is group size at level II")
请注意,您需要针对自己的代码/树进行调整的是,您的 (g)lmertree
应命名为 lt
。此外,fitted = "marginal"
的使用不是必需的,但对于纵向数据,通常可以绘制更直观的图。有关详细信息,请参阅 ?plot.lmertree
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。