3

I am analysing routinely collected substance use data during the first 12 months' of treatment in a large sample of outpatients attending drug and alcohol treatment services. I am interested in whether differing levels of methamphetamine use (no use, low use, and high use) at the outset of treatment predicts different levels after a year in treatment, but the data is very irregular, with different clients measured at different times and different numbers of times during their year of treatment.

The data for the high and low use group seem to suggest that drug use at outset reduces during the first 3 months of treatment and then asymptotes. Hence I thought I would try a non-linear exponential decay model.

I started with the following nonlinear generalised least squares model using the gnls() function in the nlme package:

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))

where outcome is number of days of drug use in the 28 days previous to measurement, atsBase_fac is a three-level categorical predictor indicating level of amphetamine use at baseline (noUse, lowUse, and highUse), yearsFromStart is a continuous predictor indicating time from start of treatment in years (baseline = 0, max - 1), C is a parameter indicating initial level of drug use, and k is the rate of decay in drug use. The starting values of C and k are taken from nls models estimating these parameters for each group. These are the results of that model

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

So it looks as if there are differences between groups in initial rate of drug use and in rate of reduction in drug use. I would like to go a step further and fit a nonlinear mixed effects model.I tried consulting Pinhiero and Bates' book accompanying the nlme package but the only models I could find that used irregular, sparse data like mine used a self-starting function, and my model does not do that.

I tried to adapt the gnls() model to nlme like so:

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"))

bit I keep getting error message, I presume through errors in the syntax specifying the random effects.

Can anyone give me some tips on how the syntax for the random effects works in nlme?

The only dataset in Pinhiero and Bates that resembled mine used a diagonal variance-covariance matrix. Can anyone filled me in on the syntax of this nlme function, or suggest a better one?

p.s. I wish I could provide a reproducible example but coming up with synthetic data that re-creates the same errors is way beyond my skills.

llewmills
  • 2,959
  • 3
  • 31
  • 58

0 Answers0