PUNTO NUMERO 1

1.1 CARGAR LAS LIBRERIAS

¿Qué significa?

Las librerías son conjuntos de funciones desarrolladas para realizar tareas específicas. En este caso:

readxl: importa archivos de Excel.

1.2 IMPORTAR Y VISUALIZAR LOS DATOS

library(knitr)

datos <- read_excel("C:/Users/User/Downloads/PUNTO1.xlsx")

tabla_datos <- data.frame(
  Dato = 1:nrow(datos),
  `Resultado A` = datos$`Resultado A`,
  `Resultado B` = datos$`Resultado B`
)

kable(
  tabla_datos,
  row.names = FALSE,
  align = "ccc",
  caption = "Tabla 1. Concentración del principio activo (mg/g) antes (Resultado A) y después (Resultado B) del estudio de estabilidad."
)
Tabla 1. Concentración del principio activo (mg/g) antes (Resultado A) y después (Resultado B) del estudio de estabilidad.
Dato Resultado.A Resultado.B
1 135.9 121.8
2 126.3 123.2
3 137.6 130.2
4 128.7 130.6
5 121.5 129.6
6 128.8 127.3
7 127.6 129.6
8 165.0 157.2
9 167.7 163.8
10 157.4 166.5
11 166.4 159.9
12 163.3 168.6
13 199.5 193.9
14 195.3 205.3
15 200.1 208.7
16 203.8 195.6
17 200.3 191.6
18 192.1 192.8
19 208.9 201.8
20 201.3 203.5
21 195.5 194.5

1.3 EXTRAER LAS VARIABLES

A <- datos$`Resultado A`
B <- datos$`Resultado B`

¿Qué entrega como respuesta?

No genera una salida visible en el informe, ya que únicamente extrae las concentraciones iniciales (Resultado A) y finales (Resultado B) del estudio de estabilidad para preparar la información que será comparada mediante la prueba t pareada.

¿Qué significa?

Este paso organiza los datos correspondientes a la concentración inicial y a la concentración final del principio activo evaluado después de las condiciones de humedad, temperatura y tiempo establecidas en el estudio de estabilidad. Estas dos variables constituyen las mediciones pareadas sobre las que se determinará si existe una diferencia estadísticamente significativa en la concentración del activo tras someterlo a dichas condiciones, mediante la aplicación de la prueba t para datos pareados.

1.4 CALCULAR LAS DIFERENCIAS

diferencias <- A - B

tabla_diferencias <- data.frame(
  Dato = 1:length(diferencias),
  Diferencia = round(diferencias, 2)
)

library(knitr)

kable(
  tabla_diferencias,
  row.names = FALSE,
  align = "cc",
  caption = "Tabla 2. Diferencias de concentración (mg/g) entre el Resultado A y el Resultado B."
)
Tabla 2. Diferencias de concentración (mg/g) entre el Resultado A y el Resultado B.
Dato Diferencia
1 14.1
2 3.1
3 7.4
4 -1.9
5 -8.1
6 1.5
7 -2.0
8 7.8
9 3.9
10 -9.1
11 6.5
12 -5.3
13 5.6
14 -10.0
15 -8.6
16 8.2
17 8.7
18 -0.7
19 7.1
20 -2.2
21 1.0

¿Qué entrega como respuesta?

Entrega un vector con la diferencia entre la concentración inicial (Resultado A) y la concentración final (Resultado B) para cada una de las muestras evaluadas en el estudio de estabilidad.

¿Qué significa?

Las diferencias calculadas representan el cambio en la concentración del principio activo después de ser sometido a las condiciones de humedad, temperatura y tiempo establecidas en el estudio. Estas diferencias constituyen la base para evaluar el supuesto de normalidad mediante la prueba de Shapiro-Wilk, requisito previo para la aplicación de la prueba t para datos pareados.

1.5. EVALUACIÓN DE LA NORMALIDAD DE LAS DIFERENCIAS

La prueba de Shapiro-Wilk se emplea para verificar si las diferencias entre la concentración inicial y la concentración final del principio activo presentan una distribución normal. Este es el principal supuesto para aplicar la prueba t para datos pareados.

Shapiro <- shapiro.test(diferencias)

print(Shapiro)
## 
##  Shapiro-Wilk normality test
## 
## data:  diferencias
## W = 0.95117, p-value = 0.3583
cat("p-valor =", Shapiro$p.value, "\n")
## p-valor = 0.3583121
if(Shapiro$p.value > 0.05){
  cat("Las diferencias presentan distribución normal.\n")
}else{
  cat("Las diferencias no presentan distribución normal.\n")
}
## Las diferencias presentan distribución normal.

¿Qué entrega como respuesta?

La prueba entrega el estadístico W y el p-valor, además de una interpretación automática que indica si las diferencias entre las concentraciones iniciales y finales presentan una distribución normal.

¿Qué significa?

La prueba de Shapiro-Wilk evalúa el supuesto de normalidad de las diferencias obtenidas entre las mediciones pareadas (Resultado A − Resultado B).

Hipótesis nula (H₀): Las diferencias presentan una distribución normal. Hipótesis alternativa (H₁): Las diferencias no presentan una distribución normal.

Con un nivel de significancia de α = 0.05:

Si p > 0.05, no se rechaza H₀ y se considera que las diferencias presentan distribución normal. Si p < 0.05, se rechaza H₀ y se concluye que las diferencias no presentan distribución normal.

Interpretación

Como el p-valor = 0.3583 es mayor que 0.05, no se rechaza la hipótesis nula (H₀). Por lo tanto, las diferencias entre la concentración inicial y la concentración final del principio activo presentan una distribución normal, cumpliéndose el supuesto de normalidad necesario para aplicar la prueba t para datos pareados.

1.6. PRUEBA t PARA DATOS PAREADOS

La prueba t para datos pareados permite determinar si existe una diferencia estadísticamente significativa entre la concentración inicial (Resultado A) y la concentración final (Resultado B) del principio activo después de someter las muestras a las condiciones del estudio de estabilidad.

# 1.6. PRUEBA t PARA DATOS PAREADOS

Prueba_t <- t.test(A, B, paired = TRUE)

print(Prueba_t)
## 
##  Paired t-test
## 
## data:  A and B
## t = 0.86028, df = 20, p-value = 0.3998
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -1.831830  4.403258
## sample estimates:
## mean difference 
##        1.285714
cat("p-valor =", Prueba_t$p.value, "\n")
## p-valor = 0.3998315
if(Prueba_t$p.value > 0.05){
  cat("No existe diferencia estadísticamente significativa entre la concentración inicial y final.\n")
}else{
  cat("Existe diferencia estadísticamente significativa entre la concentración inicial y final.\n")
}
## No existe diferencia estadísticamente significativa entre la concentración inicial y final.

¿Qué entrega como respuesta?

La prueba entrega el estadístico t, los grados de libertad (df), el intervalo de confianza del 95 %, la media de las diferencias y el p-valor, además de una interpretación automática que indica si existe o no una diferencia estadísticamente significativa entre la concentración inicial y la concentración final del principio activo.

¿Qué significa?

La prueba t para datos pareados compara las concentraciones iniciales y finales de un mismo conjunto de muestras para establecer si las condiciones de humedad, temperatura y tiempo del estudio de estabilidad produjeron un cambio significativo en la concentración del principio activo.

Hipótesis nula (H₀): No existe diferencia estadísticamente significativa entre la concentración inicial y la concentración final del principio activo. Hipótesis alternativa (H₁): Existe diferencia estadísticamente significativa entre la concentración inicial y la concentración final del principio activo.

Con un nivel de significancia de α = 0.05:

Si p > 0.05, no se rechaza la hipótesis nula y se concluye que no existe diferencia estadísticamente significativa entre ambas concentraciones. Si p < 0.05, se rechaza la hipótesis nula y se concluye que existe diferencia estadísticamente significativa entre ambas concentraciones.

Interpretación

Como el p-valor = 0.3998 es mayor que 0.05, no se rechaza la hipótesis nula (H₀). Por lo tanto, no existe una diferencia estadísticamente significativa entre la concentración inicial (Resultado A) y la concentración final (Resultado B) del principio activo después de someter las muestras a las condiciones de humedad, temperatura y tiempo establecidas en el estudio de estabilidad.

Conclusión

Con un nivel de significancia de α = 0.05, se concluye que las condiciones del estudio de estabilidad no produjeron un cambio estadísticamente significativo en la concentración del principio activo. En consecuencia, los resultados obtenidos indican que la concentración del activo se mantuvo estable bajo las condiciones evaluadas.

#——————————————————————————————————-

PUNTO NUMERO 2 Y 3

1. CARGAR LIBRERÍAS

library(readxl)
library(qcc)
library(SixSigma)
library(knitr)

2. IMPORTAR DATOS

datos <- read_excel("C:/Users/User/Downloads/PUNTO2Y3.xlsx")

3. VISUALIZAR DATOS

tabla_datos <- data.frame(
  Lote = datos$Lote,
  datos[,-1]
)

kable(
  tabla_datos,
  row.names = FALSE,
  align = "c",
  caption = "Tabla 3. Datos utilizados para la construcción de las cartas de control."
)
Tabla 3. Datos utilizados para la construcción de las cartas de control.
Lote X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 X35 X36 X37 X38 X39 X40 X41 X42 X43 X44 X45 X46 X47
Item1 98.7 93.3 93.8 107.6 102.2 111.6 117.5 85.6 113.9 77.9 101.5 86.2 101.6 99.4 78.3 98.0 93.4 95.0 82.1 115.9 104.5 106.1 78.2 117.5 86.4 75.9 124.1 93.1 97.3 110.3 107.8 101.3 97.4 103.2 75.3 92.0 91.3 81.5 79.9 87.6 119.1 105.2 102.7 88.5 103.2 107.5 118.3
Item2 91.1 96.6 91.8 85.1 76.3 80.1 111.5 82.0 96.5 97.7 111.7 78.2 117.2 84.7 81.6 89.5 95.6 99.5 104.4 91.4 106.0 84.3 120.6 82.4 81.6 103.6 110.5 99.6 110.4 102.1 100.0 87.8 95.4 89.9 123.4 121.3 118.7 94.9 103.9 115.9 119.8 109.1 78.5 123.1 71.0 113.4 80.8
Item3 104.8 106.4 119.9 112.8 75.7 90.8 99.1 100.9 84.9 106.9 90.6 89.4 117.7 100.6 121.7 83.8 107.9 118.2 111.0 98.1 102.9 76.9 89.3 121.2 84.6 86.0 82.2 83.1 94.1 115.2 87.6 120.9 83.4 110.0 81.9 106.7 96.1 102.4 93.8 86.6 114.7 91.0 75.8 110.1 83.9 106.6 112.5
Item4 80.3 100.4 120.8 94.8 105.6 92.9 85.5 106.2 82.8 85.6 123.9 102.7 120.6 79.9 86.3 117.6 81.6 102.0 90.2 120.8 83.6 117.4 80.6 93.2 109.0 101.5 85.0 103.9 77.9 65.1 124.6 103.8 107.1 102.7 117.4 97.7 102.4 96.5 101.0 107.5 89.0 105.7 118.9 112.4 89.6 84.0 114.3
Item5 83.7 76.2 95.1 78.4 88.4 94.7 121.1 121.4 95.8 97.2 88.1 75.2 99.6 120.1 102.7 116.5 90.4 107.0 76.1 101.3 115.9 104.3 107.1 99.4 81.2 114.6 105.1 122.6 75.9 108.9 86.2 96.3 108.7 116.5 80.6 115.4 120.1 105.7 120.2 121.2 84.4 122.3 92.4 109.0 83.5 89.9 86.8
Item6 116.9 82.3 113.6 114.0 96.4 115.8 81.5 97.8 90.0 119.0 84.9 90.7 122.6 82.2 91.4 91.1 81.6 88.4 111.4 105.6 82.8 119.2 85.0 117.4 118.7 101.5 99.0 106.5 106.9 115.3 97.1 93.8 107.0 79.2 81.5 97.7 77.0 77.8 115.7 105.1 114.7 85.1 100.5 109.5 96.5 76.9 119.8
Item7 90.5 92.5 103.4 116.5 82.4 99.4 93.6 122.7 99.6 104.7 85.8 114.3 77.1 105.0 115.1 101.6 81.6 78.0 108.7 95.3 92.7 103.8 110.1 92.3 119.2 93.0 118.7 94.2 105.3 82.3 117.4 122.4 75.7 104.6 104.8 87.0 103.9 81.9 111.3 80.7 83.8 110.8 82.3 113.8 123.1 80.4 112.1
Item8 90.9 90.1 88.5 109.5 105.5 100.1 118.4 110.8 92.9 80.3 111.6 75.2 114.7 84.9 78.4 105.6 111.0 123.5 105.5 93.7 121.3 90.2 83.0 107.6 87.7 93.6 86.9 114.3 92.1 86.0 103.6 103.9 80.4 95.6 82.2 119.3 82.1 87.8 75.1 124.3 117.2 113.0 106.4 103.0 83.2 121.5 92.6

4. PREPARAR LOS DATOS

Para construir las cartas de control por subgrupos, es necesario organizar la base de datos en el formato requerido por la librería qcc. Para ello, se elimina la columna correspondiente a la identificación de los lotes, se convierte la información en una matriz y posteriormente se transpone, de manera que cada fila represente un subgrupo (lote) y cada columna corresponda a una de las ocho mediciones realizadas.

datos_control <- datos[,-1]

# Convertir a matriz
datos_control <- as.matrix(datos_control)

# Transponer la matriz para que cada fila sea un lote
datos_control <- t(datos_control)

5. CARTA DE CONTROL X̄ (PROMEDIOS)

La carta de control permite evaluar la estabilidad del promedio del contenido del principio activo entre los diferentes lotes de producción. Adicionalmente, se incluyen los límites de especificación establecidos para el producto (LI = 80, Contenido esperado = 100 y LS = 120), con el fin de comparar el comportamiento del proceso frente a los requisitos de calidad.

Carta_X <- qcc(
  datos_control,
  type = "xbar",
  std.dev = "R",
  plot = FALSE
)

medias <- Carta_X$statistics

plot(
  medias,
  type = "b",
  pch = 16,
  ylim = c(75,125),
  xlab = "Lote",
  ylab = "Contenido del principio activo",
  main = "Carta de Control X̄ para el Contenido del Principio Activo"
)

# Línea central y límites de control
abline(h = Carta_X$center, col = "black", lwd = 2)
abline(h = Carta_X$limits[1], col = "black", lty = 2, lwd = 2)
abline(h = Carta_X$limits[2], col = "black", lty = 2, lwd = 2)

# Límites de especificación
abline(h = 80, col = "blue", lty = 3, lwd = 2)
abline(h = 100, col = "red", lty = 3, lwd = 2)
abline(h = 120, col = "blue", lty = 3, lwd = 2)

legend(
  "topright",
  legend = c(
    "LCL",
    "CL",
    "UCL",
    "LI = 80",
    "Contenido esperado = 100",
    "LS = 120"
  ),
  col = c("black","black","black","blue","red","blue"),
  lty = c(2,1,2,3,3,3),
  lwd = 2,
  bty = "n",
  cex = 0.8
)

INTERPRETACION

La carta de control X̄ muestra que las medias de los 47 lotes permanecen dentro de los límites de control (LCL = 83.98 y UCL = 114.00), sin observarse puntos fuera de dichos límites ni patrones evidentes de causas especiales de variación, como rachas, tendencias o ciclos. Esto indica que el promedio del contenido del principio activo se mantiene estable y que el proceso se encuentra bajo control estadístico respecto a su tendencia central.

Adicionalmente, al comparar las medias de los subgrupos con los límites de especificación (LI = 80, Contenido esperado = 100 y LS = 120), se observa que todas las medias permanecen dentro del intervalo especificado y próximas al valor objetivo, lo que evidencia que el proceso produce lotes cuyo contenido promedio del principio activo cumple con las especificaciones establecidas.

En consecuencia, no se identifican evidencias de causas especiales de variación, por lo que el proceso presenta un comportamiento estable y consistente. No obstante, la capacidad del proceso deberá confirmarse mediante el cálculo de los índices Cp, Cpk, Pp, Ppk y Cpm, los cuales permitirán determinar si, además de ser estable, el proceso es capaz de cumplir de forma consistente con las especificaciones del producto.

6. CARTA DE CONTROL R (RANGOS)

La carta de control R permite evaluar la variabilidad existente dentro de cada subgrupo (lote) durante el proceso de fabricación. Esta carta complementa la carta X̄, ya que mientras la carta de promedios analiza la estabilidad de la tendencia central del proceso, la carta R verifica si la dispersión de las mediciones permanece constante a lo largo del tiempo.

Carta_R <- qcc(
  datos_control,
  type = "R",
  title = "Carta de Control R para la Variabilidad del Proceso"
)

Interpretación

La carta de control R evidencia que los rangos correspondientes a los 47 subgrupos permanecen dentro de los límites de control (LCL = 5.25 y UCL = 71.89). Esto indica que la variabilidad observada entre las ocho mediciones realizadas en cada lote se mantiene estable durante todo el proceso, sin presentarse incrementos o disminuciones anormales en la dispersión de los datos.

Adicionalmente, no se observan puntos fuera de los límites de control ni secuencias o patrones que sugieran la presencia de causas especiales de variación, como cambios bruscos o comportamientos inusuales de la variabilidad entre los subgrupos. Por lo tanto, la dispersión observada corresponde únicamente a la variación natural (causas comunes) propia del proceso.

En consecuencia, la variabilidad del proceso se encuentra bajo control estadístico, lo que significa que las diferencias entre las mediciones de cada lote son consistentes y se mantienen estables a lo largo de la producción. Al cumplirse esta condición, la carta X̄ puede interpretarse con confianza para evaluar la estabilidad del promedio del contenido del principio activo y posteriormente realizar el análisis de capacidad del proceso.

Identificación de posibles puntos críticos

Aunque la carta de control X̄ no presenta puntos fuera de los límites de control, se identificaron tres subgrupos que, por su cercanía a los límites de control, constituyen puntos que deben mantenerse bajo vigilancia:

Lote 13: presenta una media cercana al límite inferior de control (LCL), lo que podría estar asociado con variaciones en la dosificación del principio activo, diferencias en la mezcla o errores de pesaje.

Lote 38: muestra una media inferior al promedio del proceso, situación que podría relacionarse con variaciones en la materia prima, cambios en las condiciones de operación o ajustes del proceso.

Lote 44: presenta una media próxima al límite superior de control (UCL), lo que podría deberse a una ligera sobredosificación, descalibración del sistema de dosificación o diferencias en la homogeneización del lote.

En todos los casos, los puntos permanecen dentro de los límites de control, por lo que no constituyen evidencia de pérdida de control estadístico; sin embargo, representan observaciones que deben mantenerse bajo seguimiento como parte del control continuo del proceso.

7. CAPACIDAD DE PROCESO

El análisis de capacidad del proceso permite evaluar si la variabilidad natural del proceso es suficientemente pequeña para cumplir con las especificaciones establecidas (LI = 80 mg/g, Objetivo = 100 mg/g y LS = 120 mg/g). Para ello se calculan los índices de capacidad del proceso y se genera la gráfica correspondiente.

LI <- 80
LS <- 120
Objetivo <- 100

# Ajustes gráficos
par(
  cex.main = 0.9,   # Reduce el tamaño del título generado por qcc
  mar = c(5,4,4,2)  # Márgenes de la figura
)

Capacidad <- process.capability(
  Carta_X,
  spec.limits = c(LI, LS),
  target = Objetivo
)

## 
## Process Capability Analysis
## 
## Call:
## process.capability(object = Carta_X, spec.limits = c(LI, LS),     target = Objetivo)
## 
## Number of obs = 376          Target = 100
##        Center = 98.99           LSL = 80
##        StdDev = 14.15           USL = 120
## 
## Capability indices:
## 
##        Value    2.5%   97.5%
## Cp    0.4711  0.4374  0.5047
## Cp_l  0.4473  0.4083  0.4863
## Cp_u  0.4949  0.4538  0.5359
## Cp_k  0.4473  0.4008  0.4937
## Cpm   0.4699  0.4362  0.5035
## 
## Exp<LSL 9%    Obs<LSL 8.2%
## Exp>USL 6.9%  Obs>USL 7.7%

8. CÁLCULO DE PP Y PPK

datos_vector <- as.vector(datos_control)

media <- mean(datos_vector)
desv_global <- sd(datos_vector)

Pp <- (LS - LI)/(6*desv_global)

Ppk <- min(
  (LS-media)/(3*desv_global),
  (media-LI)/(3*desv_global)
)

cat("Pp =", round(Pp,3), "\n")
## Pp = 0.472
cat("Ppk =", round(Ppk,3), "\n")
## Ppk = 0.449

TABLA DE RESULTADOS

tabla_capacidad <- data.frame(
  Indicador = c("Cp", "Cpk", "Pp", "Ppk", "Cpm"),
  Valor = c(
    0.471,
    0.447,
    round(Pp, 3),
    round(Ppk, 3),
    0.470
  )
)

knitr::kable(
  tabla_capacidad,
  align = "cc",
  caption = "Tabla 4. Indicadores de capacidad del proceso."
)
Tabla 4. Indicadores de capacidad del proceso.
Indicador Valor
Cp 0.471
Cpk 0.447
Pp 0.472
Ppk 0.449
Cpm 0.470

ANALISIS DE RESULTADOS

Interpretación del índice Cpk

- Resultado obtenido: Cpk = 0.447

El índice Cpk evalúa la capacidad real del proceso considerando tanto la variabilidad como el centrado respecto a los límites de especificación. Como el valor obtenido (0.447) es menor que 1.00, se concluye que el proceso no es capaz de cumplir de manera consistente con las especificaciones establecidas (80–120 mg/g). Esto indica que existe una alta probabilidad de producir lotes con concentraciones fuera de los límites de aceptación, por lo que el proceso requiere acciones de mejora para reducir su variabilidad y optimizar su centrado.

Interpretación del índice Pp

- Resultado obtenido: Pp = 0.472

El índice Pp mide el desempeño potencial del proceso utilizando la variabilidad global de todos los datos recopilados. El valor obtenido (0.472) es inferior a 1.00, lo que indica que la variación global del proceso es mayor que el intervalo permitido por las especificaciones. En consecuencia, el proceso no presenta la capacidad potencial suficiente para cumplir de forma consistente con los requisitos de calidad establecidos.

Interpretación del índice Ppk

- Resultado obtenido: Ppk = 0.449

El índice Ppk representa el desempeño real del proceso considerando simultáneamente la variabilidad global y el desplazamiento de la media respecto al valor objetivo. Como el valor obtenido (0.449) es menor que 1.00, se concluye que el desempeño real del proceso es insuficiente, existiendo una probabilidad considerable de obtener productos fuera de especificación. Este resultado evidencia la necesidad de implementar acciones orientadas a disminuir la variabilidad y mejorar el control del proceso.

Interpretación del índice Cpm

- Resultado obtenido: Cpm = 0.470

El índice Cpm evalúa la capacidad del proceso considerando tanto la variabilidad como la cercanía de la media al valor objetivo (100 mg/g). El valor obtenido (0.470) es inferior a 1.00, indicando que el proceso no es capaz de cumplir adecuadamente con las especificaciones cuando se tiene en cuenta el objetivo establecido. Esto significa que, aunque la media del proceso se encuentra próxima al valor nominal, la variabilidad existente es demasiado elevada para garantizar un cumplimiento consistente de las especificaciones.

Conclusión general de los índices de capacidad

Los índices Cp (0.471), Cpk (0.447), Pp (0.472), Ppk (0.449) y Cpm (0.470) son todos menores que 1.00, lo que demuestra que la variabilidad del proceso excede el rango permitido por las especificaciones (80–120 mg/g). Aunque las cartas X̄ y R indican que el proceso se encuentra bajo control estadístico (estable y sin evidencias de causas especiales de variación), el análisis de capacidad evidencia que el proceso no es apto para cumplir de forma consistente con las especificaciones del producto. Por tanto, es necesario implementar acciones de mejora enfocadas en reducir la variabilidad del proceso y aumentar su capacidad antes de considerar que el proceso es adecuado para una producción rutinaria.

#——————————————————————————————————-

PUNTO NUMERO 4 Y 5

1. CARGAR LIBRERÍAS

library(readxl)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.5.3
library(outliers)
## Warning: package 'outliers' was built under R version 4.5.2
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Cargando paquete requerido: carData
## 
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode

2. IMPORTAR DATOS

datos <- read_excel("C:/Users/User/Downloads/PUNTO4Y5.xlsx")
## New names:
## • `351.6` -> `351.6...16`
## • `351.6` -> `351.6...18`

3. VISUALIZAR DATOS

# Asignar nombres a las columnas

nombres_columnas <- c(
  "Proceso",
  paste0("X", 1:24)
)

colnames(datos) <- nombres_columnas

# Crear tabla para el informe

tabla_datos <- datos

# Mostrar tabla

knitr::kable(
  tabla_datos,
  row.names = FALSE,
  align = "c",
  caption = "Tabla 5. Datos utilizados para la comparación de los diferentes procesos."
)
Tabla 5. Datos utilizados para la comparación de los diferentes procesos.
Proceso X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24
Proceso 2 358.1 351.3 359.6 353.2 350.8 356.6 358.3 351.6 350.1 352.6 359.2 352.0 350.9 355.7 355.1 353.1 350.2 355.5 359.5 355.6 351.6 358.5 358.2 355.7
Proceso 3 355.1 366.0 358.4 350.9 369.7 368.3 368.9 366.0 352.3 351.8 353.2 347.7 355.3 346.5 358.2 352.8 334.0 336.1 349.8 337.7 343.6 340.0 342.5 360.6
Proceso 4 337.8 337.9 341.9 334.7 320.5 323.8 332.9 320.2 331.0 325.6 329.1 324.6 329.4 329.6 337.2 320.6 323.9 338.3 343.0 326.6 331.5 342.2 344.9 345.9
Proceso 5 344.8 346.0 349.5 342.4 343.3 345.3 346.8 346.0 346.1 345.5 348.4 344.9 349.2 347.7 347.9 345.2 347.3 345.1 346.2 343.1 349.1 349.2 342.5 349.7
Proceso 6 335.9 362.7 367.0 363.8 356.1 351.4 362.3 377.9 376.9 388.6 373.5 376.1 397.0 351.0 389.5 370.8 365.7 376.7 384.3 392.1 358.5 355.8 387.3 379.9
Proceso 7 330.1 321.2 332.2 331.3 326.2 338.4 345.4 331.2 348.4 340.6 328.4 324.6 349.3 331.4 337.6 347.5 332.7 343.0 326.1 332.9 331.7 334.4 333.2 342.9
Proceso 9 358.5 351.9 357.4 356.6 355.8 354.5 359.9 353.7 353.8 354.8 357.7 356.0 352.2 353.7 353.5 353.0 354.7 356.8 355.1 357.7 359.4 358.8 356.8 352.2

4. PREPARAR LOS DATOS

# Cambiar el nombre de la primera columna
colnames(datos)[1] <- "Proceso"

# Convertir todas las demás columnas a numéricas
datos[-1] <- lapply(datos[-1], as.numeric)

# Crear los datos en formato largo
datos_largo <- pivot_longer(
  datos,
  cols = -Proceso,
  names_to = "Muestra",
  values_to = "Resultado"
)

knitr::kable(
  head(datos_largo, 15),
  row.names = FALSE,
  align = "c",
  caption = "Tabla 6. Datos reorganizados en formato largo para el análisis estadístico (primeras 15 observaciones)."
)
Tabla 6. Datos reorganizados en formato largo para el análisis estadístico (primeras 15 observaciones).
Proceso Muestra Resultado
Proceso 2 X1 358.1
Proceso 2 X2 351.3
Proceso 2 X3 359.6
Proceso 2 X4 353.2
Proceso 2 X5 350.8
Proceso 2 X6 356.6
Proceso 2 X7 358.3
Proceso 2 X8 351.6
Proceso 2 X9 350.1
Proceso 2 X10 352.6
Proceso 2 X11 359.2
Proceso 2 X12 352.0
Proceso 2 X13 350.9
Proceso 2 X14 355.7
Proceso 2 X15 355.1

Los datos fueron transformados de formato ancho a formato largo, obteniendo las variables Proceso, Muestra y Resultado, estructura requerida para la aplicación del análisis de varianza (ANOVA) y las pruebas estadísticas posteriores.

5. DETECCIÓN DE OUTLIERS (ÚNICAMENTE PROCESO 1)

5.1 Método estadístico (Prueba de Grubbs)

# Extraer los datos del Proceso 1
Proceso1 <- as.numeric(datos[1, -1])

# Prueba de Grubbs
Grubbs <- outliers::grubbs.test(Proceso1)

Grubbs
## 
##  Grubbs test for one outlier
## 
## data:  Proceso1
## G = 1.5016, U = 0.8977, p-value = 1
## alternative hypothesis: highest value 359.6 is an outlier

INTERPRETACION

La prueba de Grubbs se aplicó para identificar la presencia de un posible valor atípico en los resultados del Proceso 1. Se obtuvo un estadístico G = 1.5016 y un p-valor = 1.000. Debido a que el p-valor es mayor que 0.05, no se rechaza la hipótesis nula; por lo tanto, no existe evidencia estadísticamente significativa de valores atípicos en el Proceso 1.

5.2 Método gráfico (Diagrama de Caja y Bigotes)

boxplot(
  Proceso1,
  main = "Diagrama de Caja y Bigotes - Proceso 1",
  ylab = "Resultado",
  col = "lightblue"
)

Interpretación

El diagrama de caja y bigotes del Proceso 1 no presenta observaciones fuera de los límites de los bigotes, por lo que gráficamente no se evidencian valores atípicos (outliers). Este resultado coincide con la prueba estadística de Grubbs, la cual indicó que no existen valores atípicos estadísticamente significativos para este proceso.

6. MODELO ANOVA

Se realizó un análisis de varianza (ANOVA) de una vía con el fin de determinar si existen diferencias estadísticamente significativas entre las medias de los diferentes procesos evaluados.

ANOVA <- aov(Resultado ~ Proceso, data = datos_largo)
Resultado_ANOVA <- summary(ANOVA)
Resultado_ANOVA
##              Df Sum Sq Mean Sq F value Pr(>F)    
## Proceso       6  25193    4199   59.91 <2e-16 ***
## Residuals   161  11283      70                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación

El análisis de varianza (ANOVA) arrojó un valor de F = 59.91 y un p-valor < 2 × 10⁻¹⁶. Debido a que el p-valor es menor que 0.05, se rechaza la hipótesis nula, concluyendo que existen diferencias estadísticamente significativas entre las medias de los procesos evaluados. En consecuencia, es necesario realizar una prueba de comparaciones múltiples para identificar cuáles procesos presentan dichas diferencias.

7. EXTRACCIÓN DE LOS RESIDUOS

Los residuos del modelo ANOVA fueron obtenidos con el fin de evaluar los supuestos de normalidad y homocedasticidad requeridos para este análisis.

# Extraer los residuos del modelo ANOVA

residuos <- residuals(ANOVA)

# Mostrar los primeros residuos obtenidos

tabla_residuos <- data.frame(
  Residuo = head(residuos, 15)
)

knitr::kable(
  tabla_residuos,
  row.names = FALSE,
  align = "c",
  caption = "Tabla 7. Primeros residuos obtenidos del modelo ANOVA."
)
Tabla 7. Primeros residuos obtenidos del modelo ANOVA.
Residuo
3.3916667
-3.4083333
4.8916667
-1.5083333
-3.9083333
1.8916667
3.5916667
-3.1083333
-4.6083333
-2.1083333
4.4916667
-2.7083333
-3.8083333
0.9916667
0.3916667

Interpretación

Se obtuvieron los residuos del modelo ANOVA, los cuales representan la diferencia entre los valores observados y los valores estimados por el modelo. Estos residuos serán utilizados para verificar los supuestos de normalidad y homocedasticidad mediante pruebas estadísticas y métodos gráficos.

8. EVALUACIÓN DE LA NORMALIDAD DE LOS RESIDUOS

8.1 Prueba de Shapiro-Wilk

Se aplicó la prueba de Shapiro-Wilk para evaluar si los residuos del modelo ANOVA siguen una distribución normal.

Shapiro <- shapiro.test(residuos)

print(Shapiro)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.9622, p-value = 0.0001592
cat("\np-valor =", format(Shapiro$p.value, scientific = TRUE), "\n\n")
## 
## p-valor = 1.59153e-04
if(Shapiro$p.value > 0.05){
  
  cat("Conclusión: Los residuos presentan distribución normal.\n")
  
}else{
  
  cat("Conclusión: Los residuos no presentan distribución normal.\n")
  
}
## Conclusión: Los residuos no presentan distribución normal.

Interpretación

La prueba de Shapiro-Wilk arrojó un estadístico W = 0.9622 y un p-valor = 0.0001592. Como el p-valor es menor que 0.05, se rechaza la hipótesis nula de normalidad, concluyéndose que los residuos del modelo no presentan una distribución normal.

8.2 Método gráfico 1. Gráfico de Probabilidad Normal (Q-Q Plot)

Con el fin de complementar la evaluación de la normalidad de los residuos, se elaboró un gráfico de probabilidad normal (Q-Q Plot), el cual permite comparar visualmente la distribución de los residuos con una distribución normal teórica.

qqnorm(
  residuos,
  main = "Gráfico Q-Q de los Residuos",
  pch = 19
)

qqline(
  residuos,
  col = "red",
  lwd = 2
)

Interpretación

En el gráfico Q-Q se observa que varios residuos se desvían de la línea de referencia, especialmente en los extremos de la distribución. Este comportamiento indica que los residuos no siguen una distribución normal, resultado que coincide con la prueba de Shapiro-Wilk realizada previamente.

8.3 Método gráfico 2. Histograma de los residuos

Con el propósito de complementar la evaluación de la normalidad de los residuos, se construyó un histograma que permite observar la forma de la distribución de los residuos del modelo ANOVA.

hist(
  residuos,
  main = "Histograma de los Residuos",
  xlab = "Residuos",
  ylab = "Frecuencia",
  col = "lightgreen",
  border = "black"
)

Interpretación

El histograma de los residuos presenta una distribución aproximadamente acampanada; sin embargo, se observan desviaciones respecto a la forma esperada de una distribución normal. Este comportamiento es consistente con los resultados obtenidos mediante la prueba de Shapiro-Wilk y el gráfico Q-Q, los cuales indican que los residuos del modelo no siguen una distribución normal.

9. EVALUACIÓN DE LA HOMOCEDASTICIDAD DE LOS RESIDUOS

9.1 Prueba de Levene

Con el fin de verificar el supuesto de homocedasticidad del modelo ANOVA, se aplicó la prueba de Levene para evaluar la igualdad de varianzas entre los diferentes procesos.

Levene <- leveneTest(
  Resultado ~ Proceso,
  data = datos_largo
)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
print(Levene)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value    Pr(>F)    
## group   6  15.718 3.636e-14 ***
##       161                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\np-valor =", format(Levene$`Pr(>F)`[1], scientific = TRUE), "\n\n")
## 
## p-valor = 3.63626e-14
if(Levene$`Pr(>F)`[1] > 0.05){
  
  cat("Conclusión: Los residuos presentan homogeneidad de varianzas.\n")
  
}else{
  
  cat("Conclusión: Los residuos no presentan homogeneidad de varianzas.\n")
  
}
## Conclusión: Los residuos no presentan homogeneidad de varianzas.

Interpretación

La prueba de Levene presentó un F = 15.718 y un p-valor = 3.636 × 10⁻¹⁴. Debido a que el p-valor es menor que 0.05, se rechaza la hipótesis nula de igualdad de varianzas. Por lo tanto, los residuos no presentan homogeneidad de varianzas, indicando que el supuesto de homocedasticidad del modelo ANOVA no se cumple.

10. PRUEBA DE COMPARACIONES MÚLTIPLES DE TUKEY

Debido a que el análisis de varianza (ANOVA) evidenció diferencias estadísticamente significativas entre los procesos, se aplicó la prueba de comparaciones múltiples de Tukey (HSD) para identificar cuáles pares de procesos presentan diferencias significativas.

p_anova <- summary(ANOVA)[[1]]$`Pr(>F)`[1]

if(p_anova < 0.05){
  
  cat("El ANOVA fue significativo (p < 0.05).\n")
  cat("Se realiza la prueba de comparaciones múltiples de Tukey.\n\n")
  
  Tukey <- TukeyHSD(ANOVA)
  
  print(Tukey)
  
  plot(Tukey)
  
}else{
  
  cat("El ANOVA no fue significativo (p ≥ 0.05).\n")
  cat("No se realiza la prueba de Tukey.\n")
  
}
## El ANOVA fue significativo (p < 0.05).
## Se realiza la prueba de comparaciones múltiples de Tukey.
## 
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Resultado ~ Proceso, data = datos_largo)
## 
## $Proceso
##                            diff        lwr         upr     p adj
## Proceso 3-Proceso 2  -1.9833333  -9.199266   5.2325995 0.9825298
## Proceso 4-Proceso 2 -22.4958333 -29.711766 -15.2799005 0.0000000
## Proceso 5-Proceso 2  -8.4083333 -15.624266  -1.1924005 0.0113084
## Proceso 6-Proceso 2  16.1583333   8.942401  23.3742662 0.0000000
## Proceso 7-Proceso 2 -19.6791667 -26.895099 -12.4632338 0.0000000
## Proceso 9-Proceso 2   0.8958333  -6.320099   8.1117662 0.9997903
## Proceso 4-Proceso 3 -20.5125000 -27.728433 -13.2965672 0.0000000
## Proceso 5-Proceso 3  -6.4250000 -13.640933   0.7909328 0.1158341
## Proceso 6-Proceso 3  18.1416667  10.925734  25.3575995 0.0000000
## Proceso 7-Proceso 3 -17.6958333 -24.911766 -10.4799005 0.0000000
## Proceso 9-Proceso 3   2.8791667  -4.336766  10.0950995 0.8965423
## Proceso 5-Proceso 4  14.0875000   6.871567  21.3034328 0.0000006
## Proceso 6-Proceso 4  38.6541667  31.438234  45.8700995 0.0000000
## Proceso 7-Proceso 4   2.8166667  -4.399266  10.0325995 0.9059471
## Proceso 9-Proceso 4  23.3916667  16.175734  30.6075995 0.0000000
## Proceso 6-Proceso 5  24.5666667  17.350734  31.7825995 0.0000000
## Proceso 7-Proceso 5 -11.2708333 -18.486766  -4.0549005 0.0001303
## Proceso 9-Proceso 5   9.3041667   2.088234  16.5200995 0.0031702
## Proceso 7-Proceso 6 -35.8375000 -43.053433 -28.6215672 0.0000000
## Proceso 9-Proceso 6 -15.2625000 -22.478433  -8.0465672 0.0000001
## Proceso 9-Proceso 7  20.5750000  13.359067  27.7909328 0.0000000

Interpretación

La prueba de Tukey permitió identificar los pares de procesos que presentan diferencias estadísticamente significativas y aquellos que no presentan diferencias significativas (α = 0.05).

tabla_tukey <- data.frame(
  `Comparación` = c(
    "Proceso 4 vs Proceso 2",
    "Proceso 5 vs Proceso 2",
    "Proceso 6 vs Proceso 2",
    "Proceso 7 vs Proceso 2",
    "Proceso 4 vs Proceso 3",
    "Proceso 6 vs Proceso 3",
    "Proceso 7 vs Proceso 3",
    "Proceso 5 vs Proceso 4",
    "Proceso 6 vs Proceso 4",
    "Proceso 9 vs Proceso 4",
    "Proceso 6 vs Proceso 5",
    "Proceso 7 vs Proceso 5",
    "Proceso 9 vs Proceso 5",
    "Proceso 7 vs Proceso 6",
    "Proceso 9 vs Proceso 6",
    "Proceso 9 vs Proceso 7",
    "Proceso 3 vs Proceso 2",
    "Proceso 5 vs Proceso 3",
    "Proceso 9 vs Proceso 2",
    "Proceso 9 vs Proceso 3",
    "Proceso 7 vs Proceso 4"
  ),
  `Resultado` = c(
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Diferencia significativa",
    "Sin diferencia significativa",
    "Sin diferencia significativa",
    "Sin diferencia significativa",
    "Sin diferencia significativa",
    "Sin diferencia significativa"
  )
)

knitr::kable(
  tabla_tukey,
  row.names = FALSE,
  align = "c",
  caption = "Tabla 8. Resultados de la prueba de comparaciones múltiples de Tukey."
)
Tabla 8. Resultados de la prueba de comparaciones múltiples de Tukey.
Comparación Resultado
Proceso 4 vs Proceso 2 Diferencia significativa
Proceso 5 vs Proceso 2 Diferencia significativa
Proceso 6 vs Proceso 2 Diferencia significativa
Proceso 7 vs Proceso 2 Diferencia significativa
Proceso 4 vs Proceso 3 Diferencia significativa
Proceso 6 vs Proceso 3 Diferencia significativa
Proceso 7 vs Proceso 3 Diferencia significativa
Proceso 5 vs Proceso 4 Diferencia significativa
Proceso 6 vs Proceso 4 Diferencia significativa
Proceso 9 vs Proceso 4 Diferencia significativa
Proceso 6 vs Proceso 5 Diferencia significativa
Proceso 7 vs Proceso 5 Diferencia significativa
Proceso 9 vs Proceso 5 Diferencia significativa
Proceso 7 vs Proceso 6 Diferencia significativa
Proceso 9 vs Proceso 6 Diferencia significativa
Proceso 9 vs Proceso 7 Diferencia significativa
Proceso 3 vs Proceso 2 Sin diferencia significativa
Proceso 5 vs Proceso 3 Sin diferencia significativa
Proceso 9 vs Proceso 2 Sin diferencia significativa
Proceso 9 vs Proceso 3 Sin diferencia significativa
Proceso 7 vs Proceso 4 Sin diferencia significativa

CONCLUSIONES PUNTO 4 Y 5

  1. El análisis de varianza (ANOVA) evidenció diferencias estadísticamente significativas entre los procesos evaluados (p < 0.05). La prueba de comparaciones múltiples de Tukey permitió identificar los pares de procesos que presentan diferencias significativas en sus medias, confirmando que no todos los procesos generan resultados equivalentes.

  2. La evaluación de valores atípicos realizada únicamente para el Proceso 1, mediante la prueba de Grubbs y el diagrama de caja y bigotes, indicó que no existen valores atípicos estadísticamente significativos, por lo que los datos de este proceso pueden considerarse consistentes para el análisis.

  3. La verificación de los supuestos del modelo ANOVA mostró que los residuos no presentan distribución normal según la prueba de Shapiro-Wilk y los métodos gráficos (Q-Q Plot e histograma). Asimismo, la prueba de Levene evidenció que no existe homogeneidad de varianzas entre los procesos, indicando que los supuestos clásicos del ANOVA no se cumplen completamente para los datos analizados.