GLMERTREE ranefstart和offset

GLMERTREE ranefstart和offset,tree,offset,mixed-models,party,Tree,Offset,Mixed Models,Party,我正在使用lmertree来拟合表单的降级模型 ln(y)=偏移量(ln(t0_值))+b*时间 其中,y是感兴趣的结果,t0_值是时间0时物质的初始浓度,b是要估计的参数,time是一个可变测量时间。这是一项纵向研究,因此存在一个id变量,该变量对同一受试者(HC)进行指数测量,最后是一些与受试者水平相关的协变量(即非时间依赖性),这些变量是感兴趣的 我一直在试验不同类型的lmertree模型并探索函数中的不同选项,我对ranefstart和offset的选项感到困惑,特别是,如果我设置ran

我正在使用
lmertree
来拟合表单的降级模型

ln(y)=偏移量(ln(t0_值))+b*时间

其中,
y
是感兴趣的结果,
t0_值
是时间0时物质的初始浓度,
b
是要估计的参数,
time
是一个可变测量时间。这是一项纵向研究,因此存在一个id变量,该变量对同一受试者(
HC
)进行指数测量,最后是一些与受试者水平相关的协变量(即非时间依赖性),这些变量是感兴趣的

我一直在试验不同类型的
lmertree
模型并探索函数中的不同选项,我对
ranefstart
offset
的选项感到困惑,特别是,如果我设置
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_tree1参数
ranefstart

函数
lmertree
在估计模型的LM树部分(此处
log(y)~-1+时间| TD+EP2+DFA+DTCX+TIF+SCV
)和模型的随机效应部分(此处
log(y)~(-1+时间| 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
参数,因为默认情况下,用于选择分割变量的参数稳定性测试假定在最低级别(级别I)测量分割变量。通过指定
cluster=HC
,参数稳定性测试将考虑在II级测量的分区变量。当在I级进行参数稳定性试验时,试验可能会被压倒

在终端节点中绘制二级组大小

在未来版本的
glmertree
中,最好使用plotting函数的参数来指定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, which = "tree", fitted = "marginal", 
     main = "n is group size at level II")
###适合在二级使用分区变量的示例lmertree
图书馆(“glmertree”)
数据(“GrowthCurveDemo”,package=“glmertree”)

从Marjolein一号开始,如果有可能生成树状图,提供的计数不是一级观察,而是二级观察。在我的例子中,集群是患者,如果能知道每个终端节点中有多少患者,那就太好了。当然,我知道这些信息可以从lmertree对象的数据槽中提取。答案很简单。@NicolasMolano好主意!我也对此感到好奇;只有在你提出问题后,我才想到如何尝试这样做。在上面添加了一个示例,希望对您有所帮助!
lmm_tree <- lmertree(log(y) ~-1+ time | ((-1+time)|HC) |
                       TD+EP2+DFA+DTCX+TIF+SCV, 
                       data = z0l,
                       offset = log(z0l[,"value_t0"]),
                       ranefstart = z0l[,"value_t0"])
## 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, which = "tree", fitted = "marginal", 
     main = "n is group size at level II")