Este documento apresenta uma implementação completa de amostragem estratificada em R, utilizando o pacote sampling e demonstrando todo o processo desde a preparação dos dados até a estimação de parâmetros populacionais.
Visão Geral do Código
O código R apresentado realiza uma amostragem estratificada proporcional utilizando a base de dados MU284, que contém informações sobre municípios suecos. O processo inclui:
- Limpeza do ambiente de trabalho
- Carregamento e preparação dos dados
- Cálculo de alocações por estrato
- Seleção da amostra
- Estimação de parâmetros populacionais
Funções Auxiliares
Função clean_env
Esta função realiza uma limpeza completa do ambiente de trabalho do R:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
clean_env <- function(hidden = TRUE, packages = FALSE, graphics = FALSE) { cat("?? Iniciando limpeza do ambiente...\n") # 1. Limpar objetos do ambiente global if (hidden) { rm(list = ls(all.names = TRUE), envir = .GlobalEnv) cat("? Objetos visíveis e ocultos removidos\n") } else { rm(list = ls(all.names = FALSE), envir = .GlobalEnv) cat("? Objetos visíveis removidos\n") } # 2. Limpar console (opcional - depende do ambiente) tryCatch({ cat("\014") # Limpa console no RStudio cat("? Console limpo\n") }, error = function(e) { cat("?? Não foi possível limpar o console\n") }) # 3. Fechar dispositivos gráficos if (graphics) { while (!is.null(dev.list())) { dev.off() } cat("? Dispositivos gráficos fechados\n") } # 4. Descarregar pacotes não-essenciais if (packages) { essential_pkgs <- c("base", "utils", "stats", "graphics", "grDevices", "methods") all_pkgs <- .packages() pkgs_to_unload <- setdiff(all_pkgs, essential_pkgs) if (length(pkgs_to_unload) > 0) { for (pkg in pkgs_to_unload) { tryCatch({ detach(paste0("package:", pkg), character.only = TRUE, unload = TRUE) }, error = function(e) { # Alguns pacotes não podem ser descarregados }) } cat("? Pacotes não-essenciais descarregados\n") } } # 5. Coletar lixo da memória gc(verbose = FALSE) cat("? Coleta de lixo realizada\n") cat("?? Ambiente limpo com sucesso!\n") invisible(TRUE) } |
Funções de Suporte
Funções auxiliares para verificação de números inteiros e arredondamento:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Verificar se um número é inteiro eh_inteiro <- function(numero) { resultado <- (numero %% 1) == 0 return(resultado) } # Arredondar cada elemento de um vetor para cima arredondar_para_cima <- function(lista) { resultado <- numeric(length(lista)) for (i in seq_along(lista)) { valor <- lista[i] if (eh_inteiro(valor)) { resultado[i] <- as.integer(valor) + 1 } else { resultado[i] <- ceiling(valor) } } return(resultado) } |
Processo de Amostragem Estratificada
Preparação dos Dados
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Instalação e carregamento do pacote sampling install.packages("sampling") library(sampling) # Carregar base de dados MU284 (municípios da Suécia) data(MU284) # Construir tabela de frequências da variável de estratificação freq_estratos <- table(MU284$REG) # Tabela de frequência por região dados_populacao <- MU284 # Dados originais nome_dataset <- "MU284" # Nome do dataset como string # Definições iniciais N <- nrow(MU284) # Tamanho total da população tamanhos <- list(80, 80) # Tamanhos de amostra possíveis n <- tamanhos[[1]] # Primeiro tamanho de amostra qtd_estratos <- length(freq_estratos) # Número de estratos # Definir semente para reprodutibilidade semente <- 3 set.seed(semente) # Variável usada para estratificação variavel_estrato <- "REG" # Variável numérica de interesse (estimativa média e total) variavel_estimacao <- "P85" # População em 1985 formula_estimacao <- as.formula(paste("~", variavel_estimacao)) |
Cálculo de Alocações e Probabilidades
Alocação Proporcional
O cálculo da alocação proporcional segue a fórmula:
\(n_h = n \times \frac{N_h}{N}\)Onde:
- \(n_h\) = tamanho da amostra no estrato h
- \(n\) = tamanho total da amostra
- \(N_h\) = tamanho do estrato h na população
- \(N\) = tamanho total da população
|
1 2 3 4 5 6 7 8 |
# Cálculo da alocação proporcional teórica alocacao_teorica <- n * prop.table(freq_estratos) # Ajuste da alocação (sempre arredondando para cima) alocacao_final <- arredondar_para_cima(alocacao_teorica) # Probabilidades de seleção em cada estrato probabilidades <- alocacao_final / freq_estratos |
Seleção da Amostra e Estimação
Seleção da Amostra
|
1 2 3 4 5 6 7 8 |
# Seleção da amostra estratificada amostra_ids <- strata(dados_populacao, stratanames = variavel_estrato, size = alocacao_final, method = "srswor") # Extração dos dados completos da amostra amostra <- getdata(dados_populacao, amostra_ids) |
Estimação com Correção para População Finita
O Fator de Correção para População Finita (FPC) é calculado como:
\(FPC = \frac{N – n}{N}\)E é aplicado para reduzir o erro padrão das estimativas quando a amostra é uma fração significativa da população.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
library(survey) # Fator de correção para população finita (FPC) fpc <- rep(freq_estratos, alocacao_final) # Criar plano amostral com FPC plano_amostral <- svydesign( id = ~1, strata = ~Stratum, probs = ~amostra_ids$Prob, data = amostra, fpc = ~fpc ) # Estimar média e total populacional da variável de interesse media_populacional <- svymean(formula_estimacao, plano_amostral) total_populacional <- svytotal(formula_estimacao, plano_amostral) # Estimativas por estrato (com FPC) media_por_estrato <- svyby(formula_estimacao, by = ~Stratum, design = plano_amostral, FUN = svymean) total_por_estrato <- svyby(formula_estimacao, by = ~Stratum, design = plano_amostral, FUN = svytotal) |
Considerações Importantes
Vantagens da Amostragem Estratificada
- Garante representatividade de todos os subgrupos relevantes
- Pode resultar em estimativas mais precisas
- Permite análise separada para cada estrato
- Mais eficiente quando os estratos são homogêneos internamente
Desafios e Considerações
- Requer conhecimento prévio da população para definir estratos
- O arredondamento pode alterar ligeiramente o tamanho total da amostra
- A escolha da variável de estratificação é crucial
- Pode ser mais complexa de implementar que amostragem aleatória simples
Conclusão
Este código demonstra uma implementação completa de amostragem estratificada em R, desde a preparação do ambiente até a estimação de parâmetros populacionais com correção para população finita. A abordagem apresentada garante que todos os estratos da população estejam adequadamente representados na amostra, resultando em estimativas mais precisas e confiáveis.
O uso do pacote survey permite incorporar o desenho amostral complexo nas estimativas, produzindo erros padrão apropriados e intervalos de confiança válidos para os parâmetros populacionais de interesse.
Referências
- Lumley, T. (2004). “Analysis of Complex Survey Samples”. Journal of Statistical Software.
- Cochran, W. G. (1977). “Sampling Techniques”. 3rd ed. John Wiley & Sons.
- Sarndal, C. E., Swensson, B., & Wretman, J. (1992). “Model Assisted Survey Sampling”. Springer-Verlag.
- Documentação do pacote sampling: https://cran.r-project.org/web/packages/sampling/
- Documentação do pacote survey: https://cran.r-project.org/web/packages/survey/