2017-06-26 19 views
0

データがhereR:ネルダ - ミードの最適化、非線形混合効果モデルの

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を呼び出します。は私の関数です。parは、私の4つのパラメータの値で、lowerupperの境界です。しかし、私はエラーに遭遇しています

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

ここで間違っていたのは何ですか?あなたの関数 `myfun2`で

+0

、一つだけの引数があるはず、と' s.p1'は 's.b1'が第二である必要があり、引数の最初の要素でなければなりません... – Consistency

答えて

0
myfun2 <- function(p1b1p2b2){ 
    s.p1 <- p1b1p2b2[1] 
    s.b1 <- p1b1p2b2[2] 
    s.p2 <- p1b1p2b2[3] 
    s.b2 <- p1b1p2b2[4] 
    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) 
} 
関連する問題