【问题标题】:nlme: fit mixed model using CSH covariance modelnlme:使用 CSH 协方差模型拟合混合模型
【发布时间】:2017-04-13 00:07:40
【问题描述】:

我正在尝试使用 nlme 包在 R 中拟合具有重复测量 (MMRM) 模型的混合模型。

数据结构如下: 每个患者属于三个组 (grp) 之一,并被分配到一个治疗组 (trt)。 在 6 次就诊(就诊)期间测量患者结果 (y)。

我想在不同的访问中使用具有异质方差的复合对称模型(如 SAS 的 PROC MIXED 的 CSH 类型,https://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_mixed_sect020.htm)。

为此,我使用 lme 中的相关参数将相关结构设置为 CS (corCompSymm) 和权重参数,因此方差是访问的函数。

我也尝试过给 corCompSymm 本身的表单参数添加访问。

我遇到的问题:无论我是否在对 lme 的调用中设置 weights 参数,我似乎都得到了相同的结果(换句话说,我似乎得到了 CS 模型而不是 CSH 模型)。

执行下面的代码,你会注意到无论使用什么模型,模型参数估计的协方差矩阵的对角线都是相同的,这表明权重参数被忽略了。

remove(list = objects())
library(nlme)

set.seed(55)

npatients     = 200; 
nvisits       = 6;

#---
# Generate some data:
subject_table = data.frame(subject = sprintf("S%03d", 1:npatients),
                           trt     = sample(x = c("P", "D"),       replace = T, size = npatients),
                           grp     = sample(x = c("A", "B", "C"),  replace = T, size = npatients))
subject_table = merge(subject_table, 
                      data.frame(visit.number = 1:6))
subject_table = transform(subject_table, 
                          visit = sprintf("V%02d", visit.number),
                          y     = rnorm(nrow(subject_table), mean = 0, sd = visit.number^2))
subject_table = transform(subject_table, 
                          visit   = factor(visit),
                          subject = factor(subject, ordered = T, levels =     sort(unique(as.character(subject)))),
                          grp     = factor(grp),
                          trt     = factor(trt))
#---
# Fit MMRM model to data using nlme
cs_model       = lme(y ~ trt*visit*grp,                              # fixed     effects 
                     random      = ~1|subject,                       # random effects 
                     data        = subject_table,                    # data
                     correlation = corCompSymm(form=~1|subject))     # CS correlation matrix within patient

csh_model_v1   = lme(y ~ trt*visit*grp,                              # fixed effects 
                     random      = ~1|subject,                       # random effects 
                     data        = subject_table,                    # data
                     weights     = varIdent(~1|visit),               # different "weight" within each visit (I think)
                     correlation = corCompSymm(form=~1|subject))     # CS correlation matrix within patient

csh_model_v2   = lme(y ~ trt*visit*grp,                              # fixed effects 
                     random      = ~1|subject,                       # random effects 
                     data        = subject_table,                    # data
                     weights     = varIdent(~visit|subject),         # different "weight" within each visit (I think)
                     correlation = corCompSymm(form=~1|subject))     # CS correlation matrix within patient

csh_model_v3   = lme(y ~ trt*visit*grp,                              # fixed effects 
                     random      = ~1|subject,                       # random effects 
                     data        = subject_table,                    # data
                     correlation = corCompSymm(form=~visit|subject)) # CS correlation matrix within patient

diag(vcov(cs_model))
diag(vcov(csh_model_v1))
diag(vcov(csh_model_v2))
diag(vcov(csh_model_v3))

问题: 如何让 nlme 为不同的访问拟合不同的方差参数?

【问题讨论】:

    标签: r nlme


    【解决方案1】:

    经过几个死胡同,问题似乎在于确保在对 varIdent 的调用中设置了正确的参数。

    正确的做法似乎是:

    csh_model_right = lme(y ~ trt*visit*grp,                          # fixed effects 
                      random      = ~1|subject,                   # random effects 
                      data        = subject_table,                # data
                      weights     = varIdent(form=~1|visit),      # different "weight" within each visit (I know)
                      correlation = corCompSymm(),                # CS correlation matrix within subject per random statement above
                      control     = lme.control) 
    

    看起来一样,但请注意传递给 varIdent 的参数被明确标识为“form”。如果以任何其他方式解释,我原以为会发生崩溃,但我错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2020-11-18
      • 2015-12-01
      • 2017-02-26
      相关资源
      最近更新 更多