晚上好,
我有一个关于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()
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()
.