title: "Analyse du risque de défaillance des joints toriques de la navette Challenger"
author: "Arnaud Legrand"
date: "28 juin 2018"
author: "NEBIE Gaston Cyrille"
date: "20 janvier 2025"
output: html_document
---
```{r warning = FALSE , message = FALSE}
# Chargeons les packages neccessaires
library(tidyverse)
library(splines)
library(plotly)
```
Le 27 Janvier 1986, veille du décollage de la navette _Challenger_, eu
lieu une télé-conférence de trois heures entre les ingénieurs de la
Morton Thiokol (constructeur d'un des moteurs) et de la NASA. La
discussion portait principalement sur les conséquences de la
température prévue au moment du décollage de 31°F (juste en dessous de
0°C) sur le succès du vol et en particulier sur la performance des
joints toriques utilisés dans les moteurs. En effet, aucun test
n'avait été effectué à cette température.
L'étude qui suit reprend donc une partie des analyses effectuées cette
nuit là et dont l'objectif était d'évaluer l'influence potentielle de
la température et de la pression à laquelle sont soumis les joints
toriques sur leur probabilité de dysfonctionnement. Pour cela, nous
disposons des résultats des expériences réalisées par les ingénieurs
de la NASA durant les 6 années précédant le lancement de la navette
lieu une télé-conférence de trois heures entre les ingénieurs de la Morton Thiokol (constructeur d'un des moteurs) et de la NASA. La discussion portait principalement sur les conséquences de la température prévue au moment du décollage de 31°F (juste en dessous de 0°C) sur le succès du vol et en particulier sur la performance des joints toriques utilisés dans les moteurs. En effet, aucun test n'avait été effectué à cette température.
L'étude qui suit reprend donc une partie des analyses effectuées cette nuit là et dont l'objectif était d'évaluer l'influence potentielle de la température et de la pression à laquelle sont soumis les joints toriques sur leur probabilité de dysfonctionnement. Pour cela, nous disposons des résultats des expériences réalisées par les ingénieurs de la NASA durant les 6 années précédant le lancement de la navette
Challenger.
# Chargement des données
# Chargement et exploiration des données
Nous commençons donc par charger ces données:
```{r}
data = read.csv("shuttle.csv",header=T)
data
str(data)
summary(data)
head(data)
```
Le jeu de données nous inclut :
- *Date* : qui représente la date de l’essai,
- *Temperature* : Température en Farenheit lors de l’essai,
- **Pressure** (psi) : Pression des moteurs,
- **Count** : Nombre total de joints observés (6 par moteur),
- **Malfunction** : Nombre de joints défaillants.
Calculon la proportions de défaillance :
```{r}
data <- data %>%
mutate(
Failure_Proportion = Malfunction / Count
)
```
```{r}
# Distribution des variables
library(ggplot2)
ggplot(data,
aes(
x = Temperature,
y = Failure_Proportion,
color = Pressure
)
) +
geom_point(size = 3) +
scale_color_gradient(
low = "blue",
high = "red") +
labs(title = "Proportion de défaillances en fonction de la température et de la pression",
x = "Température (°F)", y = "Proportion de défaillances", color = "Pression (psi)") +
theme_minimal()
```
Le jeu de données nous indique la date de l'essai, le nombre de joints
toriques mesurés (il y en a 6 sur le lançeur principal), la
température (en Farenheit) et la pression (en psi), et enfin le
nombre de dysfonctionnements relevés.
La rampe de couleur suivant la pression n'affiche pas de tendance claire par rapport à la proportion de défaillances. Aussi, les données sont dominées par des pressions élevées (200 psi), ce qui limite l'analyse de l'effet de la pression.
# Inspection graphique des données
Les vols où aucun incident n'est relevé n'apportant aucun information
sur l'influence de la température ou de la pression sur les
dysfonctionnements, nous nous concentrons sur les expériences où au
moins un joint a été défectueux.
Regardons de ce fait à travers le graphique ci-dessous l'effet, de la température.
```{r}
data = data[data$Malfunction>0,]
data
ggplot(data,
aes(x = Temperature,
y = Failure_Proportion)) +
geom_point(size = 3,
color = "blue") +
geom_smooth(method = "loess",
se = FALSE,
color = "red") +
labs(title = "Relation entre la température et la proportion de défaillances",
x = "Température (°F)",
y = "Proportion de défaillances") +
theme_minimal()
```
Très bien, nous avons une variabilité de température importante mais
la pression est quasiment toujours égale à 200, ce qui devrait
simplifier l'analyse.
La courbe met en évidence une forte augmentation des défaillances à basse température, en particulier autour de $50–60°F$. En revanche, à mesure que la température dépasse $70°F$, la proportion de défaillances diminue de manière significative. Ce comportement suggère l'existence d'une relation non linéaire entre la température et les défaillances, une tendance qui pourrait ne pas être correctement capturée par un modèle linéaire simple.
Regardons à présent les données en trois dimension.
Comment la fréquence d'échecs varie-t-elle avec la température ?
layout(title = "Proportion de défaillances en fonction de la température et de la pression",
scene = list(
xaxis = list(title = "Température (°F)"),
yaxis = list(title = "Pression (psi)"),
zaxis = list(title = "Proportion de défaillances")))
```
À première vue, ce n'est pas flagrant mais bon, essayons quand même
d'estimer l'impact de la température $t$ sur la probabilité de
dysfonctionnements d'un joint.
Ce graphique met en évidence que les défaillances sont principalement concentrées dans des conditions de basse température, en particulier en dessous de 60°F. Par ailleurs, la pression ne semble pas avoir d’influence notable sur la proportion de défaillances, ou du moins, aucune tendance claire ne peut être discernée à partir des données disponibles.
# Estimation de l'influence de réelle des variable par la modélisation statistique
# Estimation de l'influence de la température
Nous ajustons une régression logistique pour estimer la probabilité de défaillance d’un joint torique en fonction de la température, de la pression et de leur interaction.
Supposons que chacun des 6 joints toriques est endommagé avec la même
probabilité et indépendamment des autres et que cette probabilité ne
dépend que de la température. Si on note $p(t)$ cette probabilité, le
nombre de joints $D$ dysfonctionnant lorsque l'on effectue le vol à
température $t$ suit une loi binomiale de paramètre $n=6$ et
$p=p(t)$. Pour relier $p(t)$ à $t$, on va donc effectuer une
logistic_reg <- glm(Malfunction / Count ~ Temperature * Pressure,
weights = Count,
family = binomial(link="logit"),
data = data)
# Résumé du modèle
summary(logistic_reg)
```
L'estimateur le plus probable du paramètre de température est 0.001416
et l'erreur standard de cet estimateur est de 0.049, autrement dit on
ne peut pas distinguer d'impact particulier et il faut prendre nos
estimations avec des pincettes.
## Résumé du modèle
L’intercept ($-21.77$) représente la valeur de la log-odds de défaillance lorsque la température et la pression sont nulles, une situation théorique en dehors du domaine couvert par les données. Ce coefficient n'est pas significatif ($p=0.638$).
Le coefficient associé à la température ($0.25$) reflète l'effet isolé de la température sur la probabilité de défaillance. Cet effet n'est également pas significatif ($p=0.703$), ce qui indique une grande incertitude dans l'estimation de cet effet.
Le coefficient de la pression ($0.13$) capture l'effet isolé de la pression sur la probabilité de défaillance. Tout comme pour la température, cet effet n'est pas significatif ($p=0.574$).
L'interaction entre température et pression ($-0.0018$) représente la synergie ou l'antagonisme potentiel entre ces deux variables. Cet effet est également non significatif ($p=0.596$).
# Estimation de la probabilité de dysfonctionnant des joints toriques
La température prévue le jour du décollage est de 31°F. Essayons
d'estimer la probabilité de dysfonctionnement des joints toriques à
cette température à partir du modèle que nous venons de construire:
## Interprétation
Aucun des termes du modèle n'est statistiquement significatif au seuil classique ($p<0.05$). Cela peut indiquer que les variables température et pression n'ont pas d'effet notable sur les défaillances dans ce jeu de données. Cependant, il est également possible que la taille limitée de l'échantillon et la distribution des données, en particulier le manque de données pour des températures très basses, entraînent une incertitude élevée dans les estimations.
## Performances du modèle
En termes de performance, la déviance nulle (24.23) comparée à la déviance résiduelle (16.26) montre que le modèle réduit la déviance, mais pas suffisamment pour expliquer une grande partie de la variabilité dans les défaillances observées. Par ailleurs, l'AIC (37.817) est relativement élevé pour un modèle simple, ce qui reflète un ajustement limité aux données. Ces éléments suggèrent que le modèle actuel est loin d'être optimal pour prédire les défaillances dans ce contexte.
# Analysons le modèle à partir de données de prédictions
A cet effet, nous allons générer des valeurs fictives mais réaliste.
grid$Failure_Prob <- predict(logistic_reg, newdata = grid, type = "response")
```
Comme on pouvait s'attendre au vu des données initiales, la
température n'a pas d'impact notable sur la probabilité d'échec des
joints toriques. Elle sera d'environ 0.2, comme dans les essais
précédents où nous il y a eu défaillance d'au moins un joint. Revenons
à l'ensemble des données initiales pour estimer la probabilité de
défaillance d'un joint:
Réalisons à présent un *Heatmap* des probabilités.
```{r}
data_full = read.csv("shuttle.csv",header=T)
sum(data_full$Malfunction)/sum(data_full$Count)
ggplot(grid,
aes(
x = Temperature,
y = Pressure,
fill = Failure_Prob)) +
geom_tile() +
scale_fill_gradient(
low = "blue",
high = "red") +
labs(title = "Probabilité de défaillance en fonction de la température et de la pression",
x = "Température (°F)", y = "Pression (psi)", fill = "Probabilité") +
theme_minimal()
```
Cette probabilité est donc d'environ $p=0.065$, sachant qu'il existe
un joint primaire un joint secondaire sur chacune des trois parties du
lançeur, la probabilité de défaillance des deux joints d'un lançeur
est de $p^2 \approx 0.00425$. La probabilité de défaillance d'un des
lançeur est donc de $1-(1-p^2)^3 \approx 1.2%$. Ça serait vraiment
pas de chance... Tout est sous contrôle, le décollage peut donc avoir
lieu demain comme prévu.
Seulement, le lendemain, la navette Challenger explosera et emportera
avec elle ses sept membres d'équipages. L'opinion publique est
fortement touchée et lors de l'enquête qui suivra, la fiabilité des
joints toriques sera directement mise en cause. Au delà des problèmes
de communication interne à la NASA qui sont pour beaucoup dans ce
fiasco, l'analyse précédente comporte (au moins) un petit
problème... Saurez-vous le trouver ? Vous êtes libre de modifier cette
analyse et de regarder ce jeu de données sous tous les angles afin
d'expliquer ce qui ne va pas.
La heatmap révèle une probabilité de défaillance légèrement plus élevée pour les basses températures, notamment entre 50 et 60°F, lorsqu'elles sont associées à une pression élevée d'environ 200 psi. Toutefois, les variations globales restent faibles, ce qui traduit l'incertitude des prédictions fournies par le modèle.
# Conclusion
Les analyses mettent en évidence une augmentation marquée de la proportion de défaillances à basse température, en particulier pour des températures inférieures à 60°F. Cependant, les données manquent d’observations à des températures très basses, comme 31°F (les conditions du jour du lancement), ce qui limite la capacité du modèle à estimer précisément le risque dans ces conditions critiques.
En ce qui concerne la pression, les données disponibles ne montrent pas d’influence significative sur la probabilité de défaillance. Cette absence d’effet apparent peut s'expliquer par la faible variabilité des pressions dans le jeu de données, dominé par une pression élevée de 200 psi, ce qui empêche une évaluation fiable de l'effet isolé ou combiné de la pression.
L'interaction entre la température et la pression, quant à elle, n'a pas été identifiée comme significative par le modèle. Cela suggère qu'aucune synergie ou antagonisme notable entre ces deux variables ne peut être confirmé avec les données actuelles.
Les principales limitations de cette analyse résident dans le manque de représentativité des données pour des températures basses, en dessous de 50°F. De plus, la concentration des observations à une pression élevée de 200 psi limite la possibilité d’explorer l’effet de la pression ou des combinaisons température-pression. Ces lacunes entraînent une incertitude élevée dans les estimations et réduisent la portée des conclusions.
Pour mieux capturer les relations non linéaires entre les variables, il est recommandé de tester des modèles alternatifs, tels que des modèles non linéaires ou utilisant des transformations des variables explicatives.
Une collecte de données supplémentaires serait essentielle pour compléter l’analyse. Il serait particulièrement important d’obtenir des observations pour des températures basses, comme 31°F, et pour une gamme de pressions plus variée.
Bien que le modèle ne révèle pas de relations statistiquement significatives, les graphiques exploratoires montrent une augmentation évidente des risques de défaillance à basse température. Ces résultats soulignent l'importance d'une collecte de données représentatives et d'une interprétation critique des tendances visuelles, en complément des analyses statistiques. L'adoption de telles pratiques aurait pu prévenir les conclusions erronées et mettre en lumière les risques sous-jacents, notamment dans des conditions extrêmes comme celles du jour du lancement de Challenger.