使用R中的`optim()`求解两个参数?

时间:2017-08-14 23:34:28

标签: r function for-loop optimization sapply

我正试图在shape1中找到shape2dbeta(),以便dbeta()对两个输入值的回答:.6和{{ 1}}成为.8

我正在使用下面的3,但没有得到确切的结果,我希望获得与optim()shape1一起使用的shape2.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.

1 个答案:

答案 0 :(得分:2)

我简要地看了一眼。我不认为适合有任何问题:这里是可能性表面的图片:

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()

enter image description here

填充圆是拟合值,空心圆是网格的最小值;我认为差异只是数字模糊(我放大了几次才能确定)。无论如何,没有任何像多重最佳的奇怪的证据。

我认为问题只是您已经设置了一对无法同时与任何 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()

enter image description here