我有一个函数,我用它来计算三组分正态混合物分布函数与一组给定分位数之间的平方差之和。我想使用这个函数来优化optim
函数中的Nelder-Mead
方法。要优化的前3个参数是3个分量的平均参数。最后两个参数是组件的权重参数。
我已经通过使用逆logit函数强制参数w1
和w2
在0和1之间。我要强制执行的另外两个约束是mean1 > mean2 > mean3
和w1 + 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约束为正