--- title: "Analyse du risque de défaillance des joints toriques de la navette Challenger" 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 Challenger. # Chargement et exploiration des données Nous commençons donc par charger ces données: ```{r} data = read.csv("shuttle.csv",header=T) 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() ``` 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. Regardons de ce fait à travers le graphique ci-dessous l'effet, de la température. ```{r} 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() ``` 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. ```{r} plot_ly(data, x = ~Temperature, y = ~Pressure, z = ~Failure_Proportion, type = "scatter3d", mode = "markers", color = ~Failure_Proportion) %>% 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"))) ``` 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 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. ```{r} logistic_reg <- glm(Malfunction / Count ~ Temperature * Pressure, weights = Count, family = binomial(link="logit"), data = data) # Résumé du modèle summary(logistic_reg) ``` ## 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$). ## 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. ```{r} temp_seq <- seq(min(data$Temperature), max(data$Temperature), by = 1) press_seq <- seq(min(data$Pressure), max(data$Pressure), by = 1) grid <- expand.grid(Temperature = temp_seq, Pressure = press_seq) grid$Failure_Prob <- predict(logistic_reg, newdata = grid, type = "response") ``` Réalisons à présent un *Heatmap* des probabilités. ```{r} 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() ``` 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.