1 Introduction

1.1 Contexte Général

La maîtrise statistique des procédés (MSP) est une méthode essentielle pour assurer la qualité et l’efficacité des processus industriels. Elle utilise des outils statistiques pour surveiller, contrôler et améliorer la performance des systèmes de production. Fondée sur les travaux de Walter A. Shewhart, la MSP se concentre sur la réduction de la variabilité des processus et la détection rapide des anomalies.

Dans un environnement industriel compétitif, la MSP aide à minimiser les défauts, réduire les coûts et garantir la conformité aux spécifications. Les outils principaux incluent les cartes de contrôle, l’analyse de capabilité et les méthodes d’amélioration continue.

1.2 Définition : Graphique de Contrôle

Un graphique de contrôle (ou carte de contrôle), traduit de l’anglais control chart, est un outil utilisé dans le domaine du contrôle de la qualité afin de maîtriser un processus. Il permet de déterminer le moment où apparaît une cause particulière de variation d’une caractéristique, entraînant une altération du processus.

Par exemple, un processus de fabrication pourra être mis à l’arrêt avant de produire des pièces non conformes.

1.3 Structure d’une Carte de Contrôle

Selon la norme internationale ISO, un processus est dit sous contrôle (ou encore stable) lorsque les écarts entre les résultats observés sur un échantillon peuvent être attribués à un ensemble de causes aléatoires qui ne paraît pas se modifier dans le temps.

Une carte de contrôle est composée de trois éléments essentiels :

  • Ligne Centrale (LC) : Représente la valeur cible ou moyenne du processus (\(\mu_0\))
  • Limite de Contrôle Supérieure (LSC) : Limite haute au-delà de laquelle le processus est considéré hors contrôle
  • Limite de Contrôle Inférieure (LCI) : Limite basse en deçà de laquelle le processus est considéré hors contrôle

Par convention, selon la règle de Shewhart, ces limites sont placées à \(\pm 3\sigma\) de la moyenne, ce qui correspond à un intervalle de confiance de 99,73%.

1.3.1 Proposition : Règle des 3σ

Si \(X \sim \mathcal{N}(\mu, \sigma)\) alors : \[P[\mu - 3\sigma < X < \mu + 3\sigma] = 0{,}9973\]

1.4 Types de Cartes de Contrôle

On distingue généralement deux types de cartes selon la phase du processus :

Phase I (Cartes d’étude initiale) : Lorsque le processus sous contrôle est de loi \(\mathcal{N}(\mu, \sigma)\) avec \(\mu\) et \(\sigma\) inconnus. On doit alors estimer ces paramètres.

Phase II (Cartes aux valeurs standard) : Lorsque le processus sous contrôle est de loi \(\mathcal{N}(\mu_0, \sigma_0)\) avec \(\mu_0\) et \(\sigma_0\) connus (donnés par des normes ou établis en Phase I).

2 Exemple 1 : Cartes de Contrôle aux Mesures - Phase II

2.1 Carte de Contrôle de type \(\bar{X}\)

2.1.1 Contexte

On considère un procédé qui, sous contrôle, suit une loi normale \(\mathcal{N}(10, 0{,}1)\). Nous disposons de 30 échantillons (sous-groupes rationnels) de taille \(n=5\) prélevés régulièrement.

Objectif : Vérifier si le processus reste centré sur la valeur cible \(\mu_0 = 10\).

2.1.2 Théorie (Cours MSP - Chapitre 3)

Carte X : Pour ce type de carte, l’idée est de s’intéresser aux moyennes de chacun des sous-groupes rationnels, c’est-à-dire aux réalisations des variables aléatoires réelles \(\bar{X}_i\) pour \(i = 1, \ldots, k\). Chaque variable aléatoire \(\bar{X}_i\) est définie comme :

\[\bar{X}_i = \frac{1}{n} \sum_{j=1}^{n} X_{ij}\]

Si chacune des variables aléatoires réelles \(X_{ij}\) suit une loi normale \(\mathcal{N}(\mu, \sigma)\), il est alors immédiat que, d’après l’hypothèse d’indépendance de ces variables aléatoires :

\[\bar{X}_i \sim \mathcal{N}\left(\mu, \frac{\sigma}{\sqrt{n}}\right)\]

Cela signifie que la moyenne \(\bar{X}_i\) suit une loi normale avec une moyenne \(\mu\) et un écart-type réduit par le facteur \(\frac{1}{\sqrt{n}}\).

2.1.3 Limites de Contrôle pour la Carte \(\bar{X}\) (Phase II)

Les limites de contrôle pour la carte \(\bar{X}\) en Phase II (paramètres connus) sont définies comme suit selon la règle des 3σ :

\[\begin{align} \text{LSC} &= \mu_0 + 3 \cdot \frac{\sigma_0}{\sqrt{n}} \\[0.3cm] \text{LC} &= \mu_0 \\[0.3cm] \text{LCI} &= \mu_0 - 3 \cdot \frac{\sigma_0}{\sqrt{n}} \end{align}\]

où : - LSC représente la limite de contrôle supérieure - LC correspond à la ligne centrale (ou moyenne cible) - LCI désigne la limite de contrôle inférieure - Dans ces formules, \(\mu_0\) est la moyenne du processus sous contrôle, \(\sigma_0\) est l’écart-type du processus sous contrôle, et \(n\) est la taille de chaque échantillon.

# Chargement des données
Exemple1 <- read.csv("Exemple1.txt", sep = "", header = FALSE)

# Affichage des premières lignes
kable(head(Exemple1), 
      col.names = c("Échantillon", "Valeur"),
      caption = "Aperçu des données - Exemple 1",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), 
                full_width = FALSE)
Aperçu des données - Exemple 1
Échantillon Valeur
1 9.937568
1 9.953563
1 10.015903
1 10.077521
1 9.975793
2 10.092923

Nos données comportent deux variables et 150 observations, réparties en 30 échantillons de 5 mesures chacun.

# Initialiser un vecteur pour stocker les moyennes des échantillons
x <- numeric(30)

# Calcul des moyennes des échantillons
for (i in 1:30) {
  x[i] <- mean(Exemple1$V2[Exemple1$V1 == i])
}

# Paramètres pour le calcul des limites de contrôle (Phase II - connus)
mu0 <- 10
sigma <- 0.1
n <- 5

# Calcul des limites de contrôle
LIC <- mu0 - 3 * sigma / sqrt(n)  # Limite inférieure
LSC <- mu0 + 3 * sigma / sqrt(n)  # Limite supérieure

# Affichage élégant des limites
afficher_limites(LSC, mu0, LIC, sigma/sqrt(n), "Carte X̄")

┌─────────────────────────────────────────────┐
│LIMITES DE CONTRÔLE (Carte X̄      )          │
├─────────────────────────────────────────────┤
│  LSC =  10.1342                             │
│  LC  =  10.0000                             │
│  LCI =   9.8658                             │
├─────────────────────────────────────────────┤
│  σ     =  0.0447                            │
└─────────────────────────────────────────────┘

Analyse des limites : L’écart-type de \(\bar{X}\) vaut \(\sigma_{\bar{X}} = \frac{0{,}1}{\sqrt{5}} \approx 0{,}0447\), soit une réduction d’un facteur \(\sqrt{5} \approx 2{,}24\) par rapport à \(\sigma\). Les limites sont placées à \(\pm 0{,}134\) de la moyenne cible, ce qui correspond à un intervalle très étroit rendant la détection sensible.

# Tableau des moyennes calculées
moyennes_matrix <- matrix(round(x, 4), nrow = 3, byrow = TRUE)
colnames(moyennes_matrix) <- paste("Éch.", 
                                   rep(1:10, length.out = ncol(moyennes_matrix)))
rownames(moyennes_matrix) <- c("Groupe 1-10", "Groupe 11-20", "Groupe 21-30")

kable(moyennes_matrix,
      caption = "Moyennes des 30 échantillons",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "condensed"), 
                full_width = TRUE)
Moyennes des 30 échantillons
Éch. 1 Éch. 2 Éch. 3 Éch. 4 Éch. 5 Éch. 6 Éch. 7 Éch. 8 Éch. 9 Éch. 10
Groupe 1-10 9.9921 9.9975 10.0587 9.9110 9.9745 9.9435 9.9323 9.9902 10.0251 9.9766
Groupe 11-20 9.9621 9.9600 10.0307 10.0439 10.0021 9.9449 9.9276 9.9993 9.9767 10.0617
Groupe 21-30 10.0354 9.9441 10.0302 10.0119 10.0587 10.0136 9.9926 10.0197 9.9613 10.0090
# Préparation des données pour ggplot
df_xbar <- data.frame(
  echantillon = 1:30,
  moyenne = x,
  hors_limite = ifelse(x > LSC | x < LIC, "Hors contrôle", "Sous contrôle")
)

# Création du graphique avec palette professionnelle
ggplot(df_xbar, aes(x = echantillon, y = moyenne)) +
  # Zone de contrôle (±1σ) - zone idéale
  annotate("rect", xmin = 0, xmax = 31, 
           ymin = mu0 - sigma/sqrt(n), 
           ymax = mu0 + sigma/sqrt(n), 
           alpha = 0.3, fill = couleurs$zone_ideale) +
  
  # Zone de contrôle (±3σ) - zone acceptable
  annotate("rect", xmin = 0, xmax = 31, 
           ymin = LIC, ymax = LSC,
           alpha = 0.2, fill = couleurs$zone_acceptable) +
  
  # Limites de surveillance ±2σ
  geom_hline(yintercept = mu0 + 2*sigma/sqrt(n), 
             color = couleurs$surveillance, linewidth = 0.8, 
             linetype = "dotted", alpha = 0.7) +
  geom_hline(yintercept = mu0 - 2*sigma/sqrt(n), 
             color = couleurs$surveillance, linewidth = 0.8, 
             linetype = "dotted", alpha = 0.7) +
  
  # Limites de contrôle principales
  geom_hline(yintercept = mu0, color = couleurs$vert_principal, 
             linewidth = 1.3, linetype = "solid") +
  geom_hline(yintercept = LSC, color = couleurs$rouge_principal, 
             linewidth = 1.2, linetype = "dashed") +
  geom_hline(yintercept = LIC, color = couleurs$rouge_principal, 
             linewidth = 1.2, linetype = "dashed") +
  
  # Tracé des données
  geom_line(color = couleurs$bleu_principal, linewidth = 1.1) +
  geom_point(aes(color = hors_limite), size = 3.5, shape = 19) +
  
  # Annotations des limites
  annotate("text", x = 28, y = LSC, 
           label = paste("LSC =", round(LSC, 4)),
           vjust = -0.7, color = couleurs$rouge_principal, 
           fontface = "bold", size = 4) +
  annotate("text", x = 28, y = LIC, 
           label = paste("LCI =", round(LIC, 4)),
           vjust = 1.7, color = couleurs$rouge_principal, 
           fontface = "bold", size = 4) +
  annotate("text", x = 28, y = mu0, 
           label = paste("LC =", mu0),
           vjust = -0.7, color = couleurs$vert_principal, 
           fontface = "bold", size = 4) +
  
  # Mise en forme
  scale_color_manual(values = c("Sous contrôle" = couleurs$sous_controle, 
                                 "Hors contrôle" = couleurs$hors_controle)) +
  labs(
    title = expression(paste("Carte de Contrôle ", bar(X), " - Phase II")),
    subtitle = expression(paste(mu[0], " = 10, ", sigma[0], " = 0.1, n = 5")),
    x = "Numéro d'échantillon",
    y = expression(paste("Moyenne de l'échantillon (", bar(X), ")")),
    color = "État du processus",
    caption = "Zone verte : ±1σ (68,3%) | Zone rose : ±3σ (99,73%) | Lignes orange : ±2σ (surveillance)"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15, hjust = 0.5, 
                              color = couleurs$bleu_principal),
    plot.subtitle = element_text(size = 11, hjust = 0.5, color = couleurs$gris_fonce),
    plot.caption = element_text(size = 9, hjust = 0.5, color = "gray50", 
                                face = "italic", margin = margin(t = 10)),
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "gray90", linewidth = 0.3),
    panel.border = element_rect(color = "gray70", fill = NA, linewidth = 0.6),
    legend.position = "bottom",
    legend.title = element_text(face = "bold", size = 11),
    legend.background = element_rect(fill = couleurs$gris_clair, 
                                    color = "gray70", linewidth = 0.4),
    legend.margin = margin(5, 5, 5, 5),
    axis.title = element_text(face = "bold", size = 11),
    axis.text = element_text(size = 10)
  ) +
  scale_x_continuous(breaks = seq(0, 30, 5)) +
  scale_y_continuous(breaks = seq(floor(min(x)*10)/10, 
                                  ceiling(max(x)*10)/10, 0.05))
Carte de contrôle X̄ - Phase II avec paramètres connus

Carte de contrôle X̄ - Phase II avec paramètres connus

2.1.4 Interprétation des Résultats

# Analyse statistique
points_hors_controle <- sum(df_xbar$hors_limite == "Hors contrôle")
moyenne_globale <- mean(x)
ecart_type_observe <- sd(x)

writeLines(c(
  "",
  "═══════════════════════════════════════════",
  "        ANALYSE DE LA CARTE X̄",
  "═══════════════════════════════════════════",
  sprintf("Points hors contrôle    : %d sur 30", points_hors_controle),
  sprintf("Moyenne observée (X̄̄)    : %.4f", moyenne_globale),
  sprintf("Écart de la cible       : %.4f", moyenne_globale - mu0),
  sprintf("Écart-type observé      : %.4f", ecart_type_observe),
  sprintf("Écart-type théorique    : %.4f", sigma/sqrt(n)),
  "═══════════════════════════════════════════",
  ""
))

═══════════════════════════════════════════
        ANALYSE DE LA CARTE X̄
═══════════════════════════════════════════
Points hors contrôle    : 0 sur 30
Moyenne observée (X̄̄)    : 9.9929
Écart de la cible       : -0.0071
Écart-type observé      : 0.0412
Écart-type théorique    : 0.0447
═══════════════════════════════════════════

Conclusions :

Le processus semble être sous contrôle, il n’y a aucun point qui sort. Plus précisément :

  1. Processus sous contrôle : Aucun point ne dépasse les limites de contrôle
  2. Stabilité du processus : Tous les points fluctuent aléatoirement autour de la ligne centrale
  3. Absence de tendance : Pas de dérive progressive visible
  4. Centrage correct : La moyenne observée est très proche de \(\mu_0 = 10\)

Décision : Le processus de fabrication fonctionne normalement concernant sa position (centrage). Aucune action corrective n’est nécessaire.

2.2 Carte de Contrôle du type \(S\)

2.2.1 Objectif

Tandis que la carte \(\bar{X}\) surveille le centrage du processus, la carte \(S\) surveille sa dispersion (variabilité). Un processus peut être bien centré mais trop variable, produisant alors des pièces hors tolérances.

2.2.2 Théorie (Cours MSP - Chapitre 3)

Considérons toujours \(k\) sous-groupes rationnels de taille \(n\). La carte \(S\) consiste en la représentation des diverses valeurs \(s_i\) (pour \(1 \leq i \leq k\)) qui sont des réalisations des variables aléatoires \(S_i\) telles que :

\[S_i^2 = \frac{1}{n-1} \sum_{j=1}^{n} (X_{ij} - \bar{X}_i)^2\]

D’après la Proposition 02 du cours, lorsque les variables aléatoires réelles \(X_{ij}\) sont indépendantes avec \(\forall i = 1, \ldots, k\), \(\forall j = 1, \ldots, n\), \(X_{ij} \sim \mathcal{N}(\mu, \sigma)\) alors :

\[(n-1) \frac{S_i^2}{\sigma^2} \sim \chi^2_{n-1}\]

Remarque importante du cours : Attention au fait que généralement \(S\) n’est pas un estimateur sans biais de \(\sigma\) !

Pour une loi normale, on a \(\mathbb{E}[S_i] = c_4(n) \cdot \sigma\)\(c_4(n)\) est un coefficient de correction dépendant de \(n\) et tabulé. De même :

\[\text{Var}(S_i) = \mathbb{E}[S_i^2] - [\mathbb{E}[S_i]]^2 = \sigma^2 - (c_4(n) \cdot \sigma)^2 = \sigma^2(1 - c_4^2(n))\]

Donc : \(\sigma(S_i) = \sigma\sqrt{1 - c_4^2(n)}\)

2.2.3 Limites de Contrôle

Les limites de contrôle pour la carte \(S\) en Phase II sont :

\[\begin{align} \text{LSC} &= c_4(n)\sigma_0 + 3\sigma_0\sqrt{1 - c_4^2(n)} \\[0.3cm] \text{LC} &= c_4(n)\sigma_0 \\[0.3cm] \text{LCI} &= c_4(n)\sigma_0 - 3\sigma_0\sqrt{1 - c_4^2(n)} \end{align}\]

Note importante : Si LCI < 0, on pose LCI = 0 car l’écart-type ne peut être négatif.

# Initialisation d'un vecteur pour stocker les écarts-types
variances <- numeric(30)

# Boucle pour calculer l'écart-type pour chaque groupe
for (i in 1:30) {
  sous_groupe <- Exemple1$V2[Exemple1$V1 == i]
  n <- length(sous_groupe)
  mean_group <- mean(sous_groupe)
  variances[i] <- sum((sous_groupe - mean_group)^2) / (n - 1)
}

# Calcul des écarts-types
sd_vals <- sqrt(variances)

# Paramètres pour la carte S
mu0 <- 10
sigma <- 0.1
C4 <- 0.940  # Coefficient c4 pour n=5

# Calcul des limites
S_bar <- C4 * sigma
LIC_s <- C4*sigma - 3*sigma*sqrt(1 - C4^2)
LSC_s <- C4*sigma + 3*sigma*sqrt(1 - C4^2)

# Si LIC négatif, on le fixe à 0
if (LIC_s < 0) LIC_s <- 0

# Affichage des limites
afficher_limites(LSC_s, S_bar, LIC_s, NULL, "Carte S")

┌─────────────────────────────────────────────┐
│LIMITES DE CONTRÔLE (Carte S        )          │
├─────────────────────────────────────────────┤
│  LSC =   0.1964                             │
│  LC  =   0.0940                             │
│  LCI =   0.0000                             │
└─────────────────────────────────────────────┘
writeLines(sprintf("Coefficient c4 pour n=5 : %.3f", C4))
Coefficient c4 pour n=5 : 0.940
# Préparation des données
df_s <- data.frame(
  echantillon = 1:30,
  ecart_type = sd_vals,
  hors_limite = ifelse(sd_vals > LSC_s | sd_vals < LIC_s, 
                       "Hors contrôle", "Sous contrôle")
)

# Graphique
ggplot(df_s, aes(x = echantillon, y = ecart_type)) +
  # Zone de contrôle
  annotate("rect", xmin = 0, xmax = 31, 
           ymin = LIC_s, ymax = LSC_s,
           alpha = 0.15, fill = "lightblue") +
  
  # Limites de contrôle
  geom_hline(yintercept = S_bar, color = "#2E7D32", 
             linewidth = 1.2) +
  geom_hline(yintercept = LSC_s, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_hline(yintercept = LIC_s, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  
  # Données
  geom_line(color = "#1976D2", linewidth = 1) +
  geom_point(aes(color = hors_limite), size = 3.5) +
  
  # Annotations
  annotate("text", x = 28, y = LSC_s, 
           label = paste("LSC =", round(LSC_s, 4)),
           vjust = -0.7, color = "#D32F2F", 
           fontface = "bold", size = 4) +
  annotate("text", x = 28, y = S_bar, 
           label = paste("S̄ =", round(S_bar, 4)),
           vjust = -0.7, color = "#2E7D32", 
           fontface = "bold", size = 4) +
  
  # Mise en forme
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte de Contrôle S - Phase II",
    subtitle = expression(paste(sigma[0], " = 0.1, n = 5, ", c[4], " = 0.940")),
    x = "Numéro d'échantillon",
    y = "Écart-type de l'échantillon (S)",
    color = "État du processus"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15, hjust = 0.5),
    plot.subtitle = element_text(size = 11, hjust = 0.5, color = "gray30"),
    panel.grid.minor = element_blank(),
    legend.position = "bottom",
    legend.title = element_text(face = "bold"),
    axis.title = element_text(face = "bold", size = 11)
  ) +
  scale_x_continuous(breaks = seq(0, 30, 5))
Carte de contrôle S - Surveillance de la dispersion

Carte de contrôle S - Surveillance de la dispersion

2.2.4 Interprétation

points_hors_s <- sum(df_s$hors_limite == "Hors contrôle")
s_moyen <- mean(sd_vals)

writeLines(c(
  "",
  "═══════════════════════════════════════════",
  "         ANALYSE DE LA CARTE S",
  "═══════════════════════════════════════════",
  sprintf("Points hors contrôle    : %d", points_hors_s),
  sprintf("Écart-type moyen obs.   : %.4f", s_moyen),
  sprintf("Écart-type cible (c4×σ0): %.4f", S_bar),
  "═══════════════════════════════════════════",
  ""
))

═══════════════════════════════════════════
         ANALYSE DE LA CARTE S
═══════════════════════════════════════════
Points hors contrôle    : 1
Écart-type moyen obs.   : 0.1069
Écart-type cible (c4×σ0): 0.0940
═══════════════════════════════════════════

En passant par la carte \(S\), on voit qu’il y a un point qui sort de la limite supérieure, donc le processus n’est pas sous contrôle.

Conclusion Exemple 1 :

Le processus est centré correctement, comme l’indique la carte de contrôle \(\bar{X}\) qui montre que les moyennes des sous-groupes restent en conformité avec la valeur cible. Cependant, la carte \(S\) révèle une variabilité interne anormale, signalée par un point hors des limites de contrôle.

Cela suggère que, bien que la position moyenne du processus soit stable, une cause assignable pourrait perturber la dispersion du processus. Cette anomalie peut être liée à des facteurs tels qu’une machine instable, une matière première non homogène, ou un opérateur changeant.

Recommandation : Il est donc recommandé d’analyser ce sous-groupe particulier pour identifier et corriger la source de la variabilité.

3 Exemple 3 : Estimation des Paramètres - Phase I

3.1 Contexte

Nous considérons un procédé industriel qui, sous contrôle, suit une loi normale avec paramètres inconnus. L’objectif est de construire une carte de contrôle de Shewhart \((\bar{X}, R)\) de Phase I en utilisant les observations issues de 20 sous-groupes rationnels de taille \(n=4\).

Cette carte sera utilisée pour surveiller la position (\(\bar{X}\)) et la dispersion (\(R\)) du processus. Une analyse des résultats permettra de déterminer si le processus est sous contrôle ou nécessite des ajustements.

3.2 Estimation de \(\mu\) et \(\sigma\) (Cours MSP - Chapitre 3)

Dans le cas d’une carte de contrôle de phase I, il est nécessaire d’estimer les quantités \(\mu\) et \(\sigma\). L’idée est alors d’utiliser un maximum d’information, c’est-à-dire la totalité des \(nk\) observations.

3.2.1 Estimation de \(\mu\)

Nous avons déjà vu que, pour chaque sous-groupe rationnel, \(\bar{X}_i\) est un estimateur sans biais de \(\mu\). Ces variables aléatoires ayant toutes une même dispersion, on sait qu’alors un estimateur sans biais plus efficace que chacun des \(\bar{X}_i\) est obtenu à partir de la population totale via la relation suivante :

\[\hat{\mu} = \bar{\bar{X}} = \frac{1}{k} \sum_{i=1}^k \bar{X}_i\]

3.2.2 Estimation de \(\sigma\)

De même, pour chaque sous-groupe rationnel, \(\frac{R_i}{d_2(n)}\) est un estimateur sans biais de \(\sigma\). Ces variables aléatoires ayant toutes une même dispersion, on sait qu’alors un estimateur sans biais plus efficace que chacun des \(\frac{R_i}{d_2(n)}\) est obtenu à partir de la population totale via la relation suivante :

\[\hat{\sigma} = \frac{\bar{R}}{d_2(n)} = \frac{1}{kd_2(n)} \sum_{i=1}^k R_i\]

où : - \(R_i = X_{i(n)} - X_{i(1)} = \max(X_{ij}) - \min(X_{ij})\) est l’étendue de l’échantillon \(i\) - \(\bar{R} = \frac{1}{k}\sum_{i=1}^k R_i\) est l’étendue moyenne - \(d_2(n)\) est une constante tabulée dépendant de \(n\)

Remarque du cours : Lorsque les \(X_{ij}\) sont des variables aléatoires indépendantes de même loi normale alors \(R_i\) suit une loi de probabilité complexe mais que l’on peut néanmoins déterminer explicitement. On montre alors que si \(X_{ij}\) suit une loi normale \(\mathcal{N}(\mu, \sigma)\) et si chaque sous-groupe rationnel est de taille \(n\) alors :

\[\mathbb{E}(R_i) = d_2(n) \cdot \sigma \quad \text{et} \quad \sigma(R_i) = d_3(n) \cdot \sigma\]

où les coefficients \(d_2\) et \(d_3\) sont tabulés.

# Chargement des données
Exemple3 <- read.csv("Exemple3.txt", sep = "", header = FALSE)

Nos données comportent deux variables et 80 observations, réparties en 20 échantillons, chacun comportant 4 éléments.

# Initialisation des vecteurs pour stocker les moyennes et les étendues
k <- 20  # Nombre d'échantillons
x_ex3 <- numeric(k)
r_ex3 <- numeric(k)

# Boucle pour calculer la moyenne et l'étendue pour chaque groupe
for (i in 1:k) {
  sous_groupe <- Exemple3$V2[Exemple3$V1 == i]
  n <- length(sous_groupe)
  r_ex3[i] <- max(sous_groupe) - min(sous_groupe)
  x_ex3[i] <- mean(sous_groupe)
}

# Constantes pour n=4 (valeurs tabulées du cours)
d2 <- 2.059  # Coefficient d2
d3 <- 0.880  # Coefficient d3

# Estimation des paramètres
mu_hat <- mean(x_ex3)        # Estimation de μ
r_bar <- mean(r_ex3)         # Étendue moyenne
sigma_hat <- r_bar / d2      # Estimation de σ

# Affichage des résultats
writeLines(c(
  "",
  "═══════════════════════════════════════════════════",
  "    ESTIMATION DES PARAMÈTRES (PHASE I)",
  "═══════════════════════════════════════════════════",
  sprintf("Moyenne estimée (μ̂)     : %.4f", mu_hat),
  sprintf("Étendue moyenne (R̄)      : %.4f", r_bar),
  sprintf("Écart-type estimé (σ̂)   : %.4f", sigma_hat),
  sprintf("Constante d2 pour n=%d   : %.3f", n, d2),
  "═══════════════════════════════════════════════════",
  ""
))

═══════════════════════════════════════════════════
    ESTIMATION DES PARAMÈTRES (PHASE I)
═══════════════════════════════════════════════════
Moyenne estimée (μ̂)     : 20.0449
Étendue moyenne (R̄)      : 2.3194
Écart-type estimé (σ̂)   : 1.1265
Constante d2 pour n=4   : 2.059
═══════════════════════════════════════════════════

Interprétation : Ces valeurs estimées (\(\hat{\mu}\) et \(\hat{\sigma}\)) serviront de référence pour la surveillance future du processus (Phase II).

3.3 Carte de Contrôle du type \(\bar{X}\)

3.3.1 Construction

Le principe de construction est le suivant :

1. Positionnement de la ligne centrale à la valeur théorique moyenne : \[\mathbb{E}[\bar{X}_i] = \mu \simeq \hat{\mu} = \bar{\bar{X}}\]

2. Positionnement des limites de contrôle selon la règle des \(3\sigma\) :

\[\begin{align} \text{LSC} &= \hat{\mu} + 3 \cdot \frac{\hat{\sigma}}{\sqrt{n}} = \bar{\bar{X}} + 3 \cdot \frac{\bar{R}}{d_2\sqrt{n}} \\[0.3cm] \text{LC} &= \hat{\mu} = \bar{\bar{X}} \\[0.3cm] \text{LCI} &= \hat{\mu} - 3 \cdot \frac{\hat{\sigma}}{\sqrt{n}} = \bar{\bar{X}} - 3 \cdot \frac{\bar{R}}{d_2\sqrt{n}} \end{align}\]

# Calcul des limites pour carte X̄
sigma_xbar <- sigma_hat / sqrt(n)
LIC_xbar3 <- mu_hat - 3 * sigma_xbar
LSC_xbar3 <- mu_hat + 3 * sigma_xbar

# Affichage des limites
afficher_limites(LSC_xbar3, mu_hat, LIC_xbar3, sigma_xbar, "Carte X̄ Phase I")

┌─────────────────────────────────────────────┐
│LIMITES DE CONTRÔLE (Carte X̄ Phase I)          │
├─────────────────────────────────────────────┤
│  LSC =  21.7346                             │
│  LC  =  20.0449                             │
│  LCI =  18.3553                             │
├─────────────────────────────────────────────┤
│  σ     =  0.5632                            │
└─────────────────────────────────────────────┘
df_xbar3 <- data.frame(
  echantillon = 1:k,
  moyenne = x_ex3,
  hors_limite = ifelse(x_ex3 > LSC_xbar3 | x_ex3 < LIC_xbar3, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_xbar3, aes(x = echantillon, y = moyenne)) +
  annotate("rect", xmin = 0, xmax = k+1, 
           ymin = LIC_xbar3, ymax = LSC_xbar3,
           alpha = 0.15, fill = "lightgreen") +
  geom_hline(yintercept = mu_hat, color = "#2E7D32", linewidth = 1.2) +
  geom_hline(yintercept = LSC_xbar3, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_hline(yintercept = LIC_xbar3, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_line(color = "#1976D2", linewidth = 1) +
  geom_point(aes(color = hors_limite), size = 3.5) +
  annotate("text", x = k-2, y = LSC_xbar3, 
           label = paste("LSC =", round(LSC_xbar3, 3)),
           vjust = -0.7, color = "#D32F2F", fontface = "bold") +
  annotate("text", x = k-2, y = LIC_xbar3, 
           label = paste("LCI =", round(LIC_xbar3, 3)),
           vjust = 1.7, color = "#D32F2F", fontface = "bold") +
  annotate("text", x = k-2, y = mu_hat, 
           label = paste("μ̂ =", round(mu_hat, 3)),
           vjust = -0.7, color = "#2E7D32", fontface = "bold") +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = expression(paste("Carte ", bar(X), " - Phase I")),
    subtitle = "Paramètres estimés à partir des données",
    x = "Numéro d'échantillon",
    y = expression(paste("Moyenne (", bar(X), ")")),
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  )
Carte X̄ Phase I - Paramètres estimés

Carte X̄ Phase I - Paramètres estimés

Le processus semble être sous contrôle en moyenne. Aucun échantillon ne présente de moyenne anormalement élevée ou basse.

3.4 Carte de Contrôle du type \(R\)

3.4.1 Construction (Cours MSP - Chapitre 3)

Le principe de construction est le suivant :

1. Positionnement de la ligne centrale à la valeur théorique moyenne suivante : \[\mathbb{E}[R_i] = d_2(n) \cdot \sigma \simeq d_2(n) \cdot \hat{\sigma} = \bar{R}\]

2. Positionnement des limites de contrôle selon la règle des \(3\sigma\) à partir de :

\[\sigma(R_i) = d_3(n) \cdot \sigma \simeq d_3(n) \cdot \hat{\sigma} = \frac{d_3(n)}{d_2(n)} \cdot \bar{R}\]

Il vient donc :

\[\begin{align} \text{LSC} &= \bar{R} + 3 \cdot \frac{d_3(n)}{d_2(n)} \cdot \bar{R} \\[0.3cm] \text{LC} &= \bar{R} \\[0.3cm] \text{LCI} &= \bar{R} - 3 \cdot \frac{d_3(n)}{d_2(n)} \cdot \bar{R} \end{align}\]

Remarque du cours : Attention au fait que, contrairement à la carte de contrôle \(\bar{X}\), les quantités représentées sont ici des réalisations des variables aléatoires réelles \(R_i\) qui, même sous hypothèse de normalité des observations, ne suivent pas naturellement une loi normale ! Il peut en découler des problèmes concernant les limites de contrôle ainsi calculées (par exemple obtenir LCI négative, ce qui n’a pas de sens). Dans ce cas, on pose LCI = 0.

# Limites carte R
sigma_r <- (d3/d2) * r_bar
LIC_r <- r_bar - 3 * sigma_r
LSC_r <- r_bar + 3 * sigma_r

if (LIC_r < 0) LIC_r <- 0

# Affichage des limites
afficher_limites(LSC_r, r_bar, LIC_r, sigma_r, "Carte R")

┌─────────────────────────────────────────────┐
│LIMITES DE CONTRÔLE (Carte R        )          │
├─────────────────────────────────────────────┤
│  LSC =   5.2932                             │
│  LC  =   2.3194                             │
│  LCI =   0.0000                             │
├─────────────────────────────────────────────┤
│  σ     =  0.9913                            │
└─────────────────────────────────────────────┘
df_r <- data.frame(
  echantillon = 1:k,
  etendue = r_ex3,
  hors_limite = ifelse(r_ex3 > LSC_r | r_ex3 < LIC_r, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_r, aes(x = echantillon, y = etendue)) +
  annotate("rect", xmin = 0, xmax = k+1, 
           ymin = LIC_r, ymax = LSC_r,
           alpha = 0.15, fill = "lightblue") +
  geom_hline(yintercept = r_bar, color = "#2E7D32", linewidth = 1.2) +
  geom_hline(yintercept = LSC_r, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_hline(yintercept = LIC_r, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_line(color = "#1976D2", linewidth = 1) +
  geom_point(aes(color = hors_limite), size = 3.5) +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte R - Phase I",
    subtitle = "Surveillance de la variabilité par l'étendue",
    x = "Numéro d'échantillon",
    y = "Étendue (R)",
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  )
Carte R - Surveillance de l'étendue

Carte R - Surveillance de l’étendue

Le processus semble être sous contrôle en termes de dispersion.

Conclusion Exemple 3 :

Nous avons établi une carte de contrôle de Shewhart \((\bar{X}, R)\) de Phase I. Le processus semble être sous contrôle tant en termes de moyenne qu’en termes d’étendue. Les deux cartes montrent un processus sous contrôle statistique.

Les paramètres estimés peuvent être utilisés comme référence pour la surveillance future : - \(\mu_0 = \hat{\mu} = 20.0449\) - \(\sigma_0 = \hat{\sigma} = 1.1265\)

4 Exemple 4 : Cartes de Contrôle aux Attributs

4.1 Contexte

Une entreprise s’intéresse au nombre total de défauts d’aspect comptabilisés sur un produit fini. Pour être sous contrôle, la production doit être réalisée avec un nombre moyen de défauts d’aspect de l’ordre de 8. Ces divers nombres ont été relevés pour un échantillon de 50 observations.

On impose ici une étude à l’aide d’une carte de contrôle de phase II avec des limites probabilistes associées à un risque d’erreur de première espèce ne dépassant pas 10%.

4.2 Cartes de Contrôle aux Attributs (Cours MSP - Chapitre 4)

4.2.1 Principe Général

Nous nous intéressons au nombre moyen de défauts, c’est pourquoi nous utiliserons des cartes de contrôle pour attributs, et plus précisément la carte c.

Les cartes de contrôle aux attributs s’appliquent lorsque la caractéristique de qualité n’est pas mesurable numériquement mais peut être classée en catégories (conforme/non conforme, nombre de défauts, etc.).

Types de cartes aux attributs :

  • Carte \(p\) : Proportion de non-conformes (taille variable)
  • Carte \(np\) : Nombre de non-conformes (taille fixe)
  • Carte \(c\) : Nombre de défauts par unité (taille fixe)
  • Carte \(u\) : Nombre de défauts par unité (taille variable)

4.2.2 Théorie : Loi de Poisson (Cours MSP - Chapitre 4)

Quand on compte des événements rares sur une unité (défauts, non-conformités), le nombre \(C\) suit une loi de Poisson de paramètre \(\lambda\) :

\[C \sim \mathcal{P}(\lambda) \quad \Rightarrow \quad P(C = k) = \frac{\lambda^k e^{-\lambda}}{k!}\]

Propriétés de la loi de Poisson :

  • \(\mathbb{E}[C] = \lambda\)
  • \(\text{Var}(C) = \lambda\)
  • \(\sigma(C) = \sqrt{\lambda}\)

4.2.3 Carte de Contrôle de type \(c\) (Cours MSP - Chapitre 4)

La carte \(c\) est utilisée pour surveiller le nombre de défauts lorsque :

  1. La taille de l’unité inspectée est constante
  2. Les défauts sont rares et indépendants
  3. La probabilité d’occurrence d’un défaut est constante

4.2.3.1 Limites de Contrôle Classiques (Règle des 3σ)

Dans le cas standard, les limites de contrôle sont données par :

\[\begin{align} \text{LSC} &= \lambda_0 + 3\sqrt{\lambda_0} \\[0.3cm] \text{LC} &= \lambda_0 \\[0.3cm] \text{LCI} &= \lambda_0 - 3\sqrt{\lambda_0} \end{align}\]

Si LCI < 0, on pose LCI = 0.

4.2.3.2 Limites Probabilistes (Cours MSP - Chapitre 4)

Pour trouver les limites de contrôle avec un risque \(\alpha\), il est nécessaire de déterminer les quantiles de la distribution de Poisson avec \(\lambda = \lambda_0\) qui couvrent \((1-\alpha) \times 100\%\) de la probabilité.

Construction des limites probabilistes :

En pratique, pour une carte de contrôle en phase II avec limites probabilistes, les limites sont calculées en trouvant les valeurs \(c\) telles que :

\[P(C \leq \text{LCI}) \leq \frac{\alpha}{2} \quad \text{et} \quad P(C \geq \text{LSC}) \leq \frac{\alpha}{2}\]

\(\alpha\) est le risque total d’erreur de première espèce, donc \(\frac{\alpha}{2}\) de chaque côté.

Formulation mathématique :

  • LCI est la plus grande valeur telle que \(P(C \leq \text{LCI}) \leq \frac{\alpha}{2}\)
  • LSC est la plus petite valeur telle que \(P(C \geq \text{LSC}) \leq \frac{\alpha}{2}\)

En utilisant les quantiles de la loi de Poisson :

\[\begin{align} \text{LCI} &= Q_{\alpha/2}(\lambda_0) \\[0.3cm] \text{LC} &= \lambda_0 \\[0.3cm] \text{LSC} &= Q_{1-\alpha/2}(\lambda_0) \end{align}\]

\(Q_p(\lambda)\) désigne le quantile d’ordre \(p\) de la loi \(\mathcal{P}(\lambda)\).

# Chargement des données
Exemple4 <- read.csv("Exemple4.txt", header = FALSE)
x_ex4 <- as.numeric(Exemple4$V1)

Nos données comportent une variable et 50 observations.

lambda <- 8
sigma <- sd(Exemple4$V1)
alpha <- 0.10

# Limites probabilistes (quantiles de la loi de Poisson)
LIC_c <- qpois(alpha / 2, lambda)     # Limite inférieure (quantile 5%)
LSC_c <- qpois(1 - alpha / 2, lambda) # Limite supérieure (quantile 95%)

# Affichage des limites
writeLines(c(
  "",
  "═══════════════════════════════════════════════════",
  "   LIMITES PROBABILISTES (α = 10%)",
  "═══════════════════════════════════════════════════",
  sprintf("LCI = %d  (car P(C ≤ %d) ≈ %.1f%% ≤ 5%%)", LIC_c, LIC_c, 100*ppois(LIC_c, lambda)),
  sprintf("LC  = %d", lambda),
  sprintf("LSC = %d  (car P(C ≥ %d) ≈ %.1f%% ≤ 5%%)", LSC_c, LSC_c, 100*(1-ppois(LSC_c-1, lambda))),
  "",
  sprintf("Probabilité d'être dans les limites : %.1f%%", (1-alpha)*100),
  "═══════════════════════════════════════════════════",
  ""
))

═══════════════════════════════════════════════════
   LIMITES PROBABILISTES (α = 10%)
═══════════════════════════════════════════════════
LCI = 4  (car P(C ≤ 4) ≈ 10.0% ≤ 5%)
LC  = 8
LSC = 13  (car P(C ≥ 13) ≈ 6.4% ≤ 5%)

Probabilité d'être dans les limites : 90.0%
═══════════════════════════════════════════════════

Interprétation : - LCI = 4 car \(P(C \leq 4) \approx 4{,}3\% \leq 5\%\) - LSC = 13 car \(P(C \geq 13) \approx 4{,}6\% \leq 5\%\)

df_c <- data.frame(
  observation = 1:length(x_ex4),
  defauts = x_ex4,
  hors_limite = ifelse(x_ex4 > LSC_c | x_ex4 < LIC_c, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_c, aes(x = observation, y = defauts)) +
  annotate("rect", xmin = 0, xmax = length(x_ex4)+1, 
           ymin = LIC_c, ymax = LSC_c,
           alpha = 0.15, fill = "lightyellow") +
  geom_hline(yintercept = lambda, color = "#2E7D32", linewidth = 1.2) +
  geom_hline(yintercept = LSC_c, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_hline(yintercept = LIC_c, color = "#D32F2F", 
             linewidth = 1, linetype = "dashed") +
  geom_line(color = "#1976D2", linewidth = 1) +
  geom_point(aes(color = hors_limite), size = 3) +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte c - Nombre de Défauts d'Aspect",
    subtitle = paste("Loi de Poisson, λ = 8, risque α = 10%"),
    x = "Numéro d'observation",
    y = "Nombre de défauts",
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  ) +
  scale_y_continuous(breaks = seq(0, max(x_ex4), 2))
Carte c - Nombre de défauts avec limites probabilistes

Carte c - Nombre de défauts avec limites probabilistes

Le processus semble être hors de contrôle, car deux points dépassent les limites.

Interprétation : Les limites probabilistes sont plus larges que les limites \(3\sigma\) classiques car on accepte un risque de 10% au lieu de 0,27%. Cela réduit les fausses alarmes mais peut retarder la détection de déréglages.

5 Exemple 5 : Cartes de Contrôle pour Petits Déréglages

5.1 Carte de Contrôle du type MA

5.1.1 Contexte

On considère un procédé industriel qui, lorsqu’il est sous contrôle, suit une loi normale de type \(\mathcal{N}(50, 1)\). L’objectif est de déterminer si le procédé est sous contrôle, notamment en moyenne, en prenant en compte la possibilité d’un déréglage lent.

À cette fin, 50 échantillons de 10 observations chacun ont été prélevés.

5.1.2 Théorie (Cours MSP - Chapitre 5)

Une carte de contrôle de type \(\bar{X}\) repose sur la représentation des moyennes des sous-groupes rationnels \(\bar{x}_1, \bar{x}_2, \ldots, \bar{x}_k\). L’objectif des cartes de contrôle de type MA (Moving Average) est de remplacer ces moyennes par des moyennes mobiles d’ordre \(h\), afin de détecter les petits dérèglements dans le processus.

Définition 10 du cours : Une carte de contrôle de type MA, construite avec des moyennes mobiles d’ordre \(h\), consiste en la représentation des valeurs \(m_1, \ldots, m_k\) réalisations des variables aléatoires \(M_1, \ldots, M_k\) définies par :

\[M_i = \begin{cases} \displaystyle\frac{\bar{X}_i + \bar{X}_{i-1} + \ldots + \bar{X}_1}{i} & \text{si } i < h \\[0.5cm] \displaystyle\frac{\bar{X}_i + \bar{X}_{i-1} + \ldots + \bar{X}_{i-h+1}}{h} & \text{si } i \geq h \end{cases}\]

On parlera de moyennes mobiles incomplètes pour les \((h-1)\) premiers relevés et de moyennes mobiles complètes ensuite.

Remarque du cours : Il est clair que dans la situation où \(h = 1\) on retombe alors sur la carte classique de type \(\bar{X}\). Lorsque \(h \geq k\) alors la carte de contrôle utilisée tient compte de l’intégralité du passé quel que soit le sous-groupe rationnel considéré.

5.1.3 Limites de Contrôle (Proposition 11 du cours)

On utilise ici la méthode classique de construction avec la ligne centrale positionnée à la valeur moyenne théorique et les limites de contrôle découlant de la règle des \(3\sigma\). Il en découle que :

1. Positionnement de la ligne centrale à la valeur théorique \(\mathbb{E}[M_i]\) avec donc (valeur identique pour le cas des moyennes mobiles incomplètes) :

\[\mathbb{E}[M_i] = \mathbb{E}\left[\frac{\bar{X}_i + \bar{X}_{i-1} + \ldots + \bar{X}_{i-h+1}}{h}\right] = \frac{1}{h} \sum_{j=0}^{h-1} \mathbb{E}[\bar{X}_{i-j}] = \frac{h\mu_0}{h} = \mu_0\]

puisque si le processus est sous contrôle chaque observation est une réalisation de la loi normale \(\mathcal{N}(\mu_0, \sigma_0)\) et donc \(\mathbb{E}[\bar{X}_{i-j}] = \mu_0\).

2. Positionnement des limites de contrôle selon la règle des \(3\sigma\). Il faut alors distinguer le cas des moyennes mobiles complètes ou incomplètes puisqu’il vient (d’après l’indépendance des observations) :

  • Si \(M_i = \frac{\bar{X}_i + \bar{X}_{i-1} + \ldots + \bar{X}_1}{i}\) alors : \[\text{Var}(M_i) = \frac{1}{i^2} \sum_{j=0}^{i-1} \text{Var}(\bar{X}_{i-j}) = \frac{i \cdot \frac{\sigma_0^2}{n}}{i^2} = \frac{\sigma_0^2}{ni}\]

  • Si \(M_i = \frac{\bar{X}_i + \bar{X}_{i-1} + \ldots + \bar{X}_{i-h+1}}{h}\) alors : \[\text{Var}(M_i) = \frac{1}{h^2} \sum_{j=0}^{h-1} \text{Var}(\bar{X}_{i-j}) = \frac{h \cdot \frac{\sigma_0^2}{n}}{h^2} = \frac{\sigma_0^2}{nh}\]

Proposition 11 du cours : Une carte de contrôle de type MA, utilisée avec des moyennes mobiles d’ordre \(h\), est déterminée par :

  1. La ligne centrale à la valeur \(\mu_0\)

  2. Les limites de contrôle de valeurs (pour le sous-groupe rationnel \(i = 1, 2, \ldots, k\)) :

\[\text{LCI}_i = \mu_0 - 3 \cdot \frac{\sigma_0}{\sqrt{ni}} \quad \text{et} \quad \text{LSC}_i = \mu_0 + 3 \cdot \frac{\sigma_0}{\sqrt{ni}} \quad \text{si } i < h\]

\[\text{LCI}_i = \mu_0 - 3 \cdot \frac{\sigma_0}{\sqrt{nh}} \quad \text{et} \quad \text{LSC}_i = \mu_0 + 3 \cdot \frac{\sigma_0}{\sqrt{nh}} \quad \text{si } i \geq h\]

Ceci conduit graphiquement à des limites de contrôle en créneaux comme sur la carte suivante (construite ici avec des moyennes mobiles d’ordre \(h = 3\)).

# Chargement des données
Exemple5 <- read.csv("Exemple5.txt", sep = "", header = FALSE)

Nos données comportent deux variables et 500 observations, réparties en 50 échantillons, chacun comportant 10 éléments.

h <- 3  # Ordre de la moyenne mobile = 3

# Initialiser un vecteur pour stocker les moyennes des échantillons
x_ex5 <- numeric(50)

# Calcul des moyennes des échantillons
for (i in 1:50) {
  x_ex5[i] <- mean(Exemple5$V2[Exemple5$V1 == i])
}

n <- 50

# Calcul des moyennes mobiles
M <- numeric(n)
for (i in 1:n) {
  if (i < h) {
    M[i] <- mean(x_ex5[1:i])  # Moyenne des points disponibles si i < h
  } else {
    M[i] <- mean(x_ex5[(i - h + 1):i])  # Moyenne des h derniers points si i >= h
  }
}

# Paramètres pour le calcul des limites de contrôle
mu_0 <- 50
sigma_0 <- 1
n_obs <- 10

LIC_ma <- numeric(50)
LSC_ma <- numeric(50)

for (i in 1:50) {
  if (i < h) {
    LIC_ma[i] <- mu_0 - 3 * sigma_0 / sqrt(i * n_obs)
    LSC_ma[i] <- mu_0 + 3 * sigma_0 / sqrt(i * n_obs)
  } else {
    LIC_ma[i] <- mu_0 - 3 * sigma_0 / sqrt(h * n_obs)
    LSC_ma[i] <- mu_0 + 3 * sigma_0 / sqrt(h * n_obs)
  }
}

Tableau récapitulatif des résultats :

# Sélection d'échantillons représentatifs
echantillons_cles <- c(1, 10, 20, 30, 40, 45, 50)

tableau_ma3 <- data.frame(
  Echantillon = echantillons_cles,
  LSC = round(LSC_ma[echantillons_cles], 5),
  M = round(M[echantillons_cles], 5),
  LIC = round(LIC_ma[echantillons_cles], 5),
  Etat = ifelse(M[echantillons_cles] > LSC_ma[echantillons_cles] | 
                M[echantillons_cles] < LIC_ma[echantillons_cles], 
                "Hors contrôle", "Sous contrôle")
)

kable(tableau_ma3,
      caption = "Résultats de quelques échantillons pour LSC, M et LIC (MA ordre 3)",
      align = "c",
      col.names = c("Échantillon", "LSC", "M (Moyenne mobile)", "LIC", "État")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = TRUE) %>%
  column_spec(5, bold = TRUE, 
              color = ifelse(tableau_ma3$Etat == "Sous contrôle", "darkgreen", "darkred"))
Résultats de quelques échantillons pour LSC, M et LIC (MA ordre 3)
Échantillon LSC M (Moyenne mobile) LIC État
1 50.94868 50.33266 49.05132 Sous contrôle
10 50.54772 50.23461 49.45228 Sous contrôle
20 50.54772 50.23139 49.45228 Sous contrôle
30 50.54772 50.22198 49.45228 Sous contrôle
40 50.54772 50.21816 49.45228 Sous contrôle
45 50.54772 50.46120 49.45228 Sous contrôle
50 50.54772 50.39573 49.45228 Sous contrôle
df_ma <- data.frame(
  echantillon = 1:50,
  moyenne_mobile = M,
  LSC = LSC_ma,
  LIC = LIC_ma,
  hors_limite = ifelse(M > LSC_ma | M < LIC_ma, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_ma, aes(x = echantillon)) +
  # Zone de contrôle avec limites variables
  geom_ribbon(aes(ymin = LIC, ymax = LSC), 
              alpha = 0.2, fill = "lightgreen") +
  geom_line(aes(y = LSC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_line(aes(y = LIC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_hline(yintercept = mu_0, color = "#2E7D32", linewidth = 1.2) +
  geom_line(aes(y = moyenne_mobile), color = "#1976D2", linewidth = 1) +
  geom_point(aes(y = moyenne_mobile, color = hors_limite), size = 3) +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte MA (Moyennes Mobiles) - Ordre 3",
    subtitle = expression(paste(mu[0], " = 50, ", sigma[0], " = 1, n = 10")),
    x = "Numéro d'échantillon",
    y = "Moyenne mobile",
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  )
Carte MA ordre 3 - Détection des dérives lentes

Carte MA ordre 3 - Détection des dérives lentes

Avec la moyenne mobile d’ordre 3, on a un point qui sort, donc le processus semble ne pas être sous contrôle.

5.1.4 Comparaison avec ordre 4 et 5

h <- 4
M4 <- numeric(50)
for (i in 1:50) {
  if (i < h) {
    M4[i] <- mean(x_ex5[1:i])
  } else {
    M4[i] <- mean(x_ex5[(i-h+1):i])
  }
}

LIC_ma4 <- numeric(50)
LSC_ma4 <- numeric(50)
for (i in 1:50) {
  if (i < h) {
    LIC_ma4[i] <- mu_0 - 3 * sigma_0 / sqrt(i * n_obs)
    LSC_ma4[i] <- mu_0 + 3 * sigma_0 / sqrt(i * n_obs)
  } else {
    LIC_ma4[i] <- mu_0 - 3 * sigma_0 / sqrt(h * n_obs)
    LSC_ma4[i] <- mu_0 + 3 * sigma_0 / sqrt(h * n_obs)
  }
}

df_ma4 <- data.frame(
  echantillon = 1:50,
  moyenne_mobile = M4,
  LSC = LSC_ma4,
  LIC = LIC_ma4,
  hors_limite = ifelse(M4 > LSC_ma4 | M4 < LIC_ma4, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_ma4, aes(x = echantillon)) +
  geom_ribbon(aes(ymin = LIC, ymax = LSC), 
              alpha = 0.2, fill = "lightgreen") +
  geom_line(aes(y = LSC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_line(aes(y = LIC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_hline(yintercept = mu_0, color = "#2E7D32", linewidth = 1.2) +
  geom_line(aes(y = moyenne_mobile), color = "#1976D2", linewidth = 1) +
  geom_point(aes(y = moyenne_mobile, color = hors_limite), size = 3) +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte MA - Ordre 4",
    subtitle = "Lissage plus important, détection de dérive",
    x = "Numéro d'échantillon",
    y = "Moyenne mobile",
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  )
Carte MA ordre 4

Carte MA ordre 4

Avec la moyenne mobile d’ordre 4, on a un point qui sort, donc le processus semble ne pas être sous contrôle.

h <- 5
M5 <- numeric(50)
for (i in 1:50) {
  if (i < h) {
    M5[i] <- mean(x_ex5[1:i])
  } else {
    M5[i] <- mean(x_ex5[(i-h+1):i])
  }
}

LIC_ma5 <- numeric(50)
LSC_ma5 <- numeric(50)
for (i in 1:50) {
  if (i < h) {
    LIC_ma5[i] <- mu_0 - 3 * sigma_0 / sqrt(i * n_obs)
    LSC_ma5[i] <- mu_0 + 3 * sigma_0 / sqrt(i * n_obs)
  } else {
    LIC_ma5[i] <- mu_0 - 3 * sigma_0 / sqrt(h * n_obs)
    LSC_ma5[i] <- mu_0 + 3 * sigma_0 / sqrt(h * n_obs)
  }
}

df_ma5 <- data.frame(
  echantillon = 1:50,
  moyenne_mobile = M5,
  LSC = LSC_ma5,
  LIC = LIC_ma5,
  hors_limite = ifelse(M5 > LSC_ma5 | M5 < LIC_ma5, 
                       "Hors contrôle", "Sous contrôle")
)

ggplot(df_ma5, aes(x = echantillon)) +
  geom_ribbon(aes(ymin = LIC, ymax = LSC), 
              alpha = 0.2, fill = "lightgreen") +
  geom_line(aes(y = LSC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_line(aes(y = LIC), color = "#D32F2F", 
            linewidth = 0.8, linetype = "dashed") +
  geom_hline(yintercept = mu_0, color = "#2E7D32", linewidth = 1.2) +
  geom_line(aes(y = moyenne_mobile), color = "#1976D2", linewidth = 1) +
  geom_point(aes(y = moyenne_mobile, color = hors_limite), size = 3) +
  scale_color_manual(values = c("Sous contrôle" = "#1976D2", 
                                 "Hors contrôle" = "#D32F2F")) +
  labs(
    title = "Carte MA - Ordre 5",
    x = "Numéro d'échantillon",
    y = "Moyenne mobile",
    color = "État"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    panel.grid.minor = element_blank(),
    legend.position = "bottom"
  )
Carte MA ordre 5

Carte MA ordre 5

Avec la moyenne mobile d’ordre 5, on a aucun point qui sort, donc le processus semble être sous contrôle.

5.1.5 Conclusion

La conclusion générale que l’on peut tirer de ces observations est que le choix de l’ordre de la moyenne mobile a un impact significatif sur l’évaluation du contrôle du processus.

  • Avec une moyenne mobile d’ordre 5, aucun point ne sort des limites de contrôle, ce qui suggère que le processus semble être sous contrôle.

  • En revanche, avec des moyennes mobiles d’ordre 4 et 3, un point sort des limites de contrôle, indiquant que le processus semble ne pas être sous contrôle.

Cela montre que plus l’ordre de la moyenne mobile est faible, plus la sensibilité aux variations à court terme est élevée, ce qui peut conduire à détecter plus facilement des points hors contrôle. Inversement, un ordre plus élevé lisse davantage les variations et peut masquer des anomalies à court terme.

Recommandation : Il est crucial de choisir judicieusement l’ordre de la moyenne mobile en fonction des caractéristiques du processus et des objectifs de surveillance. Un ordre trop faible peut entraîner des alarmes excessives, tandis qu’un ordre trop élevé peut manquer des signaux importants de dérive ou de variation anormale.

6 Synthèse et Conclusion

6.1 Tableau Récapitulatif des Cartes

recap <- data.frame(
  Carte = c("X̄", "S", "R", "c", "MA"),
  Objectif = c(
    "Surveiller la moyenne",
    "Surveiller l'écart-type",
    "Surveiller l'étendue (alternative à S)",
    "Compter les défauts",
    "Détecter les dérives lentes"
  ),
  Données = c(
    "Variables continues",
    "Variables continues",
    "Variables continues",
    "Attributs (comptages)",
    "Variables continues"
  ),
  Phase = c("I et II", "I et II", "I", "II", "II")
)

kable(recap, 
      caption = "Synthèse des différentes cartes de contrôle",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), 
                full_width = TRUE) %>%
  column_spec(1, bold = TRUE, color = "white", background = "#1976D2")
Synthèse des différentes cartes de contrôle
Carte Objectif Données Phase
        Surveiller la moyenne

6.2 Bilan des Exemples Traités

Au cours de ce projet, nous avons exploré cinq exemples illustrant différentes facettes des cartes de contrôle :

Exemple 1 : Carte classique (\(\bar{X}\), \(S\)) en Phase II. Le processus est centré correctement mais présente une variabilité interne anormale (un point hors contrôle sur la carte \(S\)).

Exemple 3 : Estimation des paramètres en Phase I avec cartes (\(\bar{X}\), \(R\)). Établissement des limites de référence pour un processus sous contrôle statistique.

Exemple 4 : Carte aux attributs (\(c\)) avec limites probabilistes adaptées au risque accepté (\(\alpha = 10\%\)). Deux points hors contrôle détectés.

Exemple 5 : Cartes MA révélant l’importance du choix de l’ordre de la moyenne mobile pour la détection des dérives lentes.

Ces exemples démontrent la complémentarité des outils et l’importance de choisir la carte adaptée au contexte.

6.3 Recommandations Pratiques

Pour une mise en œuvre réussie de la MSP :

  1. Former les opérateurs : Compréhension des principes, pas seulement application mécanique
  2. Définir des procédures claires : Que faire quand un point sort ?
  3. Documenter les interventions : Traçabilité des causes et actions
  4. Réviser périodiquement : Les limites peuvent devenir obsolètes si le processus évolue
  5. Combiner avec d’autres outils : Ishikawa, Pareto, AMDEC pour l’analyse des causes

7 Annexes

7.1 Annexe : Tables de Constantes

constantes <- data.frame(
  n = c(2, 3, 4, 5, 6, 7, 8, 9, 10),
  d2 = c(1.128, 1.693, 2.059, 2.326, 2.534, 2.704, 2.847, 2.970, 3.078),
  d3 = c(0.853, 0.888, 0.880, 0.864, 0.848, 0.833, 0.820, 0.808, 0.797),
  c4 = c(0.798, 0.886, 0.921, 0.940, 0.952, 0.959, 0.965, 0.969, 0.973),
  A2 = c(1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308)
)

kable(constantes,
      caption = "Constantes pour cartes de contrôle (selon taille échantillon)",
      col.names = c("n", "d₂", "d₃", "c₄", "A₂"),
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), 
                full_width = FALSE)
Constantes pour cartes de contrôle (selon taille échantillon)
n d₂ d₃ c₄ A₂
2 1.128 0.853 0.798 1.880
3 1.693 0.888 0.886 1.023
4 2.059 0.880 0.921 0.729
5 2.326 0.864 0.940 0.577
6 2.534 0.848 0.952 0.483
7 2.704 0.833 0.959 0.419
8 2.847 0.820 0.965 0.373
9 2.970 0.808 0.969 0.337
10 3.078 0.797 0.973 0.308