【问题标题】:GLMERTREE ranefstart and offsetGLMERTREE ranefstart 和偏移量
【发布时间】:2021-03-08 01:45:29
【问题描述】:

我正在使用lmertree 来拟合表单的退化模型

ln(y)=offset(ln(t0_value))+b*time

其中y 是感兴趣的结果,t0_value 是物质在时间 0 的初始浓度,b 是要估计的参数,time 是变量测量时间。这是一项纵向研究,因此存在一个 id 变量,它索引来自同一主题 (HC) 的度量,最后一些协变量是感兴趣的主题水平(即非时间依赖性)。

我一直在试验不同类型的lmertree 模型并探索函数中的不同选项,我对ranefstartoffset 选项感到困惑,特别是如果我设置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, 
                       data = z0l,
                       offset = log(z0l[,"value_t0"]),
                       ranefstart =NULL)
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"])

请注意,我已经消除了截距并使用偏移选项来指定我想要的模型。

模型 lmm_tree2lmm_tree3 非常相似(它们的深度不同,但拆分标准非常相似),但是模型 lmm_tree1 只有一个节点。

问题是:何时以及为什么应该使用 ranefstart 选项?

【问题讨论】:

    标签: tree offset mixed-models party


    【解决方案1】:

    参数ranefstart

    函数 lmertree 在估计模型的 LM 树部分(此处为 log(y) ~ -1 + time | TD + EP2 + DFA + DTCX + TIF + SCV)和模型的随机效应部分(此处为 log(y) ~ ((-1+time)|HC))之间进行迭代。参数ranefstart 控制初始化,但这通常是无关紧要的。当响应(此处为log(y))可能由 LM 树和随机效应解释的变化时,这可能是重要的:

    • 默认情况下,估计是用LM树部分初始化的;那么这种变化很可能会被树捕获。

    • 如果您覆盖默认值并指定ranefstart = TRUElmertree 将使用随机效应部分初始化估计;那么这种变化很可能会被随机效应捕获。

    您使用ranefstart = NULLranefstart = TRUE 获得了非常相似的结果,这表明最终模型对树初始化与随机效应不敏感。在这种情况下,使用默认值就可以了。

    通过指定ranefstart = z0l[,"value_t0"],变量z0l[,"value_t0"] 将作为偏移量包含在第一次估计迭代中的线性预测器中。在进一步的迭代中,将不再使用此偏移量。因为您已经指定了offset = log(z0l[,"value_t0"]),所以在第一次迭代中偏移量加倍;这可能会将迭代估计发送到错误的方向,并且进一步的迭代可能无法再纠正这一点。这可以解释为什么你会得到如此不同的结果。

    ranefstart 参数的使用仅在您期望响应中的大部分方差可能由树以及随机效应潜在地解释时才有用,并且您更喜欢这种变化由模型的随机效应部分来解释,而不是由树来解释。

    参数cluster

    此外:您提到您有主题级别(II 级)的分区协变量。在这种情况下,我建议使用 cluster 参数,因为默认情况下,用于选择拆分变量的参数稳定性测试假定要在最低级别(级别 I)测量分区变量。通过指定cluster = HC,参数稳定性测试将考虑在级别 II 测量的分区变量。当参数稳定性测试在第一级进行时,测试可能会被压倒。

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

    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, which = "tree", fitted = "marginal", 
         main = "n is group size at level II")
    

    请注意,您需要针对自己的代码/树进行调整的是,您的 (g)lmertree 应命名为 lt。此外,不需要使用fitted = "marginal",但对于纵向数据,通常会产生更直观的图。请参阅?plot.lmertree 了解更多信息。

    【讨论】:

    • Marjolein 我一直在徘徊,如果有可能生成树形图,它提供的计数不是用于观察级别 I 而是级别 II。在我的情况下,集群是患者,很高兴知道每个终端节点中有多少患者。当然,我知道可以从 lmertree 对象的数据槽中提取此信息。 Ty 的答案。
    • @NicolasMolano 好主意!我也想知道这个;只有在你提出问题之后,我才想到如何尝试这个。在上面添加了一个示例,希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多