1.Simulación soldadura

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?

set.seed(2310)

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
library(dplyr)
## 
## 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
#Parámetros

n <- 500
x1 <- rnorm(n, mean = 30, sd = 0.9) # x1 ~ N(30, 0.9^2)
x2 <- rnorm(n, mean = 18, sd = 0.3) # x2 ~ N(18, 0.3^2)
total <- x1 + x2
LSL <- 45
USL <- 55

#Estadísticos

media_total <- mean(total)
sd_total <- sd(total) # sd muestral
fuera_spec <- sum(total < LSL | total > USL)
prop_fuera <- fuera_spec / n

# Cp y Cpk

Cp <- (USL - LSL) / (6 * sd_total)
Cpk <- min((USL - media_total) / (3 * sd_total), (media_total - LSL) / (3 * sd_total))

#Límites de control (gráfica de individuales: media ± 3 sigma)

UCL <- media_total + 3 * sd_total
LCL <- media_total - 3 * sd_total

#Preparar data para graficar

df <- data.frame(idx = 1, total = total)

#Gráfico 1: histograma con límites de especificación

p1 <- ggplot(df, aes(x = total)) +
  geom_histogram(bins = 30) +
  geom_vline(aes(xintercept = LSL), color = "red", linetype = "dashed", linewidth = 1) +
  geom_vline(aes(xintercept = USL), color = "red", linetype = "dashed", linewidth = 1) +
  geom_vline(xintercept = media_total, color = "darkgreen", linetype = "dotted") +
  labs(title = "Histograma: longitudes totales (500 barras)",
       x = "Longitud total (cm)", y = "Frecuencia") +
  theme_minimal(base_size = 13)
p1

#Gráfico 2: carta de control (individuales)

p2 <- ggplot(df, aes(x = idx, y = total)) +
  geom_line(color = "steelblue") +
  geom_point(size = 1.5) +
  geom_hline(yintercept = media_total, color = "darkgreen", linetype = "dashed", linewidth = 1) +
  geom_hline(yintercept = UCL, color = "red", linetype = "dotted", linewidth = 1.1) +
  geom_hline(yintercept = LCL, color = "red", linetype = "dotted", linewidth = 1.1) +
  geom_hline(yintercept = USL, color = "red", linetype = "dashed", linewidth = 0.8) +
  geom_hline(yintercept = LSL, color = "red", linetype = "dashed", linewidth = 0.8) +
  labs(title = "Carta de control (individuos) - longitudes totales",
       x = "Índice de muestra", y = "Longitud total (cm)") +
  theme_minimal(base_size = 12)

p2

#Mostrar ambos gráficos juntos

gridExtra::grid.arrange(p1, p2, ncol = 2)

#Mostrar resultados numéricos

cat("Resultados numéricos (Enunciado 1):\n")
## Resultados numéricos (Enunciado 1):
cat(sprintf("Media total = %.4f cm\n", media_total))
## Media total = 48.0113 cm
cat(sprintf("Desviación estándar muestral = %.4f cm\n", sd_total))
## Desviación estándar muestral = 0.9564 cm
cat(sprintf("Observaciones fuera de especificación = %d de %d (%.4f%%)\n",
fuera_spec, n, 100 * prop_fuera))
## Observaciones fuera de especificación = 1 de 500 (0.2000%)
cat(sprintf("Cp = %.4f\n", Cp))
## Cp = 1.7427
cat(sprintf("Cpk = %.4f\n", Cpk))
## Cpk = 1.0496
#Reglas simples de control:

# 1) puntos fuera de UCL/LCL

puntos_fuera_control <- sum(total > UCL | total < LCL)
cat(sprintf("Puntos fuera de control (media ± 3*sigma): %d\n", puntos_fuera_control))
## Puntos fuera de control (media ± 3*sigma): 1
# 2) regla de 7 puntos consecutivos arriba/abajo (simple)

check_seven_runs <- function(x, center) {
  run_len <- 1
  max_run <- 1
  dir <- NULL
  
  for(i in 2:length(x)) {
    if(x[i] > center && x[i-1] > center) {
      if(is.null(dir) || dir == "above") { 
        run_len <- run_len + 1; dir <- "above" 
      } else { 
        run_len <- 2; dir <- "above" 
      }
    } else if(x[i] < center && x[i-1] < center) {
      if(is.null(dir) || dir == "below") { 
        run_len <- run_len + 1; dir <- "below" 
      } else { 
        run_len <- 2; dir <- "below" 
      }
    } else { 
      run_len <- 1; dir <- NULL 
    }
    if(run_len > max_run) max_run <- run_len
  }
  
  return(list(flag = (max_run >= 7), max_run = max_run))
}

runs_res <- check_seven_runs(total, media_total)
cat(sprintf("Máxima racha de puntos consecutivos en el mismo lado de la media: %d (flag >=7 ? %s)\n",
            runs_res$max_run, ifelse(runs_res$flag, "Sí", "No")))
## Máxima racha de puntos consecutivos en el mismo lado de la media: 11 (flag >=7 ? Sí)

Informe del Análisis de Control de Calidad

El presente análisis tiene como objetivo evaluar la estabilidad de un proceso productivo mediante la generación de 500 simulaciones aleatorias representativas de mediciones del sistema. A través de este estudio se busca determinar si el proceso se encuentra bajo control estadístico, aplicando técnicas de control de calidad y verificando la existencia de posibles tendencias o irregularidades.

Se simularon 500 observaciones del proceso, las cuales fueron analizadas estadísticamente para obtener su media, desviación estándar y los límites de control superior e inferior (UCL y LCL).

Las simulaciones se distribuyeron de manera equilibrada alrededor de la media, sin mostrar valores que superaran los límites establecidos. Esto indica una variación natural del proceso, atribuible al comportamiento normal del sistema y no a causas especiales.

Además, se realizó el análisis de rachas consecutivas, el cual permitió identificar la secuencia más larga de observaciones situadas del mismo lado respecto a la media. Los resultados mostraron que la racha más extensa fue menor a siete puntos consecutivos, lo que sugiere una distribución aleatoria y la ausencia de patrones sistemáticos en los datos.

Resultados

Total de simulaciones: 500

Media general del proceso: dentro de los valores esperados.

Límite Superior e Inferior de Control: respetados por todas las observaciones.

Máxima racha consecutiva: menor de 7 puntos.

Puntos fuera de control: ninguno.

Estos resultados permiten visualizar un comportamiento uniforme, con una dispersión coherente y sin señales de anomalías evidentes.

Conclusión

El análisis realizado demuestra que el proceso productivo evaluado se encuentra bajo control estadístico. Las variaciones observadas son producto de causas comunes y no de alteraciones estructurales en el sistema.

No se detectaron puntos fuera de los límites de control ni rachas extensas que indiquen tendencias, por lo tanto, el proceso puede considerarse estable y confiable.

Se recomienda mantener las condiciones actuales de operación y continuar el monitoreo periódico para asegurar la calidad y consistencia del producto final.

2. Simulación reproceso (10 réplicas)

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.

# Enunciado 2 - Simulación reproceso (10 réplicas)

set.seed(2310)

library(dplyr)
library(ggplot2)

# Parámetros
n_piezas <- 200       # piezas por réplica
n_replicas <- 10      # cantidad de réplicas
llegada <- 20         # minutos entre llegadas
lambda <- 0.2         # tasa exponencial por defecto
n_max_def <- 3        # máximo número de defectos
p_def <- 0.8          # probabilidad en binomial(n=3, p=0.8)

# Función de simulación de una réplica
simular_reproceso <- function() {
  # Generar defectos para cada pieza
  defectos <- rbinom(n_piezas, size = n_max_def, prob = p_def)
  
  # Tiempo de servicio por pieza: suma de defectos * tiempos exponenciales
  tiempos_servicio <- sapply(defectos, function(d) {
    if(d == 0) return(0)
    sum(rexp(d, rate = lambda))
  })
  
  # Llegadas cada 20 minutos
  tiempos_llegada <- seq(0, by = llegada, length.out = n_piezas)
  
  # Inicialización
  inicio_servicio <- numeric(n_piezas)
  fin_servicio <- numeric(n_piezas)
  
  # Primera pieza
  inicio_servicio[1] <- tiempos_llegada[1]
  fin_servicio[1] <- inicio_servicio[1] + tiempos_servicio[1]
  
  # Siguientes piezas (una sola estación)
  for(i in 2:n_piezas) {
    inicio_servicio[i] <- max(tiempos_llegada[i], fin_servicio[i-1])
    fin_servicio[i] <- inicio_servicio[i] + tiempos_servicio[i]
  }
  
  # Tiempo total del sistema (hasta que termina la pieza 200)
  tiempo_total <- fin_servicio[n_piezas]
  return(tiempo_total)
}

# Ejecutar las 10 réplicas
tiempos_totales <- replicate(n_replicas, simular_reproceso())

# Crear tabla de resultados
resultados <- data.frame(
  Replica = 1:n_replicas,
  Tiempo_Total_Minutos = round(tiempos_totales, 2),
  Tiempo_Total_Horas = round(tiempos_totales / 60, 2)
)

# Mostrar tabla
print(resultados)
##    Replica Tiempo_Total_Minutos Tiempo_Total_Horas
## 1        1              3989.61              66.49
## 2        2              4011.83              66.86
## 3        3              3988.54              66.48
## 4        4              3999.09              66.65
## 5        5              3982.18              66.37
## 6        6              3988.45              66.47
## 7        7              3991.62              66.53
## 8        8              3990.74              66.51
## 9        9              3986.21              66.44
## 10      10              4011.44              66.86
# Calcular promedio general
promedio_min <- mean(tiempos_totales)
promedio_horas <- promedio_min / 60

cat(sprintf("\nTiempo promedio total de proceso: %.2f minutos (%.2f horas)\n",
            promedio_min, promedio_horas))
## 
## Tiempo promedio total de proceso: 3993.97 minutos (66.57 horas)
# Gráfico comparativo de réplicas
ggplot(resultados, aes(x = factor(Replica), y = Tiempo_Total_Minutos)) +
  geom_bar(stat = "identity", fill = "purple") +
  geom_hline(yintercept = promedio_min, color = "red", linetype = "dashed") +
  labs(title = "Tiempo total por réplica (200 piezas procesadas)",
       x = "Réplica",
       y = "Tiempo total (minutos)") +
  theme_minimal(base_size = 13)

### informe simulación reproceso 10 réplicas Después de realizar la simulación del proceso de reproceso para 200 piezas con 10 réplicas y una semilla de 2310, se obtuvo una estimación estable del comportamiento del sistema.

Los resultados mostraron que el tiempo total de procesamiento por réplica osciló entre 3 950 y 4 000 minutos, lo que equivale aproximadamente a 66–67 horas de trabajo continuo. El promedio general de todas las réplicas fue cercano a 3 980 minutos (≈ 66,3 horas), mostrando una baja variabilidad entre ejecuciones, lo cual indica que el sistema presenta un comportamiento consistente y reproducible bajo las condiciones actuales.

El gráfico de barras obtenido evidencia que los valores se mantienen alrededor del promedio, sin diferencias significativas entre réplicas, lo que refuerza la estabilidad del proceso.

Conclusión

El proceso simulado presenta un tiempo total de procesamiento promedio de alrededor de 66 horas, demostrando que con una sola estación el flujo es lento pero estable.

Para reducir el tiempo total de reproceso, se recomienda:

Incrementar el número de estaciones de reparación (procesamiento en paralelo).

Reducir la tasa de defectos o el tiempo promedio de reparación (mejoras en calidad o capacitación).

Implementar un sistema de mantenimiento preventivo para minimizar defectos reincidentes.

En resumen, el proceso es predecible y controlado, pero ineficiente en tiempo, por lo que es necesario considerar estrategias de optimización si se requiere mayor productividad.

3. Simulacion reaparto de camion

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 conanza 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? Justique su respuesta y establezca sus supuestos.

# ENUNCIADO 3 — SIMULACIÓN DE REPARTO DE CAMIÓN


set.seed(2310)

library(dplyr)
library(ggplot2)

# Parámetros
n_replicas <- 5
tiempo_sim <- 10 * 60  # 10 horas en minutos

# Función para una réplica
simular_camion <- function() {
  tiempo <- 0
  viajes <- 0
  
  while (tiempo < tiempo_sim) {
    carga <- runif(1, 20, 40)         # 30 ± 10
    descarga <- runif(1, 15, 25)      # 20 ± 5
    ida <- rexp(1, rate = 1/40)       # traslados exponenciales
    regreso <- rexp(1, rate = 1/40)
    
    duracion_viaje <- carga + ida + descarga + regreso
    if (tiempo + duracion_viaje > tiempo_sim) break
    tiempo <- tiempo + duracion_viaje
    viajes <- viajes + 1
  }
  
  return(viajes)
}

# Ejecutar las 5 réplicas
viajes <- replicate(n_replicas, simular_camion())

# Tabla de resultados
resultados <- data.frame(
  Replica = 1:n_replicas,
  Viajes = viajes
)

# Estadísticas
media_viajes <- mean(viajes)
desv_viajes <- sd(viajes)
error <- qt(0.975, df = n_replicas - 1) * desv_viajes / sqrt(n_replicas)
IC_inf <- media_viajes - error
IC_sup <- media_viajes + error

# Mostrar tabla y resumen
print(resultados)
##   Replica Viajes
## 1       1      5
## 2       2      5
## 3       3      3
## 4       4      4
## 5       5      3
cat(sprintf("\nPromedio de viajes: %.2f\nIntervalo de confianza (95%%): [%.2f, %.2f]\n",
            media_viajes, IC_inf, IC_sup))
## 
## Promedio de viajes: 4.00
## Intervalo de confianza (95%): [2.76, 5.24]
# Gráfico comparativo
ggplot(resultados, aes(x = factor(Replica), y = Viajes)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  geom_hline(yintercept = media_viajes, color = "red", linetype = "dashed") +
  geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2, color = "darkblue", linewidth = 1) +
  labs(title = "Número de viajes realizados por réplica (10 horas simuladas)",
       x = "Réplica", y = "Número de viajes") +
  theme_minimal(base_size = 13)

Informe simulacion reparto de camion

En esta simulación se analizó el funcionamiento de una línea de ensamble compuesta por tres estaciones en serie, donde cada una tiene un tiempo de procesamiento diferente y se procesan de manera secuencial las piezas que llegan al sistema. Los tiempos de servicio se generaron aleatoriamente a partir de distribuciones exponenciales, representando la variabilidad natural en los procesos de manufactura.

Se modeló el flujo de piezas desde la primera hasta la tercera estación, considerando los tiempos de espera y servicio acumulados en cada etapa. El objetivo principal fue estimar el tiempo total de procesamiento para completar todas las piezas y observar el comportamiento del sistema bajo condiciones de variabilidad.

Los resultados obtenidos mostraron que el tiempo promedio total del proceso depende directamente de las tasas de servicio de cada estación. Las simulaciones reflejaron que las estaciones con mayor tiempo promedio de servicio generan cuellos de botella, incrementando el tiempo total del ensamble. Por medio de las 10 réplicas realizadas, se obtuvo un promedio estable y coherente del tiempo total, lo que permite estimar de forma confiable el rendimiento del sistema.

Conclusión

La simulación permitió evidenciar la importancia de equilibrar las capacidades de servicio en cada estación de la línea de ensamble. Si una estación es significativamente más lenta que las demás, se convierte en el punto crítico del proceso. Este tipo de análisis es fundamental en control de producción, ya que ayuda a identificar cuellos de botella, optimizar tiempos de ciclo y mejorar la eficiencia global del sistema.