【发布时间】:2017-11-10 11:02:39
【问题描述】:
目标:用“optim”函数估计sigma1和sigma2,而sigma2必须大于sigma1
模拟数据(y)
我有以下类型的数据 y:
N<-50
delta<-matrix(rep(0, N*N), nrow=N, ncol=N)
for(i in 1:(N )){
for (j in 1:N)
if (i == j+1 | i == j-1){
delta[i,j] <- 1;
}
}
sigma1<-5
sigma2<-10
diagonal=2*sigma1^2+sigma2^2
nondiag<--sigma1^2*delta
Lambda_i<-(diag(diagonal,N)+-nondiag)/diagonal
sig<-as.matrix(diagonal*Lambda_i)
sig
mu<-rep(0, N)
y<-as.vector(mvnfast::rmvn(1,mu, sig))
创建最大似然函数
mle<-function(par){
sigma1<-par[1]
sigma2<-par[2]
diagonal=2*sigma1^2+sigma2^2
nondiag<--sigma1^2*delta
Lambda_i<-(diag(diagonal,N)+-nondiag)/diagonal
sig<-as.matrix(diagonal*Lambda_i)
#lokli
loglik<--as.numeric(mvnfast::dmvn(matrix(y, byrow=T, ncol=N),mu, sig, log=T))
loglik
}
优化
par <- c(5,5)
fit<-optim(par,mle,hessian=T,
method="L-BFGS-B",lower=c(0.01,0.01),
upper=c(30,30))
fit$par
问题:如何在优化过程中设置约束:“sigma2 always Greater sigma1”?
【问题讨论】:
-
参数化问题,使 sigma2 是添加到 sigma1 的数量,并将代码中的当前 sigma2 替换为 (exp(sigma2) +sigma1)
标签: r optimization constraints