强制不等式约束R



我有一个函数,我用它来计算三组分正态混合物分布函数与一组给定分位数之间的平方差之和。我想使用这个函数来优化optim函数中的Nelder-Mead方法。要优化的前3个参数是3个分量的平均参数。最后两个参数是组件的权重参数。

我已经通过使用逆logit函数强制参数w1w2在0和1之间。我要强制执行的另外两个约束是mean1 > mean2 > mean3w1 + w2 + w3 = 1。如何使用此设置强制执行这些约束?

opt3 <- function(quantiles,levels,par) {
mean1 <- par[1]
mean2 <- par[2]
mean3 <- par[3]
w1 <- inv.logit(par[4])
w2 <- inv.logit(par[5])
w3 <- 1 - (w1+w2)

sum((pnorm(quantiles,mean1,sd)*w1 + 
pnorm(quantiles,mean2,sd)*w2 +
pnorm(quantiles,mean3,sd)*w3 -
levels)^2)

}

optim(par=par, opt3, quantiles=quantiles, levels=levels)
mean3 <- par[3]
mean2 <- mean3 + par[2]
mean1 <- mean2 + par[1]

则将par约束为正

最新更新