1

晚上好,

我有一个关于mle2()语法的快速问题。我有一个optim()优化以下形式的对数似然函数的例程(并且运行了数千次,所以我不想改变太多):

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

其中p是 1-8 个参数的向量,X是输入matrixy是响应/自变量向量,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()or一起工作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:我本来只是对这篇文章发表评论,因为它显然是相关的: 从命名列表创建函数参数(使用 stats4::mle 的应用程序) 但我没有足够的评论点。

更新:根据 Ben 的小插图,mle2() 有选项vecpar和选项应该允许指定“与 Optim 兼容”。parnames我简化了目标函数(对数似然)以包含硬编码损失和模型示例。结果如下所示:

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)强制函数粉碎。同样,我在网上找不到任何可行的例子,所以也许我错过了一些非常简单的东西。

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

我试图查看内部,mle2()但在调用calc_mle2_function().

4

0 回答 0