rm(list=ls()) # limpa os objetos da ultima execução
options(scipen = 9999, # inibe exibição de resultaos em notação científica
digits = 8, # limita o número de digitos das saídas do programa
max.print = 6) # limita o tamanho da saída do programa
library(demography) # pacote para manipulação de dados demográficos
library(sidrar) # pacote para manipulação de dados do SIDRA
library(magrittr) # pacote para operadores semânticos %>%, %$%
library(dplyr) # pacote para manipulação de dados
library(tidyr) # pacote para manipulação de dados
library(kableExtra) # pacote para formatar tabelas
library(readxl) # pacote para ler e manipular arquivos xlsx
library(ggplot2) # pacote para elaboração de gráficos
library(MortalityTables) # pacote para manipulação de tábuas biométricas
library(knitr) # pacote para visualização
library(DT) # pacote para formatar tabelas
library(janitor) # pacote para limpeza de nomes de colunas
library(LexisPlotR) # pacote para criar diagramas de Lexis
Acesse o site https://datasus.saude.gov.br/informacoes-de-saude-tabnet/ e colete os dados da região da Paraíba referentes aos nascimentos por local de residência, segundo o grupo etário da mulher, no ano de 2018. Em seguida, obtenha os dados da população da Paraíba por grupo etário e sexo, de acordo com os censos de 2000 e 2010. Com base nesses dados, projete a população para o ano de 2018 utilizando o modelo de crescimento geométrico.
# Dados populacionais dos censos 2000 e 2010
pop_data <- list(
pop_2000 <- get_sidra(x = 200, period = '2000', geo = 'State', geo.filter = 25),
pop_2010 <- get_sidra(x = 200, period = '2010', geo = 'State', geo.filter = 25)
)
# Renomear colunas
pop_data <- lapply(pop_data, function(data) {
data %>%
clean_names() # Remove caracteres problemáticos
})
process_population_data <- function(data) {
data %>%
filter(situacao_do_domicilio == "Total") %>%
select(unidade_da_federacao, ano, sexo, grupo_de_idade, valor) %>%
pivot_wider(
names_from = sexo,
values_from = valor
) %>%
mutate(grupo_de_idade = factor(grupo_de_idade, levels = c(
"0 a 4 anos", "1 a 4 anos", "5 a 9 anos", "10 a 14 anos",
"15 a 19 anos", "20 a 24 anos", "25 a 29 anos", "30 a 34 anos", "35 a 39 anos",
"40 a 44 anos", "45 a 49 anos", "50 a 54 anos", "55 a 59 anos", "60 a 64 anos",
"65 a 69 anos", "70 a 74 anos", "75 a 79 anos", "80 a 84 anos", "85 a 89 anos",
"90 a 94 anos", "95 a 99 anos", "100 anos ou mais", "Total"))) %>%
arrange(grupo_de_idade) %>%
drop_na(grupo_de_idade)
}
# Aplicar a função a todos os conjuntos de dados
pop_data <- lapply(pop_data, process_population_data)
# Diferença de data para projeção populacional
data_2010 <- as.Date("2010-08-01", format = "%Y-%m-%d")
data_2018 <- as.Date("2018-07-01", format = "%Y-%m-%d")
diff_data <- as.numeric(difftime(data_2018, data_2010, units = "days")) / 365.25
diff_censo <- 2010 - 2000
# Função para calcular a taxa de crescimento anual
calcular_taxa_crescimento <- function(pop_2000, pop_2010, diff_censo) {
taxa_crescimento <- (pop_2010 / pop_2000)^(1 / diff_censo) - 1
return(taxa_crescimento)
}
# Aplicar a taxa de crescimento para projetar a população em 2018
projetar_populacao <- function(pop_2010, taxa_crescimento, diff_data) {
pop_2018 <- pop_2010 * (1 + taxa_crescimento)^diff_data
return(pop_2018)
}
# Criar um dataframe com as populações projetadas para 2018
projecao_populacao <- pop_data[[2]] %>%
mutate(
# Calcular taxa de crescimento para Homens
taxa_crescimento_homens = calcular_taxa_crescimento(pop_data[[1]]$Homens, pop_data[[2]]$Homens, diff_censo),
Homens_2018 = as.integer(projetar_populacao(Homens, taxa_crescimento_homens, diff_data)),
# Calcular taxa de crescimento para Mulheres
taxa_crescimento_mulheres = calcular_taxa_crescimento(pop_data[[1]]$Mulheres, pop_data[[2]]$Mulheres, diff_censo),
Mulheres_2018 = as.integer(projetar_populacao(Mulheres, taxa_crescimento_mulheres, diff_data)),
# Calcular taxa de crescimento para o Total (Homens + Mulheres)
taxa_crescimento_total = calcular_taxa_crescimento(pop_data[[1]]$Homens + pop_data[[1]]$Mulheres,
pop_data[[2]]$Homens + pop_data[[2]]$Mulheres, diff_censo),
Total_2018 = as.integer(projetar_populacao(Homens + Mulheres, taxa_crescimento_total, diff_data)),
# Definir o ano como 2018
ano = 2018
) %>%
select(unidade_da_federacao, ano, grupo_de_idade, Homens_2018, Mulheres_2018, Total_2018)
# Exibir o dataframe com as projeções
kable(projecao_populacao, format = "html") %>%
kable_styling("striped", full_width = F)
unidade_da_federacao | ano | grupo_de_idade | Homens_2018 | Mulheres_2018 | Total_2018 |
---|---|---|---|---|---|
Paraíba | 2018 | 0 a 4 anos | 131778 | 126658 | 258435 |
Paraíba | 2018 | 5 a 9 anos | 145772 | 139114 | 284880 |
Paraíba | 2018 | 10 a 14 anos | 163183 | 155791 | 318961 |
Paraíba | 2018 | 15 a 19 anos | 164111 | 162466 | 326576 |
Paraíba | 2018 | 20 a 24 anos | 181495 | 183829 | 365320 |
Paraíba | 2018 | 25 a 29 anos | 194110 | 198058 | 392121 |
Paraíba | 2018 | 30 a 34 anos | 172246 | 178158 | 350330 |
Paraíba | 2018 | 35 a 39 anos | 144061 | 154716 | 298776 |
Paraíba | 2018 | 40 a 44 anos | 150971 | 163705 | 314652 |
Paraíba | 2018 | 45 a 49 anos | 137671 | 144693 | 282181 |
Paraíba | 2018 | 50 a 54 anos | 98565 | 108530 | 207044 |
Paraíba | 2018 | 55 a 59 anos | 81646 | 100450 | 182096 |
Paraíba | 2018 | 60 a 64 anos | 73107 | 83519 | 156472 |
Paraíba | 2018 | 65 a 69 anos | 57087 | 72572 | 129656 |
Paraíba | 2018 | 70 a 74 anos | 44464 | 61772 | 106174 |
Paraíba | 2018 | 75 a 79 anos | 22412 | 36959 | 58993 |
Paraíba | 2018 | 80 a 84 anos | 18256 | 29997 | 48044 |
Paraíba | 2018 | 85 a 89 anos | 12268 | 18826 | 30939 |
Paraíba | 2018 | 90 a 94 anos | 5700 | 11222 | 16791 |
Paraíba | 2018 | 95 a 99 anos | 2805 | 4360 | 7143 |
Paraíba | 2018 | 100 anos ou mais | 559 | 735 | 1224 |
Paraíba | 2018 | Total | 1954356 | 2088012 | 4042354 |
# Dados de nascimentos por local de residência e grupo etário da mulher
nascidos_2018 <- read.csv("C:/Users/cleod/Downloads/sinasc_cnv_nvpb103842179_183_190_89.csv",
skip = 3, header = TRUE, sep = ";", encoding = 'latin1')
# Eliminar linhas desnecessárias
nascidos_2018 <- nascidos_2018[-c(12:29),]
# Exibir o dataframe com os dados de nascimentos
kable(nascidos_2018, format = "html") %>%
kable_styling("striped", full_width = F)
Idade.da.mãe | Masc | Fem | Ign | Total |
---|---|---|---|---|
10 a 14 anos | 231 | 237 |
|
468 |
15 a 19 anos | 4983 | 4746 |
|
9729 |
20 a 24 anos | 7607 | 7314 | 3 | 14924 |
25 a 29 anos | 7301 | 6954 | 3 | 14258 |
30 a 34 anos | 6353 | 6028 | 1 | 12382 |
35 a 39 anos | 3489 | 3287 | 1 | 6777 |
40 a 44 anos | 806 | 781 |
|
1587 |
45 a 49 anos | 35 | 39 |
|
74 |
50 a 54 anos | 2 | 2 |
|
4 |
60 a 64 anos | 1 | 1 |
|
2 |
Total | 30808 | 29389 | 8 | 60205 |
Calcule a Taxa Bruta de Natalidade.
# Calcular a Taxa Bruta de Natalidade
tbn <- (nascidos_2018$'Total'[11] / projecao_populacao$Total_2018[22]) * 1000
tbn <- round(tbn, 2)
Resposta
A Taxa Bruta de Natalidade é dada pela fórmula:
\[ TBN = \frac{\text{Nascidos Vivos}}{\text{Pessoas-Ano}} \times 1.000 \] Assim, a TBN para o ano de 2018 foi de 14.89 nascimentos por mil habitantes.
Calcule a Taxa de Fecundidade Geral.
# Calcular a Taxa de Fecundidade Geral
tfg <- (nascidos_2018$'Total'[11] / sum(projecao_populacao$Mulheres_2018[4:10])) * 1000
tfg <- round(tfg, 2)
Resposta
A Taxa de Fecundidade Geral é dada pela fórmula:
\[ TFG = \frac{\text{Nascidos Vivos}}{_{35}Pop_{15}^{fem}} \times 1.000 \]
Assim, a TFG para o ano de 2018 foi de 50.78 nascimentos por mil mulheres.
Calcule as Taxas Específicas de Fecundidade por idade da mulher.
# Função para calcular a taxa específica de fecundidade
calcular_taxa_fecundidade <- function(nascidos, populacao) {
# Merge dos dados de nascidos e população por faixa etária
dados_combinados <- merge(nascidos, populacao, by.x = "Idade.da.mãe", by.y = "grupo_de_idade")
# Cálculo da taxa específica de fecundidade
dados_combinados$Taxa_Fecundidade <- dados_combinados$Total / dados_combinados$Mulheres_2018
# Selecionando apenas as colunas relevantes
resultado <- dados_combinados[, c("Idade.da.mãe", "Mulheres_2018", "Total", "Taxa_Fecundidade")]
# Excluir a linha de total, 10 a 14 anos, 50 a 54 anos e 60 a 64 anos
resultado <- resultado[-c(1, 9, 10, 11),]
return(resultado)
}
# Calculando a taxa específica de fecundidade
taxa_fecundidade <- calcular_taxa_fecundidade(nascidos_2018, projecao_populacao)
Resposta
A Taxa Específica de Fecundidade por idade da mulher é dada pela fórmula:
\[ TEF = \frac{_{n}NV_{x}}{_{n}Pop_{x}^{fem}} \] Assim, as Taxas Específicas de Fecundidade por idade da mulher para o ano de 2018 são:
Idade.da.mãe | Mulheres_2018 | Total | Taxa_Fecundidade | |
---|---|---|---|---|
2 | 15 a 19 anos | 162466 | 9729 | 0.05988330 |
3 | 20 a 24 anos | 183829 | 14924 | 0.08118414 |
4 | 25 a 29 anos | 198058 | 14258 | 0.07198901 |
5 | 30 a 34 anos | 178158 | 12382 | 0.06950011 |
6 | 35 a 39 anos | 154716 | 6777 | 0.04380284 |
7 | 40 a 44 anos | 163705 | 1587 | 0.00969427 |
8 | 45 a 49 anos | 144693 | 74 | 0.00051143 |
Calcule a Taxa de Fecundidade Total.
# Calcular a Taxa de Fecundidade Total
tft <- sum(taxa_fecundidade$Taxa_Fecundidade) * 5
tft <- round(tft, 4)
Resposta
A Taxa de Fecundidade Total é dada pela fórmula:
\[ TFT = n \times \sum_{i=1}^{7} TEF_{i} \]
Assim, a TFT para o ano de 2018 foi de 1.6828 nascimentos por mulher.
Faça um gráfico das Taxas Específicas de Fecundidade por idade da Mulher.
# Gráfico das Taxas Específicas de Fecundidade por idade da Mulher
ggplot(taxa_fecundidade, aes(x = Idade.da.mãe, y = Taxa_Fecundidade)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = "Taxas Específicas de Fecundidade por idade da Mulher",
x = "Idade da mãe",
y = "Taxa de Fecundidade") +
theme_minimal()
Calcule a Taxa Bruta de Reprodução.
# Função para calcular a taxa bruta de reprodução
calcular_taxa_reproducao <- function(nascidos, populacao) {
# Merge dos dados de nascidos e população por faixa etária
dados_combinados <- merge(nascidos, populacao, by.x = "Idade.da.mãe", by.y = "grupo_de_idade")
# Cálculo da taxa específica de fecundidade
dados_combinados$Taxa_Fecundidade_Fem <- dados_combinados$Fem / dados_combinados$Mulheres_2018
# Selecionando apenas as colunas relevantes
resultado <- dados_combinados[, c("Idade.da.mãe", "Mulheres_2018", "Fem", "Taxa_Fecundidade_Fem")]
# Excluir a linha de total, 10 a 14 anos, 50 a 54 anos e 60 a 64 anos
resultado <- resultado[-c(1, 9, 10, 11),]
return(resultado)
}
# Calculando a taxa específica de fecundidade
taxa_reproducao <- calcular_taxa_reproducao(nascidos_2018, projecao_populacao)
# Calcular a Taxa Bruta de Reprodução
tbr <- sum(taxa_reproducao$Taxa_Fecundidade_Fem) * 5
tbr <- round(tbr, 4)
Resposta
A Taxa Bruta de Reprodução é dada pela fórmula:
\[ TBR = n \times \sum_{i=1}^{7} TEF_{i,f} \] Assim, a TBR para o ano de 2018 foi de 0.8212 nascimentos por mulher.
Calcule a Taxa Líquida de Reprodução.
Idade | lx | nLx |
---|---|---|
0 | 1000 | 985 |
1 | 984 | 3930 |
5 | 982 | 4904 |
10 | 980 | 4897 |
15 | 979 | 4886 |
20 | 976 | 4871 |
25 | 972 | 4851 |
30 | 968 | 4824 |
35 | 962 | 4791 |
40 | 954 | 4743 |
45 | 943 | 4672 |
# Extrair o primeiro dígito de 'Idade.da.mãe' de 'taxa_reproducao'
taxa_reproducao$Idade <- as.numeric(substr(taxa_reproducao$Idade.da.mãe, 1, 2))
# Combinar os dataframes 'tabela' e 'taxa_reproducao' pela coluna 'Idade'
taxa_bruta_reproducao <- merge(tabela, taxa_reproducao, by = "Idade", all.x = TRUE)
# Selecionar as colunas relevantes
taxa_bruta_reproducao <- taxa_bruta_reproducao[, c("Idade", "lx", "nLx", "Taxa_Fecundidade_Fem")]
# Criar a coluna 'nLx' para a Taxa Líquida de Reprodução
taxa_bruta_reproducao <- taxa_bruta_reproducao %>%
mutate(nLx_TEF = nLx * Taxa_Fecundidade_Fem)
# Calcular a Taxa Líquida de Reprodução
tlr <- sum(taxa_bruta_reproducao$nLx_TEF, na.rm = TRUE) / taxa_bruta_reproducao$lx[1]
tlr <- round(tlr, 4)
# Exibir o dataframe com as taxas de reprodução
kable(taxa_bruta_reproducao, format = "html") %>%
kable_styling("striped", full_width = F)
Idade | lx | nLx | Taxa_Fecundidade_Fem | nLx_TEF |
---|---|---|---|---|
0 | 1000 | 985 | NA | NA |
1 | 984 | 3930 | NA | NA |
5 | 982 | 4904 | NA | NA |
10 | 980 | 4897 | NA | NA |
15 | 979 | 4886 | 0.02921227 | 142.7311314 |
20 | 976 | 4871 | 0.03978698 | 193.8023598 |
25 | 972 | 4851 | 0.03511093 | 170.3231074 |
30 | 968 | 4824 | 0.03383514 | 163.2206917 |
35 | 962 | 4791 | 0.02124538 | 101.7866090 |
40 | 954 | 4743 | 0.00477078 | 22.6277939 |
45 | 943 | 4672 | 0.00026954 | 1.2592731 |
Resposta
A Taxa Líquida de Reprodução é dada pela fórmula:
\[ TLR = \frac{\sum_{i=1}^{n} nLx \times TEF_{i,f}}{l_{0,f}} \] Assim, a TLR para o ano de 2018 foi de 0.7958 nascimentos por mulher.
Faça uma análise do gráfico da questão 6 e da Taxa de Fecundidade Total.
Resposta
A análise do gráfico da questão 6 e da Taxa de Fecundidade Total revela um padrão de fecundidade concentrado nas idades mais jovens (20 a 34 anos), com um declínio acentuado após os 35 anos, refletindo a redução natural da fertilidade com o avanço da idade, além de possíveis fatores sociais, como a priorização da carreira ou a decisão de limitar o tamanho da família.
A TFT de 1,6828 indica que a população está abaixo do nível de reposição, o que pode ter implicações significativas para a estrutura etária e a dinâmica populacional no futuro. É característica de regiões em estágios avançados da transição demográfica, onde há maior acesso a métodos contraceptivos, maior participação das mulheres no mercado de trabalho e mudanças nas preferências familiares