Taller final de técnica de válidación y simulación

1. Una barra de longitud x1 será unida mediante soldadura a otra de longitud x2. Si x1 sigue una distribución normal con media de 30 cm y varianza de 0.81, y x2, una distribución normal con media de 18 cm y desviación típica de 0.3, simule la soldadura de 500 barras, tome en cuenta que las especificaciones de diseño son de 50 ± 5 cm . y determine el estimador de la probabilidad de que una barra esté fuera de especificaciones. También calcule los coeficientes de capacidad Cp y Cpk de este proceso. ¾Considera que está bajo control?

Indice de capacidad Cp

Muestra qué tan capaz es un proceso para cumplir con las medidas o tolerancias establecidas, comparando la variación del proceso con los límites de diseño.

Indice de capacidad Cpk

Llega a hacer lo mismo, pero tambien considera si el proceso está bien centrado respecto al valor objetivo.

set.seed(2804)

n <- 500

# parámetros
m_x1 <- 30
var_x1 <- 0.81
de_x1 <- sqrt(var_x1)
m_x2 <- 18
de_x2 <- 0.3

# simular
x1 <- rnorm(n, mean = m_x1, sd = de_x1)
x2 <- rnorm(n, mean = m_x2, sd = de_x2)
total <- x1 + x2

# especificaciones
Li <- 45
Ls <- 55

# estimadores
probabilidad_fuera <- mean(total < Li | total > Ls)
promedio_total <- mean(total)
desviacion_total <- sd(total)   # muestral
barras_abajo <- sum(total < Li)
barras_encima <- sum(total > Ls)

# índices de capacidad
Cp <- (Ls - Li) / (6 * desviacion_total)
Cpk <- min((Ls - promedio_total) / (3 * desviacion_total), (promedio_total - Li) / (3 * desviacion_total))

# mostrar resultados
cat("n =", n, "\n")
## n = 500
cat("Media del proceso =", round(promedio_total, 4), "cm\n")
## Media del proceso = 48.059 cm
cat("Desviacion estandar muestral =", round(desviacion_total, 4), "cm\n")
## Desviacion estandar muestral = 0.9322 cm
cat("Conteo de  < Limite inferior =", barras_abajo, ", > Limite superior =", barras_encima, "\n")
## Conteo de  < Limite inferior = 0 , > Limite superior = 0
cat("Cantidad de probabilidad fuera de especificaciones p̂ =", round(probabilidad_fuera, 4), "\n")
## Cantidad de probabilidad fuera de especificaciones p̂ = 0
cat("Cp =", round(Cp, 4), "\n")
## Cp = 1.7879
cat("Cpk =", round(Cpk, 4), "\n")
## Cpk = 1.0939
# histograma
hist(total, breaks = 30, main = "Histograma de longitudes unidas (x1+x2)",
     xlab = "Longitud (cm)")
abline(v = c(Li, Ls), lty = 2)

Conclucion

El proceso para unir las barras presenta una media de 48 cm aproximadamente y una desviación estándar cercana a 0.93 cm, lo que indica poca variabilidad. Ninguna barra simulada quedó fuera de las especificaciones de 45 a 55 cm, por lo tanto, la probabilidad estimada de estar fuera de los límites es prácticamente 0. Los índices de capacidad obtenidos (Cp ≈ 1.79 y Cpk ≈ 1.09) muestran que el proceso es capaz y está bajo control estadístico, aunque ligeramente descentrado respecto al valor objetivo (50 cm).

2.Cada 20 minutos llegan piezas a una estación de reproceso. El número de defectos que una pieza puede tener com o máximo es 3. Se sabe que estos defectos siguen una distribución Binomial con media 2.4. El tiempo para realizar las reparaciones correspondientes se distribuye exponencial con λ = 0,2 piezas por minuto por cada defecto que tenga la pieza. Determine, ¾cuánto tiempo tomará procesar 200 piezas? Use 10 réplicas.

set.seed(2804)

# parámetros del problema
n_piezas <- 200         
repeticiones  <- 10         
t_llegada <- 20        
# Binomial(3, p) con media 2.4 => p = 2.4/3 = 0.8
binom_n <- 3
binom_p <- 0.8
# Exponencial por defecto: rate = 0.2 (minutos^-1) = media = 1/0.2 = 5 minutos
lambda_def <- 0.2

# función que simula una réplica y devuelve el tiempo de finalización 
simular_repeticion <- function(n_piezas, t_llegada, binom_n, binom_p, lambda_def) {
  # generar número de defectos por pieza 
  k_defectos <- rbinom(n_piezas, size = binom_n, prob = binom_p)
  # generar tiempos de servicio
  tiempos_servicio <- numeric(n_piezas)
  for (i in seq_len(n_piezas)) {
    k <- k_defectos[i]
    if (k > 0) {
      tiempos_servicio[i] <- sum(rexp(k, rate = lambda_def))
    } else {
      tiempos_servicio[i] <- 0
    }
  }
  # instantes de llegada
  t_llegadas <- (0:(n_piezas-1)) * t_llegada  # primera llegada en t=0
  t_inicio <- numeric(n_piezas)
  t_fin    <- numeric(n_piezas)
  for (i in seq_len(n_piezas)) {
    if (i == 1) {
      t_inicio[i] <- t_llegadas[i]
    } else {
      t_inicio[i] <- max(t_llegadas[i], t_fin[i-1])
    }
    t_fin[i] <- t_inicio[i] + tiempos_servicio[i]
  }
  # devolver el tiempo en que se termina la última pieza
  list(
    tiempo_fin_ultimo = t_fin[n_piezas],
    tiempos_servicio = tiempos_servicio,
    t_llegadas = t_llegadas,
    t_inicio = t_inicio,
    t_fin = t_fin,
    k_defectos = k_defectos
  )
}

# correr Numero repeticiones
resultados <- vector("list", repeticiones)
tiempos_final <- numeric(repeticiones)

for (r in seq_len(repeticiones)) {
  res <- simular_repeticion(n_piezas, t_llegada, binom_n, binom_p, lambda_def)
  resultados[[r]] <- res
  tiempos_final[r] <- res$tiempo_fin_ultimo
}

# mostrar resumen
cat("Tiempo de finalización por repeticion:\n")
## Tiempo de finalización por repeticion:
print(round(tiempos_final, 2))
##  [1] 3986.76 3991.87 3991.12 3999.34 4005.86 3995.92 3999.06 3984.76 3982.16
## [10] 3990.91
cat("\nResumen:\n")
## 
## Resumen:
cat("Media:", round(mean(tiempos_final), 2), "\n")
## Media: 3992.78
cat("Desviación estándar:", round(sd(tiempos_final), 2), "\n")
## Desviación estándar: 7.33
cat("Mínimo:", round(min(tiempos_final), 2), 
    "  Máximo:", round(max(tiempos_final), 2), "\n")
## Mínimo: 3982.16   Máximo: 4005.86
Conclucion

Simulando el proceso de reproceso de 200 piezas, podemos observar que el tiempo total para completar todas las reparaciones está alrededor de 3990 minutos, con pequeñas variaciones entre las 10 réplicas o repeticiones. Esto nos dice que el sistema trabaja de forma estable: las piezas llegan cada 20 minutos y el tiempo promedio de reparación (unos 12 minutos por pieza) permite que el proceso avance sin acumular grandes filas. Entonces podemos decir que, el proceso se comporta de manera eficiente y bajo control, completando las 200 piezas en el tiempo esperado.

3. Un camión de reparto tarda 30 ± 10 minutos en ser cargado, 20 ± 5 minutos en ser descargado, y 40 minutos con distribución exponencial en trasladarse, ya sea de su base al lugar de entrega, o del lugar de entrega a su base.

A). Simule el sistema por 10 horas y realice 5 réplicas
B). Calcule un intervalo de confianza para el número de viajes que se pueden hacer en un día.
C). Sólo hay espacio para cargar un camión a la vez. Si la em presa necesita realizar al menos 10 entregas por día, ¿qué recom endaciones daría para lograrlo? Justifique su respuesta y establezca sus supuestos.
set.seed(2804)

# parámetros
m_carga <- 30    
de_carga <- 10
m_descarga <- 20
de_descarga <- 5
lambda_viaje <- 1/40  

simulacion_dia <- function(tiempo_total = 600) { # 10 horas = 600 min
  t <- 0
  viajes <- 0
  while (TRUE) {
    carga <- rnorm(1, mean = m_carga, sd = de_carga)
    carga <- max(0.1, carga)            
    viaje1 <- rexp(1, rate = lambda_viaje)
    descarga <- rnorm(1, mean = m_descarga, sd = de_descarga)
    descarga <- max(0.1, descarga)     
    viaje2 <- rexp(1, rate = lambda_viaje)
    tiempo_viaje <- carga + viaje1 + descarga + viaje2
    if (t + tiempo_viaje > tiempo_total) break
    t <- t + tiempo_viaje
    viajes <- viajes + 1
  }
  return(viajes)
}

# a) Simular 10 horas y 5 réplicas
replicas <- replicate(5, simulacion_dia(600))
print(replicas)
## [1] 4 3 4 4 3
# b) Para intervalo de confianza
set.seed(2804)
n_simulaciones <- 10000
simulaciones <- replicate(n_simulaciones, simulacion_dia(600))
media_simulaciones <- mean(simulaciones)
de_simulaciones <- sd(simulaciones)
error_est <- de_simulaciones / sqrt(n_simulaciones)
ic95_media <- c(media_simulaciones - 1.96*error_est, media_simulaciones + 1.96*error_est)

# también intervalo percentil para el número de viajes por día
ic_percentil <- quantile(simulaciones, probs = c(0.025, 0.975))

cat("Media estimada (10h):", media_simulaciones, "\n")
## Media estimada (10h): 4.2359
cat("Desviación estándar:", de_simulaciones, "\n")
## Desviación estándar: 0.977009
cat("IC 95% para la media:", ic95_media, "\n")
## IC 95% para la media: 4.216751 4.255049
cat("IC 95% percentil (número de viajes):", ic_percentil, "\n")
## IC 95% percentil (número de viajes): 2 6
Conclucion

En promedio, el camión puede llegar hacer alrededor de 4 viajes en una jornada de 10 horas, aunque el número puede variar un poco según los tiempos de carga, descarga y desplazamiento. El intervalo de confianza muestra que normalmente se logran entre 2 y 6 viajes por día, ya que el desempeño del camión es bastante constante dentro de ese rango.