2016-08-17 60 views
0

我是R的初学者,需要用它来估计MLE。我正在使用mle2函数。但是,因为我有很多独立变量,所以在调用mle2时我需要传递许多参数值。例如R:如何使用命名向量初始化mle2中的参数值

library(bbmle) 
x <- mle2(probit, start=list(b0=1,b1=1,b2=1,c0=1,c1=1,d0=1,d1=1),method="BFGS") 

相反,我想创建一个长度为7的向量theta,并在我调用mle2时传递该向量。类似于

x <- mle2(probit, start=theta,method="BFGS") 

确切地说,这是行不通的。我是否需要改变我如何定义函数probit以相应地使用向量作为参数?

我经历了与传递向量有关的现有线程作为参数,他们建议使用do.call,但可以用它来调用mle2吗?如果是这样,怎么样?

非常感谢!

回答

0

如果我理解正确,您的目标是通过找到传递参数值的单个向量的方式来减少样板。您可以通过定义一个效用函数来实现这一点,该函数可将未命名条目的单个向量转换为适用于您的模型的命名列表,并且可用于:mle2

## vector of un-named entries 
theta <- c(1,1,1,1,1,1,1) 

## utility function 
toList <- function(th) structure(as.list(th), names=c("b0","b1","b2","c0","c1","d0","d1")) 
## check 
identical(toList(theta), list(b0=1,b1=1,b2=1,c0=1,c1=1,d0=1,d1=1)) 

## now this should work 
x <- mle2(probit, start=toList(theta), method="BFGS")