R:X 中的 NA/NaN/Inf 错误

8

我正在尝试使用R执行负二项回归。当我执行以下命令时:

 DV2.25112013.nb <- glm.nb(DV2.25112013~ Bcorp.Geographic.Proximity + Dirty.Industry +
                Clean.Industry + Bcorp.Industry.Density + State + Dirty.Region +
                Clean.Region + Bcorp.Geographic.Density + Founded.As.Bcorp + Centrality +
                Bcorp.Industry.Density.Squared + Bcorp.Geographic.Density.Squared +
                Regional.Institutionalization + Sales + Any.Best.In.Class +           
                Dirty.Region.Heterogeneity + Clean.Region.Heterogeneity + 
                Ind.Dirty.Heterogeneity+Ind.Clean.Heterogeneity + Industry, 
                data = analysis25112013DF6)

R 报错如下:
Error in glm.fitter(x = X, y = Y, w = w, etastart = eta, offset = offset,  : 
  NA/NaN/Inf in 'x'
In addition: Warning message:
step size truncated due to divergence 

我不理解这个错误,因为我的数据矩阵没有包含任何NA/NaN/Inf值...我该如何解决它?
谢谢。

4
请看这个问题 - Stat
1
@Stat 的发现很棒。然而,这实际上更像是一个 StackOverflow 而不是 CrossValidated 的问题(即编程而不是统计),并且如果没有一个可重现的示例,很难回答,除非有人猜对了...请参考 http://tinyurl.com/reproducible-000。 - Ben Bolker
同意其他评论(以及所引用的问题):尝试使用那么多独立变量进行迭代收敛是非常棘手的。 - Carl Witthoft
2个回答

2
我认为此错误的最可能原因是数据中存在负值或零值,因为glm.nb的默认链接为“log”。通过更改,可以很容易地进行测试。我还认为您需要尝试更小的模型...也许只使用四分之一的变量开始。这还使您可以将相关变量作为一组添加,因为从名称来看,您可能会发现分类变量存在严重的共线性潜力。
我们真正需要一个数据描述。我对Dirty.Industry + Clean.Industry感到困惑。最好使用具有这些级别的因子变量来处理这种二元性。这可以防止干净=不脏时导致的共线性。与您的“异质性”变量类似。 (我不确定@BenBolker的评论是否正确。我认为在解决编码问题之前,您首先需要进行统计咨询。)
require(MASS)
data(quine)  # following example in ?glm.nb page

> quine$Days[1] <- -2

> quine.nb1 <- glm.nb(Days ~ Sex/(Age + Eth*Lrn), data = quine, link = "identity")
Error in eval(expr, envir, enclos) : 
  negative values not allowed for the 'Poisson' family

> quine$Days[1] <- 0
> quine.nb1 <- glm.nb(Days ~ Sex/(Age + Eth*Lrn), data = quine, link = "identity")
Error: no valid set of coefficients has been found: please supply starting values
In addition: Warning message:
In log(y/mu) : NaNs produced

1
请注意,对于数据为0的情况,使用对数链接是可以的。通过链接,您正在建模平均响应 - 您并没有直接将链接应用于数据本身。 - Dason
我认为LHS输入是“数据”的一部分。 - IRTFM
1
我不理解你在说什么。在任何连结的负二项模型中,响应为0并不是一个问题。你实际上并没有取响应的对数 - 你是在说预期值的对数具有线性形式。 - Dason
同意@Dason的观点,我认为你回答的前两句话是错误/误导性的(你基本上误解了GLM中链接函数的工作方式...)。我同意可能存在共线性问题/这可能处于“您的模型不足以拟合”(=统计问题)和“您的模型原则上是合理的,但在实践中难以拟合”(=计算问题)之间的边缘。 - Ben Bolker
仍然认为我们需要更好地描述数据和解决统计问题作为第一优先事项。由负数或零生成的错误与OP提供的错误不匹配,但保留它们是为了提供关于最后两个评论的具体示例。 - IRTFM

2

我通过将控制参数放入模型假设中,使用maxiter=10或更低的值来解决了这个问题。默认情况下迭代次数为50次。也许增加一点迭代次数可以使它在您的情况下正常工作。只需尝试一下即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接