Linjär regression med parallella lutningar

Intermediär regression med statsmodels i Python

Maarten Van den Broeck

Content Developer at DataCamp

Föregående kurs

Intermediär regression med statsmodels i Python

Från enkel till multipel regression

Multipel regression är en regressionsmodell med mer än en förklarande variabel.

Fler förklarande variabler kan ge djupare insikter och bättre prediktioner.

Intermediär regression med statsmodels i Python

Kursinnehåll

Kapitel 1

  • Regression med "parallella lutningar"

Kapitel 2

  • Interaktioner
  • Simpsons paradox

Kapitel 3

  • Fler förklarande variabler
  • Hur linjär regression fungerar

Kapitel 4

  • Multipel logistisk regression
  • Den logistiska fördelningen
  • Hur logistisk regression fungerar
Intermediär regression med statsmodels i Python

Fiskedataset

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
  • Varje rad representerar en fisk
  • mass_g är responsvariabeln
  • 1 numerisk och 1 kategorisk förklarande variabel
Intermediär regression med statsmodels i Python

En förklarande variabel i taget

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 interceptkoefficient
  • 1 lutningskoefficient
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 interceptkoefficient per kategori
Intermediär regression med statsmodels i Python

Båda variablerna samtidigt

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 lutningskoefficient
  • 1 interceptkoefficient per kategori
Intermediär regression med statsmodels i Python

Jämföra koefficienter

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
Intermediär regression med statsmodels i Python

Visualisering: 1 numerisk förklarande variabel

import matplotlib.pyplot as plt
import seaborn as sns

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

plt.show()

Spridningsdiagram över fiskmassa mot längd, med en linjär trendlinje

Intermediär regression med statsmodels i Python

Visualisering: 1 kategorisk förklarande variabel

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

Lådagram över fiskmassa per art

Intermediär regression med statsmodels i Python

Visualisering: båda förklarande variablerna

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")

En modell med parallella lutningar för fiskmassa mot längd, kategoriserad per art

Intermediär regression med statsmodels i Python

Nu kör vi en övning!

Intermediär regression med statsmodels i Python

Preparing Video For Download...