Rのoptim関数を使用してモデルの3つのパラメーターを最適化しようとしていますが、「optimize」関数を使用して可能なように、値の範囲を検索する方法を理解できません。forループを使用して試してみましたが、これは私の試みの中で最も成功しましたが、何らかの理由で355の値で停止しているようです。理想的には、これよりも高い組み合わせを試してみたいと思います。これに加えて、optimを何度も呼び出す関数を記述し、ベクトル化を試み、optim内の「par」引数にリスト値を入れることを試みましたが、これらすべての試みでエラーメッセージが生成されました。
"unable to evaluate at initial parameters".
簡単に言うと、「最適化」関数のように、optim関数を使用してパラメータの値の範囲を検索する方法を知っている人はいますか?
どんな助けやポインタも大歓迎です!!!
私のコードは次のようになります。対応するスケールの3つの最尤関数と、optimの使用を3回試みます。
rm(list=ls())
load('Dat.RData')
mean(dat)
var(dat)
loglike<-function(par,dat,scale)
{ ptp<-dat[1:length(dat)-1]
ptp1<-dat[2:length(dat)]
r<-par['r']
k<-par['k']
sigma<-par['sigma']
if(scale=='log')
{
return(sum(dnorm(log(ptp1)-log(ptp)*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
if (scale=='sqrt')
{
return(sum(dnorm(sqrt(ptp1)-sqrt(ptp)*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
if (scale=='linear')
{
return(sum(dnorm(ptp1-ptp*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
}
sqrts<-c()
for(i in 1:4000){
sqrts[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='sqrt',method='Nelder-Mead',control=list(fnscale=-1))
}
logs<-c()
for(i in 1:4000){
logs[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='log',method='Nelder-Mead',control=list(fnscale=-1))
}
lins<-c()
for(i in 1:4000){
lins[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='linear',method='Nelder-Mead',control=list(fnscale=-1))
}
どうもありがとう!!