R Optim()函数错误

R Optim()函数错误,r,mathematical-optimization,R,Mathematical Optimization,这是我的密码 beta1 = function(a,b,t) { beta(a+(1/t),b) } beta2 = function(a,b,t) { beta(a+(2/t),b) } eb11 = function(a,b,t) { beta2(a,b,t)/beta(a,b) } eb12 = function(a,b,t) { (beta1(a,b,t)-beta2(a,b,t))/beta(a,b) } eb22 = function(a,b,t) { 1 + (beta2(a,b

这是我的密码

beta1 = function(a,b,t) { beta(a+(1/t),b) }
beta2 = function(a,b,t) { beta(a+(2/t),b) }

eb11 = function(a,b,t) { beta2(a,b,t)/beta(a,b) }
eb12 = function(a,b,t) { (beta1(a,b,t)-beta2(a,b,t))/beta(a,b) }
eb22 = function(a,b,t) { 1 + (beta2(a,b,t)-2*beta1(a,b,t))/beta(a,b) }

eb11r11 = function(a,b,t) { beta2(a,b,t)*beta(a,b)/beta1(a,b,t)^2 }
eb12r12 = function(a,b,t) { (beta1(a,b,t)-beta2(a,b,t))*beta(a,b)/beta1(a,b,t)/(beta(a,b)-beta1(a,b,t)) }
eb22r22 = function(a,b,t) { (beta(a,b)^2 + (beta2(a,b,t)-2*beta1(a,b,t))*beta(a,b))/(beta(a,b)-beta1(a,b,t))^2 }

gbetloglik = function(a,b,t) {
  loglik = n1*log(eb11r11(a,b,t)) + n2*log(eb12r12(a,b,t)) + n3*log(eb22r22(a,b,t))
  return(-loglik)
}

abt = optim(c(0.5,0.5,1),gbetloglik,lower=c(0.001,0.001,0.001),method="L-BFGS-B")$par
我想做的是找到最大化“gbetloglik”函数的a、b和t。 但我犯了这个错误

Error in 2/t : 't' is missing
似乎缺少函数“beta2”的第三个参数。当我直接在gbetloglik函数中输入三个数字时,它工作得很好。这个问题只发生在optim()函数中。
有人知道吗?

看起来您误解了
optim
函数的第一个参数。第一个参数只是为正在优化的1个参数提供初始值。在您的例子中,这为
gbetloglik
的一个参数提供了3个初始猜测。此呼叫将在以下情况下起作用:

abt = optim(0.5,gbetloglik,lower=c(0.001,0.001,0.001),method="L-BFGS-B", b=0.5, t= 0.5)$par
但不会对所有三个参数进行优化,它只会对给定的
b
t
进行优化。要跨所有参数进行优化,您需要从安装一个外部包。以下是
nlmrt
中的一个示例:

ydat  =  c(6.308, 6.94, 9.638, 12.866, 17.069, 23.192, 31.443, 37.558, 51.156, 64.948, 77.995, 91.972)
tdat  =  seq_along(ydat)
start1  =  c(b1=1, b2=1, b3=1)
eunsc  =   y ~ b1/(1+b2*exp(-b3*tt))
anlxb1g =try(nlxb(eunsc, start=start1, trace=FALSE, data=data.frame(y=ydat, tt=tdat)))
print(anlxb1g)
anlxb1g$coefficients