Dlaczego glm.nb rzuca błąd „brakującej wartości” tylko na bardzo konkretnych wejściach

glm.nb generuje niezwykły błąd na niektórych wejściach. Chociaż istnieje wiele wartości, które powodują ten błąd, nawet zmiana wejściabardzo nieznacznie może zapobiec błędowi.

Powtarzalny przykład:

set.seed(11)
pop <- rnbinom(n=1000,size=1,mu=0.05)
glm.nb(pop~1,maxit=1000)

Uruchomienie tego kodu powoduje błąd:

Error in while ((it <- it + 1) < limit && abs(del) > eps) { : 
  missing value where TRUE/FALSE needed

Początkowo zakładałem, że ma to związek z tym, że algorytm nie zbiega się. Zaskoczyło mnie jednak, że zmienia to nawet wejściebardzo nieznacznie może zapobiec błędowi. Na przykład:

pop[1000] <- pop[1000] + 1
glm.nb(pop~1,maxit=1000)

Odkryłem, że ten błąd rzuca na 19,4% nasion między 1 a 500:

fit.with.seed = function(s) {
    set.seed(s)
    pop <- rnbinom(n=1000, size=1, mu=0.05)
    m = glm.nb(pop~1, maxit=1000)
}

errors = sapply(1:500, function(s) {
    is.null(tryCatch(fit.with.seed(s), error=function(e) NULL))
})

mean(errors)

Znalazłem tylkojedna wzmianka tego błędu w dowolnym miejscu na wątku bez odpowiedzi.

Co może powodować ten błąd i jak można go naprawić (poza przypadkowym wprowadzaniem danych za każdym razemglm.nb rzuca błąd?)

ETA: Ustawieniecontrol=glm.control(maxit=200,trace = 3) stwierdza, żetheta.ml algorytm łamie się, stając się bardzo duży, a następnie stając się-Inf, a potem stawanie sięNaN:

theta.ml: iter67 theta =5.77203e+15
theta.ml: iter68 theta =5.28327e+15
theta.ml: iter69 theta =1.41103e+16
theta.ml: iter70 theta =-Inf
theta.ml: iter71 theta =NaN

questionAnswers(1)

yourAnswerToTheQuestion