Valores atípicos, apalancamiento e influencia

Introducción a la regresión con statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Datos de cucarillas

roach = fish[fish['species'] == "Roach"]
print(roach.head())
   species  mass_g  length_cm
35   Roach    40.0       12.9
36   Roach    69.0       16.5
37   Roach    78.0       17.5
38   Roach    87.0       18.2
39   Roach   120.0       18.6

Una cucarilla común

Introducción a la regresión con statsmodels en Python

¿Qué puntos son atípicos?

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)
plt.show()

Diagrama de dispersión de masas de cucarilla frente a su longitud con línea de tendencia. La mayoría de puntos siguen de cerca la línea.

Introducción a la regresión con statsmodels en Python

Valores explicativos extremos

roach["extreme_l"] = ((roach["length_cm"] < 15) |
                    (roach["length_cm"] > 26))

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                data=roach)

Diagrama de dispersión de masas de cucarilla frente a su longitud, con línea de tendencia. La mayoría de puntos están en azul; uno muy corto y uno muy largo están en naranja.

Introducción a la regresión con statsmodels en Python

Valores de respuesta alejados de la recta de regresión

roach["extreme_m"] = roach["mass_g"] < 1

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                style="extreme_m",
                data=roach)

Diagrama de dispersión de masas de cucarilla frente a su longitud, con línea de tendencia. La mayoría de puntos están en azul; uno muy corto y uno muy largo están en naranja. Casi todos son círculos, pero un punto con masa aparente cero es una cruz.

Introducción a la regresión con statsmodels en Python

Apalancamiento e influencia

El apalancamiento mide lo extremas que son las variables explicativas.

La influencia mide cuánto cambia el modelo si dejas fuera la observación al ajustar.

Una persona usando una llave inglesa

Introducción a la regresión con statsmodels en Python

.get_influence() y .summary_frame()

mdl_roach = ols("mass_g ~ length_cm", data=roach).fit()

summary_roach = mdl_roach.get_influence().summary_frame()
roach["leverage"] = summary_roach["hat_diag"] print(roach.head())
   species  mass_g  length_cm  leverage
35   Roach    40.0       12.9  0.313729
36   Roach    69.0       16.5  0.125538
37   Roach    78.0       17.5  0.093487
38   Roach    87.0       18.2  0.076283
39   Roach   120.0       18.6  0.068387
Introducción a la regresión con statsmodels en Python

Distancia de Cook

La distancia de Cook es la medida de influencia más común.

roach["cooks_dist"] = summary_roach["cooks_d"]
print(roach.head())
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015
36   Roach    69.0       16.5  0.125538    0.010429
37   Roach    78.0       17.5  0.093487    0.000020
38   Roach    87.0       18.2  0.076283    0.001980
39   Roach   120.0       18.6  0.068387    0.006610
Introducción a la regresión con statsmodels en Python

Cucarillas más influyentes

print(roach.sort_values("cooks_dist", ascending = False))
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015 # cucarilla muy corta
54   Roach   390.0       29.5  0.394740    0.365782 # cucarilla muy larga
40   Roach     0.0       19.0  0.061897    0.311852 # cucarilla con masa cero
52   Roach   290.0       24.0  0.099488    0.150064
51   Roach   180.0       23.6  0.088391    0.061209
..     ...     ...        ...       ...         ...
43   Roach   150.0       20.4  0.050264    0.000257
44   Roach   145.0       20.5  0.050092    0.000256
42   Roach   120.0       19.4  0.056815    0.000199
47   Roach   160.0       21.1  0.050910    0.000137
37   Roach    78.0       17.5  0.093487    0.000020
Introducción a la regresión con statsmodels en Python

Quitando la cucarilla más influyente

roach_not_short = roach[roach["length_cm"] != 12.9]

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None,
            line_kws={"color": "green"})

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach_not_short,
            ci=None,
            line_kws={"color": "red"})

Diagrama de dispersión de masas de cucarilla frente a su longitud, con dos líneas de tendencia. Una usa todos los datos; otra excluye la cucarilla más corta. Esta segunda línea tiene una pendiente claramente mayor.

Introducción a la regresión con statsmodels en Python

¡Vamos a practicar!

Introducción a la regresión con statsmodels en Python

Preparing Video For Download...