Objetivo
Generar dos conjuntos de datos mediante simulación y réplicas:
20 observaciones por réplica.
30 réplicas y registrar el promedio de cada una.
20 observaciones por réplica (parametrizado, ver n_exp).
30 réplicas y registrar el promedio de cada una.
Luego, con las 30 medias de réplica de cada caso, calcular el IC del 95% para la media poblacional y analizar diferencias entre distribuciones.
Réplicas
R <- 30
Caso Normal
n_norm <- 20
mu_norm <- 15
sd_norm <- 5
Caso Exponencial
n_exp <- 20
mu_exp <- 3.5
lambda_exp <- 1 / mu_exp
Función: IC t de Student para un vector de observaciones x
ci_t <- function(x, conf = 0.95) {
n <- length(x)
m <- mean(x)
s <- sd(x)
tcrit <- qt(1 - (1 - conf)/2, df = n - 1)
se <- s / sqrt(n)
hw <- tcrit * se
c(media = m, n = n, s = s, se = se, tcrit = tcrit,
IC_inf = m - hw, IC_sup = m + hw)
}
means_norm <- replicate(R, mean(rnorm(n_norm, mean = mu_norm, sd = sd_norm)))
means_exp <- replicate(R, mean(rexp(n_exp, rate = lambda_exp)))
Primeras medias.
head_norm <- head(means_norm, 10)
head_exp <- head(means_exp, 10)
data.frame(replica = 1:10,
media_normal = round(head_norm, 4),
media_exponencial = round(head_exp, 4))
## replica media_normal media_exponencial
## 1 1 15.7377 2.9569
## 2 2 17.0011 3.7250
## 3 3 15.8823 3.5497
## 4 4 14.2290 2.9436
## 5 5 15.6072 5.6229
## 6 6 13.8320 2.9542
## 7 7 15.9122 2.3582
## 8 8 16.1468 3.0805
## 9 9 14.7820 2.3220
## 10 10 13.9880 2.9227
ci_norm <- ci_t(means_norm, conf = 0.95)
ci_exp <- ci_t(means_exp, conf = 0.95)
ic_tabla <- data.frame(
Conjunto = c("Normal(15,5) — medias por réplica",
"Exponencial(media=3.5) — medias por réplica"),
n_replicas = c(as.integer(ci_norm["n"]), as.integer(ci_exp["n"])),
media_muestral = c(ci_norm["media"], ci_exp["media"]),
sd_de_medias = c(ci_norm["s"], ci_exp["s"]),
se_gran_media = c(ci_norm["se"], ci_exp["se"]),
t_critico = c(ci_norm["tcrit"],ci_exp["tcrit"]),
IC95_inf = c(ci_norm["IC_inf"], ci_exp["IC_inf"]),
IC95_sup = c(ci_norm["IC_sup"], ci_exp["IC_sup"])
)
knitr::kable(ic_tabla, digits = 4, caption = "IC 95% para la media (basado en 30 medias de réplica).")
| Conjunto | n_replicas | media_muestral | sd_de_medias | se_gran_media | t_critico | IC95_inf | IC95_sup |
|---|---|---|---|---|---|---|---|
| Normal(15,5) — medias por réplica | 30 | 14.9587 | 0.9816 | 0.1792 | 2.0452 | 14.5922 | 15.3252 |
| Exponencial(media=3.5) — medias por réplica | 30 | 3.2657 | 0.7053 | 0.1288 | 2.0452 | 3.0023 | 3.5290 |
par(mfrow = c(1, 2))
hist(means_norm, breaks = 10, main = "Medias por réplica — Normal",
xlab = "media réplica", ylab = "Frecuencia")
lines(density(means_norm), lwd = 2)
hist(means_exp, breaks = 10, main = "Medias por réplica — Exponencial",
xlab = "media réplica", ylab = "Frecuencia")
lines(density(means_exp), lwd = 2)
par(mfrow = c(1, 1))
Cobertura respecto a los valores teóricos
mu_en_ic_norm <- (mu_norm >= ic_tabla$IC95_inf[1] && mu_norm <= ic_tabla$IC95_sup[1])
mu_en_ic_exp <- (mu_exp >= ic_tabla$IC95_inf[2] && mu_exp <= ic_tabla$IC95_sup[2])
data.frame(
Conjunto = c("Normal(15,5)", "Exponencial(media=3.5)"),
mu_teorico = c(mu_norm, mu_exp),
dentro_IC95 = c(mu_en_ic_norm, mu_en_ic_exp)
)
## Conjunto mu_teorico dentro_IC95
## 1 Normal(15,5) 15.0 TRUE
## 2 Exponencial(media=3.5) 3.5 TRUE
Expectativas teóricas sobre la variabilidad de las medias de réplica La desviación estándar de una media muestral es 𝜎/√𝑛.
Por tanto, con estos parámetros, las medias por réplica de la Exponencial tenderán a ser menos dispersas que las de la Normal. Además, al promediar 𝑛=20 valores, ambas distribuciones de medias se vuelven más simétricas (CLT), pero la Normal ya parte de simetría, mientras que la Exponencial (asimétrica en crudo) muestra medias notablemente más simétricas y estables.
R <- 30
tcrit <- qt(0.975, df = R - 1)
sd_media_norm <- sd_norm / sqrt(n_norm)
sd_media_exp <- mu_exp / sqrt(n_exp)
se_gran_media_norm <- sd_media_norm / sqrt(R)
se_gran_media_exp <- sd_media_exp / sqrt(R)
half_norm <- tcrit * se_gran_media_norm
half_exp <- tcrit * se_gran_media_exp
data.frame(
Conjunto = c("Normal", "Exponencial"),
sd_media_replicas = c(sd_media_norm, sd_media_exp),
se_de_la_gran_media = c(se_gran_media_norm, se_gran_media_exp),
semiancho_IC95_esperado = c(half_norm, half_exp)
)
## Conjunto sd_media_replicas se_de_la_gran_media semiancho_IC95_esperado
## 1 Normal 1.1180340 0.2041241 0.4174808
## 2 Exponencial 0.7826238 0.1428869 0.2922365
Es decir:
Con 𝑛=20 por réplica y 𝑅=30, los IC 95% se centran cerca de los valores teóricos (15 y 3.5) y usualmente los contienen.
La Exponencial con media 3.5 muestra CI más estrechos que la Normal con 𝜎=5 porque su variabilidad teórica es menor (𝜎=3.5<5).
El promedio de 20 observaciones reduce la asimetría de la Exponencial (CLT), de modo que la distribución de medias por réplica luce más normal.
Si se cambia𝑛o los parámetros (𝜇,𝜎), la anchura de los IC y la forma de las distribuciones cambiarían en consecuencia.
datos_norm <- data.frame(replica = 1:R, media = means_norm)
datos_exp <- data.frame(replica = 1:R, media = means_exp)
knitr::kable(head(datos_norm, 10), digits = 4, caption = "Primeras 10 medias — Normal")
| replica | media |
|---|---|
| 1 | 15.7377 |
| 2 | 17.0011 |
| 3 | 15.8823 |
| 4 | 14.2290 |
| 5 | 15.6072 |
| 6 | 13.8320 |
| 7 | 15.9122 |
| 8 | 16.1468 |
| 9 | 14.7820 |
| 10 | 13.9880 |
knitr::kable(head(datos_exp, 10), digits = 4, caption = "Primeras 10 medias — Exponencial")
| replica | media |
|---|---|
| 1 | 2.9569 |
| 2 | 3.7250 |
| 3 | 3.5497 |
| 4 | 2.9436 |
| 5 | 5.6229 |
| 6 | 2.9542 |
| 7 | 2.3582 |
| 8 | 3.0805 |
| 9 | 2.3220 |
| 10 | 2.9227 |
TODO:
knitr::kable(datos_norm, digits = 4)
| replica | media |
|---|---|
| 1 | 15.7377 |
| 2 | 17.0011 |
| 3 | 15.8823 |
| 4 | 14.2290 |
| 5 | 15.6072 |
| 6 | 13.8320 |
| 7 | 15.9122 |
| 8 | 16.1468 |
| 9 | 14.7820 |
| 10 | 13.9880 |
| 11 | 15.9370 |
| 12 | 13.1292 |
| 13 | 15.1935 |
| 14 | 12.6510 |
| 15 | 15.1717 |
| 16 | 14.1372 |
| 17 | 15.3753 |
| 18 | 14.0223 |
| 19 | 14.1907 |
| 20 | 15.7384 |
| 21 | 14.3720 |
| 22 | 15.8017 |
| 23 | 14.7693 |
| 24 | 15.7860 |
| 25 | 14.2163 |
| 26 | 14.2905 |
| 27 | 15.8219 |
| 28 | 15.6425 |
| 29 | 14.7942 |
| 30 | 14.6013 |
knitr::kable(datos_exp, digits = 4)
| replica | media |
|---|---|
| 1 | 2.9569 |
| 2 | 3.7250 |
| 3 | 3.5497 |
| 4 | 2.9436 |
| 5 | 5.6229 |
| 6 | 2.9542 |
| 7 | 2.3582 |
| 8 | 3.0805 |
| 9 | 2.3220 |
| 10 | 2.9227 |
| 11 | 3.3187 |
| 12 | 3.3946 |
| 13 | 3.2573 |
| 14 | 4.0238 |
| 15 | 2.0899 |
| 16 | 4.4027 |
| 17 | 2.5957 |
| 18 | 3.4044 |
| 19 | 3.3201 |
| 20 | 3.6144 |
| 21 | 3.1499 |
| 22 | 2.5941 |
| 23 | 3.3310 |
| 24 | 3.3696 |
| 25 | 4.0716 |
| 26 | 3.3225 |
| 27 | 2.1881 |
| 28 | 2.9777 |
| 29 | 3.4767 |
| 30 | 3.6313 |
ILUSTRACION 1