# #| echo: true
# bd1 = pns2019 |>
# select(UPA_PNS, V0024, P05402, P050, C008, VDD004A, VDF004, C009, I00102, V0001, V0026, V00291) |>
# filter(P05402 < 99, P050 < 9, C009 < 9, I00102 < 9) |>
# drop_na()
#
# write_csv(bd1, "pns2019final.csv")
## EU COMENTEI ISSO PQ NÃO DÁ PRA COLOCAR O BANCO DE DADOS ORIGINAL NO GITHUB ENTÃO NÃO DÁ PRA RODAR ESSE GRÁFICO NO RPUBSArtigo 2
Artigo 2 - Sem Filtro: Escolaridade, Renda e o Perfil Real de Quem Fuma no Brasil.
Introdução e hipótese
Quebrando estereótipos relacionados ao hábito de tabagismo, que vai ser medido pela quantidade de cigarros por dia.
Como a PNS fala sobre a estrutura social brasileira, nossas hipóteses perpassarão o campo das políticas públicas e da desigualdade estrutural.
Primeira hipótese Desigualdade de Acesso (Setor Público vs. Privado): H0 Não há diferença estatisticamente significativa na mediana de cigarros consumidos por dia entre quem tem e quem não tem plano de saúde.
H1: Indivíduos sem plano de saúde privado (I00102 = Não) apresentam um consumo diário de cigarros estatisticamente maior do que aqueles com cobertura privada. Teste de Mann-Whitney;
Segunda Hipótese: educação é um determinante social, superando até mesmo a renda na predição de comportamentos de fumante. Quanto mais anos o Estado consegue manter um indivíduo no sistema educacional, menor será a carga de tabagismo que ele desenvolverá na vida adulta.
H0: A quantidade de cigarros fumados por dia é igual em todos os níveis de instrução.
H1: Existe uma diferença significativa no consumo, com uma queda abrupta na intensidade do tabagismo a partir da conclusão do Ensino Médio.
Teste de Kruskal-Wallis
Terceira Hipótese: tabagismo atinge de forma mais pesada os grupos demográficos que já sofrem com outras exclusões históricas.
H0: O consumo diário de cigarros é estatisticamente igual entre todas as categorias de cor/raça autodeclaradas.
H1: A mediana de consumo de cigarros varia significativamente entre os grupos, sendo estatisticamente maior nas populações preta e parda (C009) em comparação à população branca.
Teste: Teste de Kruskal-Wallis
Pré-processamento de dados.
O banco de dados foi retirado https://ftp.ibge.gov.br/PNS/2019/Microdados/Dados/PNS_2019_20220525.zip
Foram selecionadas somente as variáveis:
A VARIÁVEL ALVO: P05402: Quantos cigarros a pessoa pessoa fuma por dia, variável quantitativa discreta. Removido o 99 e os NAS
C008 IDADE
P05402 QUANTOS CIGARROS
VDD004A nível de instrução
VDF004 RENDA
C009 Cor de pele
I00102 Plano de saúde
V0001 ESTADO
V0026 Situação censitária
V00291 peso amostral
TODAS ELAS FORAM REMOVIDAS AS IGNORADAS E AS NAS
O banco de dados pré amostragem foi para o github
bd1 = read_csv("https://raw.githubusercontent.com/renatobarreira/artigotabagismo/refs/heads/main/pns2019final.csv")AMOSTRAGEM
Como a PNS não entrevista todos os brasileiros, o IBGE atribui “pesos” para garantir que, por exemplo, um jovem entrevistado no interior do Acre represente “X” mil jovens parecidos com ele na população real.
NA DÚVIDA, JOGUEM NO NOTEBOOKLM E PERGUNTEM OQ EU TO FAZENDO E PEÇA A REFERÊNCIA.
cap. 2 do Statistical para social sciences do Agresti
Lumley, T. (2004). Analysis of Complex Survey Samples. Journal of Statistical Software, 9(8), 1–19. https://doi.org/10.18637/jss.v009.i08
LUMLEY, T. Complex surveys: a guide to analysis using R. Hoboken: John Wiley & Sons, 2010.
Variáveis de amostragem UPA_PNS, Estado V0024, V00291 PESO de acordo com a referência oficial do STOPA, S. R. et al. Pesquisa Nacional de Saúde 2019: histórico, métodos e perspectivas. Epidemiologia e Serviços de Saúde, Brasília, v. 29, n. 5, e2020315, 2020. DOI: 10.1590/S1679-4974202000
options(survey.lonely.psu = "adjust")
bd1_svy = svydesign(
ids = ~UPA_PNS, #nidades Primárias de Amostragem (UPA)
strata = ~V0024, #Estratificação
weights = ~V00291, #peso calibrado correto dometado
data = bd1, #bd1 bd1 aquele do github
nest = TRUE #sei lá só sei q tá assim
)Esse é o banco de dados que vamos usar agora, o banco de dados com os pesos da monstragem.
Análise exploratória
ggplot(bd1, aes(x = factor(P05402))) +
geom_bar(fill = "steelblue") +
labs(
title = "Quantos cigarros a pessoa fuma",
x = "Quantidade de cigarros",
y = "Quantidade"
) +
theme_minimal()bd1 |>
mutate(faixa_idade = case_when(
C008 >= 18 & C008 <= 24 ~ "18-24",
C008 >= 25 & C008 <= 34 ~ "25-34",
C008 >= 35 & C008 <= 44 ~ "35-44",
C008 >= 45 & C008 <= 54 ~ "45-54",
C008 >= 55 & C008 <= 64 ~ "55-64",
C008 >= 65 & C008 <= 74 ~ "65-74",
C008 >= 75 ~ "75+"
)) |>
filter(!is.na(faixa_idade) & !is.na(P05402) & !is.na(V00291)) |>
ggplot(aes(x = faixa_idade, y = P05402, fill = faixa_idade, weight = V00291)) +
geom_boxplot(
alpha = 0.7,
outlier.color = "red", # Ajuda a identificar os extremos de cada década
outlier.alpha = 0.5
) +
labs(
title = "Consumo Diário de Cigarros por Faixa Etária Detalhada",
subtitle = "Estimativa populacional utilizando os pesos amostrais (PNS 2019)",
x = "Faixa Etária (Anos)",
y = "Cigarros por dia"
) +
theme_minimal() +
theme(
legend.position = "none",
# Inclina as legendas do eixo X em 45º para facilitar a leitura
axis.text.x = element_text(angle = 45, hjust = 1)
)bd1 |>
filter(!is.na(VDD004A) & !is.na(P05402) & !is.na(V00291)) |>
mutate(escolaridade = factor(
VDD004A,
levels = 1:7,
labels = c("Sem instrução", "Fund. Inc.", "Fund. Comp.", "Médio Inc.", "Médio Comp.", "Sup. Inc.", "Sup. Comp.")
)) |>
ggplot(aes(x = escolaridade, y = P05402, fill = escolaridade, weight = V00291)) +
geom_boxplot(alpha = 0.7, outlier.color = "red", outlier.alpha = 0.5) +
labs(
title = "Distribuição do Consumo de Cigarros por Escolaridade (Ponderado)",
x = "Nível de Instrução",
y = "Cigarros fumados por dia"
) +
theme_minimal() +
theme(legend.position = "none", axis.text.x = element_text(angle = 45, hjust = 1))bd1 |>
filter(!is.na(VDF004) & !is.na(P05402) & !is.na(V00291)) |>
mutate(renda_categorias = factor(
VDF004,
levels = 1:7,
labels = c(
"Até 1/4 SM",
"1/4 a 1/2 SM",
"1/2 a 1 SM",
"1 a 2 SM",
"2 a 3 SM",
"3 a 5 SM",
"Mais de 5 SM"
)
)) |>
ggplot(aes(x = renda_categorias, y = P05402, fill = renda_categorias, weight = V00291)) +
geom_boxplot(
alpha = 0.7,
outlier.color = "red",
outlier.alpha = 0.5
) +
labs(
title = "Distribuição do Consumo de Cigarros por Faixa de Renda",
subtitle = "Estimativa populacional utilizando os pesos amostrais (PNS 2019)",
x = "Renda Domiciliar Per Capita (Salários Mínimos - SM)",
y = "Cigarros fumados por dia"
) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1, size = 10)
)bd1 |>
filter(!is.na(V0026) & !is.na(P05402) & !is.na(V00291)) |>
mutate(situacao_domicilio = factor(
V0026,
levels = c(1, 2),
labels = c("Urbano", "Rural")
)) |>
ggplot(aes(x = situacao_domicilio, y = P05402, fill = situacao_domicilio, weight = V00291)) +
geom_boxplot(
alpha = 0.7,
outlier.color = "red",
outlier.alpha = 0.5
) +
scale_fill_manual(values = c("Urbano" = "slategray", "Rural" = "darkseagreen")) +
labs(
title = "Consumo Diário de Cigarros: Urbano vs. Rural",
subtitle = "Estimativa populacional utilizando os pesos amostrais (PNS 2019)",
x = "Situação do Domicílio (V0026)",
y = "Cigarros fumados por dia (P05402)"
) +
theme_minimal() +
theme(legend.position = "none")bd1 |>
filter(!is.na(C009) & !is.na(P05402) & !is.na(V00291)) |>
mutate(cor_raca = factor(
C009,
levels = 1:5,
labels = c("Branca", "Preta", "Amarela", "Parda", "Indígena")
)) |>
ggplot(aes(x = cor_raca, y = P05402, fill = cor_raca, weight = V00291)) +
geom_boxplot(
alpha = 0.7,
outlier.color = "red",
outlier.alpha = 0.5
) +
scale_fill_brewer(palette = "Set2") +
labs(
title = "Distribuição do Consumo de Cigarros por Cor/Raça",
subtitle = "Estimativa populacional utilizando os pesos amostrais (PNS 2019)",
x = "Cor ou Raça autodeclarada (C009)",
y = "Cigarros fumados por dia (P05402)"
) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1, size = 11)
)bd1 |>
filter(!is.na(I00102) & !is.na(P05402) & !is.na(V00291)) |>
mutate(plano_saude = factor(
I00102,
levels = c(1, 2),
labels = c("Sim", "Não")
)) |>
ggplot(aes(x = plano_saude, y = P05402, fill = plano_saude, weight = V00291)) +
geom_boxplot(
alpha = 0.7,
outlier.color = "darkred",
outlier.alpha = 0.5
) +
scale_fill_manual(values = c("Sim" = "steelblue", "Não" = "indianred")) +
labs(
title = "Consumo de Cigarros: Cobertura de Plano de Saúde",
subtitle = "Estimativa populacional utilizando os pesos amostrais (PNS 2019)",
x = "Possui plano de saúde médico particular/empresa? (I00102)",
y = "Cigarros fumados por dia (P05402)"
) +
theme_minimal() +
theme(legend.position = "none")TESTE DE HIPÓTESES
Referências:
Para os testes não paramétricos, além do livro do Agresti dá pra usar o
SIEGEL, S.; CASTELLAN JR., N. J. Estatística não-paramétrica para ciências do comportamento. 2. ed. Porto Alegre: Artmed, 2006.
WILCOXON–MANN–WHITNEY TEST pg. 201 do Statistical Methodsfor theSocial Sciences
Teste de Kruskal-Wallis (a versão não-paramétrica da ANOVA) idem pg. 362.
Os testes dizem se há diferença, mas não dizem qual é a diferença real em números. Por isso eu fiz tb a estimativa para vocês interpretarem.
Primeiro teste Plano de Saúde:
Testar se a quantidade de cigarros diários difere significativamente entre quem tem e quem não tem plano de saúde privado.
teste_plano = svyranktest(
formula = P05402 ~ I00102,
design = bd1_svy,
test = "wilcoxon"
)
print(teste_plano)
Design-based KruskalWallis test
data: P05402 ~ I00102
t = -0.94228, df = 3935, p-value = 0.3461
alternative hypothesis: true difference in mean rank score is not equal to 0
sample estimates:
difference in mean rank score
-0.0137362
Segundo teste Hipótese 2: Nível de Escolaridade (7 Grupos)
teste_escolaridade = svyranktest(
formula = P05402 ~ VDD004A,
design = bd1_svy,
test = "KruskalWallis"
)
print(teste_escolaridade)
Design-based KruskalWallis test
data: P05402 ~ VDD004A
df = 6, Chisq = 5.9261, p-value = 0.4317
estimativas_escola = svyby(~P05402, by = ~VDD004A, design = bd1_svy, FUN = svymean, na.rm = TRUE)
print(estimativas_escola) VDD004A P05402 se
1 1 12.73353 0.6577105
2 2 13.70709 0.3496738
3 3 12.65857 0.6184878
4 4 12.77479 0.9798328
5 5 13.11418 0.3563726
6 6 13.88353 1.0775570
7 7 12.32559 0.5237731
Terceiro teste: Cor/Raça (5 Grupos)
teste_raca = svyranktest(
formula = P05402 ~ C009,
design = bd1_svy,
test = "KruskalWallis"
)
# Exibe o resultado no console
print(teste_raca)
Design-based KruskalWallis test
data: P05402 ~ C009
df = 4, Chisq = 25.67, p-value = 3.822e-05
estimativas_raca = svyby(~P05402, by = ~C009, design = bd1_svy, FUN = svymean, na.rm = TRUE)
print(estimativas_raca) C009 P05402 se
1 1 14.13265 0.3169038
2 2 12.44021 0.4547649
3 3 15.24367 2.6940833
4 4 12.43599 0.3042334
5 5 11.14804 2.0917019