4.4 Técnicas de amostragem

(Tillé and Matei 2023) apresentam o pacote sampling, com funções para extrair amostras aleatórias usando diferentes esquemas de amostragem. O pacote survey (Lumley 2004), (Lumley 2010), (Lumley 2024) fornece ferramentas variadas para análise de amostras complexas de pesquisa. (Diallo 2021) traz o pacote samplics para Python, que realiza ponderação e análise de amostras complexas.

4.4.1 Amostragem Aleatória Simples

Amostragem aleatória simples (AAS) é o método mais simples e mais importante para a seleção de uma amostra. Além de servir como um plano próprio, o seu procedimento é usado de modo repetido em procedimentos de múltiplos estágios. (Bolfarine and Bussab 2005, 61)

Seguindo (Bolfarine and Bussab 2005, 61), a AAS pode ser caracterizada através da definição operacional “de uma lista com \(N\) unidades elementares, sorteiam-se com igual probabilidade \(n\) unidades”. Esta método requer uma lista completa da população para ser realizado, o que eventualmente pode ser um limitante já que nem sempre é possível obter tal listagem. Os planos amostrais A e B discutidos nos Exemplos 4.16, 4.19 e 4.20 são caracterizados como AAS.

4.4.1.1 AAS sem reposição - AASs

Caso a unidade sorteada seja retirada da população e seja realizado um novo sorteio, é dito que procedeu-se com uma AAS restrita ou sem reposição, indicado por AASs.

Exemplo 4.28 (AASs) De uma urna com \(N\) cartões numerados de \(1\) a \(N\) sorteia-se um ao acaso, com probabilidade \(1/N\). O cartão sorteado é deixado de fora da urna e realiza-se um novo sorteio, onde cada um dos \(N-1\) cartões restantes tem probabilidade \(1/(N-1)\) de ser retirado. Este procedimento é repetido até que se concluam todos os \(n\) sorteios desejados. Este é um processo de AAS sem reposição.

Exercício 4.8 Defina as probabilidades de sorteio do Exemplo 4.28 considerando \(n=3\) sorteios.

Exercício 4.9 Calcule as probabilidades de sorteio do Exemplo 4.28 considerando \(n=3\) sorteios e \(N=10\).

Exemplo 4.29 (Mega-Sena da Caixa Econômica Federal) No R pode-se sortear uma amostra sem reposição para tentar a sorte no jogo da Caixa Econômica Federal. Note que \(N=60\) e \(n=6\).

set.seed(1234) # Fixando a geração pseudo-aleatória
sort(sample(1:60, size = 6, replace = F)) # Apostando na Mega-Sena
## [1] 16 22 28 37 44 58

Exemplo 4.30 Em Python.

import numpy as np

# Define a semente para reprodutibilidade
np.random.seed(1234)

# Amostra aleatória sem reposição de 6 números entre 1 e 60
numeros = np.random.choice(np.arange(1, 61), size=6, replace=False)

# Ordena os números e imprime o resultado
print(np.sort(numeros))  # Output: [16 22 28 37 44 58]

Exercício 4.10 Leia a documentação das funções utilizadas no Exemplo 4.29.

  1. base::set.seed().
  2. base::sort().
  3. base::sample().

4.4.1.2 AAS com reposição - AASc

Caso a unidade sorteada tenha a chance de participar novamente da amostra, o procedimento é chamado AAS irrestrita ou com reposição, indicado por AASc.

Exemplo 4.31 (AASc) De uma urna com \(N\) cartões numerados de \(1\) a \(N\) sorteia-se um ao acaso, com probabilidade \(1/N\). O cartão sorteado é recolocado na urna e realiza-se um novo sorteio. Este procedimento é repetido até que se concluam todos os \(n\) sorteios desejados. Este é um processo de AAS com reposição.

Exercício 4.11 Defina as probabilidades de sorteio do Exemplo 4.31 considerando \(n=3\) sorteios.

Exercício 4.12 Calcule as probabilidades de sorteio do Exemplo 4.31 considerando \(n=3\) sorteios com \(N=10\).

4.4.2 Amostragem Estratificada

Amostragem estratificada consiste na divisão de uma população em grupos (estratos) segundo alguma(s) característica(s) conhecida(s) na populaçãao sob estudo, e de cada um desses estratos são selecionadas amostras em proporções convenientes. (Bolfarine and Bussab 2005, 93)

O objetivo deste tipo de amostragem é que o pesquisador possa se valer de estruturas pré-existentes de maneira a melhorar as inferências, reduzindo sua variabilidade.

Exemplo 4.32 Exemplo adaptado da documentação de sampling::strata() e de (An and Watts 1998), no qual gera-se uma matriz \(235 \times 3\) com as colunas renda, estado e região.

  • renda é gerada aleatoriamente
  • estado tem 2 categorias (E1, E2).
  • região tem 3 categorias (R1, R2, R3).
  • o quadro de amostragem é estratificado por região dentro do estado.

Retira-se uma amostra de tamanho \(n=35\) a partir do método srswor, amostragem aleatória simples (com igual probabilidade) sem reposição.

library(sampling)
# Dados
data <- rbind(matrix(rep('E1', 165), 165, 1, byrow = TRUE),
              matrix(rep('E2',70), 70, 1, byrow = TRUE))
data <- cbind.data.frame(data, c(rep('R1',100), rep('R2',50), 
                                 rep('R3',15), rep('R1',30),
                                 rep('R2',40)), 1000*runif(235))
names(data) <- c('state', 'region', 'income')
dim(data)
## [1] 235   3
# Tamanhos dos estratos populacionais
table(data$region, data$state)
##     
##       E1  E2
##   R1 100  30
##   R2  50  40
##   R3  15   0
# Amostra estratificada de tamanho 35 por região e estado
set.seed(42)
s <- sampling::strata(data, c('region','state'), 
                      size = c(10,5,10,4,6), method = 'srswor')

# Tabela de contingência da amostra
table(s$region, s$state)
##     
##      E1 E2
##   R1 10  4
##   R2  5  6
##   R3 10  0
# sampling::getdata() extrai os dados observados
dim(getdata(data, s))
## [1] 35  6

Exemplo 4.33 Em Python.

import pandas as pd
import numpy as np
from samplics import Stratified

# Dados
data = pd.DataFrame({
    'state': ['E1']*165+['E2']*70,
    'region': ['R1']*100+['R2']*50+['R3']*15+['R1']*30+['R2']*40,
    'income': 1000*np.random.rand(235)
})

# Dimensões do DataFrame
print(data.shape)  # Output: (235, 3)

# Tamanhos dos estratos populacionais
print(pd.crosstab(data['region'], data['state']))

# Amostragem estratificada usando samplics
strata = Stratified(method='srswor')
s = strata.sample(data['income'], stratum=data[['region', 'state']], 
                  allocation=[10, 5, 10, 4, 6], random_seed=42)

# Tabela de contingência da amostra (aproximada)
print(pd.crosstab(data.loc[s.index, 'region'], 
      data.loc[s.index, 'state']))

# Dimensões da amostra
print(len(s.index))

4.4.2.1 Amostragem por Quotas

[Q]uota sampling may be described as stratified sampling with a more or less nonrandom selection of units within strata. (Cochran 1977, 136)

Exemplo 4.34 Suponha que em uma cidade os eleitores estejam distribuídos conforme a tabela a seguir.

##            escolaridade
## sexo        Fundamental Médio Superior  Sum
##   Feminino         0.15  0.28     0.09 0.52
##   Masculino        0.14  0.24     0.10 0.48
##   Sum              0.29  0.53     0.19 1.00

Se for realizada uma amostragem por quotas de \(n=200\) eleitores, deve-se entrevistar o seguinte número de pessoas:

##            escolaridade
## sexo        Fundamental Médio Superior Sum
##   Feminino           30    56       18 104
##   Masculino          28    48       20  96
##   Sum                58   106       38 200

4.4.3 Amostragem por Conglomerados

O que caracteriza bem o planejamento amostral de conglomerados é que a unidade amostral contém mais de um elemento populacional. (Bolfarine and Bussab 2005, 159)

Exemplo 4.35 Adaptado da documentação de sampling::cluster() a partir dos dados sampling::swissmunicipalities, com informações sobre os municípios suíços em 2003. A variável REG tem 7 categorias na população e é usada como variável de conglomerado. O tamanho da amostra é 3, e o método é amostragem aleatória simples sem reposição.

library(sampling)
# Dados
data(swissmunicipalities)
dim(swissmunicipalities)
## [1] 2896   22
# Tamanhos dos conglomerados populacionais
table(swissmunicipalities$REG)
## 
##   1   2   3   4   5   6   7 
## 589 913 321 171 471 186 245
# Amostragem por conglomerado 
cl <- sampling::cluster(swissmunicipalities, clustername = c('REG'), 
                        size = 3, method = 'srswor')

# Conglomerados amostrais
table(cl$REG)
## 
##   5   6   7 
## 471 186 245
# sampling::getdata() extrai os dados observados
dim(getdata(swissmunicipalities, cl))
## [1] 902  24

Exemplo 4.36 Em Python.

import pandas as pd
import numpy as np
from samplics import Cluster

# Carregando os dados do swissmunicipalities
url = "https://filipezabala.com/data/swissmunicipalities.csv"
swissmunicipalities = pd.read_csv(url)

# Dimensões do DataFrame
print(swissmunicipalities.shape)

# Tamanhos dos conglomerados populacionais
print(swissmunicipalities['REG'].value_counts())

# Amostragem por conglomerado usando samplics
cluster = Cluster(method='srswor')
cl = cluster.sample(swissmunicipalities['POPTOT'], 
                    cluster=swissmunicipalities['REG'], 
                    n=3, random_seed=42)

# Conglomerados amostrais (aproximado)
sampled_clusters = swissmunicipalities.loc[cl.index]['REG'].unique()
print(swissmunicipalities[swissmunicipalities['REG'].isin(sampled_clusters)]['REG'].value_counts())

# Dimensões da amostra
print(len(cl.index))

4.4.4 Amostragem Sistemática

A vantagem principal da amostragem sistemática (AS) é a facilidade de sua execução. Também, é bem menos sujeita a erros do entrevistador que os outros esquemas de amostragem. (Bolfarine and Bussab 2005, 181)

Considere uma população de \(N\) unidades elementares numeradas de 1 a \(N\). Para selecionar uma amostra de \(n\) observações sorteia-se aleatoriamente uma das primeiras \(k=N/n\) unidades, digamos \(a\), com probabilidade \(1/k\) selecionando sistematicamente as próximas observações a cada \(k\) unidades. Matematicamente, \[a, a+k, a+2k, \ldots, a+(n-1)k.\]

Exemplo 4.37 Seja uma população com \(N=100\), da qual deseja-se retirar uma amostra sistemática de tamanho \(n=5\). Neste caso \(k=100/5=20\), então sortearmos aleatoriamente um número entre 1 e 20 com probabilidade \(1/20\). Se o número sorteado for \(a=4\), a amostra sistemática então é definida como \[4, 4+20, 4+2 \times 20, 4+3 \times 20, 4+4 \times 20 = 4,24,44,64,84.\]

N <- 100 # Tamanho da população
n <- 5 # Tamanho da amostra
(k <- N/n) # Tamanho do salto
## [1] 20
set.seed(1) # Fixando a geração pseudo-aleatória
(a <- sample(1:k, size = 1)) # Amostra de tamanho 1 com prob. 1/k
## [1] 4
for(i in 1:n){print(a+(i-1)*k)} # Amostra de tamanho n
## [1] 4
## [1] 24
## [1] 44
## [1] 64
## [1] 84

Exemplo 4.38 Em Python.

import numpy as np

# Parâmetros
N = 100  # Tamanho da população
n = 5  # Tamanho da amostra

# Calculando o tamanho do salto
k = N / n  # Resultado: 20.0

# Fixando a semente para reprodutibilidade
np.random.seed(1)

# Sorteando o primeiro elemento da amostra
a = np.random.randint(1, k + 1)  # Resultado: 17

# Gerando a amostra sistemática
amostra = [a + i * k for i in range(n)]

# Imprimindo a amostra
print(amostra)  # Output: [17.0, 37.0, 57.0, 77.0, 97.0]

Exercício 4.13 Considere o código do Exemplo 4.37.
a. Rode o código repetidas vezes retirando a linha set.seed(1). O que você observa?
b. Refaça o exercício considerando outros valores de \(N\) e \(n\), tais que \(n<N\).

References

An, Anthony, and Donna Watts. 1998. “New SAS Procedures for Analysis of Sample Survey Data.” In SUGI Proceedings. Vol. 23. https://stats.oarc.ucla.edu/wp-content/uploads/2016/02/svy_survey.pdf.
Bolfarine, Heleno, and Wilton de Oliveira Bussab. 2005. Elementos de Amostragem. Editora Blucher. https://www.blucher.com.br/livro/detalhes/elementos-de-amostragem-331.
Cochran, William G. 1977. Sampling Techniques. 3rd ed. John Wiley & Sons.
Diallo, Mamadou S. 2021. samplics: a Python Package for selecting, weighting and analyzing data from complex sampling designs.” Journal of Open Source Software 6 (68): 3376. https://doi.org/10.21105/joss.03376.
Lumley, Thomas. 2004. “Analysis of Complex Survey Samples.” Journal of Statistical Software 9 (1): 1–19. https://www.jstatsoft.org/article/view/v009i08.
———. 2010. Complex Surveys: A Guide to Analysis Using r: A Guide to Analysis Using r. John Wiley; Sons. https://r-survey.r-forge.r-project.org/svybook/.
———. 2024. “Survey: Analysis of Complex Survey Samples.” https://cran.r-project.org/package=survey.
Tillé, Yves, and Alina Matei. 2023. Sampling: Survey Sampling. https://CRAN.R-project.org/package=sampling.