1、bbmle
(1)bbmle使用
library(bbmle)
###在参数范围内,随机生成3个[0,1]范围内的数据
x=runif(3,0,1)
estimates = mle2(LogL,start=list(len1=x[1],x2=x[2],x3=x[3),method = "BFGS")
###保存数据结果
dd<-summary(estimates)
final<-dd@coef
(2)使用parallel包进行并行计算
library(parallel)
cl <- makeCluster(n) ###其中n为调用的核数
###其中func代表调用的函数,并且在func<-function(j){XXX},j的数据会进行1:1000次循环
results<-parLapply(cl,1:1000,func)
res_df<-do.call('rbind',results)
注:在使用bbmle的过程当中,得到的结果容易造成局部最优解,所以一般在求解过程当中,在区间范围内随机产生初始值进行多次操作,以此来获得最优解。
除此之外,我们可以使用演化算法进行求解。
2、DEoptim
library(DEoptim)
###parVar代表调用函数过程中所需要的函数名称以及使用的全局变量数据
parVar = c("LogL","data_fun","list_ID","subj","blocks","trials","check")
###其中parallelType==1,使用并行计算
###下行代码中有5个参数,并且对其设置区间
estimates = DEoptim(LogL,lower =c(0,0,0,0,0),upper=c(1,1,1,1,20),control = DEoptim.control(trace = FALSE,NP = 100,itermax = 500,parallelType=1,parVar=parVar))
####保存相应的参数结果
dd1<-summary(estimates)
final[1]<-dd1$optim$bestmem[1]
final[2]<-dd1$optim$bestmem[2]
final[3]<-dd1$optim$bestmem[3]
final[4]<-dd1$optim$bestmem[4]
final[5]<-dd1$optim$bestmem[5]
final[6]<-dd1$optim$bestval