在 R 中使用 `optim()` 求解两个参数?
Solving for two parameters using `optim()` in R?
我正在尝试在 dbeta()
中找到 shape1
和 shape2
,这样来自 dbeta()
的两个输入值的答案:.6
和.8
变成 3
.
我正在使用下面的 optim()
但没有得到确切的结果,也就是说,我希望获得与 [=15= 一起使用时的 shape1
和 shape2
的值]和.8
给了3
和3
,但是他们没有,为什么?
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()
实心圆为拟合值,空心圆为网格最小值;我认为区别只是数字模糊(我放大了几次以确保)。无论如何,没有证据表明有任何像多重最优这样奇怪的事情。
我认为问题只是你设置了一对点,不能同时匹配任何 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()
我正在尝试在 dbeta()
中找到 shape1
和 shape2
,这样来自 dbeta()
的两个输入值的答案:.6
和.8
变成 3
.
我正在使用下面的 optim()
但没有得到确切的结果,也就是说,我希望获得与 [=15= 一起使用时的 shape1
和 shape2
的值]和.8
给了3
和3
,但是他们没有,为什么?
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()
实心圆为拟合值,空心圆为网格最小值;我认为区别只是数字模糊(我放大了几次以确保)。无论如何,没有证据表明有任何像多重最优这样奇怪的事情。
我认为问题只是你设置了一对点,不能同时匹配任何 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()