如何在 R 中处理逻辑回归模型的 glm.fit 错误“NA/NaN/Inf”?
当我们为逻辑回归模型创建一般线性模型时,我们需要将分布族指定为二项分布。当我们没有指定分布族时,就会出现“NA/NaN/Inf”错误。因此,在创建逻辑回归模型时,需要在 glm 函数内使用 family="binomial"。
示例 1
以下代码片段创建了一个示例数据框 -
iv1<-rpois(20,5) iv2<-rpois(20,2) iv3<-rpois(20,5) DV1<-sample(0:1,20,replace=TRUE) df1<-data.frame(iv1,iv2,iv3,DV1) df1
创建了以下数据框 -
iv1 iv2 iv3 DV1 1 5 2 6 0 2 3 1 3 1 3 3 4 8 1 4 5 3 3 1 5 8 2 6 1 6 3 1 4 0 7 6 1 8 1 8 3 1 7 0 9 9 2 6 0 10 7 2 4 0 11 6 4 5 1 12 12 2 4 1 13 6 2 2 0 14 5 1 3 0 15 4 1 10 0 16 3 3 4 0 17 4 1 6 1 18 9 3 4 1 19 7 1 3 1 20 4 3 4 0
要为 df1 中的数据创建逻辑回归模型,请将以下代码添加到上述代码片段中 -
Model_1<-glm(factor(DV1)~iv1+iv2+iv3,data=df1)
错误:glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, −
‘y’ 中存在 NA/NaN/Inf
此外:警告信息 -
1:在 Ops.factor(y, mu) 中:因子不支持 ‘-’ 操作
2:在 Ops.factor(eta, offset) 中:因子不支持 ‘-’ 操作
3:在 Ops.factor(y, mu) 中:因子不支持 ‘-’ 操作
要为 df1 中的数据创建分布族为二项分布的逻辑回归模型,请将以下代码添加到上述代码片段中 -
iv1<-rpois(20,5) iv2<-rpois(20,2) iv3<-rpois(20,5) DV1<-sample(0:1,20,replace=TRUE) df1<-data.frame(iv1,iv2,iv3,DV1) Model_1<-glm(factor(DV1)~iv1+iv2+iv3,data=df1,family="binomial") summary(Model_1)
输出
如果将上述所有代码作为单个程序执行,则会生成以下输出 -
Call: glm(formula = factor(DV1) ~ iv1 + iv2 + iv3, family = "binomial", data = df1) Deviance Residuals: Min 1Q Median 3Q Max -1.61472 -1.05484 -0.07657 1.07422 1.71351 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -2.59874 2.15616 -1.205 0.228 iv1 0.26684 0.22055 1.210 0.226 iv2 0.38736 0.47527 0.815 0.415 iv3 0.06822 0.23316 0.293 0.770 (Dispersion parameter for binomial family taken to be 1) Null deviance: 27.726 on 19 degrees of freedom Residual deviance: 25.223 on 16 degrees of freedom AIC: 33.223 Number of Fisher Scoring iterations: 4
示例 2
以下代码片段创建了一个示例数据框 -
x1<-runif(20,2,10) x2<-rnorm(20) DV2<-sample(0:1,20,replace=TRUE) df2<-data.frame(x1,x2,DV2) df2
创建了以下数据框 -
x1 x2 DV2 1 9.599662 -0.37487878 1 2 3.670901 -1.05763026 0 3 5.856532 -1.63384915 1 4 5.140322 0.70749809 1 5 7.215530 -0.45739769 0 6 2.347001 0.25501067 1 7 7.997737 0.32140975 0 8 4.880330 0.45770428 1 9 4.680856 1.36704134 1 10 3.720922 0.45992890 0 11 9.192565 0.91105622 0 12 7.699731 -0.35100775 1 13 3.183395 1.31957271 1 14 5.571414 0.82899477 0 15 6.724491 0.01077159 0 16 8.844951 -0.27490769 1 17 6.509826 0.25185960 1 18 9.098870 -1.75332078 1 19 2.230271 -0.52357984 1 20 4.004921 0.51763553 1
要为 df1 中的数据创建逻辑回归模型,请将以下代码添加到上述代码片段中 -
Model_2<-glm(factor(DV2)~x1+x2,data=df2)
错误:glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, −
‘y’ 中存在 NA/NaN/Inf
此外:警告信息 -
1:在 Ops.factor(y, mu) 中:因子不支持 ‘-’ 操作
2:在 Ops.factor(eta, offset) 中:因子不支持 ‘-’ 操作
3:在 Ops.factor(y, mu) 中:因子不支持 ‘-’ 操作
要为 df2 中的数据创建分布族为二项分布的逻辑回归模型,请将以下代码添加到上述代码片段中 -
x1<-runif(20,2,10) x2<-rnorm(20) DV2<-sample(0:1,20,replace=TRUE) df2<-data.frame(x1,x2,DV2) Model_2<-glm(factor(DV2)~x1+x2,data=df2,family="binomial") summary(Model_2)
输出
如果将上述所有代码作为单个程序执行,则会生成以下输出 -
Call: glm(formula = factor(DV2) ~ x1 + x2, family = "binomial", data = df2) Deviance Residuals: Min 1Q Median 3Q Max -1.7809 -1.2987 0.8107 0.9623 1.0866 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 1.5657 1.4628 1.070 0.284 x1 -0.1536 0.2236 -0.687 0.492 x2 -0.3353 0.6104 -0.549 0.583 (Dispersion parameter for binomial family taken to be 1) Null deviance: 25.898 on 19 degrees of freedom Residual deviance: 25.267 on 17 degrees of freedom AIC: 31.267 Number of Fisher Scoring iterations: 4