Um Exercício com PPT

Author

Dinilson Pedroza Jr.

Quarto

Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org.

Introdução

Vamos realizar um exercício de amostragem com Probabilidades Proporcionais ao Tamanho (ou PPS, da sigla em inglês). É um tipo de amostragem muito usado em pesquisas domiciliares, tais como a PNADc do IBGE. Criaremos bases de dados fictícias de setores censitários e questionários respondidos. O propósito deste exercício é ver, de maneira simples, os conceitos de amostragem em dois estágios e o peso dos questionários respondidos. Enfatizamos o uso do R, software livre (free software) e de código aberto (open source), que pode ser utilizado em licença GNU (GPL). GNU: “Free as in Freedom”: https://www.gnu.org/. Trabalho digitado em rmarkdown (Xie, Yhui et al., 2025).

Estágio 1: amostragem de tipo PPS no R

Pacotes que serão usados:

library(sampling)
library(survey)
library(dplyr)

Criar setores censitários

Vamos criar um data frame com um conjunto de 9 setores censitários (\(sc\)) e seus respectivos tamanhos (número de domicílios em cada setor, todos definidos de maneira arbitrária).

sc <- data.frame(
  setor = 1:9,
  domicilios = c(120, 300, 80, 200, 150, 100, 90, 105, 125)
)
sc
  setor domicilios
1     1        120
2     2        300
3     3         80
4     4        200
5     5        150
6     6        100
7     7         90
8     8        105
9     9        125

Vamos definir o tamanho da amostra (\(n\)):

n <- 5

Probabilidades dos setores censitários

Vamos criar um vetor de probabilidades (\(p\)) dos setores censitários. Essas probabilidades serão calculadas pelos tamanhos dos setores sobre o número total de domicílios. Quanto maior o setor, maior a probabilidade:

p <- sc$domicilios / sum(sc$domicilios)
p
[1] 0.09448819 0.23622047 0.06299213 0.15748031 0.11811024 0.07874016 0.07086614
[8] 0.08267717 0.09842520

Quando somamos os componentes desse vetor de probabilidades, o resultado é 1.

Probabilidade proporcional ao tamanho (PPS)

Vamos selecionar os 5 setores censitários (de um total de 9) pelo método da probabilidade proporcional ao tamanho (ou PPS da sigla em inglês). Esse método é comum em pesquisas domiciliares (Bolfarine Heleno e Bussab, Wilton, 2005, p. 225). O PPS atribui maior chance de escolha aos setores com maior número de domicílios. Mas o processo de escolha continua sendo amostral, não se trata de apenas escolher os setores com as maiores probabilidades, \(p_i\).

No processo de escolha, o PPS usa as probabilidades multiplicadas por \(n\), os \(\pi_i\) (e não as probabilidades, \(p_i\)) (Lumley, Thomas, 2010, p. 150). As probabilidades \(\pi_i\) são calculadas da seguinte forma:

\(\pi_i = p_i . n\)

Notem que a soma dos \(\pi_i\) não resulta em 1, mas em \(n\), o número de observações na amostra:

\(\sum_{i=1}^{n} \pi_i = n\)

Vamos usar a função UPsystematic do pacote sampling para produzir um vetor pik em que não só os \(\pi_i\) são calculados, mas essas novas “probabilidades” são usadas para selecionar os setores de maneira aleatória. Os \(\pi_i\) maiores que 1 são automaticamente escolhidos, retirados da amostra e o processo de seleção se dá com os setores restantes. O vetor pik é composto por 0 e 1. Os setores que no vetor pik estão com o número 1 associado, são os escolhidos (Tillé, Yves.; Matei, Alina, 2025).

pik <- UPsystematic(p * n)
pik
[1] 0.000000 1.181102 1.000000 0.000000 1.000000 0.000000 1.000000 0.000000
[9] 1.000000

Na amostragem em dois estágios, os setores são selecionados conforme o processo acima. Casa setor é um conglomerado de domicílios informantes (um cluster). O processo seguinte é o de sortear, dentro dos setores censitários escolhidos, os domicílios que serão entrevistados.

Estágio 2: domicílios e pesos

Vamos montar novo data frame (**sc2**) com 11 setores censitários e seu correspondente número de domicílios (números arbitrários). Logo a seguir acrescentamos uma coluna com as probabilidades (\(p2\)) definidas pelo número de domicílios do setor sobre o total de domicílios (\(p_i\)). Na montagem e formatação desse data frame, usamos os recurso do pacote *dplyr* (Wickham, Hadley et al., 2023).:

sc2 <- data.frame(
  setor = 1:11,
  domicilios = c(12, 30, 10, 20, 15, 9, 14, 6, 17, 8, 5)
)

sc2 <- sc2 %>%
  mutate(p2 = domicilios / sum(domicilios))
sc2
   setor domicilios         p2
1      1         12 0.08219178
2      2         30 0.20547945
3      3         10 0.06849315
4      4         20 0.13698630
5      5         15 0.10273973
6      6          9 0.06164384
7      7         14 0.09589041
8      8          6 0.04109589
9      9         17 0.11643836
10    10          8 0.05479452
11    11          5 0.03424658

Vamos criar agora um data frame, df_pop, com as seguintes características: para cada setor censitário acrescentamos o número de entrevistas realizadas e a renda coletada em cada uma das entrevistas. A coluna “setor” de df_pop é a coluna “setor” de sc2, com cada setor repetido pela quantidade de entrevistas realizadas (números arbitrários, mas menores que o número de domicílios de cada setor). Por exemplo, o setor 1 de df_pop terá 11 linhas (ou 11 entrevistas), o setor 2 terá 15 entrevistas e assim sucessivamente. A renda acrescentada é uma série aleatória normalmente distribuída, com média 2000 e desvio-padrão 500. Na definição desse conjunto de dados aleatórios (rendas) fixamos a amostra com o comando set.seed.

df_pop <- data.frame(
  setor = rep(sc2$setor, times = c(8, 15, 6, 12, 9, 7, 5, 10, 3, 9, 5)), 
  renda = rnorm(89, mean = 2000, sd = 500))

head(df_pop)
  setor    renda
1     1 1695.530
2     1 1541.410
3     1 2803.275
4     1 1845.139
5     1 2169.277
6     1 2260.406

Acrescentamos ao data frame df_pop as probabilidades, \(p2\), já calculadas para cada setor:

df_pop <- df_pop %>%
  left_join(sc2 %>% select(setor, p2), by = "setor")
head(df_pop)
  setor    renda         p2
1     1 1695.530 0.08219178
2     1 1541.410 0.08219178
3     1 2803.275 0.08219178
4     1 1845.139 0.08219178
5     1 2169.277 0.08219178
6     1 2260.406 0.08219178

A função left_join aninha os dados tendo como referência a coluna setor, com suas respectivas probabilidades. Mas atenção: estamos aqui falando das \(p_i\) e não das probabilidades do PPS, as \(\pi_i\), conforme feito no Estágio 1 deste exercício.

Em seguida, acrescentamos ao mesmo data frame df_pop, uma coluna com os pesos de cada setor censitário. O peso corresponde ao inverso das probabilidades. A ideia é atribuir maior peso às unidades com menor chance de serem eventualmente escolhidas. Com a função write.csv, exportamos a tabela em CSV para ser lida e trabalhada em um planilha eletrônica.

df_pop <- df_pop %>%
  mutate(peso = 1 / p2)
head(df_pop)
  setor    renda         p2     peso
1     1 1695.530 0.08219178 12.16667
2     1 1541.410 0.08219178 12.16667
3     1 2803.275 0.08219178 12.16667
4     1 1845.139 0.08219178 12.16667
5     1 2169.277 0.08219178 12.16667
6     1 2260.406 0.08219178 12.16667
write.csv(df_pop, "df_populacao")

Resultados: objeto de design no Survey

O pacote Survey, desenvolvido por Thomas Lumley (2010), permite trabalhar com dados de uma pesquisa respeitando o seu desenho amostral (design). O pacote calcula estatísticas relativas ao banco de dados com funções apropriadas, como por exemplo, renda média. Nesse caso é preciso, primeiro, criar uma estrutura de design e, em seguida, aplicar à estrutura de design a função svymean (Lumley, Thomas, 2024).

Portanto, nesse segundo estágio não estamos selecionando as unidades que são entrevistadas nem determinando o peso dos questionários. Por suposto, isso já foi feito. Estamos produzindo informações a partir dessas entrevistas. É como acontece no uso dos microdados da PNADc trimestral, por exemplo. Os microdados disponíveis em https://www.ibge.gov.br/estatisticas/sociais/populacao/17270-pnad-continua.html?=&t=microdados são resultados dos questionários aplicados (devidamente desidentificados). Para a produção de informação baseada nesses microdados, o IBGE recomenda o uso do pacote PNADcIBGE (Braga, Douglas; Assunção, Gabriel, 2024).

Objeto de design:

design <- svydesign(ids=~setor, weights=~peso, data=df_pop)

Cálculo da renda média:

svymean(~renda, design)
        mean     SE
renda 1963.7 50.287

Importante notar que sem o respeito ao desenho amostral, o trabalho computacional para realizar estimativas se vê comprometido; seria o caso de se realizar cálculos presumindo a seleção por amostragem simples (Silva, Pedro et al. 2002).

No resultado acima, são fornecidos a renda média e o erro padrão. A renda média não é simplesmente a média aritmética da coluna com os valores de renda. Mas uma média calculada em conformidade com o desenho da pesquisa, ou seja, levando em conta sua estrutura de pesos. Na verdade, usando essa última versão do df_pop, a conta feita pela função svymean é a seguinte para renda média (RM):

\(RM = \frac{\sum_i^{89}renda_i . peso_i}{\sum_i^{89}peso_i}\)

Considerando as 89 observações de nosso exemplo.

Calculamos o intervalo de confiança para o erro padrão com a seguinte fórmula:

\(\hat{\mu} \pm 1,96 . SE\)

Para a média e o erro padrão fornecidos, o intervalo de confiança fica é definido por:

\(2015,5 \pm (1,96) . (36,906)\)

O que nos deixa com o seguinte intervalo de confiança, para 95%:

\(IC95\% = [1943,16; 2087,84]\)

Com 95% de confiança, a renda média populacional está entre R$ 1.943,16 e R$ 2.087,84.

Atenção: numa pesquisa real, os estágios 1 e 2 são sequenciais. Neste exercício criamos bases de dados distintas para aplicar os dois estágio do PPS. A PNAD é realizada em estágios sequenciais. Inclui no seu plano amostral as categorias de estrato (unidades geográficas), conglomerados (setores censitários ou unidades primárias de amostragem - UPA’s) e as unidades secundárias de amostragem - USA’s. Dentro de cada município as UPA’s que serão pesquisadas são escolhidas pelo método da PPS, baseado-se no número de domicílios de cada setor ou UPA. Há também casos no plano amostral da PNAD que se recorre a unidades amostrais terciárias (Silva, Pedro et al., 2002).

Referências:

Bolfarine, Heleno e Bussab, Wilton. Elementos de amostragem. São Paulo: Blucher, 2005.

Braga Douglas, Assuncao Gabriel. PNADcIBGE: Downloading, Reading and Analyzing PNADC Microdata. doi:10.32614/CRAN.package.PNADcIBGE https://doi.org/10.32614/CRAN.package.PNADcIBGE, R package version 0.7.5, 2024, https://CRAN.R-project.org/package=PNADcIBGE.

Lumley, Thomas. Complex surveys: a guide do analysis using R”. New Jersey: Wiley, 2010.

Lumley, Thomas. “survey: analysis of complex survey samples”. R package version 4.4, 2024, https://cran.r-project.org/web/packages/survey/index.html.

Silva, Pedro; Pessoa, Djalma e Lila, Maurício. “Análise estatística de dados da PNAD: incorporando a estrutura do plano amostral”. Ciência e Saúde Coletiva 7 (4), 2002.

Tillé Yves, Matei, Alina. sampling: Survey Sampling. doi:10.32614/CRAN.package.sampling https://doi.org/10.32614/CRAN.package.sampling, R package version 2.11, 2025, https://CRAN.R-project.org/package=sampling.

Wickham, Hadley; Roman, François; Henry, Lionel; Müller, Kirill, Vaughan, Davis. dplyr: A Grammar of Data Manipulation. doi:10.32614/CRAN.package.dplyr https://doi.org/10.32614/CRAN.package.dplyr, R package version 1.1.4, 2023, https://CRAN.R-project.org/package=dplyr.

Xie, Yihui, Dervieux, Christophe; Riederer, Emily (2025). R Markdown Cookbook. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 9780367563837, https://bookdown.org/yihui/rmarkdown-cookbook.