如何在 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

更新于: 2021-11-09

4K+ 阅读量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告