Uitbijters, hefboomwerking en invloed

Introductie tot regressie in R

Richie Cotton

Data Evangelist at DataCamp

Roach-gegevensset

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 uitbijters?

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

Een spreidingsdiagram van massa tegen lengte van ruisvoorns, met een trendlijn. De meeste punten liggen dicht bij de lijn.

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 tegen lengte van ruisvoorns, met een trendlijn. De meeste punten zijn rood, maar één heel korte en één heel lange ruisvoorn 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 tegen lengte van ruisvoorns, met een trendlijn. De meeste punten zijn rood, maar één heel korte en één heel lange ruisvoorn zijn cyaan. De meeste punten zijn cirkels, maar een punt voor een vis met schijnbaar massa nul is een driehoek.

Introductie tot regressie in R

Hefboomwerking

Hefboomwerking 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

Ruisvoorns 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 ruisvoorn
2     40      12.9   0.314  # hele korte ruisvoorn
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 ruisvoorns

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 ruisvoorn
2    390      29.5     0.366  # hele lange ruisvoorn
3      0      19       0.312  # ruisvoorn 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 ruisvoorn 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 tegen lengte van ruisvoorns, met twee trendlijnen. Eén gebruikt alle data, de andere sluit de kortste ruisvoorn uit. Die tweede lijn is duidelijk steiler.

Introductie tot regressie in R

autoplot()

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

De drie diagnostische plots van het ruisvoorn-model, in drie panelen.

Introductie tot regressie in R

Laten we oefenen!

Introductie tot regressie in R

Preparing Video For Download...