GLM拟合错误

时间:2017-09-10 14:15:17

标签: r logistic-regression

我有一个很好的工作GLM并且有一些变量为“表面”和“价格”,这些是数字。我喜欢将它们作为日志变量添加到我的模型中。

为了做到这一点,我做了以下几点;

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,  : 

'x'中的NA / NaN / Inf

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

1 个答案:

答案 0 :(得分:1)

您没有提供您的数据或可运行代码,因此无法说出导致您的错误的原因。但是,我有一个很好的主意。

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

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

一种解决方案(这是一种黑客攻击)是添加一点点抖动,或者简单地用一些无限小的值替换0。但是,如果这有利于统计和研究意义超出了这个答案的范围。

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