我正在尝试使用 R 中的 optim 函数来优化模型中的三个参数,但无法弄清楚如何让它搜索一系列值,就像使用“优化”函数一样。我尝试过使用 for 循环,这是我尝试中最成功的一次,但由于某种原因它似乎停止在 355 的值,理想情况下我想尝试比这更高的组合。除此之外,我还尝试编写多次调用 optim 的函数,尝试矢量化并尝试将列表值放入 optim 中的“par”参数中,但是所有这些尝试都产生了错误消息
"unable to evaluate at initial parameters".
长短有没有人知道我如何使用 optim 函数来搜索参数值的范围,因为“优化”函数会?
任何帮助或指示将不胜感激!!!
我的代码看起来像:它是对应比例的三个最大似然函数,然后是使用 optim 的三个尝试!
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))
}
非常感谢!!