Generamos una población de \(100,000\) microtransacciones modeladas bajo una distribución exponencial (\(\lambda = 1\)), la cual refleja una clara asimetría hacia la derecha (no normal). Posterior a esto, simulamos \(10,000\) medias muestrales para tamaños de muestra \(n \in \{5, 30, 50\}\).
set.seed(123)
# 1. Generación de la población original
poblacion <- rexp(100000, rate = 1)
# 2. Función para simular medias muestrales
simular_medias <- function(n, rep = 10000) {
replicate(rep, mean(sample(poblacion, size = n, replace = TRUE)))
}
# 3. Simulación para distintos tamaños de muestra
medias_5 <- simular_medias(5)
medias_30 <- simular_medias(30)
medias_50 <- simular_medias(50)
Analizamos la evolución de la forma funcional de los promedios al compararlos con la curva normal teórica (línea roja) ajustada a la media y desviación estándar de cada muestra.
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
# Población Original
hist(poblacion, probability = TRUE, breaks = 40,
main = "1. Población Original (Exponencial)",
xlab = "Monto de transacción", ylab = "Densidad",
col = "#E0E0E0", border = "white")
lines(density(poblacion), col = "darkgray", lwd = 2)
# n = 5
hist(medias_5, probability = TRUE, breaks = 40,
main = "2. Medias Muestrales (n = 5)",
xlab = "Promedio muestral", ylab = "Densidad",
col = "#A8DADC", border = "white")
curve(dnorm(x, mean = mean(medias_5), sd = sd(medias_5)),
add = TRUE, col = "#E63946", lwd = 2)
# n = 30
hist(medias_30, probability = TRUE, breaks = 40,
main = "3. Medias Muestrales (n = 30)",
xlab = "Promedio muestral", ylab = "Densidad",
col = "#A8E6CF", border = "white")
curve(dnorm(x, mean = mean(medias_30), sd = sd(medias_30)),
add = TRUE, col = "#E63946", lwd = 2)
# n = 50
hist(medias_50, probability = TRUE, breaks = 40,
main = "4. Medias Muestrales (n = 50)",
xlab = "Promedio muestral", ylab = "Densidad",
col = "#FFD3B6", border = "white")
curve(dnorm(x, mean = mean(medias_50), sd = sd(medias_50)),
add = TRUE, col = "#E63946", lwd = 2)
par(mfrow = c(1, 1)) # Restablecer panel gráfico
A continuación se evalúa la reducción del Error Estándar (\(\sigma / \sqrt{n}\)) y la convergencia de los momentos centrales a medida que aumenta \(n\):
library(knitr)
# 1. Crear el data frame con los datos calculados
tabla_resumen <- data.frame(
Configuracion = c("Población Base", "Muestra n = 5", "Muestra n = 30", "Muestra n = 50"),
Media_Observada = round(c(mean(poblacion), mean(medias_5), mean(medias_30), mean(medias_50)), 3),
Desviacion_Estandar = round(c(sd(poblacion), sd(medias_5), sd(medias_30), sd(medias_50)), 3),
Comportamiento_Forma = c(
"Sesgada a la derecha (Asimétrica)",
"Sesgo moderado persistente",
"Aproximación simétrica (Normal)",
"Ajuste Gaussiano de alta precisión"
)
)
# 2. Renderizar la tabla en formato HTML usando kable
kable(
tabla_resumen,
col.names = c("Configuración", "Media Observada", "Desviación Estándar (σ)", "Comportamiento de la Forma"),
align = c("l", "c", "c", "l"),
caption = "Tabla 1: Comparativa de momentos muestrales según el tamaño de n"
)
| Configuración | Media Observada | Desviación Estándar (σ) | Comportamiento de la Forma |
|---|---|---|---|
| Población Base | 0.997 | 0.995 | Sesgada a la derecha (Asimétrica) |
| Muestra n = 5 | 1.001 | 0.452 | Sesgo moderado persistente |
| Muestra n = 30 | 0.997 | 0.181 | Aproximación simétrica (Normal) |
| Muestra n = 50 | 0.997 | 0.143 | Ajuste Gaussiano de alta precisión |
Respuesta a la pregunta planteada:
Sí, es totalmente razonable y estadísticamente válido suponer que la distribución de las medias muestrales se aproxima a una distribución normal, aun cuando la población original de microtransacciones no sea normal.