我有一个很好的工作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
希望您能帮我解释一下这个错误,或者指导我如何修复它。 提前谢谢!
答案 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值,您也可以放弃或估算这些值。