R — Логистическая регрессия с контрольными переменными

#r #regression #logistic-regression

Вопрос:

Я только начал входить в R для анализа данных (ранее я просто использовал SPSS или Excel).

В настоящее время я пытаюсь запустить логистическую регрессию с одним зависимым и 5 независимыми, контролируя при этом 3 переменные.

Моя нынешняя попытка заключается в:

 reg_model <- glm(formula = Dependent ~ Independent1   Independent2   Independent3   Independent4   Independent5, family = binomial(), data = df)
 

Я не уверен, как (или где) вставить 3 управляющие переменные в модель, потому что простое добавление 3 управляющих переменных в качестве независимых переменных в модель кажется мне неправильным (или я ошибаюсь здесь?).

Комментарии:

1. Вы можете управлять ковариатами, либо помещая их в правую часть формулы в качестве независимых переменных, либо вы можете заранее создать другую линейную модель, а затем работать с остатками. Формула отражает вопрос, на который вы хотите ответить, в частности.

2. Вы имеете в виду вот так: reg_model <- glm(formula = Dependent ~ Independent1 Independent2 Independent3 Independent4 Independent5 Control1 Control2 Control3, family = binomial(), data = df) ?

Ответ №1:

Вы можете контролировать потенциальные путаницы, добавляя их в качестве независимых переменных в модель в правой части формулы. Обратите внимание, что оценка (размер эффекта) оценки за выпускной экзамен (GRE) ниже во второй модели после контроля среднего балла (GPA), который коррелирует с GRE:

 library(readr)

# gre: Graduate Record Exam scores
# gpa: grade point average
data <- read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
#> 
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#>   admit = col_double(),
#>   gre = col_double(),
#>   gpa = col_double(),
#>   rank = col_double()
#> )
data
#> # A tibble: 400 x 4
#>    admit   gre   gpa  rank
#>    <dbl> <dbl> <dbl> <dbl>
#>  1     0   380  3.61     3
#>  2     1   660  3.67     3
#>  3     1   800  4        1
#>  4     1   640  3.19     4
#>  5     0   520  2.93     4
#>  6     1   760  3        2
#>  7     1   560  2.98     1
#>  8     0   400  3.08     2
#>  9     1   540  3.39     3
#> 10     0   700  3.92     2
#> # … with 390 more rows

model1 <- glm(admit ~ gre, data = data, family = "binomial")
summary(model1)
#> 
#> Call:
#> glm(formula = admit ~ gre, family = "binomial", data = data)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.1623  -0.9052  -0.7547   1.3486   1.9879  
#> 
#> Coefficients:
#>              Estimate Std. Error z value Pr(>|z|)    
#> (Intercept) -2.901344   0.606038  -4.787 1.69e-06 ***
#> gre          0.003582   0.000986   3.633  0.00028 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 499.98  on 399  degrees of freedom
#> Residual deviance: 486.06  on 398  degrees of freedom
#> AIC: 490.06
#> 
#> Number of Fisher Scoring iterations: 4

# gre and gpa are correlated. Lets's control for them!
cor(data)
#>            admit        gre         gpa        rank
#> admit  1.0000000  0.1844343  0.17821225 -0.24251318
#> gre    0.1844343  1.0000000  0.38426588 -0.12344707
#> gpa    0.1782123  0.3842659  1.00000000 -0.05746077
#> rank  -0.2425132 -0.1234471 -0.05746077  1.00000000


model2 <- glm(admit ~ gre   gpa, data = data, family = "binomial")
summary(model2)
#> 
#> Call:
#> glm(formula = admit ~ gre   gpa, family = "binomial", data = data)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.2730  -0.8988  -0.7206   1.3013   2.0620  
#> 
#> Coefficients:
#>              Estimate Std. Error z value Pr(>|z|)    
#> (Intercept) -4.949378   1.075093  -4.604 4.15e-06 ***
#> gre          0.002691   0.001057   2.544   0.0109 *  
#> gpa          0.754687   0.319586   2.361   0.0182 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 499.98  on 399  degrees of freedom
#> Residual deviance: 480.34  on 397  degrees of freedom
#> AIC: 486.34
#> 
#> Number of Fisher Scoring iterations: 4
 

Создано 2021-10-01 пакетом reprex (v2.0.1)