Example - Challenger O-Ring Failure

Challenger O-Ring data

The raw challenger o-ring data shows the o-ring erosion and blow-by events on shuttle launches leading up to the Challenger disaster.

This dataset was sourced from tufte

Presented in order of launch date, there are obvious signs of damage on some flights, but it’s difficult to see trends in this presentation.

library(dplyr)
library(ggplot2)
library(emphatic)

challenger
#>    flight temp erosion blowby damage       date
#> 1       1   66       0      0      0 1981-04-12
#> 2       2   70       1      0      4 1981-11-12
#> 3       3   69       0      0      0 1982-03-22
#> 4       5   68       0      0      0 1982-11-11
#> 5       6   67       0      0      0 1983-04-04
#> 6       7   72       0      0      0 1983-06-18
#> 7       8   73       0      0      0 1983-08-30
#> 8       9   70       0      0      0 1983-11-28
#> 9    41-B   57       1      0      4 1984-02-03
#> 10   41-C   63       1      0      2 1984-04-06
#> 11   41-D   70       1      0      4 1984-08-30
#> 12   41-G   78       0      0      0 1984-10-05
#> 13   51-A   67       0      0      0 1984-11-08
#> 14   51-C   53       3      2     11 1985-01-24
#> 15   51-D   67       0      0      0 1985-04-12
#> 16   51-B   75       0      0      0 1985-04-29
#> 17   51-G   70       0      0      0 1985-06-17
#> 18   51-F   81       0      0      0 1985-07-29
#> 19   51-I   76       0      0      0 1985-08-27
#> 20   51-J   79       0      0      0 1985-10-03
#> 21   61-A   75       0      2      4 1985-10-30
#> 22   61-B   76       0      0      0 1985-11-26
#> 23   61-C   58       1      0      4 1986-01-12

Ordering by temperature

When ordered by decreasing temperature, a trend is somewhat apparent in the data i.e. lower temperatures have more incidents.

Finding this trend still requires close inspection of the data.

challenger %>% 
  arrange(desc(temp))
#>    flight temp erosion blowby damage       date
#> 1    51-F   81       0      0      0 1985-07-29
#> 2    51-J   79       0      0      0 1985-10-03
#> 3    41-G   78       0      0      0 1984-10-05
#> 4    51-I   76       0      0      0 1985-08-27
#> 5    61-B   76       0      0      0 1985-11-26
#> 6    51-B   75       0      0      0 1985-04-29
#> 7    61-A   75       0      2      4 1985-10-30
#> 8       8   73       0      0      0 1983-08-30
#> 9       7   72       0      0      0 1983-06-18
#> 10      2   70       1      0      4 1981-11-12
#> 11      9   70       0      0      0 1983-11-28
#> 12   41-D   70       1      0      4 1984-08-30
#> 13   51-G   70       0      0      0 1985-06-17
#> 14      3   69       0      0      0 1982-03-22
#> 15      5   68       0      0      0 1982-11-11
#> 16      6   67       0      0      0 1983-04-04
#> 17   51-A   67       0      0      0 1984-11-08
#> 18   51-D   67       0      0      0 1985-04-12
#> 19      1   66       0      0      0 1981-04-12
#> 20   41-C   63       1      0      2 1984-04-06
#> 21   61-C   58       1      0      4 1986-01-12
#> 22   41-B   57       1      0      4 1984-02-03
#> 23   51-C   53       3      2     11 1985-01-24

First Iteration with {emphatic}

  • Arrange by temperature
  • Highlight the temperature range from cold to hot
  • Highlight each row by the damage rating

The cluster of damage at lower temperatures is now much more visually apparent.


challenger %>%
  arrange(desc(temp)) %>%
  hl(palette = scale_color_viridis_c(option = 'B'), cols = 'temp') %>%
  hl(
    scale_color_gradient(low = 'pink', high = 'red'),
    rows = damage > 0,
    cols = damage
  ) 
     flight temp erosion blowby damage       date
1 51-F 81 0 0 0 1985-07-29
2 51-J 79 0 0 0 1985-10-03
3 41-G 78 0 0 0 1984-10-05
4 51-I 76 0 0 0 1985-08-27
5 61-B 76 0 0 0 1985-11-26
6 51-B 75 0 0 0 1985-04-29
7 61-A 75 0 2 4 1985-10-30
8 8 73 0 0 0 1983-08-30
9 7 72 0 0 0 1983-06-18
10 2 70 1 0 4 1981-11-12
11 9 70 0 0 0 1983-11-28
12 41-D 70 1 0 4 1984-08-30
13 51-G 70 0 0 0 1985-06-17
14 3 69 0 0 0 1982-03-22
15 5 68 0 0 0 1982-11-11
16 6 67 0 0 0 1983-04-04
17 51-A 67 0 0 0 1984-11-08
18 51-D 67 0 0 0 1985-04-12
19 1 66 0 0 0 1981-04-12
20 41-C 63 1 0 2 1984-04-06
21 61-C 58 1 0 4 1986-01-12
22 41-B 57 1 0 4 1984-02-03
23 51-C 53 3 2 11 1985-01-24

Second Iteration with {emphatic}

  • Expand temperature range to highlight the full limits of possible flight conditions
  • Highlight the Challenger launch temperature in grey (31 degrees)
  • add a colorbar legend for damage
  • It is now obvious that no real information is available at this low temperature, but all readings at low temperatures have issues.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Expand temperature range to include challenger launch temperature
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
challenger_expanded <- challenger %>%
  mutate(temp = factor(temp, levels = 30:81)) %>%
  tidyr::complete(temp) %>%
  arrange(desc(temp)) %>%
  as.data.frame() %>%
  mutate(temp = as.numeric(levels(temp))[temp]) %>%
  select(flight, everything()) %>%
  mutate(
    flight = if_else(temp == 31, "Challenger", flight)
  )


challenger_expanded %>% 
  hl(scale_color_viridis_c(option = 'B'), cols = temp, show_legend = TRUE) %>%
  hl(
    scale_color_gradient(low = 'lightblue', high = 'orange'),
    rows = !is.na(damage),
    cols = damage,
    show_legend = TRUE
  ) %>%
  hl('firebrick1', rows = temp == 31, cols = flight) %>%
  hl_adjust(na = '')
         flight temp erosion blowby damage       date
1 51-F 81 0 0 0 1985-07-29
2 80
3 51-J 79 0 0 0 1985-10-03
4 41-G 78 0 0 0 1984-10-05
5 77
6 51-I 76 0 0 0 1985-08-27
7 61-B 76 0 0 0 1985-11-26
8 51-B 75 0 0 0 1985-04-29
9 61-A 75 0 2 4 1985-10-30
10 74
11 8 73 0 0 0 1983-08-30
12 7 72 0 0 0 1983-06-18
13 71
14 2 70 1 0 4 1981-11-12
15 9 70 0 0 0 1983-11-28
16 41-D 70 1 0 4 1984-08-30
17 51-G 70 0 0 0 1985-06-17
18 3 69 0 0 0 1982-03-22
19 5 68 0 0 0 1982-11-11
20 6 67 0 0 0 1983-04-04
21 51-A 67 0 0 0 1984-11-08
22 51-D 67 0 0 0 1985-04-12
23 1 66 0 0 0 1981-04-12
24 65
25 64
26 41-C 63 1 0 2 1984-04-06
27 62
28 61
29 60
30 59
31 61-C 58 1 0 4 1986-01-12
32 41-B 57 1 0 4 1984-02-03
33 56
34 55
35 54
36 51-C 53 3 2 11 1985-01-24
37 52
38 51
39 50
40 49
41 48
42 47
43 46
44 45
45 44
46 43
47 42
48 41
49 40
50 39
51 38
52 37
53 36
54 35
55 34
56 33
57 32
58 Challenger 31
59 30

temp: 30 35 40 45 50 55 60 65 70 75 80
damage: 0.00 1.25 2.50 3.75 5.00 6.25 7.50 8.75 10.00