# 1. Parâmetros fixos da simulação
p_valores <- c(0.01, 0.05, 0.1, 0.2, 0.5, 0.8, 0.95, 0.99)
n_valores <- c(10, 30, 50, 100, 500)
M <- 10000 # Número de simulações
confianca <- 0.95
z_critico <- qnorm(1 - (1 - confianca) / 2) # Aprox. 1.96

# Criar uma grade com todas as combinações de parâmetros (p, n)
param_grid <- expand.grid(p_true = p_valores, n = n_valores)

# Inicializar um data.frame para armazenar os resultados
resultados_finais <- data.frame()

# Mostrar início da simulação
print(paste("Iniciando Simulação: M =", M, "repetições para", nrow(param_grid), "cenários."))
## [1] "Iniciando Simulação: M = 10000 repetições para 40 cenários."
# Loop principal (passando por cada cenário p, n)
for (i in 1:nrow(param_grid)) {
  
  p_true <- param_grid$p_true[i]
  n <- param_grid$n[i]
  
  # Vetores para armazenar os resultados das M simulações
  cobertura_wald <- logical(M)
  cobertura_arcsin <- logical(M)
  cobertura_conserv <- logical(M)
  
  largura_wald <- numeric(M)
  largura_arcsin <- numeric(M)
  largura_conserv <- numeric(M)
  
  # Loop interno (M repetições)
  for (j in 1:M) {
    # 1. Gerar amostra Bernoulli(p)
    x_soma <- rbinom(n = 1, size = n, prob = p_true)
    
    # 2. Calcular p_hat
    p_hat <- x_soma / n
    
    # 3. Construir os três intervalos de confiança
    
    # (a) Intervalo de Wald (Normal clássico)
    se_wald <- sqrt(p_hat * (1 - p_hat) / n)
    me_wald <- z_critico * se_wald
    
    if (is.na(me_wald)) {
      me_wald <- 0
    }
    
    wald_lim_inf <- p_hat - me_wald
    wald_lim_sup <- p_hat + me_wald
    
    # (b) Intervalo com Transformação Arcseno
    p_hat_transf <- asin(sqrt(p_hat))
    me_arcsin <- z_critico / (2 * sqrt(n))
    
    transf_inf <- p_hat_transf - me_arcsin
    transf_sup <- p_hat_transf + me_arcsin
    
    transf_inf_cap <- max(0, transf_inf)
    transf_sup_cap <- min(pi/2, transf_sup)
    
    arcsin_lim_inf <- (sin(transf_inf_cap))^2
    arcsin_lim_sup <- (sin(transf_sup_cap))^2
    
    
    # (c) Intervalo Conservador
    me_conserv <- z_critico / (2 * sqrt(n))
    conserv_lim_inf <- p_hat - me_conserv
    conserv_lim_sup <- p_hat + me_conserv
    
    
    # --- Análise dos Resultados ---
    
    # Garantir que os limites de Wald e Conservador fiquem em [0, 1]
    wald_lim_inf_cap <- max(0, wald_lim_inf)
    wald_lim_sup_cap <- min(1, wald_lim_sup)
    conserv_lim_inf_cap <- max(0, conserv_lim_inf)
    conserv_lim_sup_cap <- min(1, conserv_lim_sup)
    
    # Calcular Larguras
    largura_wald[j] <- wald_lim_sup_cap - wald_lim_inf_cap
    largura_arcsin[j] <- arcsin_lim_sup - arcsin_lim_inf
    largura_conserv[j] <- conserv_lim_sup_cap - conserv_lim_inf_cap
    
    # Calcular Cobertura (Verificar se p_true está no intervalo)
    cobertura_wald[j] <- (p_true >= wald_lim_inf_cap) & (p_true <= wald_lim_sup_cap)
    cobertura_arcsin[j] <- (p_true >= arcsin_lim_inf) & (p_true <= arcsin_lim_sup)
    cobertura_conserv[j] <- (p_true >= conserv_lim_inf_cap) & (p_true <= conserv_lim_sup_cap)
  }
  

  
  # Calcular métricas para o cenário (p, n)
  cob_wald <- mean(cobertura_wald, na.rm = TRUE)
  cob_arcsin <- mean(cobertura_arcsin, na.rm = TRUE)
  cob_conserv <- mean(cobertura_conserv, na.rm = TRUE)
  
  larg_wald <- mean(largura_wald, na.rm = TRUE)
  larg_arcsin <- mean(largura_arcsin, na.rm = TRUE)
  larg_conserv <- mean(largura_conserv, na.rm = TRUE)
  
  # Armazenar resultados
  resultados_cenario <- data.frame(
    p_true = p_true,
    n = n,
    metodo = c("Wald", "Arcseno", "Conservador"),
    cobertura = c(cob_wald, cob_arcsin, cob_conserv),
    largura_media = c(larg_wald, larg_arcsin, larg_conserv),
    vies_cobertura = c(cob_wald - confianca, cob_arcsin - confianca, cob_conserv - confianca)
  )
  
  resultados_finais <- rbind(resultados_finais, resultados_cenario)
  
  # Imprimir progresso
  print(paste("Cenário", i, "/", nrow(param_grid), ": (p=", p_true, ", n=", n, ") concluído."))
}
## [1] "Cenário 1 / 40 : (p= 0.01 , n= 10 ) concluído."
## [1] "Cenário 2 / 40 : (p= 0.05 , n= 10 ) concluído."
## [1] "Cenário 3 / 40 : (p= 0.1 , n= 10 ) concluído."
## [1] "Cenário 4 / 40 : (p= 0.2 , n= 10 ) concluído."
## [1] "Cenário 5 / 40 : (p= 0.5 , n= 10 ) concluído."
## [1] "Cenário 6 / 40 : (p= 0.8 , n= 10 ) concluído."
## [1] "Cenário 7 / 40 : (p= 0.95 , n= 10 ) concluído."
## [1] "Cenário 8 / 40 : (p= 0.99 , n= 10 ) concluído."
## [1] "Cenário 9 / 40 : (p= 0.01 , n= 30 ) concluído."
## [1] "Cenário 10 / 40 : (p= 0.05 , n= 30 ) concluído."
## [1] "Cenário 11 / 40 : (p= 0.1 , n= 30 ) concluído."
## [1] "Cenário 12 / 40 : (p= 0.2 , n= 30 ) concluído."
## [1] "Cenário 13 / 40 : (p= 0.5 , n= 30 ) concluído."
## [1] "Cenário 14 / 40 : (p= 0.8 , n= 30 ) concluído."
## [1] "Cenário 15 / 40 : (p= 0.95 , n= 30 ) concluído."
## [1] "Cenário 16 / 40 : (p= 0.99 , n= 30 ) concluído."
## [1] "Cenário 17 / 40 : (p= 0.01 , n= 50 ) concluído."
## [1] "Cenário 18 / 40 : (p= 0.05 , n= 50 ) concluído."
## [1] "Cenário 19 / 40 : (p= 0.1 , n= 50 ) concluído."
## [1] "Cenário 20 / 40 : (p= 0.2 , n= 50 ) concluído."
## [1] "Cenário 21 / 40 : (p= 0.5 , n= 50 ) concluído."
## [1] "Cenário 22 / 40 : (p= 0.8 , n= 50 ) concluído."
## [1] "Cenário 23 / 40 : (p= 0.95 , n= 50 ) concluído."
## [1] "Cenário 24 / 40 : (p= 0.99 , n= 50 ) concluído."
## [1] "Cenário 25 / 40 : (p= 0.01 , n= 100 ) concluído."
## [1] "Cenário 26 / 40 : (p= 0.05 , n= 100 ) concluído."
## [1] "Cenário 27 / 40 : (p= 0.1 , n= 100 ) concluído."
## [1] "Cenário 28 / 40 : (p= 0.2 , n= 100 ) concluído."
## [1] "Cenário 29 / 40 : (p= 0.5 , n= 100 ) concluído."
## [1] "Cenário 30 / 40 : (p= 0.8 , n= 100 ) concluído."
## [1] "Cenário 31 / 40 : (p= 0.95 , n= 100 ) concluído."
## [1] "Cenário 32 / 40 : (p= 0.99 , n= 100 ) concluído."
## [1] "Cenário 33 / 40 : (p= 0.01 , n= 500 ) concluído."
## [1] "Cenário 34 / 40 : (p= 0.05 , n= 500 ) concluído."
## [1] "Cenário 35 / 40 : (p= 0.1 , n= 500 ) concluído."
## [1] "Cenário 36 / 40 : (p= 0.2 , n= 500 ) concluído."
## [1] "Cenário 37 / 40 : (p= 0.5 , n= 500 ) concluído."
## [1] "Cenário 38 / 40 : (p= 0.8 , n= 500 ) concluído."
## [1] "Cenário 39 / 40 : (p= 0.95 , n= 500 ) concluído."
## [1] "Cenário 40 / 40 : (p= 0.99 , n= 500 ) concluído."
print("Simulação Concluída. Exibindo resultados:")
## [1] "Simulação Concluída. Exibindo resultados:"
print(resultados_finais, row.names = FALSE)
##  p_true   n      metodo cobertura largura_media vies_cobertura
##    0.01  10        Wald    0.0968    0.02838357        -0.8532
##    0.01  10     Arcseno    0.9959    0.11824418         0.0459
##    0.01  10 Conservador    1.0000    0.32000752         0.0500
##    0.05  10        Wald    0.3959    0.12815316        -0.5541
##    0.05  10     Arcseno    0.9891    0.20471817         0.0391
##    0.05  10 Conservador    0.9994    0.35894345         0.0494
##    0.10  10        Wald    0.6451    0.23685851        -0.3049
##    0.10  10     Arcseno    0.6340    0.29438013        -0.3160
##    0.10  10 Conservador    0.9979    0.40815816         0.0479
##    0.20  10        Wald    0.8870    0.40064946        -0.0630
##    0.20  10     Arcseno    0.8588    0.42053761        -0.0912
##    0.20  10 Conservador    0.9940    0.49531522         0.0440
##    0.50  10        Wald    0.8830    0.57813291        -0.0670
##    0.50  10     Arcseno    0.8830    0.54790662        -0.0670
##    0.50  10 Conservador    0.9777    0.60211694         0.0277
##    0.80  10        Wald    0.8870    0.40132267        -0.0630
##    0.80  10     Arcseno    0.8599    0.42091691        -0.0901
##    0.80  10 Conservador    0.9944    0.49587907         0.0444
##    0.95  10        Wald    0.3998    0.12991103        -0.5502
##    0.95  10     Arcseno    0.9878    0.20618117         0.0378
##    0.95  10 Conservador    0.9989    0.35971840         0.0489
##    0.99  10        Wald    0.0967    0.02842798        -0.8533
##    0.99  10     Arcseno    0.9957    0.11827418         0.0457
##    0.99  10 Conservador    1.0000    0.32003752         0.0500
##    0.01  30        Wald    0.2579    0.02747552        -0.6921
##    0.01  30     Arcseno    0.9969    0.05785074         0.0469
##    0.01  30 Conservador    1.0000    0.18884941         0.0500
##    0.05  30        Wald    0.7839    0.11561014        -0.1661
##    0.05  30     Arcseno    0.7698    0.13673478        -0.1802
##    0.05  30 Conservador    0.9996    0.22921196         0.0496
##    0.10  30        Wald    0.8112    0.19014767        -0.1388
##    0.10  30     Arcseno    0.9292    0.19846842        -0.0208
##    0.10  30 Conservador    0.9978    0.27620381         0.0478
##    0.20  30        Wald    0.9496    0.27666003        -0.0004
##    0.20  30     Arcseno    0.9335    0.27238070        -0.0165
##    0.20  30 Conservador    0.9893    0.33822332         0.0393
##    0.50  30        Wald    0.9581    0.35182391         0.0081
##    0.50  30     Arcseno    0.9581    0.34436340         0.0081
##    0.50  30 Conservador    0.9581    0.35783760         0.0081
##    0.80  30        Wald    0.9444    0.27597526        -0.0056
##    0.80  30     Arcseno    0.9299    0.27179915        -0.0201
##    0.80  30 Conservador    0.9897    0.33780766         0.0397
##    0.95  30        Wald    0.7779    0.11467933        -0.1721
##    0.95  30     Arcseno    0.7653    0.13589504        -0.1847
##    0.95  30 Conservador    0.9995    0.22880073         0.0495
##    0.99  30        Wald    0.2588    0.02748469        -0.6912
##    0.99  30     Arcseno    0.9965    0.05786628         0.0465
##    0.99  30 Conservador    1.0000    0.18883608         0.0500
##    0.01  50        Wald    0.4040    0.02761236        -0.5460
##    0.01  50     Arcseno    0.9858    0.04558846         0.0358
##    0.01  50 Conservador    1.0000    0.14888238         0.0500
##    0.05  50        Wald    0.9237    0.10297958        -0.0263
##    0.05  50     Arcseno    0.9139    0.11180766        -0.0361
##    0.05  50 Conservador    1.0000    0.18871420         0.0500
##    0.10  50        Wald    0.8797    0.15839572        -0.0703
##    0.10  50     Arcseno    0.9431    0.15894461        -0.0069
##    0.10  50 Conservador    0.9977    0.23379699         0.0477
##    0.20  50        Wald    0.9369    0.21771879        -0.0131
##    0.20  50     Arcseno    0.9369    0.21498518        -0.0131
##    0.20  50 Conservador    0.9824    0.27359399         0.0324
##    0.50  50        Wald    0.9348    0.27435228        -0.0152
##    0.50  50     Arcseno    0.9348    0.27085271        -0.0152
##    0.50  50 Conservador    0.9348    0.27718076        -0.0152
##    0.80  50        Wald    0.9351    0.21795456        -0.0149
##    0.80  50     Arcseno    0.9351    0.21522646        -0.0149
##    0.80  50 Conservador    0.9799    0.27360190         0.0299
##    0.95  50        Wald    0.9219    0.10328661        -0.0281
##    0.95  50     Arcseno    0.9147    0.11206035        -0.0353
##    0.95  50 Conservador    0.9997    0.18883259         0.0497
##    0.99  50        Wald    0.3913    0.02674090        -0.5587
##    0.99  50     Arcseno    0.9858    0.04475009         0.0358
##    0.99  50 Conservador    1.0000    0.14855838         0.0500
##    0.01 100        Wald    0.6277    0.02497367        -0.3223
##    0.01 100     Arcseno    0.6090    0.03335250        -0.3410
##    0.01 100 Conservador    1.0000    0.10803320         0.0500
##    0.05 100        Wald    0.8793    0.08155791        -0.0707
##    0.05 100     Arcseno    0.9556    0.08247355         0.0056
##    0.05 100 Conservador    0.9997    0.14786995         0.0497
##    0.10 100        Wald    0.9360    0.11609186        -0.0140
##    0.10 100     Arcseno    0.9553    0.11539031         0.0053
##    0.10 100 Conservador    0.9981    0.18517120         0.0481
##    0.20 100        Wald    0.9336    0.15545273        -0.0164
##    0.20 100     Arcseno    0.9566    0.15445936         0.0066
##    0.20 100 Conservador    0.9841    0.19596700         0.0341
##    0.50 100        Wald    0.9441    0.19502722        -0.0059
##    0.50 100     Arcseno    0.9441    0.19378097        -0.0059
##    0.50 100 Conservador    0.9441    0.19599640        -0.0059
##    0.80 100        Wald    0.9326    0.15563400        -0.0174
##    0.80 100     Arcseno    0.9550    0.15463947         0.0050
##    0.80 100 Conservador    0.9825    0.19596620         0.0325
##    0.95 100        Wald    0.8777    0.08149662        -0.0723
##    0.95 100     Arcseno    0.9527    0.08239477         0.0027
##    0.95 100 Conservador    1.0000    0.14781455         0.0500
##    0.99 100        Wald    0.6338    0.02494244        -0.3162
##    0.99 100     Arcseno    0.6153    0.03335770        -0.3347
##    0.99 100 Conservador    1.0000    0.10797220         0.0500
##    0.01 500        Wald    0.8668    0.01653972        -0.0832
##    0.01 500     Arcseno    0.9455    0.01683817        -0.0045
##    0.01 500 Conservador    1.0000    0.05373973         0.0500
##    0.05 500        Wald    0.9297    0.03796383        -0.0203
##    0.05 500     Arcseno    0.9449    0.03791523        -0.0051
##    0.05 500 Conservador    0.9998    0.08610956         0.0498
##    0.10 500        Wald    0.9454    0.05242446        -0.0046
##    0.10 500     Arcseno    0.9492    0.05235735        -0.0008
##    0.10 500 Conservador    0.9989    0.08765225         0.0489
##    0.20 500        Wald    0.9484    0.06998373        -0.0016
##    0.20 500     Arcseno    0.9484    0.06989415        -0.0016
##    0.20 500 Conservador    0.9842    0.08765225         0.0342
##    0.50 500        Wald    0.9445    0.08756343        -0.0055
##    0.50 500     Arcseno    0.9445    0.08745135        -0.0055
##    0.50 500 Conservador    0.9445    0.08765225        -0.0055
##    0.80 500        Wald    0.9531    0.07001767         0.0031
##    0.80 500     Arcseno    0.9531    0.06992805         0.0031
##    0.80 500 Conservador    0.9843    0.08765225         0.0343
##    0.95 500        Wald    0.9295    0.03799800        -0.0205
##    0.95 500     Arcseno    0.9453    0.03794936        -0.0047
##    0.95 500 Conservador    1.0000    0.08616806         0.0500
##    0.99 500        Wald    0.8745    0.01667789        -0.0755
##    0.99 500     Arcseno    0.9451    0.01696329        -0.0049
##    0.99 500 Conservador    1.0000    0.05386993         0.0500
# --- GRÁFICO 1: COBERTURA EMPÍRICA ---
print("Gerando Gráfico 1: Cobertura Empírica...")
## [1] "Gerando Gráfico 1: Cobertura Empírica..."
# 1. Definir parâmetros do gráfico
cores <- c("red", "blue", "darkgreen")
pchs <- c(1, 2, 3) # Tipos de ponto (círculo, triângulo, +)
metodos <- c("Wald", "Arcseno", "Conservador")

# 2. Configurar a janela de plotagem (3 linhas, 2 colunas)
par(mfrow = c(3, 2), mar = c(4, 4, 2, 1))

# 3. Loop para criar um gráfico para cada 'n'
for (n_val in n_valores) {
  
  # Filtrar dados para o 'n' atual
  dados_n <- subset(resultados_finais, n == n_val)
  
  # Filtrar dados por método
  dados_wald <- subset(dados_n, metodo == "Wald")
  dados_arcsin <- subset(dados_n, metodo == "Arcseno")
  dados_conserv <- subset(dados_n, metodo == "Conservador")
  
  # 4. Criar o primeiro gráfico (Wald)
  plot(dados_wald$p_true, dados_wald$cobertura,
       type = "b", # "b" = both (pontos e linhas)
       col = cores[1],
       pch = pchs[1],
       xlab = "p (Proporção Real)",
       ylab = "Cobertura Empírica",
       main = paste("n =", n_val),
       ylim = c(0.80, 1.0), # Fixar o eixo Y (0.8 a 1.0)
       xlim = c(0, 1)
  )
  
  # 5. Adicionar a linha de referência de 95%
  abline(h = confianca, lty = "dashed", col = "gray40")
  
  # 6. Adicionar as linhas dos outros métodos
  lines(dados_arcsin$p_true, dados_arcsin$cobertura,
        type = "b", col = cores[2], pch = pchs[2])
  
  lines(dados_conserv$p_true, dados_conserv$cobertura,
        type = "b", col = cores[3], pch = pchs[3])
}

# 7. Criar um "gráfico" vazio no 6º espaço para a legenda
plot(0, 0, type = "n", axes = FALSE, xlab = "", ylab = "")
legend("center",
       legend = metodos,
       col = cores,
       pch = pchs,
       lty = 1, # Tipo de linha
       bty = "n", # Sem caixa ao redor da legenda
       cex = 1.2
)

# --- GRÁFICO 2: LARGURA MÉDIA DO IC ---
print("Gerando Gráfico 2: Largura Média...")
## [1] "Gerando Gráfico 2: Largura Média..."
# 1. Configurar a janela de plotagem (3 linhas, 2 colunas)
par(mfrow = c(3, 2), mar = c(4, 4, 2, 1))

# 2. Loop para criar um gráfico para cada 'n'
for (n_val in n_valores) {
  
  # Filtrar dados
  dados_n <- subset(resultados_finais, n == n_val)
  dados_wald <- subset(dados_n, metodo == "Wald")
  dados_arcsin <- subset(dados_n, metodo == "Arcseno")
  dados_conserv <- subset(dados_n, metodo == "Conservador")
  
  # 3. Criar o primeiro gráfico (Wald)
  plot(dados_wald$p_true, dados_wald$largura_media,
       type = "b",
       col = cores[1],
       pch = pchs[1],
       xlab = "p (Proporção Real)",
       ylab = "Largura Média do IC",
       main = paste("n =", n_val),
       ylim = c(0, max(dados_n$largura_media) * 1.1),
       xlim = c(0, 1)
  )
  
  # 4. Adicionar as linhas dos outros métodos
  lines(dados_arcsin$p_true, dados_arcsin$largura_media,
        type = "b", col = cores[2], pch = pchs[2])
  
  lines(dados_conserv$p_true, dados_conserv$largura_media,
        type = "b", col = cores[3], pch = pchs[3])
}

# 5. Criar a legenda no 6º espaço
plot(0, 0, type = "n", axes = FALSE, xlab = "", ylab = "")
legend("center",
       legend = metodos,
       col = cores,
       pch = pchs,
       lty = 1,
       bty = "n",
       cex = 1.2
)

# 6. Resetar a janela de plotagem para o padrão (1x1)
par(mfrow = c(1, 1))
print("Gráficos concluídos.")
## [1] "Gráficos concluídos."

Conclusão

O método de Wald (clássico) falha em amostras pequenas ou quando a proporção é perto de 0 ou 1. O método Conservador sempre funciona, mas cria intervalos muito largos e imprecisos. O método Arcseno foi o mais robusto, oferecendo a melhor combinação de precisão e confiança em todos os cenários.