R: Оптимизация Нелдера-Мида для нелинейных моделей смешанных эффектов

Данные находятся здесь

library(nlme)
library(dfoptim)
dat0 <- read.table("aids.dat2",head=T)
dat1 <- dat0[dat0$day<=90, ]   # use only first 90-day data
dat2 <- dat1[!apply(is.na(dat1),1,any),]  # remove missing data 
aids.dat <- groupedData(lgcopy ~ day | patid, data=dat2)
aids.dat$log10copy = log10(aids.dat$lgcopy)

myfun2 <- function(s.p1, s.b1, s.p2, s.b2){
  model = nlme(log10copy ~ exp(p1-b1*day) + exp(p2-b2*day + 1),
               fixed = list(p1 ~ 1, b1 ~ 1, p2 ~ 1, b2 ~ 1),
               random = list(patid = pdDiag(list(p1 ~ 1, b1 ~ 1, p2 ~ 1, b2 ~ 1))),
               start = list(fixed = c(p1 = s.p1, b1 = s.b1, p2 = s.p2, b2 = s.b2)),
               data =aids.dat) 
  return(model$logLik)
}

nmkb(fn = myfun2, par = c(1.13, 0.25, 13.1, 1.3), lower = c(0.8, -0.3, 5, -2), upper = c(1.6, 0.6, 20, 13))

Я пытаюсь запустить алгоритм оптимизации Нелдера-Мида (в пакете dfoptim), чтобы найти хорошие начальные значения для моей модели нелинейных смешанных эффектов. Моя целевая функция - это logLik из моей модели. Затем я вызываю nmkb, где fn - моя функция, par - значения моих 4 параметров с их границами lower и upper. Однако я столкнулся с ошибкой

Error in nlme.formula(log10copy ~ exp(p1 - b1 * day) + exp(p2 - b2 * day +  : 
  argument "s.b1" is missing, with no default  

Кажется, проблема в синтаксисе, но что именно здесь пошло не так?


person Adrian    schedule 26.06.2017    source источник
comment
В вашей функции myfun2 должен быть только один аргумент, и s.p1 должен быть первым элементом аргумента, s.b1 должен быть вторым ...   -  person Consistency    schedule 26.06.2017