1

我有一个函数 f_2 并且需要通过 nlminb 最小化它的参数以估计对数似然(这是 nlminb 输出中的目标)。我想添加一个约束(u1+u2+u3+u4+u5+u6+u7+u8+u9)==1或参数总和等于 1。我的代码如下:

f_2<-function(par){
  u1<-par[1]
  u2<-par[2]
  u3<-par[3]
  u4<-par[4]
  u5<-par[5]
  u6<-par[6]
  u7<-par[7]
  u8<-par[8]
  u9<-par[9]
  u1+u2+u3+u4+u5+u6+u7+u8+u9==1
  -(n1_2*log(u1/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+n2_2*log(u2/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+
      n3_2*log(u3/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+n4_2*log(u4/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+
      n5_2*log(u5/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+n6_2*log(u6/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+
      n7_2*log(u7/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+n8_2*log(u8/(u1+u2+u3+u4+u5+u6+u7+u8+u9))+
      n9_2*log(u9/(u1+u2+u3+u4+u5+u6+u7+u8+u9)))
}
z1_2<-nlminb(c(1,1,1,1,1,1,1,1,1),f_2, lower = 0.0001, upper = Inf)

我的输出是

$par
[1] 0.57573059 1.62807832 2.99217185 0.01711788 0.01621807 0.60546191 0.39102822 0.03153362 0.19371337

. 如您所见,参数总和为 1 的约束被忽略了。设置此约束以便能够比较不同模型的 par 非常重要。我知道我可以手动执行此操作,但想找出在编码中实现它的方法。请您帮我解决这个问题并施加约束吗?谢谢!

4

0 回答 0