r - 在 R 中使用 `optim()` 求解两个参数?

标签 r function for-loop optimization sapply

我正在尝试查找shape1shape2dbeta()这样,来自 dbeta() 的答案对于两个输入值:.6.8成为3 .

我正在使用下面的optim()但没有得到确切的结果,即我期望获得 shape1 的值和shape2.6 一起使用时和.833 ,但他们没有,为什么?

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.

最佳答案

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

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

关于r - 在 R 中使用 `optim()` 求解两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45684517/

相关文章:

c++ - 在c++中构造围绕中心元素的镜像 vector

r - 使用 R 解析其中键和值是数值的类似字典的结构

c++ - 使用 Rcpp::IntegerVectors 添加 int

R SQLDF 如何处理 NA、除法等运算中的缺失值?

c - 用于在两个数组之间的相同位置上查找相同数字的递归函数

创建 argv[] 以将参数发送到另一个函数

r - 使用 R 在直方图中使 y 轴对数

java - 将数组传递给函数时.class 出现预期错误

java - ArrayList - 如果同一个对象我列出了精确的 2 次并且如果为 : append to "tempFinalFilterSearchList" 则计数

java - 在嵌套 "for"语句时跳出此 "if"循环