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 值,您也可以删除或估算这些值。
我有一个运行良好的 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 值,您也可以删除或估算这些值。