Punto 1: Simulación Normal (sin dplyr)

set.seed(123)
n <- 20       # número de clientes por muestra
reps <- 30    # número de réplicas
muestras_normales <- list()
media_normal <- numeric(reps)
for (i in 1:reps) {
  muestra <- rnorm(n, mean = 15, sd = 5)
  muestras_normales[[i]] <- muestra
  media_normal[i] <- mean(muestra)
}

Crear data frame

df_normal <- data.frame(
  Replica = rep(1:reps, each = n),
  Valor = unlist(muestras_normales)
)

Mostrar las primeras filas como ejemplo

promedios <- tapply(df_normal$Valor, df_normal$Replica, mean)
df_normal$Promedio <- rep(promedios, each = n)
head(df_normal, 10)
##    Replica     Valor Promedio
## 1        1 12.197622 15.70812
## 2        1 13.849113 15.70812
## 3        1 22.793542 15.70812
## 4        1 15.352542 15.70812
## 5        1 15.646439 15.70812
## 6        1 23.575325 15.70812
## 7        1 17.304581 15.70812
## 8        1  8.674694 15.70812
## 9        1 11.565736 15.70812
## 10       1 12.771690 15.70812

Punto 2: Simulación Exponencial (sin dplyr)

set.seed(123)
n <- 20       # número de clientes por muestra
reps <- 30    # número de réplicas
media <- 3.5  # media de la distribución
lambda <- 1 / media  # parámetro de tasa (λ = 1/media)

Crear estructuras

muestras_exp <- list()
media_exp <- numeric(reps)
for (i in 1:reps) {
  muestra <- rexp(n, rate = lambda)   # generar muestra de 20 valores
  muestras_exp[[i]] <- muestra        # guardar muestra
  media_exp[i] <- mean(muestra)       # calcular promedio de la muestra
}

Crear data frame con todos los valores simulados

df_exp <- data.frame(
  Replica = rep(1:reps, each = n),
  Valor = unlist(muestras_exp)
)

Calcular el promedio de cada réplica

promedios_exp <- tapply(df_exp$Valor, df_exp$Replica, mean)
df_exp$Promedio <- rep(promedios_exp, each = n)

Mostrar las primeras filas como ejemplo

head(df_exp, 10)
##    Replica     Valor Promedio
## 1        1 2.9521004 2.839104
## 2        1 2.0181359 2.839104
## 3        1 4.6516920 2.839104
## 4        1 0.1105208 2.839104
## 5        1 0.1967384 2.839104
## 6        1 1.1077543 2.839104
## 7        1 1.0997955 2.839104
## 8        1 0.5084338 2.839104
## 9        1 9.5418276 2.839104
## 10       1 0.1020371 2.839104

Punto 3: Intervalo de confianza del 95%

IC <- function(x) {
  m <- mean(x)
  s <- sd(x)
  n <- length(x)
  error <- qt(0.975, df = n - 1) * s / sqrt(n)
  c(Limite_Inferior = m - error,
    Media_Muestral = m,
    Limite_Superior = m + error)
}
IC_normal <- IC(media_normal)
IC_exponencial <- IC(media_exp)

Mostrar resultados

IC_normal
## Limite_Inferior  Media_Muestral Limite_Superior 
##        14.74789        15.10888        15.46986
IC_exponencial
## Limite_Inferior  Media_Muestral Limite_Superior 
##        3.267943        3.486647        3.705350

Paso 4: Tabla resumen de resultados

tabla_resultados <- data.frame(
  Distribucion = c("Normal", "Exponencial"),
  Media_Muestral = c(mean(media_normal), mean(media_exp)),
  Desviacion_Estandar = c(sd(media_normal), sd(media_exp)),
  IC_95_Inferior = c(IC_normal[1], IC_exponencial[1]),
  IC_95_Superior = c(IC_normal[3], IC_exponencial[3])
)
print(tabla_resultados)
##   Distribucion Media_Muestral Desviacion_Estandar IC_95_Inferior IC_95_Superior
## 1       Normal      15.108877           0.9667275      14.747895       15.46986
## 2  Exponencial       3.486647           0.5856983       3.267943        3.70535

Análisis e interpretación (concepto):

En la simulación de la distribución normal, los tiempos de atención se agrupan cerca de 15 minutos, con poca dispersión. El intervalo de confianza del 95% resultó más estrecho, lo que refleja una estimación más precisa de la media poblacional.

En la simulación de la distribución exponencial, los tiempos entre llegadas presentan mayor variabilidad y una ligera asimetría hacia valores altos. Por ello, su intervalo de confianza es más amplio.

Estas diferencias son coherentes con la naturaleza de ambas distribuciones: la normal es simétrica y la exponencial es asimétrica a la derecha.

Punto 5 – Validación del tipo de distribución (Stat:Fit)

En este punto se busca determinar qué tipo de distribución siguen las medias de las réplicas obtenidas en los experimentos de los puntos anteriores. Para ello, se utiliza en RStudio una prueba equivalente al módulo Stat:Fit de Promodel: la prueba de normalidad de Shapiro–Wilk, complementada con el análisis visual mediante histogramas.

Pruebas de normalidad sobre las medias de las réplicas

resultado_normal <- shapiro.test(media_normal)
resultado_exponencial <- shapiro.test(media_exp)

Resultados completos

resultado_normal
## 
##  Shapiro-Wilk normality test
## 
## data:  media_normal
## W = 0.98049, p-value = 0.8383
resultado_exponencial
## 
##  Shapiro-Wilk normality test
## 
## data:  media_exp
## W = 0.97684, p-value = 0.7367

Mostrar solo los p-valores

cat("P-valor (Distribución Normal):", resultado_normal$p.value, "\n")
## P-valor (Distribución Normal): 0.8383138
cat("P-valor (Distribución Exponencial):", resultado_exponencial$p.value, "\n")
## P-valor (Distribución Exponencial): 0.7367387

Graficar histogramas con curva normal superpuesta

par(mfrow = c(1,2))  # dividir ventana de gráficos en 2 paneles
hist(media_normal,
     main = "Medias - Distribución Normal",
     xlab = "Promedio de cada réplica",
     col = "skyblue", freq = FALSE)
curve(dnorm(x, mean = mean(media_normal), sd = sd(media_normal)),
      add = TRUE, col = "red", lwd = 2)

hist(media_exp,
     main = "Medias - Distribución Exponencial",
     xlab = "Promedio de cada réplica",
     col = "lightgreen", freq = FALSE)
curve(dnorm(x, mean = mean(media_exp), sd = sd(media_exp)),
      add = TRUE, col = "red", lwd = 2) 

Conclusión

En esta actividad se realizaron simulaciones de variables aleatorias bajo dos tipos de distribuciones: una distribución normal para los tiempos de atención de clientes y una distribución exponencial para los tiempos entre llegadas. Cada simulación se replicó 30 veces, registrando el promedio de cada réplica con el fin de estimar los intervalos de confianza del 95% y analizar el comportamiento de las medias obtenidas.

Los resultados mostraron que, en la distribución normal, los valores simulados se concentraron alrededor de la media teórica (15 minutos), con una dispersión relativamente baja. El intervalo de confianza obtenido fue estrecho, lo que indica mayor precisión y estabilidad en la estimación de la media poblacional.

Por otro lado, en la distribución exponencial, los tiempos entre llegadas presentaron mayor variabilidad y una asimetría hacia la derecha, típica de este tipo de distribución. El intervalo de confianza fue más amplio, reflejando mayor incertidumbre en la estimación de la media.

Al analizar las medias de las réplicas mediante la prueba de Shapiro–Wilk y los histogramas (equivalente al módulo Stat:Fit de Promodel), se observó que ambas siguen una distribución aproximadamente normal, con p-valores mayores a 0.05. Esto confirma el cumplimiento del Teorema Central del Límite (TCL), que establece que, sin importar la forma de la distribución original, la distribución de las medias muestrales tiende a ser normal cuando el tamaño de las muestras es suficiente.

En conclusión, las simulaciones permitieron comprobar experimentalmente el comportamiento esperado de las distribuciones de probabilidad: la normal como modelo simétrico y estable, y la exponencial como modelo asimétrico con mayor variabilidad. Sin embargo, las medias muestrales de ambas distribuciones convergen hacia la normalidad, demostrando la validez estadística del TCL y la importancia de los intervalos de confianza en la estimación de parámetros poblacionales.