我正在分析大量接受药物和酒精治疗服务的门诊患者在治疗的前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
lowUse
和highUse
),yearsFromStart
是一个连续的预测变量,表示从开始治疗开始的时间,以年为单位(基线= 0,最大值-1),C
是一个参数,表示药物使用的初始水平,k
是药物使用的衰减率。 C
和k
的起始值取自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。我希望我能提供一个可重现的示例,但是提出重新产生相同错误的综合数据超出了我的技能范围。