nlminb函数

时间:2017-11-19 17:16:45

标签: r log-likelihood

我有一个函数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只是被忽略。 设置此约束以便能够比较不同模型的参数值非常重要。我知道我可以手动执行此操作,但希望找到编写代码的方法。 请问,请帮我解决这个问题并使约束适用? 谢谢!

0 个答案:

没有答案