使用dnbinom()在负二项式回归中产生的NaN

塞尔吉奥·诺拉斯科(Sergio Nolazco)

我正在dnbinom()编写对数似然函数,然后mle2()在R中使用{bbmle}估算参数

问题是我的负二项式模型收到了16条警告,所有的NaN都是这样产生的:

1:以dnbinom(y,mu = mu,size = k,log = TRUE):产生NaN

我的代码:

# data
x <- c(0.35,0.45,0.90,0.05,1.00,0.50,0.45,0.25,0.15,0.40,0.26,0.37,0.43,0.34,0.00,0.11,0.00,0.00,0.00,0.41,0.14,0.80,0.60,0.23,0.17,0.31,0.30,0.00,0.23,0.33,0.30,0.00,0.00)
y <- c(1,10,0,0,67,0,9,5,0,0,0,82,36,0,32,7,7,132,14,33,0,67,11,39,41,67,9,1,44,62,111,52,0)

# log-likelihood function
negbinglmLL = function(beta,gamma,k) { 
  mu= exp(beta+gamma*x)
  -sum(dnbinom(y,mu=mu, size=k, log=TRUE))
}

# maximum likelihood estimator
model <- mle2(negbinglmLL, start=list(beta=mean(y), gamma= 0, k=mean(y)^2/(var(y)-mean(y))))

这些警告是什么意思,如果这是一个严重的问题,我该如何避免呢?

本·博克(Ben Bolker)

您并没有限制负对数似然函数尝试使用的负值k可能不会弄乱您的最终答案,但是如果可以的话,最好始终避免出现此类警告。两种简单的策略:

  • 设置下限k(切换到method=L-BFGS-B
  • 使k参数适合对数刻度,如下所示:
negbinglmLL = function(beta,gamma,logk) { 
  mu= exp(beta+gamma*x)
  -sum(dnbinom(y,mu=mu, size=exp(logk), log=TRUE))
}

model <- mle2(negbinglmLL,
              start=list(beta=mean(y),
                         gamma= 0, 
                      logk=log(mean(y)^2/(var(y)-mean(y)))))

顺便说一句,对于像这样的简单问题,您可以使用基于公式的快捷方式,如下所示:

mle2(y~dnbinom(mu=exp(logmu),size=exp(logk)),
     parameters=list(logmu~x),
     start=list(logmu=0,logk=0),
     data=data.frame(x,y))

对于这种简单的情况MASS::glm.nb,也应该可以很好地工作(但是,这可能是最简单的版本,它将变得更加复杂/超出的范围glm.nb)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章