Why does glm.nb throw a “missing value” error only on very specific inputs

后端 未结 1 1291
再見小時候
再見小時候 2020-12-24 14:56

glm.nb throws an unusual error on certain inputs. While there are a variety of values that cause this error, changing the input even very slightly can prevent the e

相关标签:
1条回答
  • 2020-12-24 15:36

    It's a bit crude, but in the past I have been able to work around problems with glm.nb by resorting to straight maximum likelihood estimation (i.e. no clever iterative estimation algorithms as used in glm.nb)

    Some poking around/profiling indicates that the MLE for the theta parameter is effectively infinite. I decided to fit it on the inverse scale, so that I could put a boundary at 0 (a fancier version would set up a log-likelihood function that would revert to Poisson at theta=zero, but that would undo the point of trying to come up with a quick, canned solution).

    With two of the bad examples given above, this works reasonably well, although it does warn that the parameter fit is on the boundary ...

    library(bbmle)
    m1 <- mle2(Y~dnbinom(mu=exp(logmu),size=1/invk),
               data=d1,
               parameters=list(logmu~X1+X2+offset(X3)),
               start=list(logmu=0,invk=1),
               method="L-BFGS-B",
               lower=c(rep(-Inf,12),1e-8))
    

    The second example is actually more interesting because it demonstrates numerically that the MLE for theta is essentially infinite even though we have a good-sized data set that is exactly generated from negative binomial deviates (or else I'm confused about something ...)

    set.seed(11);pop <- rnbinom(n=1000,size=1,mu=0.05);glm.nb(pop~1,maxit=1000)
    m2 <- mle2(pop~dnbinom(mu=exp(logmu),size=1/invk),
               data=data.frame(pop),
               start=list(logmu=0,invk=1),
               method="L-BFGS-B",
               lower=c(-Inf,1e-8))
    
    0 讨论(0)
提交回复
热议问题