6  Capacidad de un Proceso

Los diagramas de control discutidos en los capítulos 3, 4 y 5 son métodos estadísticos que ayudan a los gerentes a mantener el proceso de producción bajo control. Sin embargo, un proceso que se encuentra bajo control estadístico no siempre genera productos de acuerdo con sus respectivas especificaciones de diseño porque los límites de control están basados en la media y la variabilidad de la distribución de muestreo, no en las especificaciones de diseño. Por ello, una tarea primordial del control de la calidad es conocer la capacidad, desempeño o habilidad de un proceso, que consiste en determinar la relación existente entre el comportamiento natural del proceso (límites de tolerancia natural) y las especificaciones requeridas por el diseño (límites de especificación). Esto permitirá saber en qué medida una característica de calidad es satisfactoria.

De acuerdo con lo anterior, la capacidad de un proceso se puede definir como la habilidad que tiene dicho proceso para cumplir con las especificaciones requeridas por el diseño. Esta habilidad está determinada por la relación existente entre los límites de tolerancia natural y los límites de especificación. Obviamente un producto que pretenda cumplir con las condiciones de calidad impuestas externamente debe tratar de conciliar las características de producción del proceso con las especificaciones, y de allí nace la necesidad de los estudios de capacidad.

Los límites de especificación o límites de tolerancia generalmente son valores entre los cuales debe estar la característica de la calidad de un producto y vienen dados por condiciones externas del proceso. Estos pueden ser establecidos por la administración, por los ingenieros de manufactura, por el cliente o por los desarrolladores/diseñadores del producto o por normas. Los límites de especificación generalmente se expresan a través de un valor nominal (\(N\)), u objetivo, y una tolerancia (\(T\)), o margen aceptable por encima o por debajo del valor nominal. Es decir

NotaLímites de especificación

\[ \begin{aligned} \text{LSE} & = N + T \\ \text{LIE} & = N - T \end{aligned} \tag{6.1}\]

La distancia entre estos límites (ver ecuación 6.1) se conoce como variación tolerada del proceso y vienen determinadas por

\[ \begin{aligned} \text{VT} & = \text{LSE}\, - \,\text{LIE}\\ & = N + T - \left(N - T\right)\\ & = 2T \end{aligned}\,. \tag{6.2}\]

En algunos casos la especificación suele expresarse a través de un solo límite, ya sea el superior o inferior. Esto ocurre cuando la ocurrencia de mediciones de la característica de la calidad por debajo o por encima de cierto valor no tiene efecto negativo en la calidad del producto, por ejemplo, en producción de rines de aluminio una característica clave es la resistencia a la ruptura, por lo que las especificaciones deberían vigilar a los rines que tengan una resistencia a la ruptura por debajo de cierto nivel no deseado.

Los límites de tolerancia natural (\(\text{LTN}\)) son límites regidos por el comportamiento natural o real del proceso de producción, en algunos textos son referidos como límites reales (\(\text{LR}\)). Estos límites dan una idea de la uniformidad del proceso de producción y están determinados por la variabilidad natural o real del proceso. Los límites reales o de tolerancia natural de un proceso indican los puntos entre los cuales varía la salida de un proceso. Los límites de tolerancia natural suelen ubicarse a \(k\) desviaciones estándar de la media y es práctica común tomar \(k=3\), es decir:

NotaLímites de tolerancia natural

\[ \begin{aligned} \text{LSTN} & = \mu + 3\sigma\\ \text{LITN} & = \mu - 3\sigma \end{aligned} \tag{6.3}\]

De acuerdo con la ecuación 6.3, a la distancia entre estos límites de tolerancia natural se conoce como variación real del proceso y está descrita por

\[ \begin{aligned} \text{VR} & = \text{LSTN}\, - \,\text{LITN}\\ & = \mu + 3\sigma - \left(\mu - 3\sigma\right)\\ & = 6\sigma \end{aligned}\,. \tag{6.4}\]

Para una distribución normal, los límites de tolerancia natural incluyen el \(\text{99,73}\%\) de la variable o, dicho en otros términos, sólo \(\text{0,27}\%\) de la salida del proceso quedará fuera de los límites de tolerancia natural. Esto puede apreciarse en la Figura 6.1.

Código
```{r}
#| label: fig-ltndn
#| fig-cap: "Límites de tolerancia natural superior e inferior en la distribución normal"
#| fig-asp: 0.5

ggplot() +
  geom_function(fun = dnorm, colour = "blue") +
  scale_y_continuous(breaks = NULL) +
  xlim(c(-6, 6)) +  #c(-Inf, Inf)
  geom_area(
    aes(
      x = seq(-3, 3, 0.001), 
      y = dnorm(x = seq(-3, 3, 0.001))
    ), 
    fill = 3, alpha = 0.3
  ) +
  geom_area(
    aes(
      x = seq(-6, -3, 0.001), 
      y = dnorm(x = seq(-6, -3, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(3, 6, 0.001), 
      y = dnorm(x = seq(3, 6, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  annotate(
    geom = "text", x = c(-3, 0, 3), 
    y = 1 / sqrt(32 * pi), 
    label = c("0,00135", "0,9973", "0,00135"), 
    hjust = "center"
  ) +
  geom_segment(
    aes(
      x = c(-3, 3), 
      y = 1 / sqrt(40 * pi), 
      xend = c(-3.2, 3.2), yend = c(0.01, 0.01)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(-3, 0, 3), expand = expansion(0),
    labels = c(
      latex2exp::TeX("$LITN = \\mu - 3\\sigma$"),
      latex2exp::TeX("$\\mu$"),
      latex2exp::TeX("$LSTN = \\mu + 3\\sigma$")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme_minimal() +
  theme(
    axis.line.x = element_line(colour = "blue"),
    axis.ticks.x = element_line(linewidth = 1, color = "black"),
    axis.ticks.length.x = unit(.2, "cm")
  ) 

```
Figura 6.1: Límites de tolerancia natural superior e inferior en la distribución normal

Ejemplo 6.1 (Aplicación de los Límites de Tolerancia Natural en el Análisis de Capacidad de Procesos)
Si las especificaciones para una característica de calidad son que esta debe tener dimensiones de 800 ± 5; luego, la especificación inferior es \(\text{LIE} = 795\), y la superior es \(\text{LSE} = 805\). Si además, se sabe que la media y la desviación estándar de tal característica de calidad son \(\mu = \text{800,6}\) y \(\sigma = \text{1,2}\), respectivamente, entonces los límites reales son:

\[ \begin{aligned} \text{LSTN} & = \text{800,6} + 3\left(\text{1,2}\right) = \text{804,2}\\ \text{LITN} & = \text{800,6} - 3\left(\text{1,2}\right) = 797 \end{aligned} \]

Por lo tanto, se espera que esta característica de calidad varíe de 797 a 804,2, con una media de 800,6. Al comparar esto con las especificaciones se aprecia que los límites reales caen dentro de las mismas, entonces se concluye que el proceso es capaz de cumplir con tales especificaciones.

En forma más general, los límites naturales de tolerancia de un proceso son aquellos que contienen (1-α)100% de su distribución. Por lo tanto, si la distribución del proceso es normal con media \(\mu\) y \(\sigma\), entonces los límites naturales bilaterales están dados por:

NotaLímites de Tolerancia Natural Probabilísticos para la Distribución Normal

\[ \begin{aligned} \text{LSTN} & = \mu + Z_{1 - \alpha/2}\sigma\\ \text{LITN} & = \mu - Z_{1 - \alpha/2}\sigma \end{aligned} \tag{6.5}\]

donde \(Z_{1-α⁄2}\) es el percentil \(\left(1-α⁄2\right)100\%\) de la distribución normal estándar. Así,

Note, de lo anterior, que la ecuación 6.3 es un caso particular de la ecuación 6.5 sí la característica de la calidad que se monitorea es normal y \(\alpha = \text{0,0027}\).

La capacidad de un proceso de producción puede ser medida a través de la porción caída o los índices de capacidad.

6.1 Porción Caída (\(p\))

La porción caída es la proporción o fracción de artículos disconformes que produce el proceso. Donde un artículo disconforme es un producto cuya medición de una característica de la calidad no se encuentra dentro de los límites de especificación. Supóngase que se tiene un proceso bajo control que produce cierto artículo al cual se le mide cierta característica de la calidad \(X\), generalmente física, que tiene media y desviación estándar \(\mu_0\) y \(\sigma_0\), respectivamente y que los límites de especificación para esta característica se encuentran establecidos. Entonces la porción caída se define como

\[ \begin{equation} p = P\left( X < \text{LIE} \; \text{ó} \; X > \text{LSE} \, |\mu = \mu_0 \, \text{y} \, \sigma = \sigma_0\right) \end{equation}. \]

Fíjese que la porción caída es el complemento de la porción o fracción de artículos conformes, es decir, la proporción de artículos que cumple con las especificaciones. Por lo que la porción caída se puede reescribir de la siguiente manera

\[ \begin{aligned} p & = 1 - P\left(\text{LIE} \, \le X \le \text{LSE} \, |\mu = \mu_0 \, \text{y} \, \sigma = \sigma_0\right)\\ p & = 1 - \left[P\left(X \le \text{LSE} \, |\mu = \mu_0 \, \text{y} \, \sigma = \sigma_0 \right) - P\left(X < \text{LIE} \, |\mu = \mu_0 \, \text{y} \, \sigma = \sigma_0 \right)\right] \end{aligned}. \] Si \(X\) se distribuye de manera normal, entonces

NotaPorción Caída Cuando la Cracterística de la Calidad Tiene Distribución Normal con \(\mu_0\) y \(\sigma_0\) Conocidos

\[ \begin{equation} p = 1 - \left[\Phi\left( \frac{\text{LSE}\, - \,\mu_0}{\sigma_0} \right) - \Phi\left( \frac{\text{LIE}\, - \,\mu_0}{\sigma_0} \right)\right] \end{equation}. \tag{6.6}\]

Frecuentemente la porción caída se expresa en partes por millón (\(\text{ppm}\)) multiplicando \(p\) por 1.000.00 y representa la cantidad de artículos disconformes por cada millón producidos. En la mayoría de los casos \(\mu_0\) y \(\sigma_0\) son desconocida y estas deben ser estimados con datos tomados del proceso, en tal caso el valor obtenido con la ecuación anterior es una estimación de \(p\), es decir

NotaPorción Caída Cuando la Cracterística de la Calidad Tiene Distribución Normal con \(\mu_0\) y \(\sigma_0\) Desconocidos

\[ \begin{equation} \hat{p} = 1 - \left[\Phi\left( \frac{\text{LSE}\, - \,\hat{\mu}_0}{\hat{\sigma}_0} \right) - \Phi\left( \frac{\text{LIE}\, - \,\hat{\mu}_0}{\hat{\sigma}_0} \right)\right] \end{equation}. \tag{6.7}\]

Ejemplo 6.2 (Estimación de la Porción Caída)
Las especificaciones para el diámetro interno de anillos para pistones son \(74 \pm \text{0,05}\). En base a información recolectada del proceso se ha estimado que: la media de esta característica de la calidad es \(\text{74,001}\) y la desviación estándar es \(\text{0,0099}\). Suponiendo que esta característica se distribuye de manera normal, la fracción disconforme de los anillos para pistones producidos puede estimarse en

\[ \begin{aligned} \hat{p} & = 1 - \left[\Phi\left( \frac{\text{LSE}\, - \,\hat{\mu}_0}{\hat{\sigma}_0} \right) - \Phi\left( \frac{\text{LIE}\, - \,\hat{\mu}_0}{\hat{\sigma}_0} \right)\right]\\ & = 1 - \left[\Phi\left( \frac{\text{74,05}\, - \, \text{74,001}}{\text{0,0099}} \right) - \Phi\left( \frac{\text{73,95}\, - \, \text{74,001}}{\text{0,0099}} \right)\right]\\ & = 1 - \left[\Phi\left(\text{4,95}\right) - \Phi\left(-\text{5,15}\right)\right] = 1 - \left( \text{0,99999962} - 0\right) = \text{0,00000038}\\ & = \text{0,38ppm} \end{aligned} \]

Es decir, aproximadamente de cada millón de anillos para pistones producidos 0,38 son disconformes.

6.2 Índices de Capacidad de Procesos

La capacidad de un proceso puede ser medida por la relación que existe entre los límites de tolerancia natural y los límites de especificación. En la literatura existe una gran diversidad de índices que miden esa relación y la idoneidad de la aplicación de cada uno de ellos está determinada por las condiciones particulares del proceso. En este libro se discuten los índices de capacidad más utilizados en la práctica.

6.2.1 Índice de Capacidad Potencial del Proceso \(C_p\)

El índice de capacidad potencial del proceso representa la razón entre la variación tolerada (ver ecuación 6.2) y la variación real del proceso (ver ecuación 6.4), por lo que se expresa de la siguiente manera. Es decir,

NotaÍndice de Capacidad Potencial del Proceso

\[ \begin{equation} C_p = \frac{T}{3\sigma} \end{equation}. \tag{6.8}\]

Un proceso es capaz si la variación tolerada (\(2T\)) es mayor que la variación natural del proceso (\(6\sigma\)), en tal sentido, lo deseado es que \(C_p \ge 1\). Una desventaja del índice \(C_p\) es que no toma en cuenta la media del proceso.

En la figura Figura 6.2 se ilustran tres casos de interés respecto del \(C_p\) y las especificaciones del proceso. En la Figura 6.2 (a) el \(C_p\) es mayor que la unidad. Esto significa que el proceso utiliza mucho menos del 100% de la banda de tolerancia. Por consiguiente, en este proceso se producirá un número relativamente reducido de unidades disconformes. En la figura Figura 6.2 (b) se muestra un proceso para el que el \(C_p = 1\); es decir, el proceso utiliza toda la banda de tolerancia. Mientras que, en la Figura 6.2 (c) \(C_p < 1\), lo que representa un proceso que utiliza más del 100% de la banda de tolerancia. Éste último caso es el menos deseado de todos, ya que bajo estas condiciones, se producirá la mayor cantidad de artículos disconformes en comparación con los otros casos. Suponiendo que la característica de la calidad es normal y que la variación real es \(6\sigma\), entonces, de cada millón de artículos producidos: el proceso representado por la Figura 6.2 (a) producirá menos 270 artículos disconformes, el proceso representando por la Figura 6.2 (b) producirá 270 artículos disconformes y el proceso indicado por la Figura 6.2 (c) producirá más de 270 artículos disconformes.

Código
```{r}
#| label: fig-pcicpp
#| fig-cap: "La porción caída del proceso y el índice de capacidad potencial"
#| fig-subcap:
#|   - "$C_p > 1$"
#|   - "$C_p = 1$"
#|   - "$C_p < 1$"
#| layout-ncol: 3
#| layout-nrow: 1

# C_p > 1
ggplot() +
  geom_function(fun = dnorm, colour = "blue") +
  scale_y_continuous(breaks = NULL) +
  xlim(c(-6, 6)) +  #c(-Inf, Inf)
  geom_area(
    aes(
      x = seq(-3, 3, 0.001), 
      y = dnorm(x = seq(-3, 3, 0.001))
    ), 
    fill = 3, alpha = 0.3
  ) +
  geom_area(
    aes(
      x = seq(-6, -3, 0.001), 
      y = dnorm(x = seq(-6, -3, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(3, 6, 0.001), 
      y = dnorm(x = seq(3, 6, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  annotate(
    geom = "text", x = c(-3.5, 0, 3.5), 
    y = 1 / sqrt(32 * pi), 
    label = c("0,00135", "0,9973", "0,00135"), 
    hjust = "center"
  ) +
  geom_segment(
    aes(
      x = c(-3.5, 3.5), 
      y = 1 / sqrt(40 * pi), 
      xend = c(-3.2, 3.2), yend = c(0.01, 0.01)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(-4, -3, 0, 3, 4),
    labels = c(
      latex2exp::TeX("$LIE$"),
      latex2exp::TeX("$LITN$"),
      latex2exp::TeX("$\\mu$"),
      latex2exp::TeX("$LSTN$"),
      latex2exp::TeX("$LSE$")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme_minimal() +
  theme(
    axis.line.x = element_line(colour = "blue"),
    axis.text.x = element_text(face = "bold"),
    axis.ticks.x = element_line(size = 1, color = "black"),
    axis.ticks.length.x = unit(.2, "cm"),
    panel.grid.major.x = element_line(
      size = 0.25, colour = "black", linetype = "dashed"
    )
  )

# C_p = 1
ggplot() +
  geom_function(fun = dnorm, colour = "blue") +
  scale_y_continuous(breaks = NULL) +
  xlim(c(-6, 6)) +  #c(-Inf, Inf)
  geom_area(
    aes(
      x = seq(-3, 3, 0.001), 
      y = dnorm(x = seq(-3, 3, 0.001))
    ), 
    fill = 3, alpha = 0.3
  ) +
  geom_area(
    aes(
      x = seq(-6, -3, 0.001), 
      y = dnorm(x = seq(-6, -3, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(3, 6, 0.001), 
      y = dnorm(x = seq(3, 6, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  annotate(
    geom = "text", x = c(-3.6, 0, 3.6), 
    y = 1 / sqrt(32 * pi), 
    label = c("0,00135", "0,9973", "0,00135"), 
    hjust = "center"
  ) +
  geom_segment(
    aes(
      x = c(-3.6, 3.6), 
      y = 1 / sqrt(40 * pi), 
      xend = c(-3.2, 3.2), yend = c(0.01, 0.01)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(-3, 0, 3),
    labels = c(
      "LITN \\n LIE",
      latex2exp::TeX("$\\mu$"),
      "LSTN"
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme_minimal() +
  theme(
    axis.line.x = element_line(colour = "blue"),
    axis.text.x = element_text(face = "bold"),
    axis.ticks.x = element_line(size = 1, color = "black"),
    axis.ticks.length.x = unit(.2, "cm"),
    panel.grid.major.x = element_line(
      size = 0.25, colour = "black", linetype = "dashed"
    )
  ) 

# C_p < 1
ggplot() +
  geom_function(fun = dnorm, colour = "blue") +
  scale_y_continuous(breaks = NULL) +
  xlim(c(-6, 6)) +  #c(-Inf, Inf)
  geom_area(
    aes(
      x = seq(-3, 3, 0.001), 
      y = dnorm(x = seq(-3, 3, 0.001))
    ), 
    fill = 3, alpha = 0.3
  ) +
  geom_area(
    aes(
      x = seq(-6, -2, 0.001), 
      y = dnorm(x = seq(-6, -2, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(2, 6, 0.001), 
      y = dnorm(x = seq(2, 6, 0.001))
    ), 
    fill = "red", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(-6, -3, 0.001), 
      y = dnorm(x = seq(-6, -3, 0.001))
    ), 
    fill = "#8a2a36", alpha = 0.85
  ) +
  geom_area(
    aes(
      x = seq(3, 6, 0.001), 
      y = dnorm(x = seq(3, 6, 0.001))
    ), 
    fill = "#8a2a36", alpha = 0.85
  ) +
  annotate(
    geom = "text", x = c(-3.6, 0, 3.6), 
    y = 1 / sqrt(32 * pi), 
    label = c("0,00135", "0,9973", "0,00135"), 
    hjust = "center"
  ) +
  geom_segment(
    aes(
      x = c(-3.6, 3.6), 
      y = 1 / sqrt(40 * pi), 
      xend = c(-3.2, 3.2), yend = c(0.01, 0.01)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(-3, -2, 0, 2, 3),
    labels = c(
      latex2exp::TeX("$LITN$"),
      latex2exp::TeX("$LIE$"),
      latex2exp::TeX("$\\mu$"),
      latex2exp::TeX("$LSE$"),
      latex2exp::TeX("$LSTN$")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme_minimal() +
  theme(
    axis.line.x = element_line(
      colour = "blue", linewidth = 0.75
    ),
    axis.text.x = element_text(face = "bold"),
    axis.ticks.x = element_line(
      linewidth = 0.75, color = "black"
    ),
    axis.ticks.length.x = unit(.2, "cm"),
    panel.grid.major.x = element_line(
      size = 0.25, colour = "black", linetype = "dashed"
    )
  ) 

```
(a) \(C_p > 1\)
(b) \(C_p = 1\)
(c) \(C_p < 1\)
Figura 6.2: La porción caída del proceso y el índice de capacidad potencial

Cuando \(\sigma\) es desconocida \(C_p\) se estima usando

NotaÍndice de Capacidad Potencial del Proceso Estimado

\[ \begin{equation} \hat{C}_p = \frac{T}{3\hat{\sigma}} \end{equation}. \tag{6.9}\]

Donde \(\hat{\sigma}\) es una estimación de \(\sigma\) calculada a partir de datos tomados del proceso bajo control. El estimador de \(\sigma\) depende de que tipo de diagrama de control se está usando para monitorear el proceso, por ejemplo: si se están usando los diagramas de control \(\bar{x}\) y \(R\) el estimador de \(\sigma\) es el indicado por la ecuación 4.11, si se están usando los diagramas de control \(\bar{x}\) y \(S\) el estimador de \(\sigma\) está dado en la ecuación 4.22, si se están usando diagramas de control para observaciones individuales el estimador de \(\sigma\) se calcula con la ecuación 4.63.

El índice \(C_p\) tiene una interpretación práctica útil, el índice razón de capacidad potencial, definido como

NotaÍndice Razón de Capacidad Potencial

\[ \begin{equation} C_{r} = \left ( \frac{1}{C_{p}} \right )100 \end{equation}\:. \tag{6.10}\]

El cual representa el porcentaje de la banda de las especificaciones utilizada por el proceso. Lo deseable es que \(C_r \leq 1\).

Ejemplo 6.3 (Aplicación del Índice de Capacidad Potencial del Proceso)
Recuérdese el Ejemplo 6.2 del diámetro de los anillos para pistones de automóviles donde la desviación estándar estimada es \(\hat{\sigma} = \text{0,0099}\) y el desvió máximo tolerado del diámetro del anillo al valor nominal es \(T = 0,05\). Por lo que,

\[ \hat{C}_p = \frac{\text{0,05}}{3\left ( \text{0,0099} \right )} = \text{1,68}\,. \]

Mientras que,

\[ \hat{C}_r = \left ( \frac{1}{\text{1,68}} \right ) 100 = \text{59,5%}\,. \]

Lo que indica que, el proceso solo usa el 59,5% de las especificaciones.

Código
```{r}
data(package = "qcc", "pistonrings")
pistones <- with(
  data = pistonrings, 
  qcc::qcc.groups(data = diameter, sample = sample)
) |>
  data.table::as.data.table() |>
  dplyr::mutate(
    muestra = 1:40,
    trial = rep(c(TRUE, FALSE), times = c(25, 15)),
  ) |>
  dplyr::rowwise() |>
  dplyr::mutate(
    media = mean(c_across(V1:V5)),
    desviacion = sqrt(var(c_across(V1:V5)))
  ) |>
  dplyr::rename(
    X_1 = V1, X_2 = V2, X_3 = V3, X_4 = V4, X_5 = V5,
    fase_1 = trial
  ) |>
  dplyr::relocate(
    c(muestra, fase_1),
    .before = X_1
  ) |>
  data.table::as.data.table()

data(package = "qcc", "pistonrings")

pistones <- as_tibble(pistonrings) |> 
  mutate(
    id = sample,
    muestra = rep(x = 1:5, times = 40)
  ) |> 
  pivot_wider(
    names_from = muestra,
    values_from = diameter,
    names_prefix = "X_"
  ) |> 
  dplyr::rename(
    c(fase_1 = "trial", muestra = "id")
  ) |> 
  dplyr::select(!sample) |> 
  dplyr::relocate(
    c(fase_1),
    .after = muestra
  ) |>
  dplyr::rowwise() |>
  dplyr::mutate(
    media = mean(c_across(X_1:X_5)),
    desviacion = sd(c_across(X_1:X_5))
  )

media_est <- pistones |>
  dplyr::filter(fase_1 == TRUE) |> 
  dplyr::pull(media) |> 
  mean()

S_barra <- pistones |>
  dplyr::filter(fase_1 == TRUE) |>
  dplyr::pull(desviacion) |> 
  mean()
sigma_est <-  S_barra / SixSigma::ss.cc.getc4(n = 5)

```

En las ecuaciones ecuación 6.9 y ecuación 6.10 se supone que el proceso tiene especificaciones bilaterales. Para especificaciones unilaterales, el índice de capacidad potencial del proceso se defines como sigue

\[ \begin{align*} C_{ps} & = \frac{\text{LSE}\, - \,\mu}{3\sigma}\;(\text{sólo especificación superior})\\ C_{pi} & = \frac{ \mu\, - \,\text{LIE}}{3\sigma}\;(\text{sólo especificación inferior})\ \end{align*}\:. \tag{6.11}\]

Las estimaciones \(\widehat{C}_{ps}\) y \(\widehat{C}_{pi}\)i se obtienen sustituyendo \(\mu\) y \(\sigma\) en la ecuación 6.11 con las estimaciones \(\widehat{\mu}\) y \(\widehat{\sigma}\), respectivamente.

6.2.1.1 Interpretación de \(C_p\)

Para que el proceso sea considerado potencialmente capaz de cumplir con las especificaciones, se requiere que la variación real (natural) siempre sea menor que la variación tolerada. De aquí que lo deseable es que el índice \(C_p\) sea mayor que 1; y si el valor del índice \(C_p\) es menor que uno, es una evidencia de que el proceso no cumple con las especificaciones. Para una mayor precisión en la interpretación de los valores de \(C_p\) Gutiérrez y De la Vara (2013, 99) muestran la Tabla 6.1, en la cual se presentan cinco categorías de procesos que dependen del valor del índice \(C_p\), suponiendo que el proceso está centrado. Ahí se ve que el \(C_p\) debe ser mayor que 1,33, o que 1,50 si se quiere tener un proceso bueno; pero debe ser mayor o igual que dos si se quiere tener un proceso de clase mundial (calidad Seis Sigma).

Código
```{r}
#| label: tbl-vicpi
#| tbl-cap: "Valores de $C_p$ y su interpretación"
#| table-caption: left

iicp <- data.table::data.table(
  check.names = FALSE,
  vicp = c(
    "$C_p \\ge  2$",
    "$C_p > \\text{1,33}$",
    "$1 < C_p < \\text{1,33}$",
    "$\\text{0,67} < C_p < 1$",
    "$C_p < \\text{0,67}$"
  ),
  clase = c("Clase mundial", "1", "2", "3", "4"),
  decision = c(
    "Se tiene calidad Seis Sigma.",
    "Adecuado.",
    "Parcialmente adecuado, requiere de un control estricto.",
    "No adecuado para el trabajo. Es necesario un análisis del proceso. Requiere de modificaciones serias para alcanzar una calidad satisfactoria.",
    "No adecuado para el trabajo. Requiere de modificaciones muy serias."
  )
)


iicp |>
  gt() |>
  fmt_markdown(columns = vicp) |>
  cols_label(
    vicp = md("**Valor del índice $C_p$**"),
    clase = md("**Clase o categoría del proceso**"),
    decision = md("**Decisión (Si el proceso está centrado)**")
  ) |>
  cols_align(
    align = "center",
    columns = everything()
  ) |>
  cols_align(
    align = "left",
    columns = decision
  ) |>
  tab_source_note(
    source_note = md("Fuente: @gutierrez2013control [p. 99]")
  )
```
Tabla 6.1: Valores de \(C_p\) y su interpretación
Valor del índice \(C_p\) Clase o categoría del proceso Decisión (Si el proceso está centrado)
\(C_p \ge 2\) Clase mundial Se tiene calidad Seis Sigma.
\(C_p > \text{1,33}\) 1 Adecuado.
\(1 < C_p < \text{1,33}\) 2 Parcialmente adecuado, requiere de un control estricto.
\(\text{0,67} < C_p < 1\) 3 No adecuado para el trabajo. Es necesario un análisis del proceso. Requiere de modificaciones serias para alcanzar una calidad satisfactoria.
\(C_p < \text{0,67}\) 4 No adecuado para el trabajo. Requiere de modificaciones muy serias.
Fuente: Gutiérrez y De la Vara (2013, 99)

En la Tabla 6.2, tomada de Gutiérrez y De la Vara (2013, 100), se presentan varios valores del índice de capacidad \(C_p\) junto con los valores asociados de la porción caída del proceso, expresada como unidades disconformes del producto por millón (\(\text{ppm}\)). Estas cantidades \(\text{ppm}\) se calcularon usando los siguientes supuestos muy importantes:

  1. La característica de la calidad tiene una distribución normal.
  2. El proceso está bajo control estadístico.
  3. En el caso de las especificaciones bilaterales, la media del proceso está centrada entre los límites inferior y superior de la especificación.

Estos supuestos son absolutamente determinantes para la precisión y la validez de los números reportados, y si no son válidos, entonces las cantidades reportadas pueden tener errores graves. Por ejemplo, Somerville y Montgomery (1996) reportan una amplia investigación de los errores producidos al utilizar el supuesto de la normalidad para hacer inferencia acerca del nivel de \(\text{ppm}\) de un proceso cuando en realidad la distribución fundamental no es normal. Investigaron varias distribuciones no normales y observaron que pueden resultar errores de varios ordenes de magnitud cuando las \(\text{ppm}\) se predicen estableciendo incorrectamente el supuesto de normalidad. Incluso cuando se usa distribución \(t\) hasta con 30 grados de libertad, resultan errores sustanciales. Por tanto, aun cuando una distribución \(t\) con 30 grados de libertad es simétrica y casi indistinguible visualmente de la distribución normal, las colas más larga y cargadas de la distribución \(t\) hacen una diferencia significativa cuando se estiman las \(\text{ppm}\). Por consiguiente, la simetría en la distribución de la salida del proceso por sí sola es insuficiente para asegurar que cualquier \(C_p\) proporcionará una predicción confiable de las \(\text{ppm}\) del proceso.

Para que un índice de capacidad del proceso tenga sentido, el proceso debe estar estable o en control estadístico. Sin embargo, en la práctica es común que se calcule un índice de capacidad usando datos históricos sin verificar primero si el proceso estaba realmente bajo control. Cuando un proceso no está en control, sus parámetros —como la media y la variabilidad— cambian con el tiempo, por lo que no pueden usarse para predecir cómo se comportará el proceso más adelante. En consecuencia, cualquier intento de usar el \(C_p\) para estimar la cantidad futura de piezas defectuosas (\(\text{ppm}\)) deja de ser válido.

Para ilustrar el uso de la Tabla 6.2, obsérvese que un \(C_p\) para un proceso estable que sigue una distribución normal es \(C_p = 1\) implica una tasa de la porción caída de 2699,934 \(\text{ppm}\) para especificaciones bilaterales, mientras que un \(C_p = \text{1,5}\) para este proceso implica una tasa de la porción caída de 3,401 \(\text{ppm}\) para especificaciones unilaterales.

Código
```{r}
#| label: tbl-cpppm
#| tbl-cap: "Valores del índice $C_p$ y de la porción caída asociada para un proceso con una distribución normal que está bajo controln"
#| table-caption: left

cp_ppm <- data.table::data.table(
  indice = c(
    0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3,
    1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2
  ),
  dos_esp_porc = c(
    0.548506, 0.36812, 0.230139, 0.133614, 0.071861, 0.035729,
    0.016395, 0.006934, 0.0027, 0.000967, 0.000318, 9.6e-05,
    2.7e-05, 7e-06, 2e-06, 0, 0, 0, 0
  ),
  dos_esp_ppm = c(
    548506.13, 368120.183, 230139.463, 133614.458, 71860.531,
    35728.715, 16395.058, 6934.046, 2699.934, 966.965, 318.291,
    96.231, 26.708, 6.802, 1.589, 0.34, 0.067, 0.012, 0.002
  ),
  una_esp_porc = c(
    0.274253, 0.18406, 0.11507, 0.066807, 0.03593, 0.017864,
    0.008198, 0.003467, 0.00135, 0.000483, 0.000159, 4.8e-05,
    1.3e-05, 3e-06, 1e-06, 0, 0, 0, 0
  ),
  una_esp_ppm = c(
    274253.065, 184060.092, 115069.732, 66807.229, 35930.266,
    17864.357, 8197.529, 3467.023, 1349.967, 483.483, 159.146,
    48.116, 13.354, 3.401, 0.794, 0.17, 0.033, 0.006, 0.001
  )
)

cp_ppm |>
  gt() |>
  cols_label(
    indice = md("**Valor del índice<br/>
(corto plazo)**"),
    dos_esp_porc = md("**\\% fuera de las dos<br/>especificaciones**"),
    dos_esp_ppm = md("**Partes por millón fuera<br/> 
($\\text{ppm}$)**"),
    una_esp_porc = md("**\\%  fuera de una<br/>especificación**"),
    una_esp_ppm = md("**Partes por millón fuera<br/> 
($\\text{ppm}$)**")
  ) |>
  cols_align(
    align = "center",
    columns = everything()
  ) |>
  tab_spanner(
    label = md(
      "**Proceso con doble especificación<br/>(índice $C_p$)**"
    ),
    columns = c(dos_esp_porc, dos_esp_ppm)
  ) |>
  tab_spanner(
    label = md(
      "**Proceso con una sola especificación<br/>($C_{pi}$, $C_{ps}$, $C_{pk}$)**"
    ),
    columns = c(una_esp_porc, una_esp_ppm)
  ) |>
  fmt_percent(
    columns = c(dos_esp_porc, una_esp_porc),
    decimals = 4, 
    sep_mark = ".",
    dec_mark = ","
  ) |>
  fmt_number(
    columns = indice, 
    decimals = 1, 
    sep_mark = ".", 
    dec_mark = ","
  ) |>
  fmt_number(
    decimals = 3, 
    contains("ppm"), 
    sep_mark = ".", 
    dec_mark = ","
  ) |>
  tab_source_note(
    source_note = md("Fuente: @gutierrez2013control [p. 100]")
  )
```
Tabla 6.2: Valores del índice \(C_p\) y de la porción caída asociada para un proceso con una distribución normal que está bajo controln
Valor del índice
(corto plazo)
Proceso con doble especificación
(índice \(C_p\))
Proceso con una sola especificación
(\(C_{pi}\), \(C_{ps}\), \(C_{pk}\))
% fuera de las dos
especificaciones
Partes por millón fuera
(\(\text{ppm}\))
% fuera de una
especificación
Partes por millón fuera
(\(\text{ppm}\))
0,2 54,8506% 548.506,130 27,4253% 274.253,065
0,3 36,8120% 368.120,183 18,4060% 184.060,092
0,4 23,0139% 230.139,463 11,5070% 115.069,732
0,5 13,3614% 133.614,458 6,6807% 66.807,229
0,6 7,1861% 71.860,531 3,5930% 35.930,266
0,7 3,5729% 35.728,715 1,7864% 17.864,357
0,8 1,6395% 16.395,058 0,8198% 8.197,529
0,9 0,6934% 6.934,046 0,3467% 3.467,023
1,0 0,2700% 2.699,934 0,1350% 1.349,967
1,1 0,0967% 966,965 0,0483% 483,483
1,2 0,0318% 318,291 0,0159% 159,146
1,3 0,0096% 96,231 0,0048% 48,116
1,4 0,0027% 26,708 0,0013% 13,354
1,5 0,0007% 6,802 0,0003% 3,401
1,6 0,0002% 1,589 0,0001% 0,794
1,7 0,0000% 0,340 0,0000% 0,170
1,8 0,0000% 0,067 0,0000% 0,033
1,9 0,0000% 0,012 0,0000% 0,006
2,0 0,0000% 0,002 0,0000% 0,001
Fuente: Gutiérrez y De la Vara (2013, 100)

La Tabla 6.3, tomada de Montgomery (2005, 361), ofrece recomendaciones sobre cuál debería ser el valor mínimo aceptable del PCR. En el caso de la resistencia de las botellas, esta propiedad es crítica porque afecta directamente la seguridad del usuario: si una botella no soporta la presión interna, podría romperse y lastimar a alguien. Por eso se exige que el PCR sea como mínimo 1.45. Una posible estrategia para elevar ese valor sería incrementar la resistencia promedio de las botellas, por ejemplo, usando una mayor cantidad de vidrio en el proceso de moldeo.

Código
```{r}
#| label: tbl-vmricp
#| tbl-cap: "Valores mínimos recomendados del índice de capacidad de proceso"
#| table-caption: left

vmricp <- data.table::data.table(
  check.names = FALSE,
  proceso = c(
    "Proceso existente.",
    "Proceso nuevo.",
    "Seguridad, resistencia o parámetro crítico, proceso existente.",
    "Seguridad, resistencia o parámetro crítico, proceso nuevo."
  ),
  bilateral = c(1.33, 1.50, 1.50, 1.67),
  unilateral = c(1.25, 1.45, 1.45, 1.60)
)

vmricp |>
  gt(rowname_col = "proceso") |>
  cols_label(
    bilateral = md("**Especificaciones<br/>bilaterales**"),
    unilateral = md("**Especificaciones<br/>unilaterales**")
  ) |>
  fmt_number(decimals = 2, sep_mark = ".", dec_mark = ",") |>
  cols_align(
    align = "center",
    columns = c(bilateral, unilateral)
  ) |>
  tab_source_note(
    source_note = md("Fuente: @montgomery2005control [p. 361]")
  )
```
Tabla 6.3: Valores mínimos recomendados del índice de capacidad de proceso
Especificaciones
bilaterales
Especificaciones
unilaterales
Proceso existente. 1,33 1,25
Proceso nuevo. 1,50 1,45
Seguridad, resistencia o parámetro crítico, proceso existente. 1,50 1,45
Seguridad, resistencia o parámetro crítico, proceso nuevo. 1,67 1,60
Fuente: Montgomery (2005, 361)

6.2.2 Índice de Capacidad Real del Proceso \(C_{pk}\)

El índice de capacidad del proceso \(C_p\) no toma en consideración dónde se localiza la media del proceso respecto de las especificaciones. El \(C_p\) únicamente compara qué tan amplio es el intervalo de especificaciones en relación con el ancho natural del proceso (seis sigma). Por ejemplo, las dos distribuciones normales de la parte superior de la figura Figura 6.3 tienen \(C_p=2\), pero el proceso representado por la Figura 6.3 (b) tiene claramente una capacidad más baja que el proceso representado por la Figura 6.3 (a), debido a que no está operando en el punto medio del intervalo entre las especificaciones, es decir, el proceso no está centrado (\(N \neq \mu\)). Esta perdida de capacidad se incrementa en la medida en que la media del proceso se aleja del valor nominal, situación que no es captada por el indice de capacidad potencial del proceso, note que se mantiene constante en cada uno de los procesos descritos en la Figura 6.3 (\(C_p = 2\)).

Código
```{r}
#| label: fig-cpcpk
#| fig-cap: "Relación de $C_p$ y $C_{pk}$"
#| fig-subcap:
#|   - "$X \\sim \\mathcal{N}(\\mu = 50,\\, {\\sigma} = 2)$"
#|   - "$X \\sim \\mathcal{N}(\\mu = 53,\\, {\\sigma} = 2)$"
#|   - "$X \\sim \\mathcal{N}(\\mu = 56,\\, {\\sigma} = 2)$"
#|   - "$X \\sim \\mathcal{N}(\\mu = 62,\\, {\\sigma} = 2)$"
#|   - "$X \\sim \\mathcal{N}(\\mu = 65,\\, {\\sigma} = 2)$"
#| layout-nrow: 5
#| fig-asp: 0.3
#| layout-ncol: 2 


# $X \sim \mathcal{N}(\mu = 50,\, \sigma = 2$
ggplot() +
  # scale_y_continuous(breaks = NULL) +
  # xlim(c(38, 77)) +  #c(-Inf, Inf) +
  # coord_fixed(ratio = (5 * 2)  / dnorm(50, 50, 2)) +
  theme_classic() +
  geom_function(
    fun = dnorm, colour = "blue",
    args = list(mean = 50, sd = 2)
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 50, sd = 2),
    geom = "polygon", color = "blue", 
    fill = "green", alpha = 0.2
  ) +
  geom_label(
    aes(
      x = c(55, 64, 64),
      y = c(
        dnorm(x = 48, mean = 50, sd = 2),
        dnorm(x = 48, mean = 50, sd = 2),
        dnorm(x = 47.5, mean = 50, sd = 2)
      ),
      label = latex2exp::TeX(
        c(
          r"($\textit{\sigma} = 2$)",
          r"($\textit{C_p = 2}$)",
          r"($\textit{C_{pk} = 2}$)"
        ),
        output = "character"
      )
    ),
    parse = TRUE,
    hjust = "left",
    linewidth = 0 # elimina el borde del rectángulo
  ) +
  geom_segment(
    aes(
      x = 55.8, 
      y = dnorm(x = 52.2, mean = 50, sd = 2), 
      xend = 53, 
      yend = dnorm(x = 53.5, mean = 50, sd = 2)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  geom_vline(xintercept = c(38, 62), alpha = 0.25) +
  geom_segment(
    aes(
      x = 50, y = 0, xend = 50,
      yend = dnorm(x = 50, mean = 50, sd = 2)
    ),
    alpha = 0.25, linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(38, 44, 50, 56, 62),
    limits = c(38, 73),
    labels = c(
      latex2exp::TeX(r"($LIE = 38$)"),
      44, 50, 56,
      latex2exp::TeX(r"($LSE = 62$)")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme(
    axis.line = element_blank(), 
    axis.title.x = element_markdown(), 
    axis.text.x = element_text(face = "bold"), 
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin_auto(0, unit = "cm"),
    panel.background = element_blank()
  )        

# $X \sim \mathcal{N}(\mu = 53,\, \sigma = 2)$
ggplot() +
  # scale_y_continuous(breaks = NULL) +
  # xlim(c(38, 77)) +  #c(-Inf, Inf) +
  # coord_fixed(ratio = (5 * 2)  / dnorm(53, 53, 2)) +
  theme_classic() +
  geom_function(
    fun = dnorm, colour = "blue",
    args = list(mean = 53, sd = 2)
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 53, sd = 2),
    geom = "polygon", color = "blue", 
    fill = "green", alpha = 0.2
  ) +
  geom_label(
    aes(
      x = c(57, 64, 64),
      y = c(
        dnorm(x = 51, mean = 53, sd = 2),
        dnorm(x = 51, mean = 53, sd = 2),
        dnorm(x = 50.5, mean = 53, sd = 2)
      ),
      label = latex2exp::TeX(
        c(
          r"($\textit{\sigma} = 2$)",
          r"($\textit{C_p = 2}$)",
          r"($\textit{C_{pk} = 1,5}$)"
        ),
        output = "character"
      )
    ),
    parse = TRUE,
    hjust = "left",
    linewidth = 0 # elimina el borde del rectángulo
  ) +
  geom_segment(
    aes(
      x = 57.8, 
      y = dnorm(x = 55.2, mean = 53, sd = 2), 
      xend = 55, 
      yend = dnorm(x = 56, mean = 53, sd = 2)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  geom_vline(xintercept = c(38, 62), alpha = 0.25) +
  geom_segment(
    aes(
      x = 53, y = 0, xend = 53,
      yend = dnorm(x = 53, mean = 53, sd = 2)
    ),
    alpha = 0.25, linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(38, 44, 50, 56, 62),
    limits = c(38, 73),
    labels = c(
      latex2exp::TeX(r"($LIE = 38$)"),
      44, 50, 56,
      latex2exp::TeX(r"($LSE = 62$)")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme(
    axis.line = element_blank(), 
    axis.title.x = element_markdown(), 
    axis.text.x = element_text(face = "bold"), 
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin_auto(0, unit = "cm"),
    panel.background = element_blank()
  )               

# $X \sim \mathcal{N}(\mu = 56,\, \sigma = 2)$
ggplot() +
  # scale_y_continuous(breaks = NULL) +
  # xlim(c(38, 77)) +  #c(-Inf, Inf) +
  # coord_fixed(ratio = (5 * 2)  / dnorm(56, 56, 2)) +
  theme_classic() +
  geom_function(
    fun = dnorm, colour = "blue",
    args = list(mean = 56, sd = 2)
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 56, sd = 2),
    geom = "polygon", color = "blue", 
    fill = "green", alpha = 0.2
  ) +
  geom_label(
    aes(
      x = c(50, 64, 64),
      y = c(
        dnorm(x = 54, mean = 56, sd = 2),
        dnorm(x = 54, mean = 56, sd = 2),
        dnorm(x = 53.5, mean = 56, sd = 2)
      ),
      label = latex2exp::TeX(
        c(
          r"($\textit{\sigma} = 2$)",
          r"($\textit{C_p = 2}$)",
          r"($\textit{C_{pk} = 1}$)"
        ),
        output = "character"
      )
    ),
    parse = TRUE,
    hjust = "left",
    linewidth = 0 # elimina el borde del rectángulo
  ) +
  geom_segment(
    aes(
      x = 51.5, 
      y = dnorm(x = 53.8, mean = 56, sd = 2), 
      xend = 53.5, 
      yend = dnorm(x = 53, mean = 56, sd = 2)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  geom_vline(xintercept = c(38, 62), alpha = 0.25) +
  geom_segment(
    aes(
      x = 56, y = 0, xend = 56,
      yend = dnorm(x = 56, mean = 56, sd = 2)
    ),
    alpha = 0.25, linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(38, 44, 50, 56, 62),
    limits = c(38, 73),
    labels = c(
      latex2exp::TeX(r"($LIE = 38$)"),
      44, 50, 56,
      latex2exp::TeX(r"($LSE = 62$)")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme(
    axis.line = element_blank(), 
    axis.title.x = element_markdown(), 
    axis.text.x = element_text(face = "bold"), 
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin_auto(0, unit = "cm"),
    panel.background = element_blank()
  )          

# $X \sim \mathcal{N}(\mu = 62,\, \sigma = 2)$
ggplot() +
  # scale_y_continuous(breaks = NULL) +
  # xlim(c(38, 77)) +  #c(-Inf, Inf) +
  # coord_fixed(ratio = (5 * 2)  / dnorm(62, 62, 2)) +
  theme_classic() +
  geom_function(
    fun = dnorm, colour = "blue",
    args = list(mean = 62, sd = 2)
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 62, sd = 2),
    geom = "polygon", color = "blue", 
    fill = "green", alpha = 0.2
  ) +
  geom_label(
    aes(
      x = c(55.3, 66, 66),
      y = c(
        dnorm(x = 60, mean = 62, sd = 2),
        dnorm(x = 60, mean = 62, sd = 2),
        dnorm(x = 59.5, mean = 62, sd = 2)
      ),
      label = latex2exp::TeX(
        c(
          r"($\textit{\sigma} = 2$)",
          r"($\textit{C_p = 2}$)",
          r"($\textit{C_{pk} = 0}$)"
        ),
        output = "character"
      )
    ),
    parse = TRUE,
    hjust = "left",
    linewidth = 0 # elimina el borde del rectángulo
  ) +
  geom_segment(
    aes(
      x = 56.5, 
      y = dnorm(x = 59.8, mean = 62, sd = 2), 
      xend = 59.5, 
      yend = dnorm(x = 59, mean = 62, sd = 2)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  geom_vline(xintercept = c(38, 62), alpha = 0.25) +
  scale_x_continuous(
    breaks = c(38, 44, 50, 56, 62),
    limits = c(38, 73),
    labels = c(
      latex2exp::TeX(r"($LIE = 38$)"),
      44, 50, 55,
      latex2exp::TeX(r"($LSE = 62$)")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme(
    axis.line = element_blank(), 
    axis.title.x = element_markdown(), 
    axis.text.x = element_text(face = "bold"), 
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin_auto(0, unit = "cm"),
    panel.background = element_blank()
  )                 

# $X \sim \mathcal{N}(\mu = 65,\, \sigma = 2)$
ggplot() +
  # scale_y_continuous(breaks = NULL) +
  # xlim(c(38, 77)) +  #c(-Inf, Inf) +
  # coord_fixed(ratio = (5 * 2)  / dnorm(65, 65, 2)) +
  theme_classic() +
  geom_function(
    fun = dnorm, colour = "blue",
    args = list(mean = 65, sd = 2)
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 65, sd = 2),
    geom = "polygon", color = "blue", 
    fill = "green", alpha = 0.2
  ) +
  geom_label(
    aes(
      x = c(59, 68, 68),
      y = c(
        dnorm(x = 63, mean = 65, sd = 2),
        dnorm(x = 63, mean = 65, sd = 2),
        dnorm(x = 62.5, mean = 65, sd = 2)
      ),
      label = latex2exp::TeX(
        c(
          r"($\textit{\sigma} = 2$)",
          r"($\textit{C_p = 2}$)",
          r"($\textit{C_{pk} = -0,5}$)"
        ),
        output = "character"
      )
    ),
    parse = TRUE,
    hjust = "left",
    linewidth = 0 # elimina el borde del rectángulo
  ) +
  geom_segment(
    aes(
      x = 60.5, 
      y = dnorm(x = 62.7, mean = 65, sd = 2), 
      xend = 63, 
      yend = dnorm(x = 62, mean = 65, sd = 2)
    ),
    arrow = arrow(
      type = "closed", length = unit(0.1, "inches")
    ),
    # color = "red",
    # linewidth = 1,
    linetype = "dashed"
  ) +
  geom_vline(xintercept = c(38, 62), alpha = 0.25) +
  geom_segment(
    aes(
      x = 65, y = 0, xend = 65,
      yend = dnorm(x = 65, mean = 65, sd = 2)
    ),
    alpha = 0.25, linetype = "dashed"
  ) +
  scale_x_continuous(
    breaks = c(38, 44, 50, 56, 62),
    limits = c(38, 73),
    labels = c(
      latex2exp::TeX(r"($LIE = 38$)"),
      44, 50, 56,
      latex2exp::TeX(r"($LSE = 62$)")
    )
  ) +
  xlab(NULL) +
  ylab(NULL) +
  theme(
    axis.line = element_blank(), 
    axis.title.x = element_markdown(), 
    axis.text.x = element_text(face = "bold"), 
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin_auto(0, unit = "cm"),
    panel.background = element_blank()
  )                                                        
```
(a) \(X \sim \mathcal{N}(\mu = 50,\, {\sigma} = 2)\)
(b) \(X \sim \mathcal{N}(\mu = 53,\, {\sigma} = 2)\)
(c) \(X \sim \mathcal{N}(\mu = 56,\, {\sigma} = 2)\)
(d) \(X \sim \mathcal{N}(\mu = 62,\, {\sigma} = 2)\)
(e) \(X \sim \mathcal{N}(\mu = 65,\, {\sigma} = 2)\)
Figura 6.3: Relación de \(C_p\) y \(C_{pk}\)

Esta situación puede reflejarse con mayor precisión definiendo un nuevo índice de capacidad del proceso que toma en consideración el centrado del proceso, este índice mide la capacidad real del proceso, y de ahí su nombre. El cálculo de este índice se determina a través de

NotaÍndice de Capacidad Real del Proceso

\[ \begin{equation} C_{pk} = \mathrm{mín}\left ( C_{ps} = \frac{\text{LSE} - \mu}{3\sigma},\: C_{pi} = \frac{\mu - \text{LIE}}{3\sigma } \right ) \end{equation}\:. \tag{6.12}\]

Obsérvese que \(C_{pk}\) es simplemente el índice de capacidad unilateral para el límite de la especificación más próximo al promedio del proceso.

Ejemplo 6.4 (Índice de Capacidad Real del Proceso)
Para mostrar el cálculo del \(C_{pk}\) considérese el proceso ilustrado en la Figura 6.3 (b), de donde se tendría que

\[ \begin{aligned} C_{pk} & = \mathrm{mín}\left (\frac{\text{LSE} - \mu}{3\sigma},\: \frac{\mu - \text{LIE}}{3\sigma } \right )\\ & = \mathrm{mín}\left (\frac{62 - 53}{3\left( 2 \right)},\: \frac{53 - 38}{3\left( 2 \right)} \right )\\ & = \mathrm{mín}\left ( \text{1,5}, \: \text{2,5} \right )\\ & = \text{1,5} \end{aligned}\,. \]

En general, si \(C_p = C_pk\), el proceso está centrado en el punto medio de las especificaciones y cuando \(C_{pk} < C_p\) el proceso está descentrado.

La magnitud de \(C_{pk}\) respecto de \(C_p\) es una medida directa de qué tan apartado del centro está operando el proceso. Varios casos que es común encontrarse se ilustran en la Figura 6.3. Obsérvese que la Figura 6.3 (c) \(C_{pk} = 1\) mientras que \(C_p = 2\). Puede usarse la Tabla 6.2 para obtener una estimación rápida del mejoramiento potencial que sería posible conseguir al centrar el proceso. Si se toma \(C_p = 1\) en la tabla Tabla 6.2 y se lee la porción caída en la columna de las especificaciones unilaterales, puede estimarse la porción caída real como \(\text{1.350ppm}\). Sin embargo, si el proceso puede centrarse, puede conseguirse \(C_p = 2\), y la Tabla 6.2 (usando \(C_p = 2\) y las especificaciones bilaterales) sugiere que la porción caída potencial es \(\text{0,0018ppm}\), un mejoramiento de varios órdenes de magnitud en el desempeño del proceso. Por tanto, es común decir que \(C_p\) mide la capacidad potencial del proceso, mientras que \(C_{pk}\) mide la capacidad real.

En la Figura 6.3 (d) de la Figura 6.3 se ilustra el caso en que la media del proceso es exactamente igual a uno de los límites de especificación, llevando a \(C_{pk} = 0\). Como se ilustra en la Figura 6.3 (d), cuando \(C_{pk} < 0\) la implicación es que la media del proceso se localiza fuera de las especificaciones. Evidentemente, si \(C_{pk} < -1\), el proceso completo se localiza fuera de los límites de la especificación. Algunos autores definen \(C_{pk}\) como un valor no negativo, por lo que los valores menores a cero se toman como cero.

6.2.3 Índice de Capacidad \(C_{pm}\) (Índice de Taguchi)

El índice de capacidad del proceso \(C_{pk}\) se desarrolló inicialmente porque \(C_p\) no trata de manera adecuada el caso de un proceso con media \(\mu\) que no está centrado entre los límites de la especificación. Sin embargo, \(C_{pk}\) sólo sigue siendo una medida inadecuada del centrado del proceso. Por ejemplo, considérese los dos procesos ilustrados en la figura Figura 6.4. Ambos procesos A y B tiene \(C_pk = 1\), no obstante que su centrado es claramente diferente. Para caracterizar el centrado del proceso de manera satisfactoria, C_pk debe compararse con \(C_p\). Para el proceso A, \(C_p = C_pk = 1\), lo que implica que el proceso está centrado, mientras que para el proceso B, \(C_p = 2 > C_{pk} = 1\), lo que implica que el proceso está descentrado. Para cualquier valor fijo de \(\mu\) en el intervalo \(\text{LIE}\)E a \(\text{LSE}\), \(C_{pk}\) depende inversamente de \(\sigma\) y se hace grande cuando \(\sigma\) tiende a cero. Esta característica puede hacer inadecuado a \(C_{pk}\) como medida de centrado. Es decir, un valor grande \(C_{pk}\) en realidad no dice nada acerca de la localización de la media en el intervalo de \(\text{LIE}\) a \(\text{LSE}\).

Código
```{r}
#| label: fig-ict
#| fig-cap: "Dos procesos con $C{pk} = 1$"
#| fig-asp: 0.5

ggplot() +
  # xlim(10, 80) +
  stat_function(
    fun = dnorm,
    args = list(mean = 50, sd = 5),
    alpha = 0.5,
    aes(color = "Mean 50"),
    geom = "polygon",
    fill = "#44adb7",
    color = "#1a4145"
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 57.5, sd = 2.5),
    alpha = 0.5,
    aes(color = "Mean 50"),
    geom = "polygon",
    fill = "#04fda4",
    color = "#1a4145"
  ) +
  geom_segment(
    aes(
      x = c(35, 50, 57.5, 65), y = c(0, 0, 0, 0),
      xend = c(35, 50, 57.5, 65),
      yend = dnorm(
        x = c(57.5, 50, 57.5, 57.5),
        mean = c(57.5, 50, 57.5, 57.5),
        sd = c(2.5, 5, 2.5, 2.5)
      )
    ),
    alpha = 0.25,
    linetype = c("solid", "dashed", "dashed", "solid")
  ) +
  annotate(
    geom = "text",
    x = c(35, 40, 50, 50, 57.5, 65),
    y = c(
      dnorm(
        x = c(57.5, 45, 50, 55, 57.5, 57.5),
        mean = c(57.5, 50, 50, 57.5, 57.5, 57.5),
        sd = c(2.5, 5, 5, 2.5, 2.5, 2.5)
      )
    ),
    label = latex2exp::TeX(
      c(
        r"($LIE = 35$)",
        r"($\textit{\sigma_A} = 5$)",
        r"($\textit{\mu_A} = 50$)",
        r"($\textit{\sigma_B} = 2,5$)",
        r"($\textit{\mu_B} = 57,5$)",
        r"($LIE = 65$)"
      )
    ),
    size = 3.5,
    parse = TRUE,
    hjust = 0.5,
    vjust = 0,
  ) +
  geom_curve(
    aes(
      x = c(40, 50),
      y = dnorm(
        x = c(45, 55),
        mean = c(50, 57.5),
        sd = c(5, 2.5)
      ),
      xend = c(46, 56),
      yend = dnorm(
        x = c(45, 55),
        mean = c(50, 57.5),
        sd = c(5, 2.5)
      )
    ),
    arrow = arrow(length = unit(0.01, "npc"))
  ) +
  theme_minimal() +
  xlab(NULL) +
  ylab(NULL) +
  scale_x_continuous(
    breaks = c(30, 35, 40, 50, 57.5, 65, 70),
    limits = c(10, 80),
    labels = c(
      30, 35, 40, latex2exp::TeX(r"($\textit{N = 50}$)"),
      57.5, 65, 70
    )
  ) +
  theme(
    axis.line.x = element_line(colour = "blue"),
    axis.ticks.x = element_line(
      linewidth = 1, color = "black"
    ),
    axis.ticks.length.x = unit(.2, "cm"),
    axis.ticks.y = element_blank(),
    axis.text.y = element_blank(),
    panel.grid = element_blank()
  )
```
Figura 6.4: Dos procesos con \(C{pk} = 1\)

Fuente: Montgomery (2009), “Control Estadístico de la Calidad”, pág. 357 Figura 6 - 4: Relación de C_p y C_pk

En otros términos, los índices \(C_p\) y \(C_{pk}\) están pensados a partir de lo importante que es reducir la variabilidad de un proceso para cumplir con las especificaciones. Sin embargo, desde el punto de vista de G. Taguchi, cumplir con especificaciones no es sinónimo de buena calidad y la reducción de la variabilidad debe darse en torno al valor nominal (calidad óptima). Es decir, la mejora de un proceso según Taguchi debe estar orientada a reducir su variabilidad alrededor del valor nominal, \(N\), y no sólo para cumplir con especificaciones. En consecuencia, Taguchi (1986) propone que la capacidad del proceso se mida con el índice \(C_{pm}\) que está definido por:

NotaÍndice de Capacidad de Taguchi \(C_{pm}\)

\[ \begin{equation} C_{pm} = \frac{\text{LSE} - \text{LIE}}{6\tau } \end{equation}\:. \tag{6.13}\]

donde \(\tau\) es la raíz cuadrada de la desviación cuadrada esperada del objetivo \(N = 1/2(LSE+LIE)\), es decir,

\[ \begin{align} \tau^2 &= \mathbb{E}\left [ \left ( X - N \right )^2 \right ]\\ &= \mathbb{E}\left\{ \left [ \left ( X - \mu \right ) + \left ( \mu - N \right ) \right ]^2\right\}\\ &= \mathbb{E}\left [ \left ( X - \mu \right )^2 + 2\left ( X - \mu \right )\left ( \mu - N \right ) + \left ( \mu - N \right )^2 \right ] \\ &= \mathbb{E}\left ( X - \mu \right )^2 + 2\left ( \mu - \mu \right )\left ( \mu - N \right ) + \left ( \mu - N \right )^2\\ &= \sigma^2 + \left ( \mu - N \right )^2 \end{align} \]

Por lo tanto, la ecuación ecuación 6.13 puede escribirse como

\[ \begin{align} C_{pm} &= \frac{\text{LSE} - \text{LIE}}{6\sqrt{\sigma^2 + \left ( \mu - N \right )^2}}\\ &= \frac{\text{LSE} - \text{LIE}}{6\sigma \sqrt{\frac{\sigma^2}{\sigma^2} + \left ( \frac{\mu - N}{\sigma} \right )^2}}\\ &= \frac{C_p}{ \sqrt{1 + \left ( \frac{\mu - N}{\sigma} \right )^2}}\\ &= \frac{C_p}{ \sqrt{1 + \xi ^2}}\\ \end{align} \tag{6.14}\]

donde se ha tomado

\[ \begin{equation} \xi = \frac{\mu - N}{\sigma} \end{equation}. \]

De lo anterior, el índice de capacidad \(C{pm}\) puede ser reformulado de la siguiente manera

NotaÍndice de Capacidad de Taguchi \(C_{pm}\) (forma alterna)

\[ \begin{equation} C_{pm} = \frac{C_{p}}{6\sqrt{1 + \left ( \frac{\mu - N}{\sigma} \right )^2}} = \frac{C_{p}}{\sqrt{1 + \xi ^2}} \end{equation}\:. \tag{6.15}\]

Algunos autores refieren al índice \(C_{pm}\) como un índice de “segunda generación” porque es calculado a partir del índice de primera generación \(C_p\).

Una forma lógica de estimar \(C_{pm}\) es a través de

NotaEstimador del Índice de Capacidad Taguchi \(C_{pm}\)

\[ \begin{equation} \hat{C}_{pm} = \frac{\hat{C}_p}{ \sqrt{1 + V^2}} \end{equation}\:. \tag{6.16}\]

donde

\[ \begin{equation} V = \frac{\bar{x} - N}{S} \end{equation}\:. \]

Chan, Cheng, y Spiring (1988) discutieron este índice, varios estimadores de \(C_{pm}\) y sus propiedades muestrales. Boyles (1991) ha proporcionado un análisis definitivo de \(C_{pm}\) y su utilidad para medir el centrado del proceso. Señalando que tanto \(C_{pk}\) como \(C_{pm}\) coinciden con \(C_{p}\) cuando \(\mu = N\) y disminuye cuando \(\mu\) se aparta de \(N\). Sin embargo, \(C_{pk} < 0\) para \(\mu > \text{LSE}\) o \(\mu < \text{LIE}\), mientras que \(C_{pm}\) tiende a cero asintóticamente cuando \(\left | \mu - N\right |\rightarrow \infty\). Boyles también indica que el \(C_{pm}\) de un proceso con \(\left | \mu - N\right |=\Delta > 0\) está acotado estrictamente por arriba por el valor \(C_p\) de un proceso con \(\sigma = \Delta\). Es decir,

\[ C_{pm} < \frac{\text{LSE} - \text{LIE}}{6\left | \mu - N\right |}\:. \]

Por tanto, una condición necesaria para el \(C_{pm} \geq 1\) es

\[ \left | \mu - N\right | < \frac{1}{6}\left ( \text{LSE} - \text{LIE}\right )\:. \] Este estadístico dice que si el valor objetivo \(N\) es el punto medio de las especificaciones, un \(C_{pm}\) de uno o mayor implica que la media \(\mu\) está dentro de la tercera parte de en medio de la banda de las especificaciones. Un enunciado similar puede hacerse para evaluar cualquier valor de \(C_{pm}\). Por ejemplo, \(C_{pm} \geq 4/3\) implica que \(\left | \mu - N\right | < 1/8 \left ( \text{LSE} - \text{LIE}\right )\). Por tanto, un valor de \(C_{pm}\) impone una restricción sobre la diferencia entre \(\mu\) y el valor objetivo \(N\).

Ejemplo 6.5 (Índice de Capacidad Taguchi \(C_{pm}\))
Para ilustrar el uso de considérese los dos procesos A y B descrito en la Figura 6.4. Par el proceso A, usando la ecuación ecuación 6.1, se encuentra que \(\text{T} = \text{LSE} - N = 65 -50 = 15\). Sustituyendo este resultado en la ecuación 6.9, se obtiene el índice de capacidad potencial como sigue

\[ C_p = \frac{T}{3\sigma} = \frac{15}{3\left ( 5 \right )} = 1\:. \]

Mientras que, \(\xi = (\mu_A - N)/\sigma_A = (50 - 50)/5 = 0\). Sustituyendo estos valores en la ecuación 6.15 se obtiene que el \(C_{pm}\) para el proceso A es:

\[ C_{pm} = \frac{C_p}{\sqrt{1 + \xi^2}}= \frac{1}{\sqrt{1 + 0^2}} = 1\:. \]

Dado que el proceso A está centrado, es decir, \(\mu_A = N = 50\), en consecuencia \(C_p = C_{pk} = C_{pm} = 1\).

Por el proceso B \(\xi = (\mu_B - N)/\sigma_B = (\text{57,5} - 50)/\text{2,5} = 3\), mientras que el indice de capacidad potencial será

\[ C_p = \frac{T}{3\sigma} = \frac{15}{3\left ( \text{2,5} \right )} = 2\:. \]

De lo anterior se obtiene que el índice de capacidad \(C_{pm}\) para el proceso B es

\[ C_{pm} = \frac{C_p}{\sqrt{1 + \xi^2}} = \frac{2}{\sqrt{1 + 3^2}} = \text{0,6325}\:. \]

Pearn, Kotz, y Johnson (1992) propusieron el índice de capacidad del proceso

NotaÍndice de Capacidad de Taguchi \(C_{pm}\) (tercera generación)

\[ \begin{equation} C_{pm} = \frac{C_{pk}}{6\sqrt{1 + \left ( \frac{\mu - N}{\sigma} \right )^2}} = \frac{C_{pk}}{\sqrt{1 + \xi ^2}} \end{equation}\:. \tag{6.17}\]

En ocasiones se le llama el índice de capacidad del proceso de “tercera generación”, ya que se construye a partir de los \(C_{pk}\). La motivación de este nuevo índice es incrementar la sensibilidad a las desviaciones de la media del proceso \(\mu\) del objetivo \(N\).