library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(lmtest)
## Carregando pacotes exigidos: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(stringr)
library(knitr)
library(reshape2)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.1.3
## corrplot 0.92 loaded
library(Hmisc)
## Warning: package 'Hmisc' was built under R version 4.1.3
## Carregando pacotes exigidos: lattice
## Carregando pacotes exigidos: survival
## Carregando pacotes exigidos: Formula
##
## Attaching package: 'Hmisc'
## The following object is masked from 'package:plotly':
##
## subplot
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
library(igraph)
## Warning: package 'igraph' was built under R version 4.1.3
##
## Attaching package: 'igraph'
## The following object is masked from 'package:plotly':
##
## groups
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(sidrar)
## Warning: package 'sidrar' was built under R version 4.1.3
# Seta a pasta
setwd('C:/Users/Usuario/Documents/samis_cidades_mg_pib')
# Importa dados de, respectivamente, PIB, POP, ACPs e IPCA.
pib <- read.table("pib_municipal_mg_2010-2019.csv", header = TRUE, quote = "\"", sep = ";", dec = ",")
pop <- read.table("pop_total_municipios_mg_2010-2019.csv",
header = TRUE, quote = "\"", sep = ";", dec = ",")
acps <- read.table("acps.csv", header = TRUE, quote = "\"", sep = ";")
ipca_tot <- get_sidra(api = "/t/1737/n1/all/v/69/p/201012,201112,201212,201312,201412,201512,201612,201712,201812,201912/d/v69%202")
## All others arguments are desconsidered when 'api' is informed
# Visualiza o DF antes de alterá-lo.
kable(pop[1:5,], format="markdown")
| Município | X2010 | X2011 | X2012 | X2013 | X2014 | X2015 | X2016 | X2017 | X2018 | X2019 |
|---|---|---|---|---|---|---|---|---|---|---|
| 310010 Abadia dos Dourados | 6704 | 6724 | 6743 | 6967 | 6992 | 7015 | 7037 | 7059 | 6972 | 6989 |
| 310020 Abaeté | 22700 | 22716 | 22740 | 23451 | 23494 | 23535 | 23574 | 23611 | 23223 | 23237 |
| 310030 Abre Campo | 13311 | 13309 | 13306 | 13703 | 13711 | 13719 | 13726 | 13733 | 13465 | 13454 |
| 310040 Acaiaca | 3924 | 3923 | 3925 | 4045 | 4050 | 4056 | 4061 | 4065 | 3994 | 3994 |
| 310050 Açucena | 10298 | 10183 | 10093 | 10297 | 10216 | 10140 | 10066 | 9997 | 9575 | 9470 |
# Mantém apenas números.
pop["Código"] <- as.numeric(gsub("[^[:digit:]]","",pop$Município))
# Mantém caracteres alfabéticos.
pop[,1] <- gsub("[[:digit:]]","",pop$Município)
# Prepara nomes de colunas.
nomes_pop_tot <- paste0("pop_", 2010:2019)
# Cria novas colunas com os nomes desenvolvidos acima.
colnames(pop)[2:11] <- nomes_pop_tot
# Visualiza o DF após alterá-lo.
kable(pop[1:5,], format="markdown")
| Município | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 | Código |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Abadia dos Dourados | 6704 | 6724 | 6743 | 6967 | 6992 | 7015 | 7037 | 7059 | 6972 | 6989 | 310010 |
| Abaeté | 22700 | 22716 | 22740 | 23451 | 23494 | 23535 | 23574 | 23611 | 23223 | 23237 | 310020 |
| Abre Campo | 13311 | 13309 | 13306 | 13703 | 13711 | 13719 | 13726 | 13733 | 13465 | 13454 | 310030 |
| Acaiaca | 3924 | 3923 | 3925 | 4045 | 4050 | 4056 | 4061 | 4065 | 3994 | 3994 | 310040 |
| Açucena | 10298 | 10183 | 10093 | 10297 | 10216 | 10140 | 10066 | 9997 | 9575 | 9470 | 310050 |
# Prepara nomes para colunas.
nomes_pib_cor <- paste0("pib_", 2010:2019)
# Cria colunas novas com os nomes criado acima.
colnames(pib)[4:13] <- nomes_pib_cor
# Ajusta o codigo de cidades ao retirar uma casa decimal para possibilitar fusão de DFs.
pib$Código <- as.integer(pib$Código/10)
# Funde DFs.
p_p <- merge(pib, pop, by = "Código")
# Mantém apenas colunas de interesse.
p_p <- p_p[,-c(2,14)]
# Visualiza o DF p_p.
kable(p_p[1:5,], format="markdown")
| Código | Município.x | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 310010 | Abadia dos Dourados | 63672.21 | 76883.45 | 95242.59 | 110339.89 | 141211.43 | 112799.37 | 114403.95 | 94822.18 | 75982.69 | 72595.30 | 6704 | 6724 | 6743 | 6967 | 6992 | 7015 | 7037 | 7059 | 6972 | 6989 |
| 310020 | Abaeté | 226324.64 | 229332.01 | 232081.74 | 243261.65 | 257920.95 | 232899.78 | 272824.23 | 260784.21 | 293556.75 | 294357.19 | 22700 | 22716 | 22740 | 23451 | 23494 | 23535 | 23574 | 23611 | 23223 | 23237 |
| 310030 | Abre Campo | 106813.97 | 136361.00 | 103346.87 | 108350.71 | 114454.47 | 125563.11 | 119223.85 | 113807.89 | 111181.55 | 115775.18 | 13311 | 13309 | 13306 | 13703 | 13711 | 13719 | 13726 | 13733 | 13465 | 13454 |
| 310040 | Acaiaca | 22440.23 | 23001.28 | 23084.38 | 24184.34 | 22963.17 | 21859.08 | 23082.72 | 23726.78 | 26249.39 | 31777.15 | 3924 | 3923 | 3925 | 4045 | 4050 | 4056 | 4061 | 4065 | 3994 | 3994 |
| 310050 | Açucena | 48966.31 | 50062.56 | 44437.85 | 50892.14 | 62498.07 | 56029.33 | 60060.27 | 59375.23 | 59836.04 | 53243.29 | 10298 | 10183 | 10093 | 10297 | 10216 | 10140 | 10066 | 9997 | 9575 | 9470 |
colSums(is.na(p_p))
## Código Município.x pib_2010 pib_2011 pib_2012 pib_2013
## 0 0 0 0 0 0
## pib_2014 pib_2015 pib_2016 pib_2017 pib_2018 pib_2019
## 0 0 0 0 0 0
## pop_2010 pop_2011 pop_2012 pop_2013 pop_2014 pop_2015
## 0 0 0 0 0 0
## pop_2016 pop_2017 pop_2018 pop_2019
## 0 0 0 0
# Visualiza o DF acps antes de alterá-lo.
kable(acps[1:5,], format="markdown")
| UF | ACP | NOME_ACP | codmun | Nome_mun |
|---|---|---|---|---|
| 13 | 130100 | ACP de Manaus | 1302603 | Manaus |
| 15 | 150100 | ACP de Belém | 1500800 | Ananindeua |
| 15 | 150100 | ACP de Belém | 1501303 | Barcarena |
| 15 | 150100 | ACP de Belém | 1501402 | Belém |
| 15 | 150100 | ACP de Belém | 1501501 | Benevides |
# Efetua as transformações mencionadas neste DF.
acps$codmun <- as.integer(acps$codmun/10)
acps_mg <- subset(acps, UF == "31")
row.names(acps_mg) <- 1:nrow(acps_mg)
# Investiga se são inexistentes os NAs.
colSums(is.na(acps_mg))
## UF ACP NOME_ACP codmun Nome_mun
## 0 0 0 0 0
acps_mg[nomes_pib_cor] <- as.numeric(NA)
acps_mg[nomes_pop_tot] <- as.numeric(NA)
# Visualiza o DF acps_mg pronto para receber dados.
kable(acps_mg[1:5,], format="markdown")
| UF | ACP | NOME_ACP | codmun | Nome_mun | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 31 | 310100 | ACP de Belo Horizonte | 310620 | BeloHorizonte | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 31 | 310100 | ACP de Belo Horizonte | 310670 | Betim | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 31 | 310100 | ACP de Belo Horizonte | 310900 | Brumadinho | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 31 | 310100 | ACP de Belo Horizonte | 311000 | Caeté | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 31 | 310100 | ACP de Belo Horizonte | 311250 | CapimBranco | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
for (j in 1:nrow(acps_mg)){
for (n in 1:nrow(p_p)){
for (k in 6:25){ # Colunas com valores das variaveis no DF acps_mg.
for (i in 3:22){ # Colunas com valores das variaveis no DF p_p.
if (k == i+3){
if(acps_mg[j,4]==p_p[n,1]){
acps_mg[j,k] <- p_p[n,i]
}
}
}
}
}
}
# Renomeia a quarta coluna de acps_mg.
colnames(acps_mg)[4] <- "Código"
# Visualiza o DF acps_mg após terem sido inseridos dados.
kable(acps_mg[1:5,], format="markdown")
| UF | ACP | NOME_ACP | Código | Nome_mun | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 31 | 310100 | ACP de Belo Horizonte | 310620 | BeloHorizonte | 59203074.1 | 61222353.79 | 63863103.85 | 65417205.74 | 64361809.04 | 59876485.24 | 56077944.1 | 54460882.44 | 54602879.45 | 55310771.82 | 2375444 | 2385640 | 2395785 | 2479165 | 2491109 | 2502557 | 2513451 | 2523794 | 2501576 | 2512070 |
| 31 | 310100 | ACP de Belo Horizonte | 310670 | Betim | 23384913.4 | 20158835.11 | 18518261.63 | 17507729.15 | 16451753.28 | 16393498.85 | 15958719.1 | 14135028.20 | 15098383.26 | 15969967.05 | 377547 | 383571 | 388873 | 406474 | 412003 | 417307 | 422354 | 427146 | 432575 | 439340 |
| 31 | 310100 | ACP de Belo Horizonte | 310900 | Brumadinho | 1335180.1 | 2025941.90 | 2054342.40 | 2360153.98 | 2181799.06 | 1098187.00 | 1025394.4 | 1217784.40 | 1531989.82 | 1431760.87 | 34013 | 34538 | 35085 | 36748 | 37314 | 37857 | 38373 | 38863 | 39520 | 40103 |
| 31 | 310100 | ACP de Belo Horizonte | 311000 | Caeté | 317354.3 | 390664.52 | 416234.77 | 421788.47 | 438760.64 | 390645.35 | 389779.5 | 353765.83 | 353776.04 | 454853.17 | 40786 | 41092 | 41423 | 43036 | 43395 | 43739 | 44066 | 44377 | 44377 | 44718 |
| 31 | 310100 | ACP de Belo Horizonte | 311250 | CapimBranco | 62321.9 | 62001.69 | 61286.38 | 68503.69 | 56385.07 | 52465.68 | 50507.9 | 52737.63 | 52819.99 | 57562.08 | 8880 | 8957 | 9030 | 9382 | 9461 | 9537 | 9609 | 9678 | 9679 | 9754 |
colSums(is.na(acps_mg))
## UF ACP NOME_ACP Código Nome_mun pib_2010 pib_2011 pib_2012
## 0 0 0 0 0 0 0 0
## pib_2013 pib_2014 pib_2015 pib_2016 pib_2017 pib_2018 pib_2019 pop_2010
## 0 0 0 0 0 0 0 0
## pop_2011 pop_2012 pop_2013 pop_2014 pop_2015 pop_2016 pop_2017 pop_2018
## 0 0 0 0 0 0 0 0
## pop_2019
## 0
pp_acps_mg <- p_p[c(66, 824, 420, 357, 213, 806),]
for (i in 6:25){
for(k in 3:22){
if(i == k + 3){
pp_acps_mg[1,k] <- sum(acps_mg[1:28,i])
pp_acps_mg[2,k] <- sum(acps_mg[29:29,i])
pp_acps_mg[3,k] <- sum(acps_mg[30:32,i])
pp_acps_mg[4,k] <- sum(acps_mg[33:37,i])
}
}
}
# Visualiza o DF pp_acps_mg.
kable(pp_acps_mg[1:5,], format="markdown")
| Código | Município.x | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 66 | 310620 | Belo Horizonte | 129869660.6 | 131302449.0 | 133665470 | 137007287 | 133294651 | 122391423 | 115645113 | 114542794 | 115303047 | 119092560 | 5038063 | 5081258 | 5122007 | 5321463 | 5365679 | 5408111 | 5448496 | 5486835 | 5486429 | 5528384 |
| 824 | 317020 | Uberlândia | 18950577.5 | 18051573.3 | 19531983 | 20460780 | 20943435 | 20211865 | 20651384 | 20941395 | 22232361 | 21410811 | 600285 | 611904 | 619536 | 646673 | 654681 | 662362 | 669672 | 676613 | 683247 | 691305 |
| 420 | 313670 | Juiz de Fora | 10323282.5 | 10086320.3 | 10588042 | 10921659 | 10692199 | 10269625 | 9603053 | 10119456 | 10387287 | 10981548 | 534099 | 537157 | 541684 | 563023 | 567916 | 572611 | 577077 | 581319 | 581816 | 586495 |
| 357 | 313130 | Ipatinga | 10817166.2 | 10874564.9 | 10823828 | 11133719 | 10277874 | 9196057 | 8480397 | 9078715 | 10174601 | 10065980 | 468043 | 472547 | 476574 | 495398 | 499748 | 503922 | 507893 | 511663 | 512211 | 516377 |
| 213 | 311940 | Coronel Fabriciano | 920040.1 | 989046.5 | 1027664 | 1105658 | 1094374 | 1054227 | 1026819 | 1009335 | 1012545 | 1017797 | 103797 | 104174 | 104637 | 108302 | 108843 | 109363 | 109857 | 110326 | 109405 | 109855 |
# Matém cidades que detém, ao mínimo, 50 mil habitantes.
p_p_filtrado <- subset(p_p, pop_2010 >= 50000)
# Exclui cidades componentes de ACPs que não sejam o núcleo.
p_p_filtrado <- anti_join(p_p_filtrado, acps_mg, by = "Código")
# Insere ACPs em p_p_filtrado e nomeia o DF resultante (p_p_filtrado_pln), onde _pln indica prévia de ln.
p_p_filtrado_pln <- rbind(p_p_filtrado, pp_acps_mg)
# Visualiza o DF p_p_filtrado_pln.
kable(p_p_filtrado_pln[1:5,], format="markdown")
| Código | Município.x | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 310160 | Alfenas | 1284402.4 | 1403257 | 1449044.2 | 1400008.5 | 1437861.2 | 1458391.4 | 1456590.8 | 1630855.5 | 1548152.0 | 1469400.4 | 73722 | 74298 | 74804 | 77618 | 78176 | 78712 | 79222 | 79707 | 79481 | 79996 |
| 310350 | Araguari | 2147788.7 | 2044189 | 2416520.6 | 2246305.6 | 2441245.8 | 2533614.6 | 2443051.0 | 2504871.7 | 2766134.3 | 3149438.1 | 109779 | 110402 | 110983 | 114970 | 115632 | 116267 | 116871 | 117445 | 116691 | 117267 |
| 310400 | Araxá | 2573182.6 | 2665381 | 3368787.6 | 3387936.8 | 3508979.6 | 3361644.4 | 3022699.6 | 3148188.2 | 3666194.8 | 3665443.6 | 93683 | 94799 | 95888 | 99986 | 101136 | 102238 | 103287 | 104283 | 105083 | 106229 |
| 310560 | Barbacena | 1578866.9 | 1583251 | 1619996.9 | 1667789.4 | 1668424.3 | 1625277.0 | 1625632.5 | 1642925.9 | 1699569.0 | 1777446.9 | 126325 | 127218 | 128120 | 132980 | 133972 | 134924 | 135829 | 136689 | 136392 | 137313 |
| 311120 | Campo Belo | 524701.4 | 576001 | 604777.4 | 622786.3 | 610761.5 | 585712.8 | 593869.8 | 602264.5 | 610490.6 | 592809.5 | 51509 | 51725 | 51900 | 53656 | 53870 | 54076 | 54272 | 54458 | 53866 | 54029 |
# Prepara nome de colunas.
nomes_col_ipca <- paste0("ipca_", 2010:2019)
# Cria novo DF para receber valores de IPCA.
p_p_filtrado_pln_ipca <- p_p_filtrado_pln
# Cria colunas para receberem valores de IPCA.
p_p_filtrado_pln_ipca[nomes_col_ipca] <- as.numeric(NA)
# Insere valores de IPCA.
for(i in 23:32){
for(j in 1:10){
if(i - j == 22){
p_p_filtrado_pln_ipca[,i] <- ipca_tot[j,5]
}
}
}
# Visualiza o DF p_p_filtrado_pln_ipca.
kable(p_p_filtrado_pln_ipca[1:5,], format="markdown")
| Código | Município.x | pib_2010 | pib_2011 | pib_2012 | pib_2013 | pib_2014 | pib_2015 | pib_2016 | pib_2017 | pib_2018 | pib_2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 | ipca_2010 | ipca_2011 | ipca_2012 | ipca_2013 | ipca_2014 | ipca_2015 | ipca_2016 | ipca_2017 | ipca_2018 | ipca_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 310160 | Alfenas | 1284402.4 | 1403257 | 1449044.2 | 1400008.5 | 1437861.2 | 1458391.4 | 1456590.8 | 1630855.5 | 1548152.0 | 1469400.4 | 73722 | 74298 | 74804 | 77618 | 78176 | 78712 | 79222 | 79707 | 79481 | 79996 | 5.91 | 6.5 | 5.84 | 5.91 | 6.41 | 10.67 | 6.29 | 2.95 | 3.75 | 4.31 |
| 310350 | Araguari | 2147788.7 | 2044189 | 2416520.6 | 2246305.6 | 2441245.8 | 2533614.6 | 2443051.0 | 2504871.7 | 2766134.3 | 3149438.1 | 109779 | 110402 | 110983 | 114970 | 115632 | 116267 | 116871 | 117445 | 116691 | 117267 | 5.91 | 6.5 | 5.84 | 5.91 | 6.41 | 10.67 | 6.29 | 2.95 | 3.75 | 4.31 |
| 310400 | Araxá | 2573182.6 | 2665381 | 3368787.6 | 3387936.8 | 3508979.6 | 3361644.4 | 3022699.6 | 3148188.2 | 3666194.8 | 3665443.6 | 93683 | 94799 | 95888 | 99986 | 101136 | 102238 | 103287 | 104283 | 105083 | 106229 | 5.91 | 6.5 | 5.84 | 5.91 | 6.41 | 10.67 | 6.29 | 2.95 | 3.75 | 4.31 |
| 310560 | Barbacena | 1578866.9 | 1583251 | 1619996.9 | 1667789.4 | 1668424.3 | 1625277.0 | 1625632.5 | 1642925.9 | 1699569.0 | 1777446.9 | 126325 | 127218 | 128120 | 132980 | 133972 | 134924 | 135829 | 136689 | 136392 | 137313 | 5.91 | 6.5 | 5.84 | 5.91 | 6.41 | 10.67 | 6.29 | 2.95 | 3.75 | 4.31 |
| 311120 | Campo Belo | 524701.4 | 576001 | 604777.4 | 622786.3 | 610761.5 | 585712.8 | 593869.8 | 602264.5 | 610490.6 | 592809.5 | 51509 | 51725 | 51900 | 53656 | 53870 | 54076 | 54272 | 54458 | 53866 | 54029 | 5.91 | 6.5 | 5.84 | 5.91 | 6.41 | 10.67 | 6.29 | 2.95 | 3.75 | 4.31 |
# Cria primeiro índice.
p_p_filtrado_pln_ipca["indice_10"] <- (1+p_p_filtrado_pln_ipca[,23]/100)*100
# Prepara para receber todos os outros índices.
nomes_indices <- paste0("indice_", 11:19)
p_p_filtrado_pln_ipca[nomes_indices] <- as.numeric(NA)
# Cria todos os outros índices.
for(i in 24:32){
for(k in 34:42){
if(i == k - 10){
p_p_filtrado_pln_ipca[,k] <- (1+p_p_filtrado_pln_ipca[,i]/100)*p_p_filtrado_pln_ipca[,k-1]
}
}
}
# Prepara para receber todos os PIB reais.
nomes_pib_real <- paste0("PIB_real.", 2010:2019)
p_p_filtrado_pln_ipca[nomes_pib_real] <- as.numeric(NA)
# Cria PIB real.
# OBS: neste código utilizo vários for loops (como o abaixo). Esses loops alcançam o objetivado.
# Existem, em casos no R, meios mais elegantes e eficientes para executar atividades similares a for loop.
# Em um futuro sucinto código demonstrarei como fazer isso.
for(i in 3:12){
for(j in 33:42){
for(k in 43:52){
if(i == j - 30 & j == k - 10){
p_p_filtrado_pln_ipca[,k] <-
p_p_filtrado_pln_ipca[,42]*p_p_filtrado_pln_ipca[,i]/p_p_filtrado_pln_ipca[,j]
}
}
}
}
# Seleciona colunas com nome de cidades, código, população total e valores de PIB real.
p_p_filtrado_pln_clean <- p_p_filtrado_pln_ipca[,c(1:2,43:52,13:22)]
# Visualiza o DF p_p_filtrado_pln_clean.
kable(p_p_filtrado_pln_clean[1:5,], format="markdown")
| Código | Município.x | PIB_real.2010 | PIB_real.2011 | PIB_real.2012 | PIB_real.2013 | PIB_real.2014 | PIB_real.2015 | PIB_real.2016 | PIB_real.2017 | PIB_real.2018 | PIB_real.2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 310160 | Alfenas | 2138369.2 | 2193659.9 | 2140246.3 | 1952431.7 | 1884428.6 | 1727057.9 | 1622848.4 | 1764938.4 | 1614877.4 | 1469400.4 | 73722 | 74298 | 74804 | 77618 | 78176 | 78712 | 79222 | 79707 | 79481 | 79996 |
| 310350 | Araguari | 3575799.2 | 3195603.7 | 3569214.3 | 3132665.3 | 3199441.8 | 3000359.9 | 2721904.8 | 2710812.9 | 2885354.7 | 3149438.1 | 109779 | 110402 | 110983 | 114970 | 115632 | 116267 | 116871 | 117445 | 116691 | 117267 |
| 310400 | Araxá | 4284026.8 | 4166690.4 | 4975718.0 | 4724767.6 | 4598789.9 | 3980930.3 | 3367715.5 | 3407020.4 | 3824207.8 | 3665443.6 | 93683 | 94799 | 95888 | 99986 | 101136 | 102238 | 103287 | 104283 | 105083 | 106229 |
| 310560 | Barbacena | 2628615.7 | 2475037.5 | 2392744.4 | 2325875.1 | 2186599.4 | 1924687.4 | 1811184.8 | 1778001.1 | 1772820.4 | 1777446.9 | 126325 | 127218 | 128120 | 132980 | 133972 | 134924 | 135829 | 136689 | 136392 | 137313 |
| 311120 | Campo Belo | 873562.1 | 900440.8 | 893259.6 | 868528.8 | 800450.3 | 693613.5 | 661655.1 | 651780.5 | 636802.8 | 592809.5 | 51509 | 51725 | 51900 | 53656 | 53870 | 54076 | 54272 | 54458 | 53866 | 54029 |
# Cria duplicado para receber ln.
p_p_filtrado_ln <- p_p_filtrado_pln_clean
# Transforma utilizando log.
p_p_filtrado_ln[,c(3:22)] <- log(p_p_filtrado_ln[,c(3:22)])
# Renomeia linhas.
row.names(p_p_filtrado_ln) <- 1:nrow(p_p_filtrado_ln)
# Visualiza tabela.
kable(p_p_filtrado_ln[1:5,], format="markdown")
| Código | Município.x | PIB_real.2010 | PIB_real.2011 | PIB_real.2012 | PIB_real.2013 | PIB_real.2014 | PIB_real.2015 | PIB_real.2016 | PIB_real.2017 | PIB_real.2018 | PIB_real.2019 | pop_2010 | pop_2011 | pop_2012 | pop_2013 | pop_2014 | pop_2015 | pop_2016 | pop_2017 | pop_2018 | pop_2019 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 310160 | Alfenas | 14.57555 | 14.60108 | 14.57643 | 14.48459 | 14.44914 | 14.36193 | 14.29969 | 14.38363 | 14.29477 | 14.20036 | 11.20806 | 11.21584 | 11.22263 | 11.25955 | 11.26672 | 11.27355 | 11.28001 | 11.28611 | 11.28327 | 11.28973 |
| 310350 | Araguari | 15.08970 | 14.97729 | 15.08786 | 14.95739 | 14.97849 | 14.91424 | 14.81684 | 14.81276 | 14.87516 | 14.96273 | 11.60622 | 11.61188 | 11.61713 | 11.65243 | 11.65817 | 11.66364 | 11.66883 | 11.67373 | 11.66728 | 11.67221 |
| 310400 | Araxá | 15.27040 | 15.24263 | 15.42008 | 15.36833 | 15.34130 | 15.19703 | 15.02975 | 15.04135 | 15.15686 | 15.11446 | 11.44767 | 11.45951 | 11.47094 | 11.51279 | 11.52422 | 11.53506 | 11.54527 | 11.55486 | 11.56251 | 11.57335 |
| 310560 | Barbacena | 14.78197 | 14.72177 | 14.68795 | 14.65961 | 14.59786 | 14.47027 | 14.40949 | 14.39100 | 14.38808 | 14.39069 | 11.74661 | 11.75366 | 11.76072 | 11.79795 | 11.80539 | 11.81247 | 11.81915 | 11.82546 | 11.82329 | 11.83002 |
| 311120 | Campo Belo | 13.68033 | 13.71064 | 13.70263 | 13.67456 | 13.59293 | 13.44967 | 13.40250 | 13.38746 | 13.36422 | 13.29263 | 10.84951 | 10.85370 | 10.85707 | 10.89035 | 10.89433 | 10.89815 | 10.90176 | 10.90518 | 10.89425 | 10.89728 |
for(i in 3:12){
for(k in 13:22){
if(k == i + 10){
print(ggplot(data = p_p_filtrado_ln, aes_q(x = p_p_filtrado_ln[,k], y = p_p_filtrado_ln[,i])) +
geom_point(color = "#FF06EF", alpha = 0.65) + theme_bw(base_size = 17) +
geom_line(formula= y~x, color = "#51FF05", method = "lm", alpha = 0.6, stat = "smooth", size = 1) +
geom_smooth(formula = y~x, method = "lm", color = "#51FF05", alpha = 0.2) +
labs(title="Relação entre PIB e população total",
x= paste("População total em ln", i + 2007),
y= paste("PIB em ln", i + 2007)))
}
}
}
# Cria lista.
mods <- list()
# Insere informações de regressões estimadas na lista mods.
for(i in 3:12){
for(k in 13:22){
if(k == i + 10){
mods[[i - 2]] <- lm(p_p_filtrado_ln[,i] ~ p_p_filtrado_ln[,k])
}
}
}
for(i in 1:10){
print(bptest(mods[[i]], ~
p_p_filtrado_ln[,i + 12] + I(p_p_filtrado_ln[,i + 12])^2, data = p_p_filtrado_ln))
}
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 2.3929, df = 1, p-value = 0.1219
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 2.358, df = 1, p-value = 0.1246
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 2.2457, df = 1, p-value = 0.134
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 2.0065, df = 1, p-value = 0.1566
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 2.1087, df = 1, p-value = 0.1465
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 1.5132, df = 1, p-value = 0.2186
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 0.89056, df = 1, p-value = 0.3453
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 1.4987, df = 1, p-value = 0.2209
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 1.375, df = 1, p-value = 0.241
##
##
## studentized Breusch-Pagan test
##
## data: mods[[i]]
## BP = 0.73133, df = 1, p-value = 0.3925
for(i in 1:10){
print(resettest(mods[[i]]))
}
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.071802, df1 = 2, df2 = 50, p-value = 0.9308
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.0081014, df1 = 2, df2 = 50, p-value = 0.9919
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.063276, df1 = 2, df2 = 50, p-value = 0.9388
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.10139, df1 = 2, df2 = 50, p-value = 0.9038
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.16838, df1 = 2, df2 = 50, p-value = 0.8455
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.447, df1 = 2, df2 = 50, p-value = 0.6421
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.4425, df1 = 2, df2 = 50, p-value = 0.6449
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.35038, df1 = 2, df2 = 50, p-value = 0.7061
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 0.38627, df1 = 2, df2 = 50, p-value = 0.6816
##
##
## RESET test
##
## data: mods[[i]]
## RESET = 1.2926, df1 = 2, df2 = 50, p-value = 0.2836
for(i in 3:12){
for(k in 13:22){
if(k == i + 10){
print(summary(lm(p_p_filtrado_ln[,i] ~ p_p_filtrado_ln[,k]))$coefficients[2,1])
}
}
}
## [1] 1.15104
## [1] 1.115975
## [1] 1.125086
## [1] 1.131563
## [1] 1.129902
## [1] 1.136082
## [1] 1.129139
## [1] 1.109821
## [1] 1.118466
## [1] 1.137613
# Cria o DF.
samis_mg <- data.frame(matrix(NA, nrow = nrow(p_p_filtrado_ln), ncol = 11))
# Cria nome de colunas e insere tais nomes no DF samis_mg;
nome_cols_samis_mg <- c("Cidades", paste("SAMI PIB", " ", 2010:2019))
colnames(samis_mg) <- nome_cols_samis_mg
# Insere o nome das cidades no DF samis_mg.
samis_mg[,1] <- p_p_filtrado_ln[,2]
# Insere os valores dos SAMIs no DF samis_mg.
for(i in 1:10){
samis_mg[,i + 1] <- mods[[i]][["residuals"]]
}
# Salva o DF samis_mg em formato de csv para ter um backup dos dados alcançados até o momento.
# write.table(samis_mg, "samis_mg.csv", sep = ";", col.names = TRUE, row.names = FALSE)
# Apresenta o DF samis_mg.
kable(samis_mg[1:5,], format="markdown")
| Cidades | SAMI PIB 2010 | SAMI PIB 2011 | SAMI PIB 2012 | SAMI PIB 2013 | SAMI PIB 2014 | SAMI PIB 2015 | SAMI PIB 2016 | SAMI PIB 2017 | SAMI PIB 2018 | SAMI PIB 2019 |
|---|---|---|---|---|---|---|---|---|---|---|
| Alfenas | 0.1193665 | 0.1337401 | 0.1419185 | 0.0779938 | 0.1101919 | 0.1860150 | 0.2125482 | 0.2701879 | 0.1977514 | 0.1478368 |
| Araguari | 0.1752044 | 0.0679692 | 0.2094901 | 0.1062433 | 0.1972434 | 0.2951494 | 0.2906692 | 0.2691400 | 0.3486366 | 0.4750961 |
| Araxá | 0.5384094 | 0.5033557 | 0.7061976 | 0.6751901 | 0.7114068 | 0.7240168 | 0.6430874 | 0.6296449 | 0.7475317 | 0.7392815 |
| Barbacena | -0.2941199 | -0.3457675 | -0.3519659 | -0.3562181 | -0.3497274 | -0.3178938 | -0.2864203 | -0.3210210 | -0.3129243 | -0.2764761 |
| Campo Belo | -0.3631538 | -0.3525596 | -0.3206024 | -0.3142565 | -0.3252505 | -0.2997535 | -0.2575538 | -0.3032138 | -0.2976989 | -0.3134373 |
# Identifica média de SAMIs e de população total.
samis_mg["media_samis"] <- rowMeans(samis_mg[,2:11])
samis_mg["media_pop"] <- rowMeans(p_p_filtrado_ln[,13:22])
# Cria um DF composto pelas 2 cidades de maior e menor média de SAMIs. Esse DF também contém as 2 cidades mais populosas, em média ao longo do período considerado, do estado de MG.
samis_mg_plt <- samis_mg %>%
arrange(desc(media_samis)) %>%
slice(1:2, 53:54)
samis_mg_plt[c(5:6),] <- samis_mg %>%
arrange(desc(media_pop)) %>%
slice(1:2)
# Mantém apenas colunas que serão utilizadas no plot.
samis_mg_plt <- samis_mg_plt[,c(1:11)]
# Coleta nome das cidades.
nomes_plts <- samis_mg_plt[,1]
# Com exceção da coluna 1, transpõe todas as outras.
samis_mg_plt_t <- as.data.frame(t(samis_mg_plt[,-1]))
# Insere nomes de cidades no DF transposto.
colnames(samis_mg_plt_t) <- nomes_plts
# Em uma coluna, insere informação de anos.
samis_mg_plt_t["Ano"] <- 2010:2019
# Efetua melt do DF samis_mg_plt_t para possibilitar plotagem do modo almejado.
samis_mg_plt_t_melt <- melt(samis_mg_plt_t, id="Ano")
# Renomeia coluna que contém cidades.
colnames(samis_mg_plt_t_melt)[2] <- "Cidades"
# Realiza plotagem.
ggplot(samis_mg_plt_t_melt,aes(x=Ano, y=value, group=Cidades)) +
geom_line(aes(colour = Cidades), lwd = 1.5, alpha = 0.6) +
labs(y = "SAMIs PIB", x = "Ano") + theme_bw(base_size = 15) + scale_x_continuous(breaks=seq(2010, 2019, 1))
# Cria DF para calcular correlação entre cidades.
row.names(samis_mg) <- samis_mg[,1]
samis_mg_to_cor <- t(samis_mg[,c(2:11)])
# Calcula e visualiza a correlação de Pearson entre as cidades.
cor_samis_mg <- cor(samis_mg_to_cor)
corrplot(cor_samis_mg, method = "color", order = "hclust", tl.cex = 0.45, col.text = "red")
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "col.text" não é um parâmetro gráfico
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "col.text" não é um parâmetro gráfico
## Warning in title(title, ...): "col.text" não é um parâmetro gráfico
# Identifica o valor p de todas as correlações e discreciona iguais ou superiores a 0.05.
cor_e_valp <- rcorr(as.matrix(samis_mg_to_cor))
cor_p <- round(cor_e_valp$P, 3)
cor_p[cor_p >= 0.05 | is.na(cor_p)] <- 1
# Mantém valores não nulos apenas para correlações estatisticamente significativas, dado o nível de confiança mencionado previamente.
for(i in 1:54){
for(k in 1:54){
if(cor_p[i,k] == 1){
cor_samis_mg[i,k] <- 0
}
}
}
# Prepara DFs de positivo, negativo e alcança, em formato final, DF com valores absolutos.
cor_samis_mg_posi <- cor_samis_mg
cor_samis_mg_neg <- cor_samis_mg
cor_samis_mg_abs <- abs(cor_samis_mg)
# Mantém apenas valores positivos e negativos, respectivamente.
cor_samis_mg_posi[cor_samis_mg_posi < 0] <- 0
cor_samis_mg_neg[cor_samis_mg_neg > 0] <- 0
# Uma vez que uma rede não pode ser composta por conexões negativas, os valores menores que 0 são transformados em valores postivos. A matriz segue, naturalmente, representando conexões negativas.
cor_samis_mg_neg <- abs(cor_samis_mg_neg)
# Transforma em grafos.
g_samis_mg_posi <- graph_from_adjacency_matrix(cor_samis_mg_posi, weighted = TRUE, mode = "undirected")
g_samis_mg_neg <- graph_from_adjacency_matrix(cor_samis_mg_neg,weighted = TRUE, mode = "undirected")
g_samis_mg_abs <- graph_from_adjacency_matrix(cor_samis_mg_abs,weighted = TRUE, mode = "undirected")
# Detecta comunidades (clusters).
comu_posi <- cluster_louvain(g_samis_mg_posi)
comu_neg <- cluster_louvain(g_samis_mg_neg, weights = NULL)
comu_abs <- cluster_louvain(g_samis_mg_abs, weights = NULL)
# Insere informações de cidades e pertencimento à comunidades em DFs.
comu_posi_final <- data.frame (Nomes = comu_posi$names,
Comunidades = comu_posi$membership)
comu_neg_final <- data.frame (Nomes = comu_neg$names,
Comunidades = comu_neg$membership)
comu_abs_final <- data.frame (Nomes = comu_abs$names,
Comunidades = comu_abs$membership)
# Ordena DFs para facilitar visualização de pertencimento à clusters por parte de cidades.
comu_posi_final <- comu_posi_final[order(comu_posi_final$Comunidades),]
comu_neg_final <- comu_neg_final[order(comu_neg_final$Comunidades),]
comu_abs_final <- comu_abs_final[order(comu_abs_final$Comunidades),]
# Vislumbra os três DFs obtidos acima. Cidades que apresentam mesmo número na coluna "Comunidades", são situadas no mesmo cluster.
# Primeiro sobre a rede embasada em correlações postivas.
kable(comu_posi_final[1:5,], format="markdown")
| Nomes | Comunidades | |
|---|---|---|
| 1 | Alfenas | 1 |
| 2 | Araguari | 1 |
| 4 | Barbacena | 1 |
| 6 | Caratinga | 1 |
| 11 | Formiga | 1 |
# Em sequência tratando de rede embasada em correlações negativas.
kable(comu_neg_final[1:5,], format="markdown")
| Nomes | Comunidades | |
|---|---|---|
| 1 | Alfenas | 1 |
| 13 | Governador Valadares | 1 |
| 14 | Itabira | 1 |
| 16 | Itaúna | 1 |
| 19 | Januária | 1 |
# Por fim, demonstramos comunidades da rede construída com valores absolutos de correlações (negativas e postivas).
kable(comu_abs_final[1:5,], format="markdown")
| Nomes | Comunidades | |
|---|---|---|
| 1 | Alfenas | 1 |
| 2 | Araguari | 1 |
| 4 | Barbacena | 1 |
| 6 | Caratinga | 1 |
| 11 | Formiga | 1 |
# Exporta as redes.
# write.table(cor_samis_mg_posi, "rede_cor_posi_samis_mg.csv", sep = ";", col.names = TRUE)
#
# write.table(cor_samis_mg_neg, "rede_cor_samis_mg_neg.csv", sep = ";", col.names = TRUE)
#
# write.table(cor_samis_mg_abs, "rede_cor_samis_mg_abs.csv", sep = ";", col.names = TRUE)
Rede embasada em correlações positivas
Rede embasada em correlações negativas
Rede embasada em todas as correlações