Я анализирую регулярно собираемые данные об употреблении психоактивных веществ в течение первых 12 месяцев лечения в большой выборке амбулаторных больных, посещающих службы лечения наркомании и алкоголизма. Меня интересует, предсказывают ли разные уровни использования метамфетамина (без использования, низкое и высокое использование) в начале лечения разные уровни после года лечения, но данные очень нерегулярные: разные клиенты измеряются в разное время и разные числа раз в течение года их лечения.
Данные для группы с высоким и низким уровнем потребления указывают на то, что потребление наркотиков с самого начала снижается в течение первых 3 месяцев лечения, а затем асимптот. Поэтому я решил попробовать нелинейную модель экспоненциального убывания.
Я начал со следующей нелинейной обобщенной модели наименьших квадратов, используя функцию 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
Таким образом, похоже, что существуют различия между группами по начальной норме употребления наркотиков и скорости сокращения употребления наркотиков. Я бы хотел go сделать еще один шаг и установить модель нелинейных смешанных эффектов. Я попытался обратиться к книге Пиньеро и Бейтса, сопровождающей пакет nlme, но единственные модели, которые я мог найти, которые использовали нерегулярные, разреженные данные, такие как моя, использовали самозапуск и моя модель этого не делает.
Я пытался адаптировать модель 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"))
bit Я получаю сообщение об ошибке, полагаю из-за ошибок в синтаксисе, указывающих случайные эффекты.
Может кто-нибудь дать мне несколько советов о том, как работает синтаксис для случайных эффектов в nlme
?
Единственном наборе данных в Pinhiero и Бейтс, похожий на мой, использовал диагональную матрицу дисперсии-ковариации. Может кто-нибудь объяснить мне синтаксис этой nlme
функции или предложить лучшую?
ps Я sh Я мог бы привести воспроизводимый пример, но придумал синтетические c данные, которые -создание одних и тех же ошибок выходит далеко за рамки моих навыков.