我有一个函数 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 非常重要。我知道我可以手动执行此操作,但想找出在编码中实现它的方法。请您帮我解决这个问题并施加约束吗?谢谢!