在R中写入具有惩罚的对数似然函数

时间:2014-09-19 18:44:50

标签: r optimization constraints newtons-method

我试图在给定一组约束并使用Newton-Raphson方法的情况下估计我的对数似然函数的参数。

我的实际目标函数比我将在这个问题中展示的函数更复杂,并且它具有相当复杂的约束集来实现(即,估计系数的比率矩阵需要具有更小的谱半径然后一个。)由于这种约束,我不能简单地使用“maxNR”或“nlm”或“constrOptim”或“optim”,我决定将此约束作为我的似然函数中的惩罚。到目前为止,对于简化的情况(其中谱半径约束转换为$ \ alpha / \ beta< 1 $的约束),我已经为我的对数似然函数写了这个:

neg.loglik.penalty <- function(params, data, opt=TRUE) {
 mu <- params[1]
 alpha <- params[2]
 beta <- params[3]
 t <- sort(data)
 r <- rep(0,length(t))
 for(i in 2:length(t)) {
     r[i] <- exp(-beta*(t[i]-t[i-1]))*(1+r[i-1])
 }
 loglik <- -tail(t,1)*mu
 loglik <- loglik+alpha/beta*sum(exp(-beta*(tail(t,1)-t))-1)
 loglik <- loglik+sum(log(mu+alpha*r))
 loglik <- loglik+if( alpha <0 || beta <0 || alpha/beta <1 ) {-loglik/2} else {0}
 if(!opt) {
     return(list(negloglik=-loglik, mu=mu, alpha=alpha, beta=beta, t=t,
                 r=r))
 }
 else {
     return(-loglik)
 }
}

我想知道这是否是正确的做事方式,具体而言,请您就以下问题寻求帮助:

  • 惩罚的价值不应该随算法的每次迭代而改变(而不是像我说的那样固定)?
  • 我应该如何选择惩罚的价值?原则上,我希望它尽可能高,因为在我的约束之外找到解决方案意味着我的过程不稳定。
  • 我的惩罚值的选择如何影响解空间的形状?如果我添加错误的惩罚值,算法是否会被误导到错误的方向?

0 个答案:

没有答案