1. Introdução

Este relatório tem como objetivo verificar, de forma empírica, o Teorema Central do Limite (TLC), utilizando amostras provenientes de duas distribuições conhecidas:

2. Geração das Amostras e Cálculo das Médias

set.seed(123)
n_vals <- c(20, 50, 100, 200, 500)
n_amostras <- 1000

gerar_medias <- function(distrib, param, n_vals) {
  medias_df <- map_dfr(n_vals, function(n) {
    if (distrib == "exponencial") {
      amostras <- replicate(n_amostras, mean(rexp(n, rate = param)))
    } else if (distrib == "bernoulli") {
      amostras <- replicate(n_amostras, mean(rbinom(n, 1, prob = param)))
    }
    tibble(media = amostras, n = n)
  })
  medias_df
}

medias_exp <- gerar_medias("exponencial", 1, n_vals)
medias_ber <- gerar_medias("bernoulli", 0.3, n_vals)

3. Histogramas com Densidade Normal Teórica

plotar_histograma <- function(df, media_pop, var_pop, titulo) {
  densidades_df <- df %>%
    group_by(n) %>%
    summarise(
      x = list(seq(min(media), max(media), length.out = 500)),
      dens = list(dnorm(seq(min(media), max(media), length.out = 500),
                        mean = media_pop, sd = sqrt(var_pop / unique(n))))
    ) %>%
    unnest(c(x, dens))
  
  ggplot(df, aes(x = media)) +
    geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "lightblue", color = "black") +
    geom_line(data = densidades_df, aes(x = x, y = dens), color = "red", linewidth = 1) +
    facet_wrap(~n, scales = "free", labeller = label_both) +
    labs(title = titulo, x = "Média Amostral", y = "Densidade") +
    theme_minimal()
}

mu_exp <- 1; var_exp <- 1
mu_ber <- 0.3; var_ber <- 0.3 * 0.7

plotar_histograma(medias_exp, mu_exp, var_exp, "Exponencial(1)")

plotar_histograma(medias_ber, mu_ber, var_ber, "Bernoulli(0.3)")

4. Estatísticas Descritivas e Teste de Normalidade

library(moments)

testar_normalidade <- function(df, nome) {
  df %>%
    group_by(n) %>%
    summarise(
      media = mean(media),
      .groups = "drop"
    ) %>%
    mutate(distribuicao = nome)
}

resumo_exp <- testar_normalidade(medias_exp, "Exponencial(1)")
resumo_ber <- testar_normalidade(medias_ber, "Bernoulli(0.3)")

bind_rows(resumo_exp, resumo_ber)
## # A tibble: 10 × 3
##        n media distribuicao  
##    <dbl> <dbl> <chr>         
##  1    20 1.00  Exponencial(1)
##  2    50 0.997 Exponencial(1)
##  3   100 0.996 Exponencial(1)
##  4   200 1.00  Exponencial(1)
##  5   500 1.00  Exponencial(1)
##  6    20 0.296 Bernoulli(0.3)
##  7    50 0.297 Bernoulli(0.3)
##  8   100 0.301 Bernoulli(0.3)
##  9   200 0.301 Bernoulli(0.3)
## 10   500 0.299 Bernoulli(0.3)

5. Conclusões