我试图在给定一组约束并使用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)
}
}
我想知道这是否是正确的做事方式,具体而言,请您就以下问题寻求帮助: