如何使用glmrob与MT方法?

时间:2016-12-21 04:56:15

标签: r glm poisson

这是我的代码,但我有这个错误..

model <- glmrob(x ~ as.factor(i) + as.factor(j), 
  family = poisson(link = "log"), data = myData,method="MT")

错误消息:

Error in optim(start, sumaConPesos, method = "L-BFGS-B", x = x, y = y,  : non-finite value supplied by optim

1 个答案:

答案 0 :(得分:3)

我强烈怀疑这是Andrew Gelman folk theorem of statistical computing的一个例子:

  

如果遇到计算问题,通常会出现模型问题

如果我复制你的例子100次,我每次都会收到错误,但不同错误的次数不同:

library(robustbase)
data("GenInsLong",package="ChainLadder")
names(GenInsLong)[3] <- "claims"
tt <-
    replicate(100,
        {cat(".")
         try(robustbase::glmrob(claims~factor(accyear)+factor(devyear),
                   family=poisson,method="MT", data=GenInsLong),
           silent=TRUE)
         })
table(tt)

给出80个“由optim提供的非有限值”错误的实例和20个“solve.default中的错误(de / n):Lapack例程dgesv:系统是完全奇异的:U [x,x] = 0“表示各种x值。

我在函数中挖掘,在各个级别上使用debug。问题似乎是初始化过程(glmrobMT -> beta0IniCP -> betaExacto)从数据中随机采样(不替换)多个行,等于模型矩阵(19)的列数,并尝试拟合泊松GLM它。由于数据的结构,这些子样本几乎总是多线性的,导致系数中的NA值,从而使事情变得紧张。

我不知道如何解决这个问题,但我会问以下一般建模问题:

  • 您确定将具有19个参数的模型拟合到具有55个观察值的数据集中是否有意义?通常的自由经验法则是N / p&gt; 10,这是N / p约2 ...
  • 你确定将泊松模型(甚至是稳健模型)拟合到平均值约为250万的响应中是否有意义?具有平均值250万的泊松模型的隐含变异系数是sqrt(V)/ mean = 1 / sqrt(mean)= 0.0006。即使这些是重要的,它们也是如此之大,以至于我建议基于连续分布的模型......