1

I am a beginner with R. I am using glm to conduct logistic regression and then using the 'margins' package to calculate marginal effects but I don't seem to be able to exclude the missing values in my categorical independent variable.

I have tried to ask R to exclude NAs from the regression. The categorical variable is weight status at age 9 (wgt9), and it has three levels (1, 2, 3) and some NAs.

What am I doing wrong? Why do I get a wgt9NA result in my outputs and how can I correct it?

Thanks in advance for any help/advice.

Conduct logistic regression

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

Regression output

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

Calculate the marginal effects

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

Marginal effects output

> 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
jay.sf
  • 60,139
  • 8
  • 53
  • 110

1 Answers1

1

First of all welcome to stack overflow. Please check the answer here to see how to make a great R question. Not providing a sample of your data, some times makes it impossible to answer the question. However taking a guess, I think that you have not set your NA values correctly but as strings. This behavior can be seen in the dummy data below.

First let's create the dummy data:

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)

Using the variable named v1, does not include NA as a category:

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

While making the string "NA" to factor gives an output similar to the one in question:

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

Try the following to replace NAs that are strings:

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

Don't forget to accept any answer that solved your problem.

Stelios K.
  • 313
  • 4
  • 14
  • Thanks so much for your response @Stelios I have tried it but get the following error message >Error in `[<-.data.frame`(`*tmp*`, gui$wgt9 == "NA", value = NA) : duplicate subscripts for columns –  Jul 25 '18 at 07:40
  • Yes, it happened because I forgot to specify the column in the last line of code. Try the updated 'gui$wgt9[ gui$wgt9 == "NA" ] <- NA' – Stelios K. Jul 25 '18 at 08:37
  • 1
    Brilliant! That has worked. Thanks so much @stelios. I really appreciate it. –  Jul 25 '18 at 13:55