调整mle2以使用未命名的参数向量&另外的algurments

时间:2017-02-12 05:54:08

标签: r optimization mle

晚上好,

我对mle2()语法有一个简单的问题。我有一个optim()例程,可以优化以下形式的对数似然函数(这会运行数千次,所以我不想改变太多):

ObjFun <- function(p, X, y, ModelFunction, CostFunction)

其中 p 是1-8个参数的向量, X 是输入matrix y 是响应/自变量向量, ModelFunction 是指定模型形状的函数, CostFunction 指定模型可能性在优化期间应包含的成本/损失函数。该代码可与optim()maxLik [maxLik]配合使用以下代码:

maxLik(ObjFun, method="NM", start=c(1,2,3,4,5), 
           X=conc, y=y, ModelFunction=Model1, CostFunction=GCost)

constrOptim(init.par, ObjFun, ui = Ui, ci = Ci, method = "Nelder-Mead", 
            control = control1, X=X, y=y,  ModelFunction= get(Model1),
            CostFunction= get(GCost))
##i'm obviously using constrained optimization in my actual problem.

但我无法通过mle()mle2()轻松使用它。我只想在mle2中运行它来将可能性配置文件与我自己的配置文件功能进行比较。在我深入研究mle2()代码之前,有没有人知道它是我的未命名参数向量还是使函数崩溃的其他参数?我以为是前者,但我很困惑,因为它给我的错误是:

mle2(ObjFun, method="Nelder-Mead"", start=c(1,2,3,4,5), 
           X=X, y=y, ModelFunction=Model1, CostFunction=GCost)
"minuslogl() : argument "ModelFunction" is missing, with no default"

并明确指出了这个论点。我无法在小插图中找到任何带有其他参数的示例。

PS: 我会对这篇文章发表评论,因为它明显相关: Creating function arguments from a named list (with an application to stats4::mle) 但我没有足够的评论意见。

更新: 根据Ben的小插曲,mle2()有选项vecparparnames选项,应该允许指定&#34;与Optim&#34;的兼容性。我简化了目标函数(对数似然)以包括硬编码损失和模型示例。结果如下:

mod2 <- mle2(ObjFun2, method="Nelder-Mead", start=list(1,2,3,4,5),
        vecpar=T, parnames=c("A", "B", "C", "D", "E"))

然而,这仍然无法奏效。我很难对其进行故障排除,因为我不知道如何在mle2来电后参考目标函数内的参数。如果我在print(p[2])中包含ObjFun2等调试命令,则会返回NULL。因此参数不再是矢量形式。但是print(A)迫使函数粉碎。同样,我无法在网上找到任何有关这方面的工作示例,所以也许我错过了一些非常简单的事情。

我不能像Ben在上面的链接中建议的那样使用parameters参数,因为我的模型不是线性的。

我试图查看mle2()内部,但卡在calc_mle2_function()的电话上。

0 个答案:

没有答案