GLM拟合错误

Error in GLM fitting

我有一个运行良好的 GLM,并且有某些变量 "surface" 和 "price",它们是数字。我喜欢将它们作为日志变体添加到我的模型中。

为此我做了以下工作;

data$logprice<-log(data$price)

然后我将如下添加到我的模型中;

model <- glm(variableA ~ logprice + variableB +variableC , binomial)

就在我向其中添加日志时,出现以下错误;

Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 

NA/NaN/Inf 在 'x'

希望你能帮我解释这个错误,或者指导我如何修复它。 提前致谢!

您没有提供数据或可运行代码,因此无法说明是什么导致了您的案例错误。不过,我有个好主意。

我可以告诉你的是,一般情况下情况并非如此:

data(iris)

iris$logprice  <- log(iris$Sepal.Length)
iris$variableA <- ifelse(iris$Species=="setosa",1,0)

model <- glm(variableA ~ logprice, binomial, data = iris)
summary(model)
Call:
glm(formula = variableA ~ logprice, family = binomial, data = iris)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-2.28282  -0.29561  -0.06431   0.29645   2.13240  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   46.767      7.978   5.862 4.58e-09 ***
logprice     -27.836      4.729  -5.887 3.94e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 190.954  on 149  degrees of freedom
Residual deviance:  72.421  on 148  degrees of freedom
AIC: 76.421

Number of Fisher Scoring iterations: 7

但是,假设您有一个像 0 这样的值,如果不是无限的,它就不能在对数转换中存活:

iris$Sepal.Length[1] <- 0
iris$logprice  <- log(iris$Sepal.Length)
iris$variableA <- ifelse(iris$Species=="setosa",1,0)

model <- glm(variableA ~ logprice, binomial, data = iris)
Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
  NA/NaN/Inf in 'x'

为什么?因为:

> log(0)
[1] -Inf

一个解决方案(有点像 hack)是添加一点点抖动,或者简单地用一些无穷小的值替换 0。但是,如果这具有良好的统计和研究意义,则超出了此答案的范围。

如果您有任何 NA 值,您也可以删除或估算这些值。