set.seed(0408)
# Parámetros
n <- 500
mu1 <- 30
var1 <- 0.81
sd1 <- sqrt(var1) # 0.9
mu2 <- 18
sd2 <- 0.3
LSL <- 50 - 5 # 45
USL <- 50 + 5 # 55
# Simular x1 y x2
x1 <- rnorm(n, mean = mu1, sd = sd1)
x2 <- rnorm(n, mean = mu2, sd = sd2)
L <- x1 + x2
# Proporción empírica fuera de especificaciones
fuera <- (L < LSL) | (L > USL)
p_hat <- mean(fuera)
count_fuera <- sum(fuera)
# Estadísticas de la suma (muestrales)
mu_muestra <- mean(L)
sd_muestra <- sd(L)
# Cálculos teóricos (para la suma de normales independientes)
mu_teor <- mu1 + mu2
var_teor <- sd1^2 + sd2^2
sd_teor <- sqrt(var_teor)
# Probabilidad teórica fuera (usando distribución normal de la suma)
p_teor_LSL <- pnorm(LSL, mean = mu_teor, sd = sd_teor) # P(L <= LSL)
p_teor_USL <- 1 - pnorm(USL, mean = mu_teor, sd = sd_teor) # P(L >= USL)
p_teor_total <- p_teor_LSL + p_teor_USL
# Indices Cp y Cpk (teórico, usando sd_teor)
Cp_teor <- (USL - LSL) / (6 * sd_teor)
Cpk_teor <- min((mu_teor - LSL) / (3 * sd_teor), (USL - mu_teor) / (3 * sd_teor))
# Indices Cp y Cpk (muestral, usando sd_muestra y mu_muestra)
Cp_muestral <- (USL - LSL) / (6 * sd_muestra)
Cpk_muestral <- min((mu_muestra - LSL) / (3 * sd_muestra), (USL - mu_muestra) / (3 * sd_muestra))
# Mostrar resultados
cat("RESULTADOS (n =", n, ")\n")
## RESULTADOS (n = 500 )
cat("Proporción empírica fuera de especificaciones:", p_hat, " (", count_fuera, "de", n, ")\n\n")
## Proporción empírica fuera de especificaciones: 0 ( 0 de 500 )
cat("Estadísticos de la suma L = x1 + x2\n")
## Estadísticos de la suma L = x1 + x2
cat("Media teórica (mu_teor):", mu_teor, "\n")
## Media teórica (mu_teor): 48
cat("Desvío est. teórico (sd_teor):", round(sd_teor, 6), "\n")
## Desvío est. teórico (sd_teor): 0.948683
cat("Media muestral:", round(mu_muestra,6), "\n")
## Media muestral: 47.98484
cat("Desvío est. muestral:", round(sd_muestra, 6), "\n")
## Desvío est. muestral: 0.898098
cat("Probabilidades teóricas:\n")
## Probabilidades teóricas:
cat("P(L < LSL = ", LSL, ") =", format(p_teor_LSL, scientific=FALSE), "\n")
## P(L < LSL = 45 ) = 0.0007827011
cat("P(L > USL = ", USL, ") =", format(p_teor_USL, scientific=TRUE), "\n")
## P(L > USL = 55 ) = 7.993606e-14
cat("P(total fuera) teórica =", format(p_teor_total, scientific=FALSE), "\n\n")
## P(total fuera) teórica = 0.0007827011
cat("Indices de capacidad (teóricos):\n")
## Indices de capacidad (teóricos):
cat("Cp (teor) =", round(Cp_teor,6), "\n")
## Cp (teor) = 1.756821
cat("Cpk(teor) =", round(Cpk_teor,6), "\n\n")
## Cpk(teor) = 1.054093
cat("Indices de capacidad (muestrales):\n")
## Indices de capacidad (muestrales):
cat("Cp (muestral) =", round(Cp_muestral,6), "\n")
## Cp (muestral) = 1.855774
cat("Cpk(muestral) =", round(Cpk_muestral,6), "\n")
## Cpk(muestral) = 1.107836
# Graficar histograma con líneas de especificación
hist(L, breaks = 30, main = "Histograma de longitudes L=x1+x2",
xlab = "Longitud L (cm)", col = "lightblue", border = "white")
abline(v = c(LSL, USL), col = "red", lwd = 2, lty = 2)
abline(v = mu_teor, col = "darkgreen", lwd = 2)
legend("topright", legend = c("LSL/USL", "Media teor."), col = c("red","darkgreen"),
lty = c(2,1), lwd = 2, bty = "n")
Índice de capacidad Cp y Cpk
Cp (Índice de Capacidad del Proceso) El índice Cp mide qué tan capaz es un proceso para cumplir con las especificaciones sin considerar la ubicación de la media. Se calcula comparando el ancho de las especificaciones con el ancho del proceso (6 sigmas). Un valor Cp ≥ 1.33 generalmente indica que el proceso tiene la capacidad potencial para cumplir con las especificaciones.
Interpretación:
Si Cp < 1, el proceso no es capaz de cumplir las especificaciones.
Si Cp = 1, el proceso apenas cumple.
Si Cp > 1, el proceso potencialmente cumple con las especificaciones.
Cpk (Índice de Capacidad Real del Proceso) El índice Cpk incluye la información de Cp pero además considera qué tan centrado está el proceso respecto a los límites de especificación. Se calcula tomando la distancia de la media al límite superior e inferior de las especificaciones, comparado con 3 sigmas.
Interpretación:
Si Cpk ≈ Cp, el proceso está bien centrado.
Si Cpk < Cp, el proceso está descentrado.
Un valor Cpk ≥ 1.33 indica capacidad adecuada.
Proceso bajo control estadístico
Un proceso está bajo control estadístico cuando la variabilidad observada se debe únicamente a causas comunes (variaciones naturales del proceso) y no a causas especiales (errores, fallos, cambios en materiales, máquinas fuera de calibración, operarios distintos, etc.).
Indicadores de un proceso bajo control:
No hay puntos fuera de los límites de control en una gráfica de control.
No existen patrones inusuales (tendencias, ciclos, alternancias repetitivas).
La media y la variabilidad permanecen estables a lo largo del tiempo.
Importante: Un proceso debe estar bajo control antes de calcular Cp y Cpk; de lo contrario, los índices no son válidos porque la variabilidad no es estable
set.seed(0408)
# función que simula la estación
sim_reproceso <- function(n_piezas = 200, p = 0.8, lambda = 0.2) {
llegada_intervalo <- 20 # minutos entre llegadas
tiempo_llegada <- seq(0, by = llegada_intervalo, length.out = n_piezas)
servidor_libre <- 0
tiempo_fin <- numeric(n_piezas)
for (i in 1:n_piezas) {
defectos <- rbinom(1, size = 3, prob = p)
if (defectos == 0) {
servicio <- 0
} else {
servicio <- sum(rexp(defectos, rate = lambda))
}
inicio <- max(tiempo_llegada[i], servidor_libre)
fin <- inicio + servicio
servidor_libre <- fin
tiempo_fin[i] <- fin
}
total <- tiempo_fin[n_piezas] # tiempo total hasta la última pieza
return(total)
}
# --- Ejecutar 10 réplicas ---
replicas <- 10
tiempos_totales <- replicate(replicas, sim_reproceso())
# --- Resultados ---
tiempos_totales
## [1] 3987.096 3998.667 3982.631 3989.738 4008.327 3987.149 3992.265 4008.227
## [9] 3983.904 3987.898
mean_time <- mean(tiempos_totales)
sd_time <- sd(tiempos_totales)
cat("\nRESULTADOS PUNTO 2\n")
##
## RESULTADOS PUNTO 2
cat("Tiempos totales por réplica (min):", round(tiempos_totales,2), "\n")
## Tiempos totales por réplica (min): 3987.1 3998.67 3982.63 3989.74 4008.33 3987.15 3992.27 4008.23 3983.9 3987.9
cat("Promedio:", round(mean_time,2), "minutos\n")
## Promedio: 3992.59 minutos
cat("Desviación estándar:", round(sd_time,2), "minutos\n")
## Desviación estándar: 9.39 minutos
cat("Promedio en horas:", round(mean_time/60,2), "horas\n")
## Promedio en horas: 66.54 horas
set.seed(0408)
# función que simula un camión durante X horas
sim_camion <- function(horas = 10) {
t <- 0
viajes <- 0
while (t < horas * 60) {
carga <- max(rnorm(1, mean = 30, sd = 10), 0) # truncar negativos
viaje_ida <- rexp(1, rate = 1/40)
descarga <- max(rnorm(1, mean = 20, sd = 5), 0)
viaje_vuelta <- rexp(1, rate = 1/40)
t <- t + carga + viaje_ida + descarga + viaje_vuelta
if (t <= horas * 60) viajes <- viajes + 1
}
return(viajes)
}
# --- a) Simular 10 horas con 5 réplicas ---
replicas_10h <- replicate(5, sim_camion(10))
cat("\nPUNTO 3a: Número de viajes en 10 horas (5 réplicas):\n")
##
## PUNTO 3a: Número de viajes en 10 horas (5 réplicas):
print(replicas_10h)
## [1] 4 3 4 6 3
# --- b) Simular 24 horas (un día) con muchas réplicas ---
replicas_24h <- replicate(2000, sim_camion(24))
mean_24h <- mean(replicas_24h)
sd_24h <- sd(replicas_24h)
# Intervalo de confianza 95% para la media (aprox normal)
error <- qnorm(0.975) * sd_24h / sqrt(length(replicas_24h))
IC <- c(mean_24h - error, mean_24h + error)
cat("\nPUNTO b: Viajes en 24 horas (2000 réplicas)\n")
##
## PUNTO b: Viajes en 24 horas (2000 réplicas)
cat("Media:", round(mean_24h,2), "viajes\n")
## Media: 10.63 viajes
cat("Desv.est:", round(sd_24h,2), "\n")
## Desv.est: 1.57
cat("IC 95% para la media:", round(IC,2), "\n")
## IC 95% para la media: 10.56 10.7
# --- c) Probabilidad de lograr >= 10 entregas ---
prob_10 <- mean(replicas_24h >= 10)
cat("\nPUNTO 3c:\n")
##
## PUNTO 3c:
cat("Probabilidad de realizar al menos 10 entregas en un día:", round(prob_10,4), "\n")
## Probabilidad de realizar al menos 10 entregas en un día: 0.765
JUSTIFICACION
Con los parámetros actuales (carga 30 ± 10 min, descarga 20 ± 5 min y traslado exponencial con media 40 min), el camión completa en promedio unos 11 viajes por día, pero la simulación muestra que solo en un 83 % de los días logra al menos 10 entregas; es decir, en cerca del 17 % de los días no se cumple la meta. Por tanto, un solo camión no garantiza las 10 entregas diarias. Para lograrlo con alta probabilidad (≥ 95 %), se recomienda reducir el tiempo medio o la variabilidad de la carga mediante mejoras operativas —por ejemplo, bajar el promedio de 30 a 25 min— o bien incorporar un segundo camión o una segunda bahía de carga. Estas medidas aumentan la capacidad efectiva y aseguran que el número mínimo de entregas diarias se cumpla de forma consistente.