Regression mot medelvärdet

Introduktion till regression med statsmodels i Python

Maarten Van den Broeck

Content Developer at DataCamp

Konceptet

  • Responsvärde = anpassat värde + residual
  • "Det du förklarade" + "det du inte kunde förklara"
  • Residualer uppstår på grund av brister i modellen och grundläggande slumpmässighet
  • Extrema utfall beror ofta på slumpen
  • Regression mot medelvärdet innebär att extrema utfall inte består över tid
Introduktion till regression med statsmodels i Python

Pearsons far/son-datamängd

  • 1 078 far/son-par
  • Har långa fäder långa söner?
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 Anpassad från https://www.rdocumentation.org/packages/UsingR/topics/father.son
Introduktion till regression med statsmodels i Python

Punktdiagram

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

Ett punktdiagram över söners längd mot fäders längd, med en linje där far och son har samma längd. Ju längre fäderna är, desto längre är sönerna.

Introduktion till regression med statsmodels i Python

Lägga till en regressionslinje

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

Punktdiagrammet över söners längd mot fäders längd, med en linjär trendlinje. Trendlinjen är flackare än linjen där fäder och söner har samma längd.

Introduktion till regression med statsmodels i Python

Köra en regression

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
Introduktion till regression med statsmodels i Python

Göra förutsägelser

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
Introduktion till regression med statsmodels i Python

Nu kör vi en övning!

Introduktion till regression med statsmodels i Python

Preparing Video For Download...