Space shuttle Challenger explosion

The graph above shows O-ring damage on the y-axis and temperature on the x-axis. All damage free previous launches were for temperatures above 66 degrees F. The day the Challenger exploded was far colder than any of the previous launch days.(See R code for this graph below).
The graph above shows O-ring damage on the y-axis and temperature on the x-axis. All damage free previous launches were for temperatures above 66 degrees F. The day the Challenger exploded (because of O-ring damage) was far colder than any of the previous launch days, and the forecast temperature was 26 to 29 F. (See R code for this graph below).

On 28 January 1986 the space shuttle Challenger exploded. In his book titled Visual Explanations, Edward Tufte (1997) provided a detailed account of the background to the incident.

The graph above shows O-ring damage on the y-axis and temperature on the x-axis. All damage free previous launches were for temperatures above 66 degrees F. The day the Challenger exploded was far colder than any of the previous launch days.

Why?

It was established after the explosion that the shuttle’s O-rings were damaged because of the cold weather.

How was it established?

In his dramatic testimony the physicist Feynman demonstrated that very cold temperature made the O-rings lose resilience.

How does the graph above add value?

The engineers working on the Challenger were worried about the cold weather. Although they prepared an informative diagram of how erosion in the primary O-ring interacted with the secondary O-ring, they did not related this to temperature. They presented several tables of data. In contrast, the scatter plot puts the key data together.


R code

The R package DAAG has a dataset called orings related to the incident.

We can install and then load the package.

library(DAAG) 
data(orings)

We column bind the data on the damage index to the oring data (from Tufte(1997,p. 44)):

Damage = c(11,4,4,2,0,0,0,0,0,0,4,0,4,0,0,0,0,4,0,0,0,0,0)
oring = cbind(orings,Damage)
oring
##    Temperature Erosion Blowby Total Damage
## 1           53       3      2     5     11
## 2           57       1      0     1      4
## 3           58       1      0     1      4
## 4           63       1      0     1      2
## 5           66       0      0     0      0
## 6           67       0      0     0      0
## 7           67       0      0     0      0
## 8           67       0      0     0      0
## 9           68       0      0     0      0
## 10          69       0      0     0      0
## 11          70       1      0     1      4
## 12          70       0      0     0      0
## 13          70       1      0     1      4
## 14          70       0      0     0      0
## 15          72       0      0     0      0
## 16          73       0      0     0      0
## 17          75       0      0     0      0
## 18          75       0      2     1      4
## 19          76       0      0     0      0
## 20          76       0      0     0      0
## 21          78       0      0     0      0
## 22          79       0      0     0      0
## 23          81       0      0     0      0

A basic plot to start off is

plot(Damage~Temperature, data=oring)

1430667584_full.png

We can add in a few features now to produce a figure (at the top of this post) on the lines of the beautiful figure used by Tufte (1997). We use the ggplot2 package. http://ggplot2.org/

With ggplot we can start with an initial plot chal1, in which we add elements with a + sign. We can add further elements to chal1 moving to plots chal2, chal3, until we end up with chal4, the figure at the top of this post.

# for comments
# we load ggplot
library(ggplot2)
# we tell ggplot to use oring data + which is the x and the y variable
# + plot points + give limits for the x axis
chal1 = ggplot(oring, aes(x= Temperature,y=jitter(Damage) )  ) +
  geom_point() + xlim(25,85)
# we add a smoother to plot chal1 to get plot chal2
chal2  = chal1 + stat_smooth(method=loess, se=FALSE)
# we put in a red rectangle to get chal3
chal3  = chal2 + annotate("rect", xmin=26, xmax = 29, 
                           ymin=0, ymax=10, alpha=.3, fill="red")
# we put in text to get the final plot chal4
chal4  = chal3 + annotate("text", x=30, y=3, 
            label="forecast \n temperature \n 26 to 29"); chal4

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s