logo

Atividade

Neste documento, estão os explicados os procedimentos para as respostas ao Exercício sobre o diagrama de Lexis: Atividade 4.2: Padronização de taxas, cujo prazo de entrega foi dia 26/08/2022. O trabalho foi realizado no software R e os pacotes utilizados foram:

if (!require("pacman"))
  install.packages("pacman")

pacman::p_load(tidyverse,  # Manipulação e tratamento de dados
               kableExtra, # Gera tabelas .html
               plotly,     # Gera gráfico interativo
               readxl      # Pacote para ler tabelas .xsls
)


options(scipen = 99) #Para que os números decimais não fiquem em notação científica

A orientação da atividade é:

Escolha dois países de diferentes características demográficas e socioeconômicas e compare as suas TBM. Descreva os cálculos e as hipóteses utilizadas nesta comparação. (Utilize os dois métodos de comparação de TBM - padronização direta e indireta).

Para o presente trabalho, foram usados os dados de população e mortalidade para ambos os sexos e por idade simples disponibilizados pelo Department of Economic and Social Affairs (Population Division) da Organização das Nações Unidas. Os dados utilizados dizem respeito às médias de população e mortes entre os anos de 2016 e 2020.

1 Ajuste dos dados

Para o trabalho, foram escolhidos Brasil e Nigéria. A renda per capita brasileira (8.551 dólares em 2020) é quase 4 vezes maior do que a da Nigéria (2.422 dólares em 2020), o que tem impactos consideráveis nas taxas de natalidade e mortalidade, apesar de uma população estimada de tamanho parecido. Para o cálculo das taxas padronizadas, serão usados os dados para a população mundial.

Ademais, as pirâmides etárias são distintas. A pirâmide brasileira está à esquerda na Figura 1.1 e a nigeriana à esquerda. Estas e as pirâmides de outros países podem ser consultadas aqui.

Pirâmide etária brasileira à esquerda e nigeriana à direita (projeção 2020). Fonte: https://population-pyramid.net.Pirâmide etária brasileira à esquerda e nigeriana à direita (projeção 2020). Fonte: https://population-pyramid.net.

Figure 1.1: Pirâmide etária brasileira à esquerda e nigeriana à direita (projeção 2020). Fonte: https://population-pyramid.net.

1.1 Dados de população

As projeções de população se referem à

Total population (both sexes combined) by single age. De facto population as of 1 July of the year indicated classified by single age (0, 1, 2, …, 99, 100+). Data are presented in thousands.

Os dados estão em milhares de pessoas por idade simples. Nesse caso, serão feitas as agregações compatíveis com as estimativas populacionais oferecidas pelo IBGE, o que poderá facilitar consultas futuras.

Os dados por idade para Brasil, Nigéria e o mundo no período desejado podem ser importados e manipulados a partir da ONU.

  # Repositório da ONU para a tabela .xlsx
file <-  "https://population.un.org/wpp/Download/Files/1_Indicators%20(Standard)/EXCEL_FILES/2_Population/WPP2022_POP_F01_1_POPULATION_SINGLE_AGE_BOTH_SEXES.xlsx" 


  # Arquivo temporário para download da tabela
temp_pop <- tempfile()

  # Download da tabela em formato compatível com Windows
download.file(url      = file,
              destfile =  temp_pop,
              mode     = "wb")

  # Seleciona países de interesse e o padrão
countries <- c("Brazil", "Nigeria", "WORLD")

  # Anos de interesse
years <- 2016:2020

  # Grupos de idade iguais aos usados pelo IBGE
age_groups <- 
  c(
    "< 1",
    "1-4",
    "5-9",
    "10-14",
    "15-19",
    "20-24",
    "25-29",
    "30-34",
    "35-39",
    "40-44",
    "45-49",
    "50-54",
    "55-59",
    "60-64",
    "65-69",
    "70-74",
    "75-79",
    "80-84",
    "85-89",
    "90+"
  )

  # Importação dos dados de população
population <- 
read_xlsx(temp_pop, 
                  sheet = "Estimates",
                  range = "C17:DH20541") %>% 
  rename("Country" = 1) %>%      
  filter(Country %in% countries, # Filtra os dados dos países
         Year    %in% years) %>% # Filtra os dados dos anos
  pivot_longer(cols      = `0`:last_col(), # Ajuste das colunas para 
               names_to  = "Age",          # formato longer
               values_to = "Population") %>% 
  select(Country, Year, Age, Population)   # Colunas de interesse


  # Aging groups adjustment
population_adjusted <- 
  population %>%
  mutate(
    Age = case_when(Age == "100+" ~ "1000",  # Ajuste para transformar
                    TRUE          ~ Age),    # Coluna de idades em número
    Age = as.numeric(Age),
    Age_group = cut(      # Divisão das faixas etárias
      Age,                # Agrupa nas faixas
      breaks         = c(0, 1, seq(from = 5, to = 90, by = 5), 140),  # Períodos de quebra
      right          = FALSE,
      include.lowest = TRUE,
      labels         = age_groups    # Nomes dos intervalos etários
    ),
    Population = as.numeric(Population)
  ) %>%
  group_by(Country, Age_group, Year) %>%       # Agrupa para calcular
  summarise(Population = sum(Population)) %>%  # a população em cada faixa considerando os anos
  group_by(Country, Age_group) %>%
  summarise(Mean_pop = round(mean(Population) * 1000)) %>% # Média da população nos 5 anos (em unidades) 
  drop_na()

Em que uma amostra pode ser vista em

head(population_adjusted, n = 20) %>% 
  kbl(
    format      = "html",
    align       = "c", 
    digits      = 0,
    booktabs    = TRUE,
    format.args = list(big.mark = ","),
    col.names   = c("Country", "Age Group", "População média")) %>%
  footnote(
    general  = "Projeções populacionais do Department of Economic and Social Affairs (média entre os anos de 2016 e 2020).",
    general_title = "Fonte: ",
    footnote_as_chunk = TRUE,
    threeparttable    = TRUE
  ) %>%
  kable_styling("striped")
Country Age Group População média
Brazil < 1 2,889,716
Brazil 1-4 11,717,182
Brazil 5-9 14,897,592
Brazil 10-14 15,564,554
Brazil 15-19 16,592,611
Brazil 20-24 17,136,844
Brazil 25-29 17,205,780
Brazil 30-34 17,576,051
Brazil 35-39 16,909,950
Brazil 40-44 15,099,655
Brazil 45-49 13,540,596
Brazil 50-54 12,517,425
Brazil 55-59 11,108,120
Brazil 60-64 9,023,752
Brazil 65-69 6,957,735
Brazil 70-74 4,865,925
Brazil 75-79 3,394,389
Brazil 80-84 2,021,356
Brazil 85-89 846,171
Brazil 90+ 234,824
Fonte: Projeções populacionais do Department of Economic and Social Affairs (média entre os anos de 2016 e 2020).

1.2 Dados de mortalidade

As informações de mortalidade se referem, nos casos do Brasil e da Nigéria, ao uso de estatísticas vitais, conforme metadados disponíveis na fonte.

Os dados coletados se referem às mortes em ambos os sexos também por idades simples e podem ser manipulados e importados diretamente da fonte.

   # Repositório da ONU para a tabela .xlsx
file_death <-  "https://population.un.org/wpp/Download/Files/1_Indicators%20(Standard)/EXCEL_FILES/4_Mortality/WPP2022_MORT_F01_1_DEATHS_SINGLE_AGE_BOTH_SEXES.xlsx"


  # Arquivo temporário para download da tabela
temp_death <- tempfile()

  # Download da tabela em formato compatível com Windows
download.file(url      = file_death,
              destfile = temp_death,
              mode     = "wb")

  # Tabela de mortes para os grupos selecionados
  # (programação parecida para os dados de população)
deaths <- 
read_xlsx(temp_death, 
                  sheet = "Estimates",
                  range = "C17:DH20541") %>% 
  rename("Country" = 1) %>% 
  filter(Country %in% countries,
         Year    %in% years) %>% 
  pivot_longer(cols      = `0`:last_col(),
               names_to  = "Age",
               values_to = "Deaths") %>% 
  select(Country, Year, Age, Deaths)

deaths_adjusted <- 
  deaths %>%
  mutate(
    Age = case_when(Age == "100+" ~ "1000",
                    TRUE          ~ Age),
    Age = as.numeric(Age),
    Age_group = cut(         # Divisão das faixas etárias
      Age,                   # Agrupa nas faixas
      breaks         = c(0, 1, seq(from = 5, to = 90, by = 5), 140),  # Períodos de quebra
      right          = FALSE,
      include.lowest = TRUE,
      labels         = age_groups # Nomes dos intervalos etários
    ),
    Deaths = as.numeric(Deaths)
  ) %>%
  group_by(Country, Age_group, Year) %>%
  summarise(Deaths = sum(Deaths)) %>% 
  group_by(Country, Age_group) %>%
  summarise(Mean_death = round(mean(Deaths) * 1000)) %>% 
  drop_na()

Um amostra pode ser vista em:

tail(deaths_adjusted, n = 20) %>% 
  kbl(
    format      = "html",
    align       = "c", 
    digits      = 0,
    booktabs    = TRUE,
    format.args = list(big.mark = ","),
    col.names   = c("Country", "Age Group", "Deaths Average")) %>%
  footnote(
    general  = "Projeções de mortalidade do Department of Economic and Social Affairs (média entre os anos de 2016 e 2020).",
    general_title = "Fonte: Department of Economic and Social Affairs (UN).",
    footnote_as_chunk = TRUE,
    threeparttable    = TRUE
  ) %>%
  kable_styling("striped")
Country Age Group Deaths Average
WORLD < 1 4,092,580
WORLD 1-4 1,418,368
WORLD 5-9 749,614
WORLD 10-14 464,869
WORLD 15-19 661,860
WORLD 20-24 860,925
WORLD 25-29 954,699
WORLD 30-34 1,057,318
WORLD 35-39 1,206,979
WORLD 40-44 1,463,588
WORLD 45-49 1,910,705
WORLD 50-54 2,634,573
WORLD 55-59 3,317,427
WORLD 60-64 4,374,422
WORLD 65-69 5,238,906
WORLD 70-74 5,593,841
WORLD 75-79 6,150,023
WORLD 80-84 6,459,918
WORLD 85-89 5,335,589
WORLD 90+ 4,175,931
Fonte: Department of Economic and Social Affairs (UN). Projeções de mortalidade do Department of Economic and Social Affairs (média entre os anos de 2016 e 2020).
  # Cálculo da população total
total_pop <- 
population_adjusted %>% 
  group_by(Country) %>%   # Soma as faixas etárias por país
  summarise("Total_pop" = sum(Mean_pop))

  # Cálculo do total de mortes
total_death <- 
deaths_adjusted %>% 
  group_by(Country) %>% 
  summarise("Total_death" = sum(Mean_death)) 

  # Cálculo da TBM por mil habitantes (3 dígitos)
mortality_rate <- 
total_pop %>% 
  left_join(total_death) %>% 
  mutate("Mortality_rate" = round(Total_death / Total_pop * 1000, digits = 3)) 

Utilizando apenas as Taxas Brutas de Mortalidade para os dois países, tem-se que a taxa brasileira foi de 6.704 por mil habitantes. Já a taxa para a Nigéria foi de 13.254. Por fim, a taxa mundial foi de 7.568 por mil habitantes.

Porém, o gráfico da estrutura etária dos países difere e pode ser visto na Figura 1.2.

population_plot <- 
population_adjusted %>% 
  group_by(Country) %>% # Agrupa para ser possível calcular o total por país
  mutate(Perc_pop = Mean_pop / sum(Mean_pop)) %>% # Cria nova coluna dividindo cada grupo etário pelo total
  ggplot(aes(x     = Age_group,
             y     = Perc_pop,
             color = Country,
             group = Country)) + # Procedimento para o eixo x ficar organizado por faixa etária
  geom_line(size = 1.25) +
  theme_bw() +
    theme(
    axis.title.y = element_text(angle = 90, size = 12, face = "bold"),
    axis.title.x = element_text(size = 12, face = "bold"),
    axis.text.x  = element_text(angle = 30, vjust = .8, size = 11), 
    axis.ticks = element_line(color = "gray"),
    panel.grid.minor   = element_blank(),
    panel.grid.major.x = element_blank(),
    legend.position = "bottom"
  ) +
  labs(x     = "Faixa etária",
       y     = "População percentual",
       color = NULL) 

ggplotly(population_plot) # Plota o gráfico em formato interativo

Figure 1.2: Estrutura etária das populações sob análise (média entre 2016 e 2020).

2 Padronização direta

A primeira for de padronizar as taxas de mortalidade é a chamada “padronização direta” (\(\text{TBM}^D\) - taxa de mortalidade padronizada diretamente). Em síntese, escolhe-se uma população padrão — no presente caso, a população mundial —, e aplica-se as taxas específicas de mortalidade à estrutura etária padrão. Matematicamente,

\[\begin{equation} \text{TBM}^D = \sum {}_{n}M_{x}^{C} \times {}_{n}C_{x}^{P} \label{direta} \end{equation}\]

onde \({}_{n}M_{x}^{C}\) é a taxa de mortalidade específica de cada país e \({}_{n}C_{x}^{P}\) é a estrutura etária padronizada.

  # Padrão de estrutura etária populacional (Mundo)
Standardized_pop <- 
population_adjusted %>% 
  ungroup() %>% 
  filter(Country == "WORLD") %>%  # Filtra apenas os dados do mundo
  mutate("Perc_pop_padrao" = Mean_pop / sum(Mean_pop)) %>% # Cálculo da estrutura etária
  select(Age_group, Perc_pop_padrao)

  # Taxa padronizada diretamente
Standardized_rate <-  
population_adjusted %>% 
  filter(Country != "WORLD") %>% # Filtra dados dos países
  group_by(Country) %>% 
  mutate("Perc_pop" = Mean_pop / sum(Mean_pop)) %>% # Estrutura etária de cada país
  left_join(deaths_adjusted) %>%  # Adiciona os dados de morte
  left_join(Standardized_pop) %>% # Adiciona estrutura etária padrão
  mutate("Mortalidade_idade" = Mean_death / Mean_pop, # Portalidade por idade de cada país
         "Produto_taxas"     = Mortalidade_idade * Perc_pop_padrao) %>% # Protudo pela faixa etária padrão
  summarise("Standardized_rate" = round(sum(Produto_taxas), digits = 3)) # Somatório das taxas por faixa etária (3 dígitos)

Diante disso, as taxas de mortalidade padronizadas diretamente são de 7 para o Brasil e de 19 para a Nigéria, ambas por mil habitantes.

Isso indica uma situação de maior distanciamento entre os países do que a calculada apenas com as taxas brutas. Em especial, sugere piores condições de vida para a população de mais idade na Nigéria.

3 Padronização indireta

Caso não existam dados detalhados de mortalidade por idade para o cálculo das taxas de mortalidade padronizadas de maneira direta, pode-se utilizar a “padronização indireta”.

Em geral, tem-se apenas os dados da estrutura etária (\({}_{n}C_{x}^{C}\)). Assim, em síntese, deve-se:

  1. Calcular a taxa de mortalidade padrão (\(\text{TBM}^I\)), que é dada utilizando-se as as taxas específicas de mortalidade padrão (\({}_{n}M_{x}^{P}\)) e a estrutura etária do país em análise. O cálculo se dá por:

\[\begin{equation} \text{TBM}^I = \sum \color{red}{{}_{n}M_{x}^{P}} \times {}_{n}C_{x}^{C} \label{indireta} \end{equation}\]

  1. Em seguida, calcula-se a razão entre a Taxa de Mortalidade Bruta e a Taxa padronizada indiretamente. Assim, tem-se o índice de intensidade de mortalidade (\(I\)):

\[\begin{equation} I = \frac{\sum {}_{n}M_{x}^{C} \times {}_{n}C_{x}^{C}}{\sum \color{red}{{}_{n}M_{x}^{P}} \times {}_{n}C_{x}^{C}} \label{indice} \end{equation}\]

Os dados para os países em análise são:

  # Cálculo da taxa padronizada de portalidade (taxa do mundo)
Standardized_death <-   
deaths_adjusted %>% 
  ungroup() %>% 
  filter(Country == "WORLD") %>% 
  left_join(population_adjusted) %>% 
  mutate("Taxa_especifica_padrao" = Mean_death / Mean_pop) %>% 
  select(Age_group, Taxa_especifica_padrao)

  # Cálculo das taxas brutas e brutas padronizadas indiretamente
TBM_adjusted <- 
population_adjusted %>% 
  filter(Country != "WORLD") %>% 
  left_join(deaths_adjusted) %>%
  group_by(Country) %>% 
  mutate("Perc_pop" = Mean_pop / sum(Mean_pop)) %>% 
  ungroup() %>% 
  mutate("Taxa_especifica" = Mean_death / Mean_pop) %>% # Taxas específicas
  left_join(Standardized_death) %>% 
  mutate(TBM        = Perc_pop * Taxa_especifica,  # Poderia ser substituída pelo valor já da TBM (no caso de não existirem dados)
         TBM_padrao = Perc_pop * Taxa_especifica_padrao) %>% # Taxa indireta 
  group_by(Country) %>% 
  summarise(TBM        = sum(TBM) * 1000,        # Dados por mil habitantes
            TBM_padrao = sum(TBM_padrao) * 1000,
            Index      = TBM / TBM_padrao) 
  

TBM_adjusted %>% 
  kbl(
    format      = "html",
    align       = "c", 
    digits      = 3,
    booktabs    = TRUE,
    format.args = list(big.mark = ","),
    col.names   = c("Country", "Crude death rate", "Indirectly standardized \n crude death rate", "Index")) %>%
  footnote(
    general  = "Padronização indireta de taxas de mortalidade (média entre os anos de 2016 e 2020).",
    general_title = "Fonte: Department of Economic and Social Affairs (UN).",
    footnote_as_chunk = TRUE,
    threeparttable    = TRUE
  ) %>%
  kable_styling("striped")
Country Crude death rate Indirectly standardized crude death rate Index
Brazil 6.704 7.046 0.952
Nigeria 13.254 4.289 3.090
Fonte: Department of Economic and Social Affairs (UN). Padronização indireta de taxas de mortalidade (média entre os anos de 2016 e 2020).

Os resultados indicam que a mortalidade no Brasil é 5 % menor do que a mortalidade padrão.

Já a Nigéria possui uma mortalidade 309% maior do que a padrão, indicando uma estrutura de mortalidade severa, uma vez que seria esperado um valor bem inferior caso o país seguisse o padrão mundial de mortalidade mantendo sua estrutura etária real.