AJUSTANDO PCA E FA PARA DADOS DE CONSUMO ESTADUAL DE ENERGIA INDÚSTRIAL

Aprendizagem Bayesiana - Mestrado Profissional em Economia - Insper

Professor Hedibert Freitas Lopes

Lucas Marin Avelleda

Parte I: Download dos dados Os dados foram extraídos da página do Prof. Dr. Hedibert Freitas Lopes (www.hedibert.org), em arquivo txt. Uma vez que siglas de Estados são representadas em letras maiúsculas e na base de dados não assim o estão, o cabeçalho foi dessa forma ajustado.

consumo<-read.table("http://hedibert.org/wp-content/uploads/2020/03/consumo-energia-sudeste-sul.txt",
                header=TRUE)
names(consumo)<-toupper(colnames(consumo))

Parte II: Análise exploratória dos dados Trata-se de uma base de dados em formato data.frame com 50 observações anuais do consumo de energia elétrica industrial, cuja unidade de medida é apresentada em MWh. A série tem início em 1968 e término em 2018 com observações de 7 Estados brasileiros: SP, RJ, MG, ES, RS, SC e PR. Os valores são apresentados em números inteiros e não há existência de valores em branco (“NaS”).

meltcons<-melt(consumo,id="ANO")
gg1<-ggplot(meltcons,aes(x=ANO,y=log(value),colour=variable,group=variable))+
  geom_line(size=1.2)+
  theme_minimal()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
      axis.line = element_line(color="black",size=1),
      panel.border=element_rect(colour="black",fill=NA,size=0.1),
      legend.background = element_blank(),
      legend.box.background = element_rect(colour="black",size=1),
      strip.text = element_text(size = 16, color = "black"),
      axis.title = element_text(color = "black", hjust = 0, face = "italic"),
      axis.text = element_text(color = "black"), 
      plot.title = element_text(face = "bold", size = (10)),
      plot.subtitle = element_text(face = "italic", size = (8)))+
  labs(y="Log do Consumo (Mhw)",x="Tempo (anos)",title="Gráfico 1: Consumo anual de energia elétrica industrial (em log)",subtitle = "Dados obtidos em http://hedibert.org/wp-content/uploads/2020/03/consumo-energia-sudeste-sul.txt ")

gg1

str(consumo)
## 'data.frame':    50 obs. of  8 variables:
##  $ ANO: int  1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 ...
##  $ SP : int  8087543 8724441 9794908 11003991 12506604 14466643 15526292 17011464 17465425 19185211 ...
##  $ RJ : int  1794463 2115197 2303695 2644653 2806425 3128953 2901639 3571186 3893045 4594765 ...
##  $ MG : int  2973205 3266916 3625783 4234186 4676434 5139979 5751954 6456913 7001976 8189171 ...
##  $ ES : int  96254 116410 192777 280442 313753 462533 532392 601759 661468 806855 ...
##  $ RS : int  546688 628410 736348 817714 974327 1088107 1329899 1493843 1673819 1873509 ...
##  $ SC : int  331780 378311 417531 447319 549696 644989 824801 917082 1048576 1236320 ...
##  $ PR : int  535173 625054 662478 701774 845109 1017270 1139102 1279325 1211924 1491855 ...
any(is.na(consumo))
## [1] FALSE

Abaixo foi gerada a Tabela 1, apresentando um sumário da base de dados, porém as estatísticas nela apresentada são pouco informativas uma vez que tratam-se de séries de dados não-estacionárias e uma vez que as características de cada Estado diferem, não é possível extrair conclusões relevantes delas.

sumario<-function(x){
  c(mínimo=min(x),média=mean(x),máximo=max(x),mediana=median(x),desvpad=sd(x))
}

tabela1<-sapply(consumo[2:(ncol(consumo))],sumario)
knitr::kable(caption="Tabela 1: Sumário da Base de Dados",align ="c" ,tabela1,digits=3, format.args = list(big.mark=",",scientific=FALSE)) %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = TRUE,position = "float_right")
Tabela 1: Sumário da Base de Dados
SP RJ MG ES RS SC PR
mínimo 8,087,543 1,794,463 2,973,205 96,254 546,688 331,780 535,173
média 34,612,360 7,445,830 18,797,469 2,642,368 5,535,200 4,551,865 5,637,808
máximo 55,989,265 10,027,689 32,610,430 5,118,085 10,665,149 10,251,563 12,725,163
mediana 35,316,102 8,598,309 18,957,508 2,587,109 4,948,364 3,641,825 4,522,736
desvpad 14,236,894 2,555,147 9,305,433 1,495,769 3,389,290 3,228,912 4,004,199

Parte III: Tratamento e Normalização dos Dados

A primeira etapa do tratamento dos dados para as futuras análises consiste na elaboração de duas matrizes: uma contendo o consumo de energia elétrica industrial em MWh per capita e outra com as taxas de crescimento dessa variável. Ademais, cria-se um vetor com os anos.

Obtiveram-se as estimativas populacionais dos Estados em análise disponibilizadas no texto do exercício. Na Tabela 1 é possível consultá-las.

Para a normalização do consumo de energia elétrica, dividiu-se o consumo pela população do estado. Para o cálculo da variação do crescimento do consumo da energia elétrica, aplicou-se o log da diferença entre os instantes t e t-1.

#Elaborando as matrizes e vetores
anos<-consumo[,1]
y<-as.matrix(consumo[2:ncol(consumo)])
populacao<- c(45919049,17264943,21168791,4018650,11377239,7164788,11433957)
estados<-colnames(consumo[2:ncol(consumo)])

#Normalizando o consumo pela população
for (i in 1:ncol(y)) {
  y[,i]<-y[,i]/populacao[i]
}

#Taxa de crescimento do consumo de energia elétrica Industrial por Estado
ano1 = consumo[2:nrow(consumo),1]
y1 = apply(log(y),2,diff)

Foi gerada uma tabela (Tabela 2) contendo a população de cada Estado, informação utilizada para o cálculo do consumo per capita.

#Tabela com a População dos Estados
tabela2<-data.frame(cbind(estados,populacao))
tabela2$populacao<-as.numeric(as.character(tabela2$populacao))

knitr::kable(tabela2,caption="Tabela 2: População dos Estados",digits=3,align ="c", format.args = list(big.mark=",",scientific=FALSE)) %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = FALSE,position = "float_right")
Tabela 2: População dos Estados
estados populacao
SP 45,919,049
RJ 17,264,943
MG 21,168,791
ES 4,018,650
RS 11,377,239
SC 7,164,788
PR 11,433,957

Parte IV: Análise Gráfica dos Dados Percebe-se através do Gráfico 2 abaixo que todos os Estados em análise apresentaram crescimento do conusmo de energia elétrica industrial per capita no período analisado, entre 1968 e 2018. Destacam-se o estado do Rio de Janeiro, pelo crescimento mais estável que dos outros Estados, a alta volatilidade constatada no Espírito Santo e o crescimento sem grandes intercorrências nos Estados do Paraná e Santa Catarina.

per_capita<-as.data.frame(cbind(anos,y))
meltpercapita<-melt(per_capita,id="anos")

gg2<-ggplot(meltpercapita,aes(x=anos,y=value,colour=variable,group=variable))+
  geom_line(size=1.2)+
  theme_minimal()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
      axis.line = element_line(color="black",size=1),
      panel.border=element_rect(colour="black",fill=NA,size=0.1),
      legend.background = element_blank(),
      legend.box.background = element_rect(colour="black",size=1),
      strip.text = element_text(size = 16, color = "black"),
      axis.title = element_text(color = "black", hjust = 0, face = "italic"),
      axis.text = element_text(color = "black"), 
      plot.title = element_text(face = "bold", size = (10)),
      plot.subtitle = element_text(face = "italic", size = (8)))+
  labs(y="Consumo per Capita (Mhw)",x="Tempo (anos)",title="Gráfico 2: Consumo anual de energia elétrica industrial per capita",subtitle = "Dados obtidos em http://hedibert.org/wp-content/uploads/2020/03/consumo-energia-sudeste-sul.txt ")

gg2

Tais observações gráficas podem também ser constatadas na Tabela 3, abaixo, que sumariza os dados do Consumo per Capita por Estado.

tabela3<-sapply(per_capita[2:(ncol(per_capita))],sumario)
knitr::kable(tabela3,caption="Tabela 3: Sumário do Consumo de Energia Elétrica per Capita",digits=3,align="c", format.args = list(big.mark=",",scientific=FALSE)) %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width =TRUE,position = "center")
Tabela 3: Sumário do Consumo de Energia Elétrica per Capita
SP RJ MG ES RS SC PR
mínimo 0.176 0.104 0.140 0.024 0.048 0.046 0.047
média 0.754 0.431 0.888 0.658 0.487 0.635 0.493
máximo 1.219 0.581 1.540 1.274 0.937 1.431 1.113
mediana 0.769 0.498 0.896 0.644 0.435 0.508 0.396
desvpad 0.310 0.148 0.440 0.372 0.298 0.451 0.350

Notam-se, no gráfico 3, o qual apresenta a variação anual do consumo de energia elétrica per capita dos Estados, os picos de crescimento de consumo entre as décadas de 70 e 80 no Espírito Santo e, mais a frente na primeira e segunda décadada de 2000, picos de crescimento de consumo nos Estados de São Paulo, Minas Gerais e Espírito Santo.

y1<-as.data.frame(y1)
cresc<-as.data.frame(cbind(anos[-1],y1))
names(cresc)<-c("anos",estados)
meltcresc<-melt(cresc,id="anos")

gg3<-ggplot(meltcresc,aes(x=anos,y=value,colour=variable,group=variable))+
  geom_line(size=1.2)+
  theme_minimal()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
      axis.line = element_line(color="black",size=1),
      panel.border=element_rect(colour="black",fill=NA,size=0.1),
      legend.background = element_blank(),
      legend.box.background = element_rect(colour="black",size=1),
      strip.text = element_text(size = 16, color = "black"),
      axis.title = element_text(color = "black", hjust = 0, face = "italic"),
      axis.text = element_text(color = "black"), 
      plot.title = element_text(face = "bold", size = (10)),
      plot.subtitle = element_text(face = "italic", size = (8)))+
  labs(y="Crescimento do Consumo per Capita (Mhw)",x="Tempo (anos)",title="Gráfifo 3: Crescimento anual de energia elétrica industrial per capita",subtitle = "Dados obtidos em http://hedibert.org/wp-content/uploads/2020/03/consumo-energia-sudeste-sul.txt ")

gg3

Tais observações gráficas podem também ser constatadas na Tabela 4, abaixo, que sumariza os dados da variação do Consumo per Capita por Estado.

tabela4<-sapply(y1[1:(ncol(y1))],sumario)
knitr::kable(tabela4,caption="Tabela 4: Sumário da Variação do Consumo de Energia Elétrica per Capita",align="c",digits=3, format.args = list(big.mark=",",scientific=FALSE)) %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = TRUE,position = "float_right")
Tabela 4: Sumário da Variação do Consumo de Energia Elétrica per Capita
SP RJ MG ES RS SC PR
mínimo -0.066 -0.163 -0.155 -0.246 -0.088 -0.053 -0.062
média 0.037 0.031 0.048 0.077 0.059 0.070 0.065
máximo 0.146 0.292 0.325 0.504 0.201 0.246 0.208
mediana 0.031 0.023 0.039 0.055 0.063 0.060 0.051
desvpad 0.056 0.089 0.082 0.156 0.063 0.060 0.065

Parte V: PCA, Principal Component Analysis

A PCA tem como objetivo prover uma análise dos dados através da redução da dimensão do espaço, de forma a obter menos relações entre os dados disponíveis. Através da PCA, é possível eliminar variáveis, simplificando modelos e o risco de “overfit”. Ao mesmo tempo, a PCA permite gerar novas variáveis através de combinações de variáveis já existentes.

Ao utilizar a função prcomp com a matriz y1 (contendo a variação do consumo de energia elétrica per capita por Estado por Estado), constata-se que a PC1 (Principal Compnentn 1) é responsável por explicar 71.30% da variação dos dados.Também nota-se que 95% da variação dos dados pode ser explicada através dos PC1,PC2,PC3 e PC4.

cons.pca<-princomp(y1)
cons.pca
## Call:
## princomp(x = y1)
## 
## Standard deviations:
##     Comp.1     Comp.2     Comp.3     Comp.4     Comp.5     Comp.6     Comp.7 
## 0.19408163 0.08192814 0.06228365 0.04361420 0.03930322 0.02669161 0.02028581 
## 
##  7  variables and  49 observations.
summary(cons.pca)
## Importance of components:
##                           Comp.1     Comp.2     Comp.3     Comp.4     Comp.5
## Standard deviation     0.1940816 0.08192814 0.06228365 0.04361420 0.03930322
## Proportion of Variance 0.7129972 0.12705306 0.07342892 0.03600599 0.02923986
## Cumulative Proportion  0.7129972 0.84005029 0.91347921 0.94948520 0.97872506
##                            Comp.6      Comp.7
## Standard deviation     0.02669161 0.020285809
## Proportion of Variance 0.01348554 0.007789393
## Cumulative Proportion  0.99221061 1.000000000

Através do correlograma abaixo, é perceptível a forte correlação entre a primeira componente e a variação do consumo de energia elétrica em todos os Estados. A segunda componente apresenta correlação mais significativa com os Estados de RJ, MG e ES, indicando uma possível particularidade da região Sudeste, embora não seja de magnitude tão significativa com SP. Já a terceira componente possui correlações fortes com os Estados do Sul: RS, SC e PR. A quarta componente apresenta correlação mais significativa apenas com o Paraná, indicando que representa fatores específicos desse Estado. Essas 4 componentes explicam ~95% da variância total dos dados, conforme explicitam os dois gráficos abaixo do correlograma.

tabela5<-cor(y1,cons.pca$scores)

corrplot(tabela5, method = "number")

par(mfrow=c(1,2))
plot(cons.pca$sdev^2/sum(cons.pca$sdev^2),xlab="Componente Principal",ylab="% explicada da variância",type=
"b")

plot(cumsum(cons.pca$sdev^2/sum(cons.pca$sdev^2)),xlab="Componente Principal",ylab="% da variância explicada (cumulativo)",type="b")
abline(h=0.95,lty=2)
abline(h=0.75,lty=2)

Análise dos Fatores

Através da função factanal, a qual performa uma análise fatorial de uma matriz de covariância via máxima verossimilhança, constata-se, com 95% de confiança, que a seleção de 3 fatores é suficiente para explicar a variância dos dados originais. Ademais, de acordo com os loadings apresentados, todos os 3 fatores explicam de certa forma a variação do consumo de energia elétrica nos Estados. Nota-se, porém, que o F1 representa mais a região Sul, o F2 a região Sudeste e o F3 apenas SP e ES.

cons.fac <- factanal(y1,factors=3,scores="regression")
cons.fac
## 
## Call:
## factanal(x = y1, factors = 3, scores = "regression")
## 
## Uniquenesses:
##    SP    RJ    MG    ES    RS    SC    PR 
## 0.091 0.404 0.005 0.407 0.173 0.005 0.509 
## 
## Loadings:
##    Factor1 Factor2 Factor3
## SP 0.456   0.383   0.744  
## RJ 0.192   0.642   0.384  
## MG 0.350   0.897   0.261  
## ES 0.336   0.385   0.576  
## RS 0.715   0.333   0.452  
## SC 0.929   0.244   0.267  
## PR 0.478   0.319   0.401  
## 
##                Factor1 Factor2 Factor3
## SS loadings      2.083   1.784   1.538
## Proportion Var   0.298   0.255   0.220
## Cumulative Var   0.298   0.553   0.772
## 
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 1.12 on 3 degrees of freedom.
## The p-value is 0.772

Como pode ser constatado através do correlograma abaixo, há uma evidente correlação entre o primeiro componente e os três fatores, embora mais correlacionado com o terceiro fator. O segundo componente está correlacionado com o segundo fator enquanto o terceiro componente é mais correlacionado com o primeiro fator.

tabela6<-cor(cons.pca$scores, cons.fac$scores)
corrplot(tabela6,method="number")

A Tabela 7, abaixo, apresenta o percentual da variância da variação do consumo per capita de energia elétrica de cada estado explicada pelos fatores. Percebe-se que a variância dos Estados de SP,MG,RS e SC são bem explicadas pelos fatores, enquanto o mesmo não ocorre para RJ, ES e Paraná.

tabela7<-as.data.frame(1 - cons.fac$uniquenesses)
knitr::kable(tabela7,caption="Tabela 7: Percentual da Variância de Cada Estado Explicada pelos Fatores",align="c",digits=3, format.args = list(big.mark=",",scientific=FALSE)) %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = TRUE,position = "center")
Tabela 7: Percentual da Variância de Cada Estado Explicada pelos Fatores
1 - cons.fac$uniquenesses
SP 0.909
RJ 0.596
MG 0.995
ES 0.593
RS 0.827
SC 0.995
PR 0.491