# "limpar" ambiente
rm(list = ls())
# Carregar bibliotecas
library(tibble)
library(tidyverse)
library(FactoMineR)
library(factoextra)
library(PerformanceAnalytics)
library(readxl)
library(dplyr)
library(cluster) #algoritmo de cluster
library(dendextend) #compara dendogramas
library(fpc) #algoritmo de cluster e visualizacao
library(gridExtra)
A identificação de agrupamentos setoriais entre os estados, considerando vínculos empregatícios, é essencial para visualizar a concentração setorial do mercado de trabalho e avaliar a dinâmica geográfica. Catela e Porcile (2013) consideram que a estrutura econômica dos países em desenvolvimento é especializada (em poucos setores, principalmente commodities de exportação) e heterogênea (diferenças marcantes nos níveis de produtividade do trabalho), é concluindo que o progresso técnico se difunde de forma lenta e desigual não apenas entre países, mas especialmente no interior das economias periféricas. Dessa forma, a ideia é captar a concentração de empregos por setor em escala geográfica e observar se há homogeneidade nas Unidades Federativas.
Os dados usados para análise, relaciona o número de vínculos
empregatícios por unidade federativa (UF) do Brasil com a classificação
setorial do IBGE (grande setor). O presente exercício realizará uma
análise de Clusters, com objetivo de identificar agrupamentos setoriais
entre os estados. Como essa análise é sensível a outliers, foi
retirado as informações dos estados de São Paulo, Rio de Janeiro e Minas
Gerais. Dado que foi identificado previamente que esses três estados
sozinhos faziam um grupo isolado para cada um deles. Os dados foram
obtidos da consulta da Relação Anual de Informações Sociais (RAIS) para
o último ano disponível (2021). Os dados são normalizados com a função
scale()
.
Com dados padronizados temos que:
\[\mathbf{S}= \frac{1}{n-1}\mathbf{X}^\top \mathbf{X}= \frac{1}{n}\sum \mathbf{x}_i\mathbf{x}_i^\top \tag{1}\]
# Carregar dados
dados <- read_excel("C:/Users/kassy/OneDrive - caen.ufc.br/1. CAEN/3. Doutorado/4. Machine Learning/Work/vinculos uf setor/raissprjmg1.xlsx")
# ajustar nomes das UFs como nomes de linhas e normalizar
df <- dados %>%
column_to_rownames(var="UF") %>%
scale()
summary(dados)
## UF Extrativa Mineral Indústria de Transformação
## Length:24 Min. : 26 Min. : 3029
## Class :character 1st Qu.: 1264 1st Qu.: 37104
## Mode :character Median : 2194 Median : 83150
## Mean : 4957 Mean :167242
## 3rd Qu.: 6520 3rd Qu.:216681
## Max. :25062 Max. :743702
## Servicos Industriais de Utilidade Pública Construção Civil Comércio
## Min. : 1365 Min. : 5003 Min. : 21443
## 1st Qu.: 5014 1st Qu.: 19960 1st Qu.: 89918
## Median : 7698 Median : 34792 Median :147450
## Mean :10747 Mean : 45756 Mean :209333
## 3rd Qu.:12984 3rd Qu.: 63903 3rd Qu.:270787
## Max. :30269 Max. :139656 Max. :682647
## Serviços Administração Pública
## Min. : 23357 Min. : 54166
## 1st Qu.: 135650 1st Qu.:129299
## Median : 225485 Median :203713
## Mean : 356655 Mean :240889
## 3rd Qu.: 553148 3rd Qu.:330728
## Max. :1111869 Max. :625526
## Agropecuária, Extração Vegetal, Caça e Pesca
## Min. : 1085
## 1st Qu.: 11351
## Median : 22779
## Mean : 39137
## 3rd Qu.: 59141
## Max. :129835
# Verificar missing values
colSums(is.na(dados))
## UF
## 0
## Extrativa Mineral
## 0
## Indústria de Transformação
## 0
## Servicos Industriais de Utilidade Pública
## 0
## Construção Civil
## 0
## Comércio
## 0
## Serviços
## 0
## Administração Pública
## 0
## Agropecuária, Extração Vegetal, Caça e Pesca
## 0
chart.Correlation(df, histogram=TRUE, pch=19)
Esse gráfico mostra a distribuição de cada variável na diagonal,
gráficos de dispersão bivariados na parte inferior e o valor das
correlações, com nível de significância na parte superior. A informação
mais notável desse quadro é a ausência de correlação entre os setores
Extrativa Mineral e Indústria de Transformação. Isso pode ser
interpretado como uma indicação de que o setor Extrativa Mineral é
voltado para exportação e não fornece insumos para a indústria
local.
A análise de cluster é definida como aprendizado não supervisionado geralmente é realizado como parte de uma análise exploratória de dados (JAMES, G. et al (2013)).
Clustering usa técnicas para encontrar subgrupos, ou agrupamentos de clusters em conjunto de dados, as duas abordagens mais conhecidas são o agrupamento \(K\)-means e o agrupamento hierárquico. Em particular, no clustering \(K\)-means, procuramos particionar as observações em um número pre-especificado de clusters. No clustering hierárquico, não sabemos antecipadamente quantos clusters queremos; de fato, acabamos com uma representação visual em forma de árvore das observações, chamada dendograma, que nos permite visualizar de uma só vez os agrupamentos obtidos para cada número possível de agrupamentos, de 1 a \(n\).
Para realizar o cálculo da matriz de distância entre os clusters foi usado o método da distância euclidiana.
# Matriz de distância
d <- dist(df, method = "euclidean")
# Aplicar critério de ligação
hc <- hclust(d, method = "average" )
Os rótulos de classe são mostrados em cores distintas. A altura da fusão (medida no eixo vertical) entre os ramos do dendograma indica quão diferentes são as observações. Assim, as observações que se unem no ponto mais baixo do dendograma são bastante semelhantes entre si, enquanto as observações que se unem próximo ao topo tendem a ser bastante diferentes entre si.
# Construir dendograma
dend3 <- as.dendrogram(hc)
dend3 %>% set("branches_lwd", 4) %>% # 3 refere-se a espessura da linha
set("branches_k_color", k = 6) %>% # k é o número de clusters
plot(main = "average")#, cex = 10.8) #cex é o tamanho da fonte
O dendograma mostra que os estados do sul do país são os mais semelhantes quanto ao número de vínculos por classificação setorial. Isso é provavelmente devido a uma série de fatores, incluindo a localização geográfica, a história econômica e a cultura desses estados. Os estados do Ceará e Pernambuco na região nordeste, Mato Grosso e Mato Grosso do Sul no centro-oeste, também são semelhantes por estarem na mesma região e por possuírem características de vínculos por setor semelhantes. Há uma série de outros ramos do dendograma entre os estados que possuem características semelhantes, sendo esses pontos mais baixos do dendograma tem como um ramo em comum entre eles.
As maiores semelhanças são entre:
Esses dados indicam que os estados do Brasil podem ser agrupados em grupos com base em suas características econômicas. Esses grupos podem ser usados para identificar oportunidades de cooperação entre os estados e para desenvolver políticas públicas que atendam às necessidades específicas de cada grupo.
O método \(k\)-means visa minimizar a soma da distância quadrada de cada ponto em relação à média do cluster (temos um problema de minimizar a soma de quadrados totais).
# Número ótimo de clusters
fviz_nbclust(df, kmeans, method = "wss")#, k=6)
A localização de uma curva (joelho) na parcela é geralmente considerada
como um indicador do número apropriado de clusters. Os
resultados sugerem que 3 é o número ideal de clusters, pois parece ser a
dobra no joelho (ou cotovelo).
#calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
FUN = kmeans,
nstart = 25,
K.max = 10,
B = 50)
#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat)
A estatística gap compara a variação intracluster total para diferentes
valores de \(k\) com seus valores
esperados sob distribuição de referência nula dos dados (uma
distribuição sem agrupamento óbvio). O resultado da estatística confirma
a observação do gráfico da soma dos quadrados totais, considerando a
indicação de 3 clusters.
# Aplicando k-means
set.seed(123)
cluster_uf <- kmeans(df, centers = 3, nstart = 1)
cluster_uf
## K-means clustering with 3 clusters of sizes 14, 4, 6
##
## Cluster means:
## Extrativa Mineral Indústria de Transformação
## 1 -0.5238623 -0.55294971
## 2 0.7320825 1.89692176
## 3 0.7342904 0.02560148
## Servicos Industriais de Utilidade Pública Construção Civil Comércio
## 1 -0.6377589 -0.6497643 -0.6478813
## 2 1.8385866 1.7974481 1.9072093
## 3 0.2623796 0.3178180 0.2402503
## Serviços Administração Pública Agropecuária, Extração Vegetal, Caça e Pesca
## 1 -0.6217737 -0.5703763 -0.6070679
## 2 1.8173163 1.4407585 1.1062738
## 3 0.2392610 0.3703724 0.6789759
##
## Clustering vector:
## RO AC AM RR PA AP TO MA PI CE RN PB PE AL SE BA ES PR SC RS MS MT GO DF
## 1 1 1 1 3 1 1 1 1 3 1 1 3 1 1 2 3 2 2 2 1 3 3 1
##
## Within cluster sum of squares by cluster:
## [1] 14.88586 13.09951 22.80623
## (between_SS / total_SS = 72.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
# Calculando a soma dos quadrados
cluster_uf$tot.withinss
## [1] 50.79161
# Testando número de interação maior
cluster_uf100 <- kmeans(df, centers = 3, nstart = 100)
cluster_uf100
## K-means clustering with 3 clusters of sizes 14, 6, 4
##
## Cluster means:
## Extrativa Mineral Indústria de Transformação
## 1 -0.5238623 -0.55294971
## 2 0.7342904 0.02560148
## 3 0.7320825 1.89692176
## Servicos Industriais de Utilidade Pública Construção Civil Comércio
## 1 -0.6377589 -0.6497643 -0.6478813
## 2 0.2623796 0.3178180 0.2402503
## 3 1.8385866 1.7974481 1.9072093
## Serviços Administração Pública Agropecuária, Extração Vegetal, Caça e Pesca
## 1 -0.6217737 -0.5703763 -0.6070679
## 2 0.2392610 0.3703724 0.6789759
## 3 1.8173163 1.4407585 1.1062738
##
## Clustering vector:
## RO AC AM RR PA AP TO MA PI CE RN PB PE AL SE BA ES PR SC RS MS MT GO DF
## 1 1 1 1 2 1 1 1 1 2 1 1 2 1 1 3 2 3 3 3 1 2 2 1
##
## Within cluster sum of squares by cluster:
## [1] 14.88586 22.80623 13.09951
## (between_SS / total_SS = 72.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
# Calculando a soma dos quadrados
cluster_uf100$tot.withinss
## [1] 50.79161
O algoritmo do \(k\)-means utiliza os vetores de pontuação da análise dos componentes principais (PCA) para separar os cluster pelos centroides. Se existir falhas em dimensionar as variáveis antes de realizar o procedimento PCA a maioria dos componentes principais seria direcionados pela variável de maior média e variância. Dessa forma, faz-se necessário a realização da padronização das variáveis para que tenham média (zero) e desvio padrão (um) antes de realizar o PCA.
Outros testes foram realizados considerando um número de
clusters maior que o ótimo e modificando o valor de
nstart
. Como resultado, os agrupamentos foram diferentes
nas duas especificações. Quando o número de clusters é
diferente de 3, o valor de nstart
, que especifica o número
de vezes que o algoritmo \(k\)-means
será executado com diferentes inicializações aleatórias, também pode
afetar o valor de tot.withinss
. O valor de
tot.withinss
é a soma dos quadrados dos erros dentro do
cluster. Um valor menor de tot.withinss
indica que
os dados estão mais bem agrupados.
No caso de 4 clusters, nstart=1
é 41.63597
contra 41.54623 de nstart=100
. Portanto, o cluster
com nstart=100
possui menor soma dos erros quadrados e é
considerado que este agrupamento produz melhor convergência. Além disso,
as duas especificações não produzem o mesmo agrupamento de UFs.
A identificação do número ótimo de clusters como sendo igual
a 3 mostra que o valor de nstart
não tem impacto na
convergência dos clusters para os dados analisados.
# Vizualizar clusters com nstart=100
fviz_cluster(cluster_uf,
data = df,
ggtheme = theme_minimal(base_size=18))
#ggtitle("`nstart=100`")
#, fig.height = 7, fig.width = "100%"
Considerando os 3 clusters os agrupamentos das UFs foram:
Amapá, Acre, Roraima, Rondônia, Tocantins, Sergipe, Alagoas, Amazonas, Paraíba, Mato Grosso do Sul, Maranhão, Piauí, Rio Grande do Norte e Distrito Federal.
Espírito Santo, Mato Grosso, Ceará, Pernambuco, Goiás e Pará.
Bahia, Santa Catarina, Rio Grande do Sul e Paraná.
Os estados (Rio Grande do Sul e Paraná), (Ceará e Pernambuco), (Piauí e Alagoas), (Acre e Roraima), (Rondônia e Tocantins) e (Amazonas e Paraíba), formaram clusters semelhantes aos formados pelo dendograma. Os demais foram separados, como Mato Grosso e Mato Grosso do Sul. Na análise do \(k\)-means, é considerado que quanto menor a distância entre as observações maior a semelhanças entre elas, assim, podemos considerar que no primeiro cluster agrupa as UF’s que possuem maior número de características semelhantes.
Tanto o Clustering como o PCA buscam simplificar os dados por meio de um pequeno número de resumos, mas seus mecanismos são diferentes (JAMES, G. et al (2021)):
pca.out <- prcomp(df)
pca.out
## Standard deviations (1, .., p=8):
## [1] 2.4820557 0.9541962 0.6934733 0.5582487 0.2691444 0.2035887 0.1214480
## [8] 0.0878942
##
## Rotation (n x k) = (8 x 8):
## PC1 PC2 PC3
## Extrativa Mineral 0.2178664 0.82883181 0.21454871
## Indústria de Transformação 0.3485567 -0.39023146 -0.04259053
## Servicos Industriais de Utilidade Pública 0.3893603 -0.06734562 -0.03201879
## Construção Civil 0.3947268 0.01906296 0.19263839
## Comércio 0.3947332 -0.16502254 -0.04234302
## Serviços 0.3877100 -0.21541957 0.13933442
## Administração Pública 0.3555799 0.12730790 0.36590466
## Agropecuária, Extração Vegetal, Caça e Pesca 0.3017639 0.25693011 -0.87116411
## PC4 PC5
## Extrativa Mineral 0.436099492 -0.06845470
## Indústria de Transformação 0.565801597 -0.05030240
## Servicos Industriais de Utilidade Pública -0.123616277 -0.86528928
## Construção Civil 0.005521717 0.37450966
## Comércio 0.134479742 0.18909616
## Serviços -0.026945707 0.20345259
## Administração Pública -0.645702854 0.06368372
## Agropecuária, Extração Vegetal, Caça e Pesca -0.196548378 0.15031520
## PC6 PC7
## Extrativa Mineral 0.006120416 -0.15695217
## Indústria de Transformação 0.515447575 -0.01909411
## Servicos Industriais de Utilidade Pública -0.219172721 0.16615462
## Construção Civil -0.279582200 0.75374126
## Comércio 0.088996906 -0.09113896
## Serviços -0.569249480 -0.59343794
## Administração Pública 0.523354859 -0.13491658
## Agropecuária, Extração Vegetal, Caça e Pesca 0.046986385 -0.02430663
## PC8
## Extrativa Mineral 0.000799052
## Indústria de Transformação 0.368376371
## Servicos Industriais de Utilidade Pública -0.056456934
## Construção Civil 0.141907648
## Comércio -0.863186766
## Serviços 0.255985818
## Administração Pública 0.101876593
## Agropecuária, Extração Vegetal, Caça e Pesca 0.141329659
# Ver componentes
names(pca.out)
## [1] "sdev" "rotation" "center" "scale" "x"
# Desvio padrão
pca.out$sdev
## [1] 2.4820557 0.9541962 0.6934733 0.5582487 0.2691444 0.2035887 0.1214480
## [8] 0.0878942
A variância explicada por cada componente principal é obtida elevando ao quadrado:
#
pr.var=pca.out$sdev^2
pr.var
## [1] 6.16060068 0.91049030 0.48090529 0.31164165 0.07243871 0.04144837 0.01474961
## [8] 0.00772539
Para calcular a proporção da variância explicada por cada componente principal é dividido a variância explicada por cada componente principal pela variância total explicada por todos os oito componentes principais:
#
pve=pr.var/sum(pr.var)
pve
## [1] 0.7700750852 0.1138112876 0.0601131607 0.0389552063 0.0090548392
## [6] 0.0051810465 0.0018437008 0.0009656737
Observamos que o primeiro componente principal explica 77% da variância dos dados, o próximo componente principal explica 11,38% da variância e assim por diante.
plot(pve, xlab="Principal Component", ylab="Proportion of Variance Explained", ylim=c(0,1), type='b')
plot(cumsum(pve), xlab="Principal Component", ylab = " Cumulative Proportion of Variance Explained", ylim=c(0,1), type='b')
O gráfico
biplot
exibe todas as observações do conjunto de
dados em um plano formado pelos dois primeiros componentes principais.
As setas indicam os vetores que representam a carga de cada variável nos
dois principais componentes principais. Pontos próximos possuem
semelhança nas variáveis analisadas.
Pontos de observação: As observações são representadas como pontos no
gráfico biplot
.A posição desses pontos no espaço de menor
dimensão representa a relação entre as observações com base nas
componentes principais. Observações próximas no gráfico são consideradas
semelhantes em termos de sua composição em variáveis. As observações
podem ser agrupadas em diferentes regiões, indicando diferentes clusters
ou padrões nos dados. A dispersão das UF’s no plano PCA é bem semelhante
ao visto na figura que indica os clusters. Pela direção dos
vetores todos os setores possuem relação entre sí, entretanto, o setor
que mais se diferencia dos demais é Extrativa Mineral.
# Biplot com factoextra
fviz_pca_biplot(pca.out,
label="all",
labelsize = 3,
pointsize = 1,) +
xlim(-5, 5) + ylim (-3, 3)
## Warning: Removed 2 rows containing missing values (`geom_point()`).
## Warning: Removed 2 rows containing missing values (`geom_text()`).
Neste notebook, foi realizada uma análise de \(clusters\) dos vínculos empregatícios das Unidades Federativas (UFs) do Brasil por setor. Foi utilizado o método de clustering \(k\)-means e a análise de componentes principais (PCA) para obter percepções sobre a concentração setorial do mercado de trabalho e à similaridade entre as UFs. Observamos que o dendograma gerado a partir da análise de clustering mostrou a formação de grupos de UF’s com características semelhantes em termos de vínculos empregatícios por setor. Os estados do sul do país formaram um grupo com características semelhantes, enquanto os estados do Ceará e Pernambuco, Mato Grosso e Mato Grosso do Sul também apresentaram semelhanças devido à sua localização geográfica e características econômicas. Foi possível identificar outras semelhanças entre vários estados.
A partir do método \(k\)-means com partição das UFs em clusters, determinamos que o número ótimo de clusters foi igual a 3. Realizamos também a análise de componentes principais (PCA) para reduzir a dimensionalidade dos dados e identificar os principais componentes que explicam a variabilidade dos vínculos empregatícios por setor. O primeiro componente principal explicou a maior parte da variância dos dados, seguido pelo segundo componente.
No gráfico biplot de PCA, observamos a distribuição das UFs no plano formado pelos dois primeiros componentes principais. As setas indicaram que relação entre as variáveis são bem relacionadas, com apenas o setor Extrativo Mineral com maior diferença dos demais, mas ainda assim, no mesmo sentido. Verificamos que os posicionamentos das UFs no gráfico tinham características semelhantes com o posicionamento visto no agrupamento de cluster pelo \(k\)-means, em termos de seus vínculos empregatícios por setor.
Por fim, esta análise nos permitiu identificar agrupamentos setoriais entre as UFs do Brasil e compreender a concentração setorial do mercado de trabalho em diferentes regiões.
James, G.; Witten, D., Hastie, T., Tibshirani, R. (2021). An Introduction to Statistical Learning: with Applications in R. Second Edition. Springer.
_______. (2013). An Introduction to Statistical Learning: with Applications in R . Springer.
Catela, Eva Yamila da Silva; Porcile, Gabriel.(2013). Heterogeneidade estrutural na produtividade das firmas brasileiras. IPEA. Textos para Discussão CEPAL-IPEA, 55.