Multivariabel logistisk regression

Generaliserade linjära modeller i Python

Ita Cirovic Donev

Data Science Consultant

Multivariabelt sammanhang

  • Modellformel $$ \text{logit}(y) = \beta_0+\beta_1\color{red}{x_1} $$
Generaliserade linjära modeller i Python

Multivariabelt sammanhang

  • Modellformel $$ \text{logit}(y) = \color{blue}{\beta_0}+\color{blue}{\beta_1}\color{red}{x_1} $$
Generaliserade linjära modeller i Python

Multivariabelt sammanhang

  • Modellformel $$ \text{logit}(y) = \beta_0+\beta_1x_1 + \beta_2\color{red}{x_2} + ... + \beta_p \color{red}{x_p} $$
Generaliserade linjära modeller i Python

Multivariabelt sammanhang

  • Modellformel $$ \text{logit}(y) = \beta_0+\beta_1x_1 + \color{blue}{\beta_2}\color{red}{x_2} + ... + \color{blue}{\beta_p}\color{red}{x_p} $$

  • I Python

    model = glm('y ~ x1 + x2 + x3 + x4', 
              data = my_data, 
              family = sm.families.Binomial()).fit()
    
Generaliserade linjära modeller i Python

Exempel – brunnsbyte

formula = 'switch ~ distance100 + arsenic'
wells_fit = glm(formula = formula, data = wells, 
                family = sm.families.Binomial()).fit()
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept       0.0027      0.079      0.035      0.972      -0.153       0.158
distance100    -0.8966      0.104     -8.593      0.000      -1.101      -0.692
arsenic         0.4608      0.041     11.134      0.000       0.380       0.542
===============================================================================
Generaliserade linjära modeller i Python

Exempel – brunnsbyte

                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept       0.0027      0.079      0.035      0.972      -0.153       0.158
distance100    -0.8966      0.104     -8.593      0.000      -1.101      -0.692
arsenic         0.4608      0.041     11.134      0.000       0.380       0.542
  • Båda koefficienterna är statistiskt signifikanta
  • Koefficientsignerna är logiska
  • En enhetsförändring i distance100 motsvarar en negativ skillnad på 0,89 i logiten
  • En enhetsförändring i arsenic motsvarar en positiv skillnad på 0,46 i logiten
Generaliserade linjära modeller i Python

Effekten av att lägga till en variabel

  • Effekten av variabeln arsenic
  • distance100 förändras från -0,62 till -0,89
  • Längre ifrån den säkra brunnen
    • Högre arsenivåer är mer sannolika
                  coef    std err 
---------------------------------
Intercept       0.0027      0.079
distance100    -0.8966      0.104
arsenic         0.4608      0.041  
                  coef    std err
---------------------------------
Intercept       0.6060      0.060
distance100    -0.6291      0.097  
Generaliserade linjära modeller i Python

Multikollinearitet

  • Variabler som är korrelerade med andra modellvariabler

Struktur för två variabler med korrelation vid 0,8; 0,4; 0; -0,4 respektive -0,8.

  • Ökade standardfel för koefficienterna
    • Koefficienterna kanske inte är statistiskt signifikanta
1 https://en.wikipedia.org/wiki/Correlation_and_dependence
Generaliserade linjära modeller i Python

Finns det multikollinearitet?

Vad ska man titta efter?

  • Koefficienten är inte signifikant, men variabeln är starkt korrelerad med $y$
  • Att lägga till eller ta bort en variabel förändrar koefficienterna markant
  • Koefficienten har ett ologiskt tecken
  • Variabler har hög parvis korrelation
Generaliserade linjära modeller i Python

Variansuppblåsningsfaktor (VIF)

  • Vanligaste diagnostiken för multikollinearitet
    • Beräknas för varje förklarande variabel
    • Mäter hur uppblåst variansen för koefficienten är
  • Rekommenderat tröskelvärde: VIF > 2,5
  • I Python
from statsmodels.stats.outliers_influence import variance_inflation_factor
Generaliserade linjära modeller i Python

Nu kör vi en övning!

Generaliserade linjära modeller i Python

Preparing Video For Download...