Regressie naar het gemiddelde

Introductie tot regressie met statsmodels in Python

Maarten Van den Broeck

Content Developer at DataCamp

Het concept

  • Respons = fitted value + residu
  • "Wat je verklaarde" + "wat je niet kon verklaren"
  • Residuen bestaan door modelproblemen én fundamentele willekeur
  • Uitschieters zijn vaak toeval
  • Regressie naar het gemiddelde: uitschieters houden niet stand in de tijd
Introductie tot regressie met statsmodels in Python

Pearsons vader-zoon-dataset

  • 1078 vader-zoonparen
  • Hebben lange vaders lange zonen?
father_height_cm son_height_cm
165.2 151.8
160.7 160.6
165.0 160.9
167.0 159.5
155.3 163.3
... ...
1 Adapted from https://www.rdocumentation.org/packages/UsingR/topics/father.son
Introductie tot regressie met statsmodels in Python

Spreidingsdiagram

fig = plt.figure()
sns.scatterplot(x="father_height_cm",
                y="son_height_cm",
                data=father_son)
plt.axline(xy1=(150, 150),
           slope=1,
           linewidth=2,
           color="green")
plt.axis("equal")
plt.show()

Een spreidingsdiagram van zoons' lengte versus vaders' lengte, met een lijn waar vader en zoon even lang zouden zijn. Naarmate vaders langer zijn, worden zonen dat ook.

Introductie tot regressie met statsmodels in Python

Een regressielijn toevoegen

fig = plt.figure()

sns.regplot(x="father_height_cm",
            y="son_height_cm",
            data=father_son,
            ci = None, 
            line_kws={"color": "black"})

plt.axline(xy1 = (150, 150),
           slope=1,
           linewidth=2,
           color="green")

plt.axis("equal")
plt.show()

Spreidingsdiagram van zoons' lengte versus vaders' lengte, met een lineaire trendlijn. De trendlijn is minder steil dan de lijn waar vader en zoon even lang zouden zijn.

Introductie tot regressie met statsmodels in Python

Een regressie uitvoeren

mdl_son_vs_father = ols("son_height_cm ~ father_height_cm",
                        data = father_son).fit()
print(mdl_son_vs_father.params)
Intercept           86.071975
father_height_cm     0.514093
dtype: float64
Introductie tot regressie met statsmodels in Python

Voorspellingen maken

really_tall_father = pd.DataFrame(
  {"father_height_cm": [190]})

mdl_son_vs_father.predict(
  really_tall_father)
183.7
really_short_father = pd.DataFrame(
  {"father_height_cm": [150]})

mdl_son_vs_father.predict(
  really_short_father)
163.2
Introductie tot regressie met statsmodels in Python

Laten we oefenen!

Introductie tot regressie met statsmodels in Python

Preparing Video For Download...