Uitschieters, hefboomwerking en invloed

Introductie tot regressie in R

Richie Cotton

Data Evangelist at DataCamp

Dataset: voorn (Roach)

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
... ... ...
Introductie tot regressie in R

Welke punten zijn uitschieters?

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

Een spreidingsdiagram van massa vs. lengte van voorn, met een trendlijn. De meeste punten volgen de trendlijn nauw.

Introductie tot regressie in R

Extreme verklarende waarden

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)

Een spreidingsdiagram van massa vs. lengte van voorn, met een trendlijn. De meeste punten zijn rood; één zeer korte en één zeer lange voorn zijn cyaan.

Introductie tot regressie in R

Responswaarden ver van de regressielijn

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)

Een spreidingsdiagram van massa vs. lengte van voorn, met een trendlijn. De meeste punten zijn rood; één zeer korte en één zeer lange voorn zijn cyaan. De meeste punten zijn cirkels; één punt met schijnbare massa nul is een driehoek.

Introductie tot regressie in R

Hefboomwerking

Hefboomwerking (leverage) meet hoe extreem de waarden van de verklarende variabele zijn.

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
Introductie tot regressie in R

De kolom .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 
... 
Introductie tot regressie in R

Voorns met hoge hefboomwerking

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  # hele lange voorn
2     40      12.9   0.314  # hele korte voorn
3    272      25     0.133 
4     69      16.5   0.126 
5    290      24     0.0995
6     78      17.5   0.0935
Introductie tot regressie in R

Invloed

Invloed meet hoeveel het model verandert als je de observatie weglaat bij het modelleren.

Iemand die een moersleutel draait

Introductie tot regressie in R

Cook’s distance

Cook’s distance is de meest gebruikte maat voor invloed.

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
Introductie tot regressie in R

De kolom .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 
... 
Introductie tot regressie in R

Meest invloedrijke voorns

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   # hele korte voorn
2    390      29.5     0.366  # hele lange voorn
3      0      19       0.312  # voorn met massa nul
4    290      24       0.150 
5    180      23.6     0.0612
6    272      25       0.0206
Introductie tot regressie in R

De meest invloedrijke voorn verwijderen

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

Een spreidingsdiagram van massa vs. lengte van voorn, met twee trendlijnen. Eén gebruikt alle data; de andere sluit de kortste voorn uit en heeft een duidelijk steilere helling.

Introductie tot regressie in R

autoplot()

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

De drie diagnostische plots van het voorn‑model, in drie panelen.

Introductie tot regressie in R

Laten we oefenen!

Introductie tot regressie in R

Preparing Video For Download...