Лінійна регресія з паралельними нахилами

Середній рівень регресії зі statsmodels у Python

Maarten Van den Broeck

Content Developer at DataCamp

Попередній курс

Цей курс передбачає знання з Introduction to Regression with statsmodels in Python

Середній рівень регресії зі statsmodels у Python

Від простої до множинної регресії

Множинна регресія — це модель з більш ніж однією пояснювальною змінною.

Більше змінних дають більше розуміння та кращі прогнози.

Середній рівень регресії зі statsmodels у Python

Зміст курсу

Розділ 1

  • Регресія з «паралельними нахилами»

Розділ 2

  • Взаємодії
  • Парадокс Сімпсона

Розділ 3

  • Більше пояснювальних змінних
  • Як працює лінійна регресія

Розділ 4

  • Множинна логістична регресія
  • Логістичний розподіл
  • Як працює логістична регресія
Середній рівень регресії зі statsmodels у Python

Набір даних про риб

mass_g length_cm species
242.0 23.2 Bream
5.9 7.5 Perch
200.0 30.0 Pike
40.0 12.9 Roach
  • Кожен рядок — це окрема риба
  • mass_g — змінна відповіді
  • 1 числова, 1 категоріальна пояснювальна змінна
Середній рівень регресії зі statsmodels у Python

Одна пояснювальна змінна за раз

from statsmodels.formula.api import ols

mdl_mass_vs_length = ols("mass_g ~ length_cm",
                         data=fish).fit()
print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
dtype: float64
  • 1 коефіцієнт вільного члена
  • 1 коефіцієнт нахилу
mdl_mass_vs_species = ols("mass_g ~ species + 0",
                          data=fish).fit()

print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
dtype: float64
  • По 1 коефіцієнту вільного члена для кожної категорії
Середній рівень регресії зі statsmodels у Python

Обидві змінні одночасно

mdl_mass_vs_both = ols("mass_g ~ length_cm + species + 0",
                       data=fish).fit()
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
dtype: float64
  • 1 коефіцієнт нахилу
  • По 1 коефіцієнту вільного члена для кожної категорії
Середній рівень регресії зі statsmodels у Python

Порівняння коефіцієнтів

print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
Середній рівень регресії зі statsmodels у Python

Візуалізація: 1 числова пояснювальна змінна

import matplotlib.pyplot as plt
import seaborn as sns

sns.regplot(x="length_cm",
            y="mass_g",
            data=fish,
            ci=None)

plt.show()

Точкова діаграма маси риб проти довжини з лінійним трендом

Середній рівень регресії зі statsmodels у Python

Візуалізація: 1 категоріальна пояснювальна змінна

sns.boxplot(x="species",
            y="mass_g",
            data=fish,
            showmeans=True)

Боксплот маси риб для кожного виду

Середній рівень регресії зі statsmodels у Python

Візуалізація: обидві пояснювальні змінні

coeffs = mdl_mass_vs_both.params
print(coeffs)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
ic_bream, ic_perch, ic_pike, ic_roach, sl = coeffs
sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="species",
                data=fish)
plt.axline(xy1=(0, ic_bream), slope=sl, color="blue")
plt.axline(xy1=(0, ic_perch), slope=sl, color="green")
plt.axline(xy1=(0, ic_pike), slope=sl, color="red")
plt.axline(xy1=(0, ic_roach), slope=sl, color="orange")

Модель паралельних нахилів: маса риб проти довжини, за видами

Середній рівень регресії зі statsmodels у Python

Давайте потренуємось!

Середній рівень регресії зі statsmodels у Python

Preparing Video For Download...