Regresia spre medie

Introducere în regresia cu statsmodels în Python

Maarten Van den Broeck

Content Developer at DataCamp

Conceptul

  • Valoarea răspunsului = valoarea ajustată + reziduu
  • „Ceea ce s-a explicat" + „ceea ce nu s-a putut explica"
  • Reziduurile apar din cauza problemelor din model și a aleatorității fundamentale
  • Cazurile extreme sunt adesea cauzate de aleatoritate
  • Regresia spre medie înseamnă că valorile extreme nu persistă în timp
Introducere în regresia cu statsmodels în Python

Setul de date Pearson tată-fiu

  • 1078 perechi tată/fiu
  • Tații înalți au fii înalți?
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 Adaptat din https://www.rdocumentation.org/packages/UsingR/topics/father.son
Introducere în regresia cu statsmodels în Python

Diagramă de dispersie

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

Diagramă de dispersie a înălțimilor fiilor față de înălțimile taților, cu o dreaptă pe care tatăl și fiul ar avea aceeași înălțime. Pe măsură ce tații sunt mai înalți, și fiii sunt mai înalți.

Introducere în regresia cu statsmodels în Python

Adăugarea dreptei de regresie

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

Diagrama de dispersie a înălțimilor fiilor față de înălțimile taților, cu o dreaptă de regresie. Dreapta de regresie este mai puțin abruptă decât dreapta pe care tații și fiii ar avea aceeași înălțime.

Introducere în regresia cu statsmodels în Python

Rularea unei regresii

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
Introducere în regresia cu statsmodels în Python

Realizarea predicțiilor

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
Introducere în regresia cu statsmodels în Python

Să exersăm!

Introducere în regresia cu statsmodels în Python

Preparing Video For Download...