Atípicos, apalancamiento e influencia

Introducción a la regresión en R

Richie Cotton

Data Evangelist at DataCamp

Datos de rutilo

roach <- fish %>%
  filter(species == "Roach")
species length_cm mass_g
Roach 12.9 40
Roach 16.5 69
Roach 17.5 78
Roach 18.2 87
Roach 18.6 120
... ... ...
Introducción a la regresión en R

¿Qué puntos son atípicos?

ggplot(roach, aes(length_cm, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

Diagrama de dispersión de masas de rutilo frente a longitudes, con una línea de tendencia. La mayoría de puntos siguen de cerca la línea.

Introducción a la regresión en R

Valores explicativos extremos

roach %>% 
  mutate(
    has_extreme_length = length_cm < 15 | length_cm > 26
  ) %>% 
  ggplot(aes(length_cm, mass_g)) +
  geom_point(aes(color = has_extreme_length)) +
  geom_smooth(method = "lm", se = FALSE)

Diagrama de dispersión de masas de rutilo frente a longitudes, con línea de tendencia. La mayoría de puntos son rojos, pero uno muy corto y otro muy largo están en cian.

Introducción a la regresión en R

Valores de respuesta lejos de la recta de regresión

roach %>% 
  mutate(
    has_extreme_length = length_cm < 15 | length_cm > 26,
    has_extreme_mass = mass_g < 1
  ) %>% 
  ggplot(aes(length_cm, mass_g)) +
  geom_point(
    aes(
      color = has_extreme_length, 
      shape = has_extreme_mass
    )
  ) +
  geom_smooth(method = "lm", se = FALSE)

Diagrama de dispersión de masas de rutilo frente a longitudes, con línea de tendencia. La mayoría de puntos son rojos; uno muy corto y otro muy largo están en cian. La mayoría son círculos; un punto con masa aparente cero es un triángulo.

Introducción a la regresión en R

Apalancamiento

El apalancamiento mide cuán extremos son los valores de la variable explicativa.

mdl_roach <- lm(mass_g ~ length_cm, data = roach)

hatvalues(mdl_roach)
     1      2      3      4      5      6      7 
0.3137 0.1255 0.0935 0.0763 0.0684 0.0619 0.0605 
     8      9     10     11     12     13     14 
0.0568 0.0503 0.0501 0.0501 0.0506 0.0509 0.0581 
    15     16     17     18     19     20 
0.0581 0.0593 0.0884 0.0995 0.1334 0.3947
Introducción a la regresión en R

La columna .hat

library(broom)
augment(mdl_roach)
# A tibble: 20 × 8
   mass_g length_cm .fitted   .resid   .hat .sigma   .cooksd .std.resid
    <dbl>     <dbl>   <dbl>    <dbl>  <dbl>  <dbl>     <dbl>      <dbl>
 1     40      12.9   -28.6   68.6   0.314    33.8 1.07          2.17  
 2     69      16.5    55.4   13.6   0.126    39.1 0.0104        0.381 
 3     78      17.5    78.7   -0.711 0.0935   39.3 0.0000197    -0.0196
 4     87      18.2    95.0   -8.03  0.0763   39.2 0.00198      -0.219 
 5    120      18.6   104.    15.6   0.0684   39.1 0.00661       0.424 
... 
Introducción a la regresión en R

Rutilos con alto apalancamiento

mdl_roach %>%
  augment() %>%
  select(mass_g, length_cm, leverage = .hat) %>%
  arrange(desc(leverage)) %>% 
  head()
# A tibble: 6 x 3
  mass_g length_cm leverage
   <dbl>     <dbl>    <dbl>
1    390      29.5   0.395  # rutilo muy largo
2     40      12.9   0.314  # rutilo muy corto
3    272      25     0.133 
4     69      16.5   0.126 
5    290      24     0.0995
6     78      17.5   0.0935
Introducción a la regresión en R

Influencia

La influencia mide cuánto cambiaría el modelo si quitaras la observación del conjunto al ajustar.

Una persona girando una llave inglesa

Introducción a la regresión en R

Distancia de Cook

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

cooks.distance(mdl_roach)
       1        2        3        4        5        6 
1.07e+00 1.04e-02 1.97e-05 1.98e-03 6.61e-03 3.12e-01 
       7        8        9       10       11       12 
8.53e-04 1.99e-04 2.57e-04 2.56e-04 2.45e-03 7.95e-03 
      13       14       15       16       17       18 
1.37e-04 4.82e-03 1.15e-02 4.52e-03 6.12e-02 1.50e-01 
      19       20 
2.06e-02 3.66e-01
Introducción a la regresión en R

La columna .cooksd

library(broom)
augment(mdl_roach)
# A tibble: 20 x 9
   mass_g length_cm .fitted .se.fit   .resid   .hat .sigma   .cooksd .std.resid
    <dbl>     <dbl>   <dbl>   <dbl>    <dbl>  <dbl>  <dbl>     <dbl>      <dbl>
 1     40      12.9   -28.6   21.4    68.6   0.314    33.8 1.07          2.17  
 2     69      16.5    55.4   13.5    13.6   0.126    39.1 0.0104        0.381 
 3     78      17.5    78.7   11.7    -0.711 0.0935   39.3 0.0000197    -0.0196
 4     87      18.2    95.0   10.5    -8.03  0.0763   39.2 0.00198      -0.219 
 5    120      18.6   104.     9.98   15.6   0.0684   39.1 0.00661       0.424 
... 
Introducción a la regresión en R

Rutilos más influyentes

mdl_roach %>%
  augment() %>%
  select(mass_g, length_cm, cooks_dist = .cooksd) %>%
  arrange(desc(cooks_dist)) %>% 
  head()
# A tibble: 6 x 3
  mass_g length_cm cooks_dist
   <dbl>     <dbl>      <dbl>
1     40      12.9     1.07   # rutilo muy corto
2    390      29.5     0.366  # rutilo muy largo
3      0      19       0.312  # rutilo de masa cero
4    290      24       0.150 
5    180      23.6     0.0612
6    272      25       0.0206
Introducción a la regresión en R

Quitando el rutilo más influyente

roach_not_short <- roach %>% 
  filter(length != 12.9)
ggplot(roach, aes(length_cm, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  geom_smooth(
    method = "lm", se = FALSE, 
    data = roach_not_short, color = "red"
  )

Diagrama de dispersión de masas de rutilo frente a longitudes, con dos líneas de tendencia. Una usa todos los datos y otra excluye el rutilo más corto. Esta segunda tiene una pendiente claramente mayor.

Introducción a la regresión en R

autoplot()

autoplot(
  mdl_roach, 
  which = 4:6, 
  nrow = 3,
  ncol = 1
)

Tres gráficos diagnósticos del modelo de rutilo, en tres paneles.

Introducción a la regresión en R

¡Vamos a practicar!

Introducción a la regresión en R

Preparing Video For Download...