晚上好,
我对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()有选项vecpar
和parnames
选项,应该允许指定&#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()
的电话上。