Множественная логистическая регрессия

Обобщённые линейные модели в Python

Ita Cirovic Donev

Data Science Consultant

Многомерный случай

  • Формула модели $$ \text{logit}(y) = \beta_0+\beta_1\color{red}{x_1} $$
Обобщённые линейные модели в Python

Многомерный случай

  • Формула модели $$ \text{logit}(y) = \color{blue}{\beta_0}+\color{blue}{\beta_1}\color{red}{x_1} $$
Обобщённые линейные модели в Python

Многомерный случай

  • Формула модели $$ \text{logit}(y) = \beta_0+\beta_1x_1 + \beta_2\color{red}{x_2} + ... + \beta_p \color{red}{x_p} $$
Обобщённые линейные модели в Python

Многомерный случай

  • Формула модели $$ \text{logit}(y) = \beta_0+\beta_1x_1 + \color{blue}{\beta_2}\color{red}{x_2} + ... + \color{blue}{\beta_p}\color{red}{x_p} $$

  • В Python

    model = glm('y ~ x1 + x2 + x3 + x4', 
              data = my_data, 
              family = sm.families.Binomial()).fit()
    
Обобщённые линейные модели в Python

Пример — смена колодца

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
===============================================================================
Обобщённые линейные модели в Python

Пример — смена колодца

                  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
  • Оба коэффициента статистически значимы
  • Знаки коэффициентов логичны
  • Изменение distance100 на единицу соответствует снижению логита на 0,89
  • Изменение arsenic на единицу соответствует росту логита на 0,46
Обобщённые линейные модели в Python

Влияние добавления переменной

  • Влияние переменной arsenic
  • distance100 меняется с -0,62 до -0,89
  • Чем дальше от безопасного колодца
    • Тем выше вероятность высокого содержания мышьяка
                  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  
Обобщённые линейные модели в Python

Мультиколлинеарность

  • Переменные, коррелирующие с другими переменными модели

Структура двух переменных при корреляции 0,8; 0,4; 0; -0,4 и -0,8 соответственно.

  • Рост стандартных ошибок коэффициентов
    • Коэффициенты могут оказаться статистически незначимыми
1 https://en.wikipedia.org/wiki/Correlation_and_dependence
Обобщённые линейные модели в Python

Признаки мультиколлинеарности

На что обращать внимание?

  • Коэффициент незначим, но переменная сильно коррелирует с $y$
  • Добавление/удаление переменной существенно меняет коэффициенты
  • Знак коэффициента нелогичен
  • Переменные имеют высокую попарную корреляцию
Обобщённые линейные модели в Python

Фактор инфляции дисперсии (VIF)

  • Наиболее распространённая диагностика мультиколлинеарности
    • Вычисляется для каждой объясняющей переменной
    • Показывает, насколько завышена дисперсия коэффициента
  • Рекомендуемый порог: VIF > 2,5
  • В Python
from statsmodels.stats.outliers_influence import variance_inflation_factor
Обобщённые линейные модели в Python

Давайте потренируемся!

Обобщённые линейные модели в Python

Preparing Video For Download...