【问题标题】:Solving for two parameters using `optim()` in R?在 R 中使用“optim()”求解两个参数?
【发布时间】:2018-01-22 21:10:45
【问题描述】:

我试图在dbeta() 中找到shape1shape2,这样dbeta() 的两个输入值的答案:.6.8 变成3

我正在使用下面的optim(),但没有得到确切的结果,也就是说,我希望得到shape1shape2 的值,当与.6.8 一起使用时,会给出33,但他们没有,为什么?

f <- function(x) {
 y <- c(3, 3) - dbeta(c(.6, .8), shape1 = x[1],  shape2 = x[2])  
}

AA = optim(c(1, 1), function(x) sum(f(x)^2), control = list(reltol = (.Machine$double.eps))) 

parms = unname(AA$par)

dbeta(c(.6, .8), parms[1], parms[2]) # Here I expect to get `3` for `.6` and `.8` but I don't.

【问题讨论】:

  • 我不确定这里发生了什么,但是当我对参数进行一些操作时,例如将f 设置为c(1, 1) - ... 并将optim 的初始值设置为c(0.5, 0.5), or setting f` 到 c(2, 2) - ... 具有相同的初始值,我得到了预期的结果。将这些值中的一个或另一个设置为较大的量级会导致结果不正确。

标签: r function for-loop optimization sapply


【解决方案1】:

我对此进行了简要介绍。我不认为拟合有任何问题:这是似然面的图片:

library(emdbook)
cc <- curve3d(g(c(x,y)),xlim=c(1,20),ylim=c(1,20),
              sys3d="none")
pp <- which(cc$z==min(cc$z),arr.ind=TRUE)
png("betasurf.png")
with(cc,image(x,y,z))
points(parms[1],parms[2],pch=16)
points(cc$x[pp[1]],cc$y[pp[2]],pch=1)
dev.off()

实心圆是拟合值,空心圆是网格的最小值;我认为区别只是数字模糊(我放大了几次以确保)。无论如何,没有证据表明有什么奇怪的东西,比如多重最优。

我认为问题在于您设置了一组 任何 Beta 分布 无法同时匹配的点; optim() 为您提供最合适的...

png("betatmp.png")
curve(dbeta(x,parms[1],parms[2]),from=0,to=1)
points(c(0.6,0.8),c(3,3),pch=16)
dev.off()

【讨论】:

猜你喜欢
  • 2019-05-07
  • 2014-08-28
  • 2021-10-25
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2016-04-10
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多