El objetivo es simular dos conjuntos de datos, uno proveniente de una distribución Normal y otro de una Exponencial, para luego calcular y comparar los intervalos de confianza del 95% para la media poblacional utilizando R.
Se generan dos conjuntos de datos. Cada conjunto consta de 30 promedios, donde cada promedio se calcula a partir de una muestra de 20 observaciones.
# Fijar una semilla para que los resultados sean reproducibles
set.seed(228)
# ---- Parámetros generales de la simulación ----
n_clientes <- 20 # Tamaño de la muestra para cada réplica
n_replicas <- 30 # Número de réplicas (y de promedios a generar)
# ---- Simulación 1: Distribución Normal ----
media_normal <- 15
sd_normal <- 5
# Generamos 30 promedios. Cada uno es la media de 20 observaciones normales.
promedios_normal <- replicate(n_replicas, {
mean(rnorm(n = n_clientes, mean = media_normal, sd = sd_normal))
})
# ---- Simulación 2: Distribución Exponencial ----
media_exponencial <- 3.5
# La función rexp() usa el parámetro 'rate', que es el inverso de la media (1/media)
rate_exponencial <- 1 / media_exponencial
# Generamos 30 promedios. Cada uno es la media de 20 observaciones exponenciales.
promedios_exponencial <- replicate(n_replicas, {
mean(rexp(n = n_clientes, rate = rate_exponencial))
})
# Creamos un dataframe con los promedios generados para mostrarlo en una tabla
datos_generados <- data.frame(
Replica = 1:n_replicas,
Promedio_Normal = promedios_normal,
Promedio_Exponencial = promedios_exponencial
)
Primero, se presentan los 30 promedios generados para cada distribución.
# Usamos knitr::kable para una mejor visualización de la tabla
knitr::kable(
datos_generados,
digits = 4, # Redondear a 4 decimales
caption = "Promedios generados en cada una de las 30 réplicas."
)
| Replica | Promedio_Normal | Promedio_Exponencial |
|---|---|---|
| 1 | 14.8324 | 2.4482 |
| 2 | 14.9876 | 3.2137 |
| 3 | 14.5027 | 3.8285 |
| 4 | 15.0218 | 3.5774 |
| 5 | 15.8218 | 4.2583 |
| 6 | 14.8126 | 4.8849 |
| 7 | 13.7498 | 2.9546 |
| 8 | 16.0738 | 5.4490 |
| 9 | 15.1019 | 2.7414 |
| 10 | 15.4790 | 2.4097 |
| 11 | 15.5866 | 2.2341 |
| 12 | 14.7922 | 5.2192 |
| 13 | 17.1848 | 3.4829 |
| 14 | 15.8658 | 4.9204 |
| 15 | 15.0517 | 4.4734 |
| 16 | 16.4332 | 3.0923 |
| 17 | 14.5372 | 3.6144 |
| 18 | 15.3166 | 2.4316 |
| 19 | 15.1570 | 4.2403 |
| 20 | 14.1367 | 2.0073 |
| 21 | 15.7696 | 2.7519 |
| 22 | 14.2564 | 4.0671 |
| 23 | 15.6078 | 4.0546 |
| 24 | 13.0077 | 3.3034 |
| 25 | 16.6966 | 4.0490 |
| 26 | 17.0002 | 2.6800 |
| 27 | 16.8762 | 2.8724 |
| 28 | 13.9431 | 3.4837 |
| 29 | 14.0323 | 4.0043 |
| 30 | 13.3309 | 2.7370 |
A continuación, calculamos la media muestral, la desviación estándar y el intervalo de confianza del 95% para cada uno de los dos conjuntos de 30 promedios.
# ---- Cálculos para los promedios de la Normal ----
media_muestral_normal <- mean(promedios_normal)
sd_muestral_normal <- sd(promedios_normal)
# Usamos t.test(), que calcula directamente el intervalo de confianza
ic_test_normal <- t.test(promedios_normal, conf.level = 0.95)
# ---- Cálculos para los promedios de la Exponencial ----
media_muestral_exponencial <- mean(promedios_exponencial)
sd_muestral_exponencial <- sd(promedios_exponencial)
ic_test_exponencial <- t.test(promedios_exponencial, conf.level = 0.95)
# ---- Creación de la tabla de resumen ----
# Extraemos los límites del IC para ponerlos en columnas separadas
tabla_resumen <- data.frame(
Distribucion_Origen = c("Normal", "Exponencial"),
Media_Muestral = c(media_muestral_normal, media_muestral_exponencial),
Desviacion_Estandar = c(sd_muestral_normal, sd_muestral_exponencial),
lim_inf =c(ic_test_normal$conf.int[1],ic_test_exponencial$conf.int[1]),lim_sup =c(ic_test_normal$conf.int[2],ic_test_exponencial$conf.int[2]))
| Distribucion_Origen | Media_Muestral | Desviacion_Estandar | lim_inf | lim_sup |
|---|---|---|---|---|
| Normal | 15.1655 | 1.0650 | 14.7678 | 15.5632 |
| Exponencial | 3.5162 | 0.9229 | 3.1716 | 3.8608 |
Distribucion normal
Distribucion exponencial
Interpretación de los Resultados:
Al analizar la tabla resumen, se pueden extraer dos conclusiones principales:
[r round(ic_test_normal$conf.int[1], 4), r round(ic_test_normal$conf.int[2], 4)],
efectivamente contiene el valor real de 15.[r round(ic_test_exponencial$conf.int[1], 4), r round(ic_test_exponencial$conf.int[2], 4)],
también contiene el valor real de 3.5. Por lo tanto, el
procedimiento de estimación ha sido exitoso en ambos escenarios.Análisis de las Diferencias y Conclusión Principal:
La diferencia más importante entre los dos experimentos es la
distribución de la que provienen los datos originales: una es simétrica
(Normal) y la otra es fuertemente asimétrica (Exponencial). A pesar de
esto, el método para calcular el intervalo de confianza
(t.test) fue el mismo y funcionó correctamente en ambos
casos. La razón de esto se explica por el Teorema del Límite
Central (TLC).
El TLC establece que, si el tamaño de la muestra es suficientemente grande (generalmente n ≥ 30), la distribución de las medias muestrales se aproximará a una distribución normal, sin importar cuál era la distribución de la población original.
En esta actividad, no estamos analizando los datos crudos (los 20
clientes de cada réplica), sino el conjunto de los 30
promedios. Como el tamaño de esta muestra de promedios es 30,
el TLC aplica. Esto significa que tanto el conjunto
promedios_normal como el conjunto
promedios_exponencial se comportarán de forma
aproximadamente normal.
Conclusión:
La principal enseñanza de esta comparación es la validación práctica
del Teorema del Límite Central. Este teorema es el que nos permite
utilizar métodos basados en la normalidad, como el t.test,
para realizar inferencias sobre la media de una población, incluso
cuando no conocemos su distribución o sabemos que no es normal.