R Logistic回归和边际效应-如何排除类别自变量中的NA值

时间:2018-07-24 14:02:42

标签: r logistic-regression na marginal-effects

我是R的初学者。我正在使用glm进行逻辑回归,然后使用'margins'程序包计算边际效应,但是我似乎无法排除分类自变量中的缺失值。

我试图让R从回归中排除NA。类别变量是9岁时的体重状态(wgt9),它具有三个级别(1、2、3)和一些NA。

我在做什么错?为什么在输出中得到wgt9NA结果,如何解决?

在此先感谢您的帮助/咨询。

进行逻辑回归

summary(logit.phbehav <- glm(obese13 ~ gender + as.factor(wgt9) + aded08b, 
data = gui, weights = bdwg01, family = binomial(link = "logit")))

回归输出

term              estimate std.error statistic   p.value
  <chr>                <dbl>     <dbl>     <dbl>     <dbl>
1 (Intercept)        -3.99      0.293     -13.6  2.86e- 42
2 gender              0.387     0.121       3.19 1.42e-  3
3 as.factor(wgt9)2    2.49      0.177      14.1  3.28e- 45
4 as.factor(wgt9)3    4.65      0.182      25.6  4.81e-144
5 as.factor(wgt9)NA   2.60      0.234      11.1  9.94e- 29
6 aded08b            -0.0755    0.0224     -3.37 7.47e-  4

计算边际效应

effects_logit_phtotal = margins(logit.phtot) 
print(effects_logit_phtotal)
summary(effects_logit_phtotal)

边际效果输出

> summary(effects_logit_phtotal)
factor     AME     SE       z      p   lower   upper
aded08a -0.0012 0.0002 -4.8785 0.0000 -0.0017 -0.0007
gender  0.0115 0.0048  2.3899 0.0169  0.0021  0.0210
wgt92  0.0941 0.0086 10.9618 0.0000  0.0773  0.1109
wgt93  0.4708 0.0255 18.4569 0.0000  0.4208  0.5207
wgt9NA  0.1027 0.0179  5.7531 0.0000  0.0677  0.1377

1 个答案:

答案 0 :(得分:1)

首先欢迎堆栈溢出。请查看答案here,以了解如何提出一个很好的R问题。由于有时不提供数据样本,因此无法回答问题。不过,我想您可能没有正确设置NA值,而是设置为字符串。可以在下面的虚拟数据中看到此行为。

首先让我们创建虚拟数据:

v1 <- c(2,3,3,3,2,2,2,2,NA,NA,NA)
v2 <- c(2,3,3,3,2,2,2,2,"NA","NA","NA")
v3 <- c(11,5,6,7,10,8,7,6,2,5,3)
obese <- c(0,1,1,0,0,1,1,1,0,0,0)
df <- data.frame(obese,v1,v2)

使用名为v1的变量,不包括NA作为类别:

glm(formula = obese ~ as.factor(v1) + v3, family = binomial(link = "logit"), 
    data = df)

Deviance Residuals: 
         1           2           3           4           5           6           7           8  
-2.110e-08   2.110e-08   1.168e-05  -1.105e-05  -2.110e-08   3.094e-06   2.110e-08   2.110e-08  

Coefficients:
                Estimate Std. Error z value Pr(>|z|)
(Intercept)       401.48  898581.15       0        1
as.factor(v1)3    -96.51  326132.30       0        1
v3                -46.93  106842.02       0        1

将字符串“ NA”作为因数时,输出类似于所讨论的输出:

glm(formula = obese ~ as.factor(v2) + v3, family = binomial(link = "logit"), 
    data = df)

Deviance Residuals: 
       Min          1Q      Median          3Q         Max  
-1.402e-05  -2.110e-08  -2.110e-08   2.110e-08   1.472e-05  

Coefficients:
                 Estimate Std. Error z value Pr(>|z|)
(Intercept)        394.21  744490.08   0.001        1
as.factor(v2)3     -95.33  340427.26   0.000        1
as.factor(v2)NA   -327.07  613934.84  -0.001        1
v3                 -45.99   84477.60  -0.001        1

尝试以下操作替换字符串形式的NA:

gui$wgt9[ gui$wgt9 == "NA" ] <- NA

别忘了接受任何可以解决您问题的答案。