glm.nbは、特定の入力で異常なエラーをスローします。このエラーの原因となる値はさまざまですが、入力をわずかに変更するだけでもエラーを防ぐことができます。
再現可能な例:
set.seed(11)
pop <- rnbinom(n=1000,size=1,mu=0.05)
glm.nb(pop~1,maxit=1000)
このコードを実行すると、次のエラーがスローされます。
Error in while ((it <- it + 1) < limit && abs(del) > eps) { :
missing value where TRUE/FALSE needed
最初は、これはアルゴリズムが収束していないことに関係していると思いました。しかし、入力を少し変更するだけでエラーを防ぐことができることに驚きました。例えば:
pop[1000] <- pop[1000] + 1
glm.nb(pop~1,maxit=1000)
1 から 500 の間のシードの 19.4% でこのエラーがスローされることがわかりました。
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)
応答のないスレッドで、このエラーに関する言及が 1 つだけ見つかりました。
glm.nb
何がこのエラーを引き起こしている可能性があり、どのように修正できますか (エラーをスローするたびに入力をランダムに並べ替える以外に?)
ETA: 設定は、アルゴリズムが非常に大きくなり、次に になり、次に になることによって壊れてcontrol=glm.control(maxit=200,trace = 3)
いることを発見しました:theta.ml
-Inf
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