1

我正在使用带有 L-BFGS-B 方法的“优化”来使用三变量数据估计三变量对数正态分布的参数。以下是我使用过的命令。

#Definition of logliklihood
logl <- function (theta, x)
{
p1=dim(x)[2]
scale= theta[1:p1]
shape.vct = theta[(p1+1):length(theta)]
shape.cov = matrix(shape.vct,p1)


ll = dlnorm.rplus(x,shape.cov,scale,thres,log=TRUE)
-sum(log(ll))

}

# Define initial values for the parameters
p1=dim(x)[2]

scale.start = array(0,dim=p1)
shape.start = array(0,dim=c(p1,p1))
diag(shape.start)=1
shape.vct = as.vector(shape.start)

#define lower and upper limits of pars for L-BFGS-B
scale_lower=rep(-Inf,p1)
scale_upper=rep(Inf,p1)
shape_lower=c(.1,-1,-1,-1,.1,-1,-1,-1,.1)
shape_upper=c(Inf,1,1,1,Inf,1,1,1,Inf)


L=c(scale_lower,shape_lower)
U=c(scale_upper,shape_upper)

# Calculate the maximum likelihood
theta.start = c(scale.start,shape.vct)
mle = optim(theta.start,logl,x=x,method="L-BFGS-B",lower=L,upper=U)

经过一些迭代后,它返回错误“L-BFGS-B 需要 fn 的有限值”。这与为参数定义的下限和上限有关,我猜是因为方差协方差矩阵往往是奇异的。任何人都可以建议我应该使用的一般逻辑来定义可行的上限和下限以避免奇异方差协方差矩阵。这是一个三元情况,但我也必须处理更高维的情况。因此,如果有人可以提出一般规则,那将非常有帮助。在此先感谢。

4

0 回答 0