【问题标题】:R logistic regression and marginal effects - how to exclude NA values in categorical independent variableR逻辑回归和边际效应 - 如何排除分类自变量中的NA值
【发布时间】:2019-01-01 04:41:53
【问题描述】:

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

【问题讨论】:

    标签: r logistic-regression na marginal-effects


    【解决方案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
    

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

    【讨论】:

    • 非常感谢您的回复@Stelios 我已经尝试过了,但收到以下错误消息 >[&lt;-.data.frame(*tmp*, gui$wgt9 == "NA", value = NA) 中的错误: 列的重复下标
    • 是的,发生这种情况是因为我忘记在最后一行代码中指定列。尝试更新的 'gui$wgt9[ gui$wgt9 == "NA" ]
    • 太棒了!那已经奏效了。非常感谢@stelios。我真的很感激。
    猜你喜欢
    • 2019-07-15
    • 2019-11-16
    • 2021-12-23
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2020-05-23
    相关资源
    最近更新 更多