【问题标题】:NaNs produced in negative binomial regression when using dnbinom()使用 dnbinom() 时在负二项式回归中产生的 NaN
【发布时间】:2017-03-04 14:58:58
【问题描述】:

我正在使用 dnbinom() 编写对数似然函数,然后在 R 中使用 mle2() {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))))

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

【问题讨论】:

    标签: r regression modeling


    【解决方案1】:

    您并未限制负对数似然函数尝试 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 的范围)。

    【讨论】:

    • 感谢您的回答。我决定使用您的第一个替代方案:model
    • 唯一的问题是,使用method=L-BFGS-B时,系数的标准误与使用glm.nb函数得到的标准误有很大差异。你是对的,我将在类日志函数中添加项,因此我不会使用 glm.nb,但我期望在这个最简单的情况下对方差有类似的结果。
    • 嗯,“完全不同”是什么意思?将mle2L-BFGS-Bglm.nb 进行比较,截距的标准误差为0.445 vs 0.460,斜率的标准误差为0.266 vs 0.249……这些是您所关心的错误的大小吗?它们看起来“相似”......
    • 是的,你说得对,值略有不同,我想这是因为使用了不同的优化算法。我还注意到,在更改初始值时,系数结果也略有不同。我不得不将我的 gamma 初始值更改为不同于 0 的任何数字,因为 mle2 函数返回“优化中的错误......”。我不确定为什么会发生这种情况,回归系数为零似乎是一个合适的初始值。这是我第一次使用负二项式,可能这种模型对初始值更敏感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2021-07-07
    • 2017-06-14
    相关资源
    最近更新 更多