1

我是 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
4

1 回答 1

1

首先欢迎堆栈溢出。请在此处查看答案,了解如何提出一个很棒的 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

不要忘记接受任何解决您问题的答案。

于 2018-07-24T14:36:35.947 回答