nlme中非线性混合效应模型的对角方差-协方差矩阵的语法

时间:2020-03-29 11:54:29

标签: r mixed-models nlme

我正在分析大量接受药物和酒精治疗服务的门诊患者在治疗的前12个月中定期收集的物质使用数据。我对在治疗开始时甲基苯丙胺使用量的不同水平(不使用,低使用量和高使用量)是否会预测治疗一年后的不同水平感兴趣,但数据非常不规则,在不同的时间和时间测量了不同的客户在他们的治疗年份中,有不同的数字次。

高用量组和低用量组的数据似乎表明,在治疗的前三个月中,开始使用药物减少,然后逐渐消失。因此,我以为我会尝试非线性指数衰减模型。

我从gnls()包中的nlme函数开始,使用以下非线性广义最小二乘模型:

fitExp <- gnls(outcome ~ C*exp(-k*yearsFromStart),
               params = list(C ~ atsBase_fac, k ~ atsBase_fac),
               data = dfNL,
               start = list(C = c(nsC[1], lsC[1], hsC[1]),
                            k = c(nsC[2], lsC[2], hsC[2])),
               weights = varExp(-0.8, form = ~ yearsFromStart),
               control = gnlsControl(nlsTol = 0.1))

其中outcome是测量前28天的药物使用天数,atsBase_fac是三级分类预测变量,指示基线时的苯丙胺使用水平(noUse lowUsehighUse),yearsFromStart是一个连续的预测变量,表示从开始治疗开始的时间,以年为单位(基线= 0,最大值-1),C是一个参数,表示药物使用的初始水平,k是药物使用的衰减率。 Ck的起始值取自nls模型,这些模型为每个组估计了这些参数。这些是该模型的结果

Generalized nonlinear least squares fit
  Model: outcome ~ C * exp(-k * yearsFromStart) 
  Data: dfNL 
       AIC      BIC    logLik
  27672.17 27725.29 -13828.08

Variance function:
 Structure: Exponential of variance covariate
 Formula: ~yearsFromStart 
 Parameter estimates:
    expon 
0.7927517 

Coefficients:
                      Value Std.Error  t-value p-value
C.(Intercept)      0.130410 0.0411728  3.16738  0.0015
C.atsBase_faclow   3.409828 0.1249553 27.28839  0.0000
C.atsBase_fachigh 20.574833 0.3122500 65.89218  0.0000
k.(Intercept)     -1.667870 0.5841222 -2.85534  0.0043
k.atsBase_faclow   2.481850 0.6110666  4.06150  0.0000
k.atsBase_fachigh  9.485155 0.7175471 13.21886  0.0000

因此,看起来两组之间的初始用药率和减少用药率存在差异。我想更进一步,以适应非线性混合效果模型。我尝试查阅伴随着nlme软件包的Pinhiero和Bates的书,但我发现的唯一模型使用的是不规则稀疏数据(例如我的)使用了自启动函数,而我的模型不这样做。

我尝试将gnls()模型调整为nlme,如下所示:

fitNLME <- nlme(model = outcome ~ C*exp(-k*yearsFromStart),
                data = dfNL,
                fixed = list(C ~ atsBase_fac, k ~ atsBase_fac),
                random = pdDiag(yearsFromStart ~ id),
                groups = ~ id,
                start = list(fixed = c(nsC[1], lsC[1], hsC[1], nsC[2], lsC[2], hsC[2])),
                weights = varExp(-0.8, form = ~ yearsFromStart),
                control = nlmeControl(optim = "optimizer"))

位,我不断收到错误消息,我推测语法中的错误会指定随机效果。

谁能给我一些有关随机效果的语法工作原理的提示 nlme

Pinhiero和Bates中唯一类似于我的数据集使用对角方差-协方差矩阵。谁能给我介绍此nlme函数的语法,还是建议一个更好的函数?

p.s。我希望我能提供一个可重现的示例,但是提出重新产生相同错误的综合数据超出了我的技能范围。

0 个答案:

没有答案