Análise de dados

IMPORTAÇÃO DOS DADOS

EXPLICAÇÃO

Os dados utilizados no presente relatório são referentes a geração distribuída disponibilizada pela Agência Nacional de Energia Elétrica(ANEEL). Esses, apresentam características dos empreendimentos fotovoltaicos tais como: data do empreendimento, classe de consumo, subgrupo tarifário,código do município,média da potência instalada,etc.

Já foi organizado uma planilha chamada “consolidado.xlsx”no qual estão expostos os dados referentes ao estado de Minas Gerais até o data de 23/03/2024. Esse recorte foi necessário devido ao tamanho da base de dados. Considerando os dados trabalhados no presente relatório, temos 286212 observações.

No entanto, falta automatização, visto que os dados são atualizados diariamente pela ANEEL, seria ideal que a base fosse a mais atualizada possível. Essa questão será resolvida futuramente. Para importar o dados foi utilizado o pacote “readxl”.

CODIGO

consolidado <- readxl::read_xlsx("../dados/consolidado.xlsx") 

APLICAÇÃO DE FILTROS E SELEÇÕES

EXPLICAÇÃO

filtro é um suconjunto a partir das linhas seleção é um sobconjunto a parir das colunas

CODIGO

Selecionado as variáveis para a contrução das séries temporais

Para os empreendimentos de Pessoas Juridica(PJ)

library(magrittr)

potencia_pj <- consolidado %>% 
  dplyr::filter(sig_tipo_consumidor == "PJ") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw)

Fazendo a série referente a potencia istalada por dia e acumulada de PJ

library(magrittr)

potencia_pj <- consolidado %>% 
  dplyr::filter(sig_tipo_consumidor == "PJ") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Para os empreendimentos de Pessoas Fisica(PF)

library(magrittr)

potencia_pf <- consolidado %>% 
  dplyr::filter(sig_tipo_consumidor == "PF") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw)

Fazendo a série referente a potencia istalada por dia e acumulada acumulada de PF

library(magrittr)

potencia_pf <- consolidado %>% 
  dplyr::filter(sig_tipo_consumidor == "PF") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Para os empreendimentos com a classe de consumo do tipo Comercial

library(magrittr)

potencia_comercial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Comercial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw)

Fazendo a série referente a potencia istalada por dia e acumulada acumulada da classe comercial

library(magrittr)

potencia_comercial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Comercial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Para os empreendimentos com a classe de consumo do tipo Residencial

library(magrittr)

potencia_residencial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Residencial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw)

Fazendo a série referente a potencia istalada por dia e acumulada acumulada da classe Residencial

library(magrittr)

potencia_residencial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Residencial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Para os empreendimentos com a classe de consumo do tipo Industrial

library(magrittr)

potencia_industrial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Industrial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw)

Fazendo a série referente a potencia istalada por dia e acumulada da classe Industrial

library(magrittr)

potencia_industrial <- consolidado %>% 
  dplyr::filter(dsc_classe_consumo == "Industrial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Fazendo a série referente por dia e acumulada da quantidade de unidades que recebem cédito

library(magrittr)

quantidade_recebe_credito <- consolidado %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                qtd_uc_recebe_credito) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(quantidade_recebe_credito = sum(qtd_uc_recebe_credito)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(quantidade_recebe_credito_acu = cumsum(quantidade_recebe_credito))

Fazendo a série referente por dia e acumulada do Número de Instalações Por Classe de Consumo

# Carregar pacotes necessários
library(dplyr)



# Calcular o número de instalações por classe de consumo e data, e o acumulado
numero_de_instalacoes_classe <- consolidado %>%
  group_by(dsc_classe_consumo, dth_atualiza_cadastral_empreend) %>%
  summarise(count = n(), .groups = 'drop') %>%
  arrange(dth_atualiza_cadastral_empreend) %>% 
  group_by(dsc_classe_consumo) %>%
  mutate(numero_de_instalacoes_acumuladas = cumsum(count)) %>%
  ungroup()

# Calculando a Potência Instalada por Classe de Consummo

# Calcular o número de instalações e potência acumulada por classe de consumo e data
potencia_classe <- consolidado %>%
  group_by(dsc_classe_consumo, dth_atualiza_cadastral_empreend) %>%
  summarise(count = n(),
            potencia_instalada = sum(mda_potencia_instalada_kw),
            .groups = 'drop') %>%
  arrange(dth_atualiza_cadastral_empreend) %>% 
  group_by(dsc_classe_consumo) %>%
  mutate(potencia_acumulada = cumsum(potencia_instalada)) %>%
  ungroup()

Fazendo a série referente por dia e acumulada do Número de Instalações Por Modalidade

# Carregar pacotes necessários
library(dplyr)



# Calcular o número de instalações por classe de consumo e data, e o acumulado
numero_de_instalacoes_modalidade <- consolidado %>%
  group_by(dsc_modalidade_habilitado, dth_atualiza_cadastral_empreend) %>%
  summarise(count = n(), .groups = 'drop') %>%
  arrange(dth_atualiza_cadastral_empreend) %>% 
  group_by(dsc_modalidade_habilitado) %>%
  mutate(numero_de_instalacoes_acumuladas = cumsum(count)) %>%
  ungroup()

Fazendo a série com perodicidade mesnsal da Potência Acumulada e Quantidade de Unidades que recebem crédito e do Número de Instala

library(magrittr)
library(lubridate)

# Conversão da coluna de datas
consolidado$dth_atualiza_cadastral_empreend <- as.Date(consolidado$dth_atualiza_cadastral_empreend)

# Processar dados
consolidado_st <- consolidado %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw,
                qtd_uc_recebe_credito) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw),
                   unidades_recebem_credito = sum(qtd_uc_recebe_credito),
                   count = n()) %>%
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia),
                unidades_recebem_credito_acu = cumsum(unidades_recebem_credito),
                numero_de_instalacoes_acumuladas = cumsum(count)) %>%
  dplyr::mutate(ref_data = as.Date(paste0(year(dth_atualiza_cadastral_empreend), '-', month(dth_atualiza_cadastral_empreend), '-01'))) %>% 
  dplyr::group_by(ref_data) %>% 
  dplyr::summarise(potencia_acumulada = last(potencia_acumulada),
                   unidades_recebem_credito_acu = last(unidades_recebem_credito_acu),
                   numero_de_instalacoes_acumuladas = last(numero_de_instalacoes_acumuladas)) %>% 
  dplyr::ungroup() %>% 
  dplyr::select(ref_data,
                potencia_acumulada ,
                unidades_recebem_credito_acu,
                numero_de_instalacoes_acumuladas) %>% 
  dplyr::mutate(log_potencia = ifelse(potencia_acumulada > 0, log(potencia_acumulada), NA),
                log_credito = ifelse(unidades_recebem_credito_acu > 0, log(unidades_recebem_credito_acu), NA),
                log_instalacoes = ifelse(numero_de_instalacoes_acumuladas > 0, log(numero_de_instalacoes_acumuladas), NA))
               
# Visualizar os primeiros registros do resultado
head(consolidado_st)
## # A tibble: 6 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2011-10-01               16                           2                      2
## 2 2012-03-01               26                           3                      3
## 3 2012-08-01               53                           4                      4
## 4 2012-12-01               59.8                         5                      5
## 5 2013-05-01              135.                          6                      6
## 6 2013-06-01              186.                          8                      8
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>

VISUALIZAÇÃO DOS DADOS ESTATÍSTICOS

EXPLICAÇÃO

CODIGO

Fazendo o gráfico referente a potencia instalada por dia das intalações de PJ

library(magrittr)
library(ggplot2)

potencia_pj %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Pessoal Juridica',
                   x = 'Data',
                   y = 'kWp')

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações de PJ

library(magrittr)
library(ggplot2)

graifco_potencia_pj <- potencia_pj %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Pessoal Juridica',
                   x = 'Data',
                   y = 'kWp')

plotly::ggplotly(graifco_potencia_pj)

Fazendo o gráfico referente a potencia instalada por dia das intalações de PF

library(magrittr)
library(ggplot2)

grafico_potencia_pf <- potencia_pf %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Pessoal Fisica',
                   x = 'Data',
                   y = 'kWp')

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações de PF

library(magrittr)
library(ggplot2)

grafico_potencia_pf <- potencia_pf %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Pessoal Fisica',
                   x = 'Data',
                   y = 'kWp')

plotly::ggplotly(grafico_potencia_pf)

Fazendo o gráfico referente a potencia instalada por dia das intalações classe comercial

library(magrittr)
library(ggplot2)

potencia_comercial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Classe Comercial',
                   x = 'Data',
                   y = 'kWp')

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações da classe comercial

library(magrittr)
library(ggplot2)

grafico_potencia_comercial <- potencia_comercial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Classe Comercial',
                   x = 'Data',
                   y = 'kWp')

plotly::ggplotly(grafico_potencia_comercial)

Fazendo o gráfico referente a potencia instalada por dia das intalações classe residencial

library(magrittr)
library(ggplot2)

potencia_comercial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Classe Residencial',
                   x = 'Data',
                   y = 'kWp')

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações da classe residencial

library(magrittr)
library(ggplot2)

grafico_potencia_comercial <-  potencia_comercial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Classe Residencial',
                   x = 'Data',
                   y = 'kWp')

plotly::ggplotly(grafico_potencia_comercial)

Fazendo o gráfico referente a potencia instalada por dia das intalações classe Industrial

library(magrittr)
library(ggplot2)

potencia_industrial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Classe Industrial',
                   x = 'Data',
                   y = 'kWp')

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações da classe Industrial

library(magrittr)
library(ggplot2)

grafico_potencia_indistrial <-  potencia_industrial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Classe Insdtrial',
                   x = 'Data',
                   y = 'kWp')

plotly::ggplotly(grafico_potencia_comercial)

Fazendo o gráfico referente a potencia instalada acumulada por dia das intalações da classe Industrial

library(magrittr)
library(ggplot2)

grafico_potencia_industrial <- potencia_industrial %>% 
  ggplot() + 
  geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                          y = potencia_acumulada)) +
              labs(title = 'Serie Temporal Da Potencia - MG',
                   subtitle = 'Apenas Classe Industrial',
                   x = 'Data',
                   y = 'kWp')
plotly::ggplotly(grafico_potencia_industrial)

Fazendo o gráfico referente a quantidade de unidades que recebem crédito por dia

library(magrittr)
library(ggplot2)

 grafico_unidades_credito <- quantidade_recebe_credito %>% 
   ggplot() + 
   geom_line(mapping = aes(x = dth_atualiza_cadastral_empreend,
                           y = quantidade_recebe_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(dth_atualiza_cadastral_empreend, "%d-%m-%Y"),
                                         "<br> ","Unidades Consumidoras: ",
                                         scales::number(quantidade_recebe_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#845EC2",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = dth_atualiza_cadastral_empreend,
                           y = quantidade_recebe_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(dth_atualiza_cadastral_empreend, "%d-%m-%Y"),
                                         "<br> ","Unidades Consumidoras: ",
                                         scales::number(quantidade_recebe_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#B0A8B9",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Da Quantidade de Unidades que Recebem Cédito - MG',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly( grafico_unidades_credito,tooltip = "text")

Fazendo o gráfico referente a Potência instalada acumulada por mês das intalações

library(magrittr)
library(ggplot2)


grafico_potencia_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Potência Acumulada - MG - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'kWp')

 
plotly::ggplotly(grafico_potencia_acumulada,tooltip = "text")

Fazendo o gráfico referente ao Número de Unidades que Recebem Crédito Mensal

library(magrittr)
library(ggplot2)

 grafico_unidades_recebem_credito_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Da Quantidade de Unidades que Recebem Cédito - Mensal- MG',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly(grafico_unidades_recebem_credito_acumulada,tooltip = "text")

Fazendo o gráfico referente ao Número de Instalações Mensal

library(magrittr)
library(ggplot2)

grafico_numero_istalacoes_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Intalaçoes Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Instalações Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Do Número de de Instalações Acumulada - Mensal - MG',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly(grafico_numero_istalacoes_acumulada,tooltip = "text")

Criando as Séries de Potência Instalada por Classe de Consumo

# Gráfico da série diária de potência instalada
grafico_diario_potencia <- ggplot(potencia_classe, aes(x = dth_atualiza_cadastral_empreend, 
                                                       y = potencia_instalada, 
                                                       color = dsc_classe_consumo)) +
  geom_line() +
  labs(title = "Potência Instalada Diária por Classe de Consumo",
       x = "Data de Atualização Cadastral",
       y = "Potência Instalada (kW)",
       color = "Classe de Consumo") +
  theme_minimal()

# Converter para gráfico interativo plotly
grafico_diario_potencia_interativo <- plotly::ggplotly(grafico_diario_potencia)

# Gráfico da série acumulada de potência instalada
grafico_acumulado_potencia <- ggplot(potencia_classe, aes(x = dth_atualiza_cadastral_empreend, 
                                                          y = potencia_acumulada, 
                                                          color = dsc_classe_consumo)) +
  geom_line() +
  labs(title = "Potência Instalada Acumulada por Classe de Consumo",
       x = "Data de Atualização Cadastral",
       y = "Potência Instalada Acumulada (kW)",
       color = "Classe de Consumo") +
  theme_minimal()

# Converter para gráfico interativo plotly
grafico_acumulado_potencia_interativo <- plotly::ggplotly(grafico_acumulado_potencia)

# Exibir os gráficos interativos
grafico_diario_potencia_interativo
grafico_acumulado_potencia_interativo

Crianado as série diarias de instalaçoes por classe

# Criar o gráfico de linha
numero_de_instalacoes_classe <- numero_de_instalacoes_classe %>% 
  ggplot(aes(x = dth_atualiza_cadastral_empreend, 
             y = numero_de_instalacoes_acumuladas,
             color = dsc_classe_consumo)) +
  geom_line() +
  labs(title = "Número Acumulado de Instalações por Classe de Consumo",
       x = "Data de Atualização Cadastral",
       y = "Número de Instalações Acumuladas",
       color = "Classe de Consumo") +
  theme_minimal()

# Converter para gráfico interativo plotly
plotly::ggplotly(numero_de_instalacoes_classe)

Crianado as série diarias de instalaçoes por modalidade

# Carregar pacotes necessários
library(dplyr)
library(ggplot2)
library(plotly)

# Calcular o número de instalações por classe de consumo e data, e o acumulado
numero_de_instalacoes_modalidade <- consolidado %>%
  group_by(dsc_modalidade_habilitado, dth_atualiza_cadastral_empreend) %>%
  summarise(count = n(), .groups = 'drop') %>%
  arrange(dth_atualiza_cadastral_empreend) %>% 
  group_by(dsc_modalidade_habilitado) %>%
  mutate(numero_de_instalacoes_acumuladas = cumsum(count)) %>%
  ungroup()

# Gráfico da série diária
grafico_diario <- ggplot(numero_de_instalacoes_modalidade, aes(x = dth_atualiza_cadastral_empreend, 
                                                               y = count, 
                                                               color = dsc_modalidade_habilitado)) +
  geom_line() +
  labs(title = "Número Diário de Instalações por Modalidade",
       x = "Data de Atualização Cadastral",
       y = "Número de Instalações Diárias",
       color = "Classe de Consumo") +
  theme_minimal()

# Converter para gráfico interativo plotly
grafico_diario_interativo <- plotly::ggplotly(grafico_diario)

# Gráfico da série acumulada
grafico_acumulado <- ggplot(numero_de_instalacoes_modalidade, aes(x = dth_atualiza_cadastral_empreend, 
                                                                  y = numero_de_instalacoes_acumuladas, 
                                                                  color = dsc_modalidade_habilitado)) +
  geom_line() +
  labs(title = "Número Acumulado de Instalações por Modalidade",
       x = "Data de Atualização Cadastral",
       y = "Número de Instalações Acumuladas",
       color = "Classe de Consumo") +
  theme_minimal()

# Converter para gráfico interativo plotly
grafico_acumulado_interativo <- plotly::ggplotly(grafico_acumulado)

# Exibir os gráficos interativos
grafico_diario_interativo
grafico_acumulado_interativo

Fazendo o gráfico de histograma considerando a variável Sigla de identificação do tipo de consumidor

library(ggplot2)

 histo_sig_tipo_consumidor <- ggplot(consolidado, aes(x = sig_tipo_consumidor)) + 
  geom_bar() +
  labs(title = 'Histograma Instalações - MG',
       subtitle = 'Sigla de identificação do tipo de consumidor',
       x = 'Sigla de identificação do tipo de consumidor',
       y = 'Número de Instalações')

plotly::ggplotly( histo_sig_tipo_consumidor)

Fazendo o gráfico de histograma considerando a variável Classe de Coonsumo

library(ggplot2)

histo_classe_consumo <-  ggplot(consolidado, aes(x =dsc_classe_consumo, fill =dsc_classe_consumo)) + 
  theme(legend.position = c("bottom"), legend.direction = "horizontal",            axis.title.x = element_blank()) +
  geom_bar() +
  labs(title = 'Histograma Instalações - MG',
       subtitle = 'Classe de Consumo',
       x = 'Classe de Consumo',
       y = 'Número de Instalações')

plotly::ggplotly(histo_classe_consumo)

Fazendo o gráfico de boxplot considerando as variáveis Classe de Consumo e Média da Potência Instalada

 ggplot(consolidado, aes(x = dsc_classe_consumo, y = mda_potencia_instalada_kw)) +
  geom_boxplot()

Fazendo o gráfico de boxplot considerando as variáveis Quantidade de Unidades que Recebem Crédito e Classe de Consumo

ggplot(consolidado, aes(x = dsc_classe_consumo, y = qtd_uc_recebe_credito)) +
  geom_boxplot()

Fazendo o gráfico de boxplot considerando as variáveis Quantidade de Unidades que Recebem Crédito e sig_tipo_consumidor

ggplot(consolidado, aes(x = sig_tipo_consumidor, y = qtd_uc_recebe_credito)) +
  geom_boxplot()

Fazendo o gráfico de boxplot considerando as variáveis Média da Potência Instalada Crédito e sig_tipo_consumidor

ggplot(consolidado, aes(x = sig_tipo_consumidor, y =  mda_potencia_instalada_kw)) +
  geom_boxplot()

VISUALIZAÇÃO DOS DADOS GEOFRÁFICOS

EXPLICAÇÁO

Para a visualizarmos os dados das instalações fotovoltaicas de Minas Gerais considerando o espaço geográfico será utilizado o pacote “geobr”. O intuito de relaziar essa análise em específico é verificar como os dados estão distribuidos ao longo do Estado, se há algum padração , concertração ou dispersão, por exemplo; se há presença de outiliers, etc.

CODIGO

Carregando os dados geográficos referentes ao Estado de Minas Gerais. Na presente apostila serão trabalhandos as seguintes divissões: municípios, microrregiões e mesorregiões.

library(geobr)


# Criando um objeto que contenha  as variáveis   por município

# Ler os dados do arquivo Excel e processar
dados_gd_mg <- readxl::read_excel("../dados/consolidado.xlsx") %>%
  dplyr::select(cod_municipio_ibge,
                mda_potencia_instalada_kw,
                dsc_classe_consumo,
                qtd_uc_recebe_credito) %>%
  dplyr::group_by(cod_municipio_ibge) %>%
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw, na.rm = TRUE),
                   quantidade_recebe_credito = sum(qtd_uc_recebe_credito, na.rm = TRUE),
                    count = n()) %>%  
  dplyr::ungroup() %>%
  dplyr::mutate(potencia_acumulada = cumsum(potencia),
                quantidade_recebe_credito_acumulada = cumsum(quantidade_recebe_credito),
                numero_de_instalacoes = cumsum(count))

# Visualizar os primeiros registros do resultado
head(dados_gd_mg)
## # A tibble: 6 × 7
##   cod_municipio_ibge potencia quantidade_recebe_credito count potencia_acumulada
##                <dbl>    <dbl>                     <dbl> <int>              <dbl>
## 1            3100104    1276.                       142   122              1276.
## 2            3100203    5144.                       512   396              6420.
## 3            3100302    2778.                       353   289              9197.
## 4            3100401     303.                        38    30              9500.
## 5            3100500     690.                        85    84             10191.
## 6            3100609     794.                        95    76             10985.
## # ℹ 2 more variables: quantidade_recebe_credito_acumulada <dbl>,
## #   numero_de_instalacoes <int>
# Carregando os dados geográficos
codigo_geo <- geobr::lookup_muni(code_muni = 'all') %>%
  dplyr::select(code_muni, code_micro,code_meso, name_state) %>% 
  dplyr::filter(name_state =="Minas Gerais")              
  
  

# Realizando a união das bases de dados
consolidado_geo <- dplyr::left_join(dados_gd_mg,
                                   codigo_geo,
                                   by = c('cod_municipio_ibge' = 'code_muni')) %>%
  dplyr::group_by(code_micro) %>%
  dplyr::summarise(potencia = sum(potencia)) %>%
  dplyr::ungroup()

Realizando a mescla das base de dados da ANEEL(dados de instalaçãoes fotovoltaicas) com a do IBGE(dados geográficos)

library(dplyr)
library(readxl)


consolidado_geo <- dplyr::full_join(codigo_geo,
                                    dados_gd_mg,
                                    by = c('code_muni' = 'cod_municipio_ibge')) 

Fazendo os gráficos

Mapa da potência para os municípios MG

#Mapa da potência para os municípios MG
mapa_potencia_municipio <- geobr::read_municipality(code_muni = 'MG',
                                           showProgress = FALSE) %>%
  dplyr::full_join(., dados_gd_mg,
                   by = c('code_muni' = 'cod_municipio_ibge'))

config_grafico <- theme(axis.title = element_blank(),
                        axis.text = element_blank(),
                        axis.ticks = element_blank())
mapa_potencia_municipio %>%
  ggplot() +
  geom_sf(mapping = aes(fill = potencia)) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Potência\n(kWp)',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa da quantidade de unidades que recebem credito para os municípios MG

#Mapa da quantidade de unidades que recebem credito para os municípios MG 
mapa_quantidade_recebe_credito_municipio <- geobr::read_municipality(code_muni = 'MG',
                                           showProgress = FALSE) %>%
  dplyr::full_join(., dados_gd_mg,
                   by = c('code_muni' = 'cod_municipio_ibge'))

config_grafico <- theme(axis.title = element_blank(),
                        axis.text = element_blank(),
                        axis.ticks = element_blank())

Mapa da quantidade de unidades que recebem credito para os municípios MG

mapa_quantidade_recebe_credito_municipio %>%
  ggplot() +
  geom_sf(mapping = aes(fill = quantidade_recebe_credito)) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Quantidade  que recebem credito',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa do número de instalacoes municípios MG

#Mapa da potência para os municípios MG
mapa_numero_de_instalacoes_municipio <- geobr::read_municipality(code_muni = 'MG',
                                           showProgress = FALSE) %>%
  dplyr::full_join(., dados_gd_mg,
                   by = c('code_muni' = 'cod_municipio_ibge'))

config_grafico <- theme(axis.title = element_blank(),
                        axis.text = element_blank(),
                        axis.ticks = element_blank())
mapa_numero_de_instalacoes_municipio %>%
  ggplot() +
  geom_sf(mapping = aes(fill = numero_de_instalacoes),
          color = "black") +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Número de Instalações',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa da potência para as microregiões MG

mapa__potencia_micro_regiao <- geobr::read_micro_region(code_micro = 'MG',
                                              showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo ,
                   by = c('code_micro' = 'code_micro'))

mapa__potencia_micro_regiao %>%
  ggplot() +
  geom_sf(mapping = aes(fill = potencia)) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Potência\n(kWp)',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa da quantidade de unidades que recebem credito para as microregiões MG

mapa_quantidade_recebe_credito_micro_regiao <- geobr::read_micro_region(code_micro = 'MG',
                                              showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo ,
                   by = c('code_micro' = 'code_micro'))

mapa_quantidade_recebe_credito_micro_regiao %>%
  ggplot() +
  geom_sf(mapping = aes(fill =quantidade_recebe_credito )) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Quantidade  que recebem credito',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa do Número de Instalações para as microregiões MG

mapa_numero_de_instalacoes_micro_regiao <- geobr::read_micro_region(code_micro = 'MG',
                                              showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo ,
                   by = c('code_micro' = 'code_micro'))

mapa__potencia_micro_regiao %>%
  ggplot() +
  geom_sf(mapping = aes(fill = numero_de_instalacoes), 
          color = "white") +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Número de Instalações',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa da potência para as mesoregiões MG

#Mapa da potência para as mesooregiões MG
mapa_potencia_meso_regiao <- geobr::read_meso_region(code_meso = 'MG', 
                                            showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo,
                   by = c('code_meso' = 'code_meso'))


 mapa_potencia_meso_regiao %>%
  ggplot() +
  geom_sf(mapping = aes(fill = potencia)) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Potência\n(kWp)',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa da quantidade de unidades que recebem credito parapara as mesoregiões MG

#Mapa da potência para as mesooregiões MG
mapa_quantidade_recebe_credito_regiao <- geobr::read_meso_region(code_meso = 'MG', 
                                            showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo,
                   by = c('code_meso' = 'code_meso'))


 mapa_quantidade_recebe_credito_regiao %>%
  ggplot() +
  geom_sf(mapping = aes(fill = quantidade_recebe_credito)) +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Quantidade  que recebem credito',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

Mapa do Número de Instalações para as mesoregiões MG

#Mapa da potência para as mesooregiões MG
mapa_numero_de_instalacoes_meso_regiao <- geobr::read_meso_region(code_meso = 'MG', 
                                                                  showProgress = FALSE) %>%
  dplyr::full_join(., consolidado_geo,
                   by = c('code_meso' = 'code_meso'))


mapa_numero_de_instalacoes_meso_regiao %>%
  ggplot() +
 geom_sf(mapping = aes(fill = numero_de_instalacoes), 
          color = "white") +
  scale_fill_distiller(palette = 'Greens', direction = 1,
                       name ='Número de Instalações)',
                       labels = scales::number_format(big.mark = '.',
                                                      decimal.mark = ',')) +
  theme_minimal() +
  config_grafico

ANÁLISE DE SÉRIE TEMPORAL

EXPLICAÇÃO

Iremos trabalhar com a série que começa em janeiro de 2015 e vai até abril de 2024.

CODIGO

consolidado_amostra_st <- consolidado_st[20:131,] 

head(consolidado_amostra_st)
## # A tibble: 6 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2015-01-01               598.                       101                     87
## 2 2015-02-01               600.                       102                     88
## 3 2015-03-01               644.                       116                    101
## 4 2015-04-01               692.                       133                    112
## 5 2015-05-01               838.                       171                    143
## 6 2015-06-01               886.                       180                    151
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>

Criando as variáves em primeira diferança

consolidado_amostra_st_dif <- consolidado_amostra_st %>% 
  dplyr::select(ref_data,
                log_potencia,
                log_instalacoes,
                log_credito) %>% 
  dplyr::mutate(dif_potencia = xts::diff.xts(log_potencia),
                dif_instlacoes = xts::diff.xts(log_instalacoes),
                dif_credito = xts::diff.xts(log_credito)) %>% 
  na.omit(Lista22)


head(consolidado_amostra_st_dif)
## # A tibble: 6 × 7
##   ref_data   log_potencia log_instalacoes log_credito dif_potencia
##   <date>            <dbl>           <dbl>       <dbl>        <dbl>
## 1 2015-02-01         6.40            4.48        4.62      0.00461
## 2 2015-03-01         6.47            4.62        4.75      0.0703 
## 3 2015-04-01         6.54            4.72        4.89      0.0713 
## 4 2015-05-01         6.73            4.96        5.14      0.192  
## 5 2015-06-01         6.79            5.02        5.19      0.0556 
## 6 2015-07-01         7.00            5.28        5.44      0.217  
## # ℹ 2 more variables: dif_instlacoes <dbl>, dif_credito <dbl>

Fazendo o gráfico referente a Potência instalada acumulada por mês das intalações

library(magrittr)
library(ggplot2)


grafico_potencia_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Potência Acumulada - MG - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'kWp')

 
plotly::ggplotly(grafico_potencia_acumulada,tooltip = "text")

Fazendo o gráfico referente ao Número de Unidades que Recebem Crédito Mensal

library(magrittr)
library(ggplot2)

 grafico_unidades_recebem_credito_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Da Quantidade de Unidades que Recebem Cédito - Mensal- MG',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly(grafico_unidades_recebem_credito_acumulada,tooltip = "text")

Fazendo o gráfico referente ao Número de Instalações Mensal

library(magrittr)
library(ggplot2)

grafico_numero_istalacoes_acumulada<- consolidado_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Intalaçoes Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Instalações Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Do Número de de Instalações Acumulada - Mensal - MG',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly(grafico_numero_istalacoes_acumulada,tooltip = "text")

Fazendo o gráfico referente a Taxa de Variação da Potência instalada acumulada por mês

library(magrittr)
library(ggplot2)


grafico_dif_potencia<- consolidado_amostra_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_potencia, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa da Potência Acumulada Acumulada: ",
                                         scales::number(dif_potencia,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_potencia, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa da Potência Acumulada: ",
                                         scales::number(dif_potencia,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa da Potência Acumulada - MG - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_potencia,tooltip = "text")

Fazendo o gráfico referente a Taxa de Variação das Unidades que Recebem Crédito por mês

library(magrittr)
library(ggplot2)


grafico_dif_credito<- consolidado_amostra_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_credito, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa da Quantidade de Unidades que Recebem Crédito: ",
                                         scales::number(dif_credito,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_credito, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa da Quantidade de Unidades que Recebem Crédito: ",
                                         scales::number(dif_credito,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie TemporalTaxa da Quantidade de Unidades que Recebem Crédito - MG - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_credito,tooltip = "text")

Fazendo o gráfico referente a Taxa de Variação do Número de Instalações por mês

library(magrittr)
library(ggplot2)


grafico_dif_instalacoes<- consolidado_amostra_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_instlacoes, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa do Número de Instalaçoes: ",
                                         scales::number(dif_instlacoes,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_instlacoes, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa do Número de Instalaçoes: ",
                                         scales::number(dif_instlacoes,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Taxa do Número de Instalaçoes - MG - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_instalacoes,tooltip = "text")

Tranformando a série em um objeto do tipo “time series”

library(tseries)
library(xts)

# Para os dados em Nível
consolidado_amostra_st<-ts(consolidado_amostra_st, 
            start = c(2015,1), 
            end = c(2024,04),frequency = 12)



consolidado_amontra_st<-as.xts(consolidado_amostra_st) 

head(consolidado_amostra_st)
##      ref_data potencia_acumulada unidades_recebem_credito_acu
## [1,]    16436             597.54                          101
## [2,]    16467             600.30                          102
## [3,]    16495             644.02                          116
## [4,]    16526             691.62                          133
## [5,]    16556             838.07                          171
## [6,]    16587             885.99                          180
##      numero_de_instalacoes_acumuladas log_potencia log_credito log_instalacoes
## [1,]                               87     6.392821    4.615121        4.465908
## [2,]                               88     6.397430    4.624973        4.477337
## [3,]                              101     6.467730    4.753590        4.615121
## [4,]                              112     6.539037    4.890349        4.718499
## [5,]                              143     6.731102    5.141664        4.962845
## [6,]                              151     6.786706    5.192957        5.017280
#Para os dados em Primeira Diferença
consolidado_amostra_s_dift<-ts(consolidado_amostra_st, 
            start = c(2015,2), 
            end = c(2024,04),frequency = 12)



consolidado_amontra_st_dif<-as.xts(consolidado_amostra_st_dif) 

head(consolidado_amostra_st_dif)
## # A tibble: 6 × 7
##   ref_data   log_potencia log_instalacoes log_credito dif_potencia
##   <date>            <dbl>           <dbl>       <dbl>        <dbl>
## 1 2015-02-01         6.40            4.48        4.62      0.00461
## 2 2015-03-01         6.47            4.62        4.75      0.0703 
## 3 2015-04-01         6.54            4.72        4.89      0.0713 
## 4 2015-05-01         6.73            4.96        5.14      0.192  
## 5 2015-06-01         6.79            5.02        5.19      0.0556 
## 6 2015-07-01         7.00            5.28        5.44      0.217  
## # ℹ 2 more variables: dif_instlacoes <dbl>, dif_credito <dbl>

Modelo de Wolt-Winters para a Potência

#com sazonalidade aditiva
hw_potencia_adtivo <- HoltWinters(consolidado_amontra_st$potencia_acumulada)
plot(hw_potencia_adtivo)     

#Com sazonalidade multiplicativa

hw_potencia_multiplicativo <- HoltWinters(consolidado_amontra_st$potencia_acumulada, 
                    seasonal = 'multiplicative')
plot(hw_potencia_multiplicativo )     

# Verificando quais são os compotentes sozonais estimados pelo modelo (s1 - s12)
print(hw_potencia_multiplicativo $coefficients[3:14])
##       s1       s2       s3       s4       s5       s6       s7       s8 
## 1.250627 1.243116 1.236215 1.234173 1.226150 1.221461 1.220628 1.227318 
##       s9      s10      s11      s12 
## 1.233450 1.235053 1.245016 1.237748

Modelo de Wolt-Winters para a a Quantidade de Unidades que Recebem Crédito

#com sazonalidade aditiva
hw_credito_adtivo <- HoltWinters(consolidado_amontra_st$unidades_recebem_credito_acu)
plot(hw_credito_adtivo)     

#Com sazonalidade multiplicativa

hw_credito_multiplicativo <- HoltWinters(consolidado_amontra_st$unidades_recebem_credito_acu, 
                    seasonal = 'multiplicative')

plot(hw_credito_multiplicativo)     

Modelo de Wolt-Winters para o Número de Instalações

#com sazonalidade aditiva
hw_instalacoes_adtivo <- HoltWinters(consolidado_amontra_st$numero_de_instalacoes_acumuladas)
plot(hw_instalacoes_adtivo)     

#Com sazonalidade multiplicativa

hw_instalacoes_multiplicativo <- HoltWinters(consolidado_amontra_st$numero_de_instalacoes_acumuladas, 
                    seasonal = 'multiplicative')
plot(hw_instalacoes_multiplicativo )     

Teste de Chow para quebras estruturais

O teste de Chow verifica se houve quebra estrutural no período referente à análise. O teste é realizado dividindo a amostra em subperíodos, estimando os parâmetros para esses subperíodos e, por meio da estatística F, testa-se a igualdade dos conjuntos de parâmetros. O teste de Chow é ideal para testar uma possível quebra estrutura quando se conhece a priori a data da quebra. A hipótese nula (H0) é a ausência de mudança estrutural (estabilidade dos parâmetros), enquanto que a hipótese alternativa (H1) é a presença de mudança estrutural na data delimitada como o período da quebra.

consolidado_amostra_st <- consolidado_st[20:131,] 
#Teste de Chow para quebras estruturais
#H0: ausência de quebra estrutural 
fs.consolidado_potencia <-strucchange::Fstats(consolidado_amostra_st$potencia_acumulada ~ 1)
fs.consolidado_credito <-strucchange::Fstats(consolidado_amostra_st$unidades_recebem_credito_acu ~ 1)
fs.consolidado_intalacoes <-strucchange::Fstats(consolidado_amostra_st$numero_de_instalacoes_acumuladas ~ 1)

# Testanto para a variável Potência Acumulada:
# H0: ausência de quebra estrutural  
strucchange::sctest(fs.consolidado_potencia)
## 
##  supF test
## 
## data:  fs.consolidado_potencia
## sup.F = 466.03, p-value < 2.2e-16
# Testanto para a variável Unidades Que recebem Crédito Acumulada:
# H0: ausência de quebra estrutural
strucchange::sctest(fs.consolidado_credito)
## 
##  supF test
## 
## data:  fs.consolidado_credito
## sup.F = 579.45, p-value < 2.2e-16
# Testanto para a variável Número de Instalações Acumulada:
# H0: ausência de quebra estrutural
strucchange::sctest(fs.consolidado_intalacoes)
## 
##  supF test
## 
## data:  fs.consolidado_intalacoes
## sup.F = 527.69, p-value < 2.2e-16

Verificando dado que há quebra estrututal em qual ponto da série ela ocorre

#Para a variável Potência:
bp_potencia <- strucchange::breakpoints(fs.consolidado_potencia)
print(bp_potencia)
## 
##   Optimal 2-segment partition: 
## 
## Call:
## breakpoints.Fstats(obj = fs.consolidado_potencia)
## 
## Breakpoints at observation number:
## 79 
## 
## Corresponding to breakdates:
## 0.6964286
#Para a variável Poência, segundo o teste, temos que a quebra ocorre em:
consolidado_amostra_st %>%  slice(79)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-07-01           1393383.                    282508                 102872
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
# Para a variável Crédito:
bp_credito <-strucchange:: breakpoints(fs.consolidado_credito)
print(bp_credito)
## 
##   Optimal 2-segment partition: 
## 
## Call:
## breakpoints.Fstats(obj = fs.consolidado_credito)
## 
## Breakpoints at observation number:
## 79 
## 
## Corresponding to breakdates:
## 0.6964286
#Para a variável Crédito, segundo o teste, temos que a quebra ocorre em:
consolidado_amostra_st  %>%  slice(79)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-07-01           1393383.                    282508                 102872
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
# Para a variável Instalações:
bp_instalacoes <-strucchange:: breakpoints(fs.consolidado_intalacoes)
print(bp_instalacoes )
## 
##   Optimal 2-segment partition: 
## 
## Call:
## breakpoints.Fstats(obj = fs.consolidado_intalacoes)
## 
## Breakpoints at observation number:
## 82 
## 
## Corresponding to breakdates:
## 0.7232143
#Para a variável Crédito, segundo o teste, temos que a quebra ocorre em:
consolidado_amostra_st  %>%  slice(82)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-10-01           1576651.                    321285                 118344
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>

Teste “OLS-CUSUM”

O teste de futuação generalizada ajusta o modelo de acordo com os dados observados e diferencia-os por meio de um processo empírico, que através desta diferença observa a futuação por meio dos resíduos. Para que esse processo tenha efeito, o limite do processo é conhecido para que os limites possam ser computados. Assim, quando as futuações do processo ultrapassarem os limites da hipótese nula, então, esta futuação é uma indicação de que houve algum tipo de intervenção nos dados e que a hipótese nula deveria ser rejeitada ao nível de signficância de α.

# Criando um objeto que é os resíduos dos modelos de Holt-Winters para as variáveis de interesse:
hw_potencia_residuals <- residuals(hw_instalacoes_adtivo)
hw_credito_residuals <- residuals(hw_credito_adtivo)
hw_instalacoes_residuals <- residuals(hw_instalacoes_adtivo)

# Calcule a função efp (empirical fluctuation process)
efp_cusum_potencia <- strucchange::efp(hw_potencia_residuals ~ 1, type = "OLS-CUSUM")
efp_cusum_credito <- strucchange::efp(hw_credito_residuals ~ 1, type = "OLS-CUSUM")
efp_cusum_instalacoes <- strucchange::efp(hw_instalacoes_residuals ~ 1, type = "OLS-CUSUM")

# Configurando a janela gráfica para ter 3 gráficos em uma coluna
par(mfrow = c(3, 1), mar = c(5, 4, 4, 2) + 0.1)

# Testando para a variável Potência Acumulada:
plot(efp_cusum_potencia,main = "Potencia Acumulada(OLS-CUSUM)")

# Testando para a variável Unidades Que recebem Crédito Acumulada:
plot(efp_cusum_credito,main = "Unidades que Recebem Credito Acumulada(OLS-CUSUM)")

# Testando para a variável Número de Instalações Acumulada:
plot(efp_cusum_instalacoes, main = "Numero de Instalacoes Acumulada(OLS-CUSUM)")

Teste “Rec-MOSUM”

# Calcule a função efp (empirical fluctuation process)
efp_mosum_potencia <- strucchange::efp(hw_potencia_residuals ~1, type = "Rec-MOSUM")
efp_mosum_credito <- strucchange::efp(hw_credito_residuals~1, type = "Rec-MOSUM")
efp_mosum_intalacoes <-strucchange:: efp(hw_instalacoes_residuals~1, type = "Rec-MOSUM")



# Configurando a janela gráfica para ter 3 gráficos em uma coluna
par(mfrow = c(3, 1), mar = c(5, 4, 4, 2) + 0.1)

#Testanto para a variável Potência Acumulada:
plot(efp_mosum_potencia, main = "Potencia Acumulada(Rec-MOSUM)")

# Testanto para a variável Unidades Que recebem Crédito Acumulada:
plot(efp_mosum_credito, main = "Unidades que Recebem Credito Acumulada(Rec-MOSUM)")

# Testanto para a variável Número de Instalações Acumulada:
plot(efp_mosum_intalacoes, main = "Numero de Instalacoes Acumulada(Rec-MOSUM)")

Teste “OLS-MOSUM”

# Calcule a função efp (empirical fluctuation process)
efp_mosum_potencia_ols_mosum <- strucchange::efp(hw_potencia_residuals ~1, type = "OLS-MOSUM")
efp_mosum_credito_ols_mosum <- strucchange::efp(hw_credito_residuals~1, type = "OLS-MOSUM")
efp_mosum_intalacoes_ols_mosum <-strucchange:: efp(hw_instalacoes_residuals~1, type = "OLS-MOSUM")


# Configurando a janela gráfica para ter 3 gráficos em uma coluna
par(mfrow = c(3, 1), mar = c(5, 4, 4, 2) + 0.1)

#Testanto para a variável Potência Acumulada:
plot(efp_mosum_potencia_ols_mosum, main = "Potencia Acumulada(OLS-MOSUM)")

# Testanto para a variável Unidades Que recebem Crédito Acumulada:
plot(efp_mosum_credito_ols_mosum, main = "Unidades que Recebem Credito Acumulada(OLS-MOSUM)")

# Testanto para a variável Número de Instalações Acumulada:
plot(efp_mosum_intalacoes_ols_mosum, main = "Numero de Instalacoes Acumulada(OLS-MOSUM)")

Testando se há ocorrencia de quebras estrututais com o pacote “changepoint”

library(changepoint)

# MÉDIA
# testando se há quebra estrutural em relação a média na série da potência acumulada
cp_media_potencia <- cpt.mean(consolidado_amostra_st$potencia_acumulada)
cp_media_potencia 
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 79
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(79)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-07-01           1393383.                    282508                 102872
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_media_potencia)

# testando se há quebra estrutural em relação a média na série de Unidades que Recebem Crédito
cp_media_credito <- cpt.mean(consolidado_amostra_st$unidades_recebem_credito_acu)
cp_media_credito
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 79
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(79)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-07-01           1393383.                    282508                 102872
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_media_credito)

# testando se há quebra estrutural em relação a média na série do Número de Instalações
cp_media_instalacoes <- cpt.mean(consolidado_amostra_st$numero_de_instalacoes_acumuladas)
cp_media_instalacoes
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 82
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(82)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2021-10-01           1576651.                    321285                 118344
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_media_instalacoes)

# testando se há quebra estrutural em relação a média na série  da taxa da potência acumulada
cp_media_taxa_potencia <- cpt.mean(consolidado_amostra_st_dif$dif_potencia)
cp_media_taxa_potencia
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations :
plot(cp_media_taxa_potencia)

# testando se há quebra estrutural em relação a média na série  da taxa Unidades que Recebem Crédito
cp_media_taxa_credito <- cpt.mean(consolidado_amostra_st_dif$dif_credito)
cp_media_taxa_credito
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations :
plot(cp_media_taxa_credito)

# testando se há quebra estrutural em relação a média na série taxa do Número de Instalações
cp_media_taxa_instalacoes <- cpt.mean(consolidado_amostra_st_dif$dif_instlacoes)
cp_media_taxa_instalacoes
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in mean 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 1 
## Maximum no. of cpts   : 1 
## Changepoint Locations :
plot(cp_media_taxa_instalacoes)

# VARiÂNCIA


# testando se há quebra estrutural em relação a média na série da potência acumulada
cp_var_potencia <- cpt.var(consolidado_amostra_st$potencia_acumulada)
cp_var_potencia
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 90
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(90)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2022-06-01           2114222.                    462493                 171543
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_var_potencia)

# testando se há quebra estrutural em relação a média na série de Unidades que Recebem Crédito
cp_var_credito <- cpt.var(consolidado_amostra_st$unidades_recebem_credito_acu)
cp_var_credito
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 89
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(89)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2022-05-01           2024334.                    429880                 163650
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_var_credito)

# testando se há quebra estrutural em relação a média na série do Número de Instalações
cp_var_instalacoes <- cpt.var(consolidado_amostra_st$numero_de_instalacoes_acumuladas)
cp_var_instalacoes
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.1555 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 90
# Vendo  quando occoreu a quebra estrutural. segundo o teste.
consolidado_amostra_st  %>%  slice(90)
## # A tibble: 1 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2022-06-01           2114222.                    462493                 171543
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>
plot(cp_var_instalacoes)

# testando se há quebra estrutural em relação a média na série  da taxa da potência acumulada
cp_var_taxa_potencia <- cpt.var(consolidado_amostra_st_dif$dif_potencia)
cp_var_taxa_potencia
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 10
plot(cp_var_taxa_potencia)

# testando se há quebra estrutural em relação a média na série  da taxa Unidades que Recebem Crédito
cp_var_taxa_credito <- cpt.var(consolidado_amostra_st_dif$dif_credito)
cp_var_taxa_credito 
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 40
plot(cp_var_taxa_credito)

# testando se há quebra estrutural em relação a média na série taxa do Número de Instalações
cp_var_taxa_instalacoes <- cpt.var(consolidado_amostra_st_dif$dif_instlacoes)
cp_var_taxa_instalacoes
## Class 'cpt' : Changepoint Object
##        ~~   : S4 class containing 12 slots with names
##               cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 
## 
## Created on  : Sun Jun 16 03:09:37 2024 
## 
## summary(.)  :
## ----------
## Created Using changepoint version 2.2.4 
## Changepoint type      : Change in variance 
## Method of analysis    : AMOC 
## Test Statistic  : Normal 
## Type of penalty       : MBIC with value, 14.12859 
## Minimum Segment Length : 2 
## Maximum no. of cpts   : 1 
## Changepoint Locations : 16
plot(cp_var_taxa_instalacoes)

Gerando as previsões com o Modelo de Holt-Winters estimado acima

library(forecast)

# Para a variável Potência  
fcast_hw_potencia <- forecast(hw_potencia_adtivo)
autoplot(x =consolidado_amostra_st$ref_data,forecast(hw_potencia_adtivo, h =12))+
  scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = " Potência Instalada Acumulada(Kw/h)", 
       title = "Previsão para a Potência Instalada Acumulada") 

#Calculando a acurácia do modelo:
accuracy(fcast_hw_potencia)
##                    ME     RMSE     MAE       MPE     MAPE       MASE       ACF1
## Training set 575.6292 13120.24 8433.69 0.7629275 3.187515 0.02028537 0.04006466
# Para a variável Unidades que Recebem Crédito
fcast_hw_credito <- forecast(hw_credito_adtivo)
autoplot(forecast(fcast_hw_credito, h =12), main = "Previsão para  o Número de Unidades que Recebem Crédito") +
 scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = " Número de Unidades que Recebem Crédito", 
       title = "Previsão para o Número de Unidades que Recebem Crédito")

#Calculando a acurácia do modelo:
accuracy(fcast_hw_credito)
##                    ME     RMSE      MAE      MPE     MAPE       MASE       ACF1
## Training set 49.75244 4385.983 2399.209 1.102663 3.703094 0.03076385 0.01624211
# Para a variável Número de Instalações
fcast_hw_instalacoes <- forecast(hw_instalacoes_adtivo)
autoplot(forecast(hw_instalacoes_adtivo, h =12), main = "Previsão para o Número de Instalações Acumulado") +  scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = " Número de Instalações", 
       title = "Previsão para o Número de Instalações Acumulado")

#Calculando a acurácia do modelo:
accuracy(fcast_hw_instalacoes)
##                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
## Training set 6.122393 788.2089 494.8579 0.5587558 2.400742 0.0153012 0.01018627

Testando um modelo de previsão RNA para as variáveis:

library(forecast)

#Para a variável Potência Instaltada
fit_rna_potencia <- nnetar(consolidado_amostra_st$potencia_acumulada,
                 size = 100, maxit =1000)
fcast_rna_potencia <- forecast(fit_rna_potencia)
autoplot(forecast(fit_rna_potencia, h =12)) +
scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = "Potência Instalada Acumulada(Kw/h)", 
       title = "Previsão para a Potência Instalada Acumulada")

#Para a variável Unidades que Recebem Crédito
fit_rna_credito <- nnetar(consolidado_amostra_st$unidades_recebem_credito_acu,
                 size = 100, maxit =1000)
fcast_rna_credito <- forecast(fit_rna_credito)
autoplot(forecast(fit_rna_credito , h =12), x =consolidado_amostra_st$ref_data,
          y = forecast(fit_rna_credito , h =12),) +
  scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = "Unidades que Recebem Crédito", 
       title = "Previsão para  o Número de Unidades que Recebem Crédito")

# Para a variável Número de Instalações
fit_rna_instalacoes <- nnetar(consolidado_amostra_st$numero_de_instalacoes_acumuladas,
                 size = 100, maxit =1000)
fcast_rna_instalacoes <- forecast(fit_rna_instalacoes)
autoplot(forecast(fit_rna_instalacoes, h =12)) +
scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                     big.mark = '.')) +
  labs(x = "Ano", y = "Número de Instalações Acumulado", 
       title = "Previsão para o Número de Instalaçções Acumulado")

CASO CONTINUE COM A ANÁLISE REALIZAR OS TESTE DE ESTACIONARIEDADE PARA AS VARIÁVEIS Estimando o Modelo VAR com as variáveis em nível

library(tseries)
library(xts)
library(dygraphs)
library(TSA)
library(urca)
library(ggplot2)
library(vars)
library(readxl)
library(writexl)
library(timeSeries)
library(bootUR)
library(trend)
#Verificando o Número ideal de "Lags" para o modelo
ORD1<-consolidado_amostra_st[, c( "potencia_acumulada",
                                  "numero_de_instalacoes_acumuladas" ,
                                  "unidades_recebem_credito_acu")]


vars::VARselect(ORD1, lag.max = 6, type = "const")
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      6      3      3      3 
## 
## $criteria
##                   1            2            3            4            5
## AIC(n) 4.934229e+01 4.764469e+01 4.738468e+01 4.744281e+01 4.743876e+01
## HQ(n)  4.946450e+01 4.785856e+01 4.769020e+01 4.783998e+01 4.792759e+01
## SC(n)  4.964381e+01 4.817235e+01 4.813848e+01 4.842275e+01 4.864485e+01
## FPE(n) 2.686153e+21 4.921274e+20 3.798726e+20 4.034280e+20 4.031075e+20
##                   6
## AIC(n) 4.738180e+01
## HQ(n)  4.796229e+01
## SC(n)  4.881402e+01
## FPE(n) 3.826080e+20

Estimando o modelo

# Estimando o Modelo:
library(vars)
p7c<-VAR(ORD1, p = 7, type = "const")


# Verificando o valor das raizes encontradas(IMPORTANTE):
vars::roots(p7c)
##  [1] 1.0128385 1.0128385 1.0081025 1.0081025 0.9566129 0.9566129 0.8781772
##  [8] 0.8781772 0.8392960 0.8392960 0.7748163 0.7748163 0.7674028 0.7674028
## [15] 0.7280839 0.7089311 0.7089311 0.7017812 0.7017812 0.4595233 0.4595233
# Como temos raizes maiores do que 1, não é possível considerar o modelo com os variáveis em nível

Estimando o Modelo VAR com as variáveis em Primeira Diferença

#Verificando o Número ideal de "Lags" para o modelo
ORD2<-consolidado_amostra_st_dif[, c( "dif_potencia",
                                  "dif_instlacoes" ,
                                  "dif_credito")]


vars::VARselect(ORD2, lag.max = 6, type = "const")
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      6      6      5      6 
## 
## $criteria
##                    1             2             3             4             5
## AIC(n) -1.761759e+01 -1.764401e+01 -1.797290e+01 -1.876306e+01 -1.908791e+01
## HQ(n)  -1.749468e+01 -1.742892e+01 -1.766563e+01 -1.836361e+01 -1.859628e+01
## SC(n)  -1.731428e+01 -1.711322e+01 -1.721462e+01 -1.777730e+01 -1.787467e+01
## FPE(n)  2.232677e-08  2.175517e-08  1.567563e-08  7.128048e-09  5.168263e-09
##                    6
## AIC(n) -1.920131e+01
## HQ(n)  -1.861750e+01
## SC(n)  -1.776059e+01
## FPE(n)  4.636900e-09
# Estimando o Modelo
p6c<-VAR(ORD2, p = 6, type = "const")


# Verificando o valor das raizes encontradas(IMPORTANTE):
vars::roots(p6c)
##  [1] 0.9681553 0.9157556 0.9157556 0.9076862 0.9076862 0.8603304 0.8603304
##  [8] 0.8493784 0.7943916 0.7943916 0.7864110 0.7864110 0.6927469 0.6927469
## [15] 0.6489838 0.6489838 0.5718783 0.1204277
# Como temos a maior raiz do modelo sendo menor do que um, podemos seguir com a análise
## Testes Econométricos ##


PTp6c<-serial.test(p6c,lags.pt = 12, type = "PT.asymptotic")
PTp6c$serial
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 111.74, df = 54, p-value = 6.572e-06
BG1p6c<-serial.test(p6c,lags.bg = 1, type = "BG")
BG1p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 7.6986, df = 9, p-value = 0.5648
BG2p6c<-serial.test(p6c,lags.bg = 2, type = "BG")
BG2p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 50.547, df = 18, p-value = 6.237e-05
BG2p6c<-serial.test(p6c,lags.bg = 12, type = "BG")
BG2p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 214.72, df = 108, p-value = 4.632e-09
NTestp6c<-normality.test(p6c)
NTestp6c$jb.mul
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 14997, df = 6, p-value < 2.2e-16
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 843.89, df = 3, p-value < 2.2e-16
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 14153, df = 3, p-value < 2.2e-16
ARCHp6c<-arch.test(p6c,lags.multi = 4)
ARCHp6c$arch.mul
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 246.29, df = 144, p-value = 2.354e-07
Cusump6c<-stability(p6c, type = "OLS-CUSUM")
plot(Cusump6c)

RECusump6c<-stability(p6c, type = "Rec-CUSUM")
plot(RECusump6c)

Impulso-Resposta

ierfp6c<-irf(p6c, impulse = "dif_potencia", 
             response = c("dif_instlacoes", "dif_credito"),
             ortho = TRUE, runs = 1000,
             n.ahead = 36)
plot(ierfp6c)

acup6c<-ierfp6c<-irf(p6c, impulse = "dif_potencia", 
                     response = c("dif_instlacoes", "dif_credito"), 
                     cumulative = TRUE, ortho = TRUE, runs = 500, 
                     n.ahead = 24)
plot(acup6c)

CRIANDO A BASE DE DADOS PARA O BRASIL E O PARANÁ

EXPLICAÇÃO

Como forma de aporfundar a análise dos dados, será trabalhado uma base que tenha alcance nacional, quanto paro Estadod do Paraná, pois esse pode ser considerado uma explo ruim para o caso da geração fotovoltaica, uma vez que possue baixa irradiação solar se comparadado a média brasileira, e não foi dados incentivos fiscasis favoráveis para o desenvolvimento do setor.

CÓDIGO

Carregando as basee de dados

Dados refenrete a geração distribuida

dados_br <- readr::read_csv2(file = '../dados/empreendimento-geracao-distribuida.csv',
                          col_types = readr::cols(MdaPotenciaInstaladaKW = readr::col_number()),
                          locale = readr::locale(decimal_mark = ',', grouping_mark = '.'))

dados_br <-  janitor::clean_names(dados_br)

Criando a sére da tarifa residencial média mensal, para isso foram utilizados os dados fornecidos pela (ANEEL)

tarifa <- readxl::read_xlsx("../dados/tarifas.xlsx") 
tarifa <- janitor::clean_names(tarifa)

Carregando dos dados referentes ao consumo de energia elétrica total da classe residencial, disponibilizados pela (Eletrobras)

library(magrittr)

consumo_residencial <- readr::read_csv2(file = '../dados/consumo_residencial.csv',
                          col_types = readr::cols(MdaPotenciaInstaladaKW = readr::col_number()),
                          locale = readr::locale(decimal_mark = ',', grouping_mark = '.'))


consumo_residencial <-   consumo_residencial %>% 
  dplyr::mutate(log_consumo = ifelse(consumo_residencial > 0, log(consumo_residencial), NA))

consumo_residencial <- consumo_residencial %>% 
  dplyr::select(-3)

Selecionando as variáveis de interesse referente ao dados de geração distribuida

library(magrittr)
dados_br <- dados_br %>%
   dplyr::filter(sig_tipo_geracao == "UFV") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                dsc_classe_consumo,
                sig_tipo_consumidor,
                sig_uf,
                cod_municipio_ibge,
                mda_potencia_instalada_kw,
                qtd_uc_recebe_credito) 

Criando as séries refetente a Classe Residencial

library(magrittr)

potencia_residencial_br <- dados_br  %>% 
  dplyr::filter(dsc_classe_consumo == "Residencial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia))

Criando as séries mensais da potência, número de istalações e unidades que recebem crédito, referente a classe residencial com a abrangência nacional.

library(magrittr)
library(lubridate)

# Conversão da coluna de datas
dados_br$dth_atualiza_cadastral_empreend <- as.Date(dados_br$dth_atualiza_cadastral_empreend)

# Processar dados
residencial_br_st <- dados_br %>% 
    dplyr::filter(dsc_classe_consumo == "Residencial") %>% 
  dplyr::select(dth_atualiza_cadastral_empreend,
                mda_potencia_instalada_kw,
                qtd_uc_recebe_credito) %>% 
  dplyr::group_by(dth_atualiza_cadastral_empreend) %>% 
  dplyr::summarise(potencia = sum(mda_potencia_instalada_kw),
                   unidades_recebem_credito = sum(qtd_uc_recebe_credito),
                   count = n()) %>%
  dplyr::ungroup() %>% 
  dplyr::mutate(potencia_acumulada = cumsum(potencia),
                unidades_recebem_credito_acu = cumsum(unidades_recebem_credito),
                numero_de_instalacoes_acumuladas = cumsum(count)) %>%
  dplyr::mutate(ref_data = as.Date(paste0(year(dth_atualiza_cadastral_empreend), '-', month(dth_atualiza_cadastral_empreend), '-01'))) %>% 
  dplyr::group_by(ref_data) %>% 
  dplyr::summarise(potencia_acumulada = last(potencia_acumulada),
                   unidades_recebem_credito_acu = last(unidades_recebem_credito_acu),
                   numero_de_instalacoes_acumuladas = last(numero_de_instalacoes_acumuladas)) %>% 
  dplyr::ungroup() %>% 
  dplyr::select(ref_data,
                potencia_acumulada ,
                unidades_recebem_credito_acu,
                numero_de_instalacoes_acumuladas) %>% 
  dplyr::mutate(log_potencia = ifelse(potencia_acumulada > 0, log(potencia_acumulada), NA),
                log_credito = ifelse(unidades_recebem_credito_acu > 0, log(unidades_recebem_credito_acu), NA),
                log_instalacoes = ifelse(numero_de_instalacoes_acumuladas > 0, log(numero_de_instalacoes_acumuladas), NA))
               
# Visualizar os primeiros registros do resultado
head(residencial_br_st)
## # A tibble: 6 × 7
##   ref_data   potencia_acumulada unidades_recebem_credit…¹ numero_de_instalacoe…²
##   <date>                  <dbl>                     <dbl>                  <int>
## 1 2009-06-01                8.2                         1                      1
## 2 2009-09-01               33.2                         7                      5
## 3 2010-08-01               39.2                         9                      6
## 4 2010-09-01               45.2                        10                      7
## 5 2011-02-01               46.2                        11                      8
## 6 2011-09-01               50.3                        12                      9
## # ℹ abbreviated names: ¹​unidades_recebem_credito_acu,
## #   ²​numero_de_instalacoes_acumuladas
## # ℹ 3 more variables: log_potencia <dbl>, log_credito <dbl>,
## #   log_instalacoes <dbl>

Selecionando as variáveis de interesse referente ao dados da tarifa

library(magrittr)

tarifa_residencial<- tarifa %>% 
  dplyr::filter(dsc_classe == "Residencial") %>% 
  dplyr::select(dat_inicio_vigencia,
                sig_agente,
                dsc_classe,
                vlr_tusd,
                vlr_te)

Selecionado as variáveis para contrução da série da tarifa

library(magrittr)
library(lubridate)
library(dplyr)
library(ggplot2)
library(plotly)

# Conversão da coluna de datas
tarifa$dat_inicio_vigencia <- as.Date(tarifa$dat_inicio_vigencia)

# Processar dados
tarifa_residencial_mensal <- tarifa_residencial %>%
  group_by(dat_inicio_vigencia) %>%
  summarise(tarifa_residencial = mean(vlr_tusd) + mean(vlr_te)) %>%
  ungroup() %>%
  # Criar uma coluna de referência mensal
  mutate(ref_data = floor_date(dat_inicio_vigencia, "month")) %>%
  # Agrupar por referência mensal
  group_by(ref_data) %>%
  # Calcular a média das tarifas residenciais para cada mês
  summarise(tarifa_residencial_mensal = mean(tarifa_residencial),
            log_tarifa = ifelse(tarifa_residencial_mensal > 0, log(tarifa_residencial_mensal), NA)) %>%
  ungroup()

Construindo os gráficos da geração distribuida para o Brasil :

Potência Acumulada Residencial

grafico_potencia_acumulada_br <- residencial_br_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =potencia_acumulada, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Potência Acumulada: ",
                                         scales::number(potencia_acumulada,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Potência Acumulada - Brasil - Mensal',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'kWp')

 
plotly::ggplotly(grafico_potencia_acumulada_br,tooltip = "text")

Fazendo o gráfico referente ao Número de Unidades que Recebem Crédito Mensal

library(magrittr)
library(ggplot2)

 grafico_unidades_recebem_credito_acumulada_br<- residencial_br_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y = unidades_recebem_credito_acu, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de Unidades que Recebem Crédito: ",
                                         scales::number(unidades_recebem_credito_acu,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Da Quantidade de Unidades que Recebem Cédito - Mensal- Brasil',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly( grafico_unidades_recebem_credito_acumulada_br,tooltip = "text")

Fazendo o gráfico referente ao Número de Instalações

library(magrittr)
library(ggplot2)

grafico_numero_istalacoes_acumulada_br<- residencial_br_st %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Intalaçoes Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =numero_de_instalacoes_acumuladas, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Número de de Instalações Acumulada: ",
                                         scales::number(numero_de_instalacoes_acumuladas,
                                                        accuracy =1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Série Do Número de de Instalações Acumulada - Mensal - Brasil',
        subtitle = 'Número Toral',
        x = 'Data',
        y = 'Número Total')

 
plotly::ggplotly(grafico_numero_istalacoes_acumulada_br,tooltip = "text")

Contruindo o gráfico da série da tarifa

grafico_tarifa_mensal <- tarifa_residencial_mensal %>%
  ggplot() + 
  geom_line(mapping = aes(x = ref_data,
                          y = tarifa_residencial_mensal, 
                          group = 1,
                          text = paste0("Data: ", format(ref_data, "%d-%m-%Y"),
                                        "<br> Valor da Tarifa: ", scales::number(tarifa_residencial_mensal,
                                                                                 accuracy = 1,
                                                                                 decimal.mark = ',',
                                                                                 big.mark = '.'))),
            color = "#07020D",
            size = 0.5,
            linetype = 1) +
  geom_point(mapping = aes(x = ref_data,
                           y = tarifa_residencial_mensal, 
                           group = 1,
                           text = paste0("Data: ", format(ref_data, "%d-%m-%Y"),
                                         "<br> Valor da Tarifa: ", scales::number(tarifa_residencial_mensal,
                                                                                  accuracy = 1,
                                                                                  decimal.mark = ',',
                                                                                  big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1) +
  scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                    big.mark = '.')) +
  labs(title = 'Série da Tarifa Mensal Residencial',
       subtitle = 'mkh',
       x = 'Data',
       y = 'Valor da Tarifa(R$/MWh)') +
  theme_minimal()

# Convertendo o gráfico para plotly para interatividade
plotly::ggplotly(grafico_tarifa_mensal, tooltip = "text")

Construindo o gráfico do consumo de energia total residencial

# Conversão da coluna de datas
consumo_residencial$Data <- as.Date(consumo_residencial$Data,tryFormats = c("%Y-%m-%d", "%Y/%m/%d"))

grafico_consumo_residencial <- consumo_residencial %>%
  ggplot() + 
  geom_line(mapping = aes(x = Data,
                          y = consumo_residencial, 
                          group = 1,
                          text = paste0("Data: ", format(Data,"%d-%m-%Y"),
                                        "<br> Consumo(Gwh): ", scales::number(consumo_residencial,
                                                                                 accuracy = 1,
                                                                                 decimal.mark = ',',
                                                                                 big.mark = '.'))),
            color = "#07020D",
            size = 0.5,
            linetype = 1) +
  geom_point(mapping = aes(x = Data,
                           y = consumo_residencial, 
                           group = 1,
                           text = paste0("Data: ", format(Data, "%d-%m-%Y"),
                                         "<br> Consumo(Gwh): ", scales::number(consumo_residencial,
                                                                                  accuracy = 1,
                                                                                  decimal.mark = ',',
                                                                                  big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.01) +
  scale_y_continuous(labels = scales::number_format(accuracy = 1,
                                                    decimal.mark = ',',
                                                    big.mark = '.')) +
  labs(title = 'Série do Consumo  Mensal Residencial Total - Brasil',
       subtitle = 'Gwh',
       x = 'Data',
       y = 'Gwh') +
  theme_minimal()

# Convertendo o gráfico para plotly para interatividade
plotly::ggplotly(grafico_consumo_residencial)

Trasforamando os dados em séries temporais

library(tseries)
library(xts)

# Base de dadaos utilizadas:
# Vamos utilizar os dados a prtir de 2015 até 05/2024, 
#pois esse é o ultimo mês que temos os dados de consumo 
#de energia elétrica

residencial_br_st <- residencial_br_st[30:142,]
tarifa_residencial_mensal <- tarifa_residencial_mensal[57:162,]
consumo_residencial<- consumo_residencial[61:173,]

# Unindo as bases de dados:

dados_residencial<- dplyr::full_join(residencial_br_st,
                                   tarifa_residencial_mensal,
                                   by = c('ref_data' = 'ref_data'))

dados_residencial<- dplyr::full_join(dados_residencial,
                                   consumo_residencial,
                                   by = c('ref_data' = 'Data'))


# TENHO QUE ARRUMAR OS NA DA TARIFA
# Aparentemente, os dados de tarida não estão sendo calculados
# para os meses de jamaiero de cada ano, vou usar os dados da série
# de tarifa da Eletrobras enquanto não arrumo o problema

# Para 01/01/2016
dados_residencial[13,8]<- 466.95
dados_residencial[13,9]<- 6.146222

# Para 01/01/2017
dados_residencial[25,8]<- 440.06
dados_residencial[25,9]<- 6.086911

# Para 01/01/2018
dados_residencial[37,8]<- 469.46
dados_residencial[37,9]<- 1.606471


# Para 01/01/2020
dados_residencial[61,8]<- 549.62
dados_residencial[61,9]<- 6.309227

# Para 01/01/2021
dados_residencial[73,8]<- 583.68
dados_residencial[73,9]<- 6.369353

# Para 01/01/2023
dados_residencial[97,8]<- 644.71
dados_residencial[97,9]<- 6.468801

# Para 01/02/2024
dados_residencial[110,8]<- 644.71
dados_residencial[110,9]<- 6.468801

# Transformando os dados no tipo "times series"


# Para os dados em Nível
dados_residencial_st<-ts(dados_residencial, 
            start = c(2015,1), 
            end = c(2024,05),frequency = 12)



dados_residencial_st<-as.xts(dados_residencial_st) 



#Para os dados em Primeira Diferença

dados_residencial_st_dif <- dados_residencial %>% 
  dplyr::select(ref_data,
                log_potencia,
                log_instalacoes,
                log_credito,
                log_tarifa,
                tarifa_residencial_mensal,
                log_consumo) %>% 
  dplyr::mutate(dif_potencia = xts::diff.xts(log_potencia),
                dif_consumo = xts::diff.xts(log_consumo),
                dif_tarifa = xts::diff.xts(log_tarifa),
                dif_instalacoes = xts::diff.xts(log_instalacoes),
                dif_credito = xts::diff.xts(log_credito)) %>% 
  
  na.omit(Lista22)


head(dados_residencial_st_dif)
## # A tibble: 6 × 12
##   ref_data            log_potencia log_instalacoes log_credito log_tarifa
##   <dttm>                     <dbl>           <dbl>       <dbl>      <dbl>
## 1 2015-02-01 00:00:00         7.16            5.71        5.86       6.01
## 2 2015-03-01 00:00:00         7.26            5.81        5.95       6.33
## 3 2015-04-01 00:00:00         7.36            5.92        6.07       6.13
## 4 2015-05-01 00:00:00         7.54            6.11        6.24       6.21
## 5 2015-06-01 00:00:00         7.65            6.21        6.35       6.17
## 6 2015-07-01 00:00:00         7.82            6.38        6.51       6.13
## # ℹ 7 more variables: tarifa_residencial_mensal <dbl>, log_consumo <dbl>,
## #   dif_potencia <dbl>, dif_consumo <dbl>, dif_tarifa <dbl>,
## #   dif_instalacoes <dbl>, dif_credito <dbl>
dados_residencial_st_dif_ts<-ts(dados_residencial_st_dif, 
            start = c(2015,2), 
            end = c(2024,05),frequency = 12)



dados_residencial_st_dif_ts<-as.xts(dados_residencial_st_dif) 

Realizando os Teste de Raiz Unitária:

library(urca)
library(bootUR)

# Para a variável potência instalda:
adf_potencia<-ur.df(dados_residencial_st[, "potencia_acumulada"],
                    type = "trend", lags = 12, selectlags = "BIC")

summary(adf_potencia)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -193685   -7140    -256    8776  125925 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.988e+04  1.338e+04  -1.486   0.1406    
## z.lag.1     -3.098e-03  1.985e-03  -1.561   0.1219    
## tt           6.660e+02  3.104e+02   2.146   0.0344 *  
## z.diff.lag   9.286e-01  5.406e-02  17.179   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37910 on 96 degrees of freedom
## Multiple R-squared:  0.9413, Adjusted R-squared:  0.9395 
## F-statistic: 513.2 on 3 and 96 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -1.5606 2.2 2.4478 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47
boot_union(dados_residencial_st[, "potencia_acumulada"], bootstrap = "SWB")
## Progress: |------------------| 
##           ********************
## 
##  SWB bootstrap union test on a single time series
## 
## data: potencia_acumulada
## null hypothesis: Series has a unit root
## alternative hypothesis: Series is stationary
## 
##                    estimate largest root statistic p-value
## potencia_acumulada                    NA   -0.9707  0.1781
forecast::ndiffs(dados_residencial_st[, "potencia_acumulada"])
## [1] 2
# Para a variável  tarifa residencial :
adf_tarifa <-ur.df(dados_residencial_st[, "tarifa_residencial_mensal"],
                    type = "trend", lags = 12, selectlags = "BIC")
summary(adf_tarifa)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -92.94 -24.41   2.07  23.51 124.96 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  124.34421   77.58119   1.603 0.112654    
## z.lag.1       -0.23861    0.16823  -1.418 0.159690    
## tt             0.53139    0.44799   1.186 0.238827    
## z.diff.lag1   -0.70892    0.17046  -4.159 7.54e-05 ***
## z.diff.lag2   -0.67531    0.16954  -3.983 0.000142 ***
## z.diff.lag3   -0.51291    0.18222  -2.815 0.006050 ** 
## z.diff.lag4   -0.28897    0.19256  -1.501 0.137117    
## z.diff.lag5    0.10241    0.19521   0.525 0.601185    
## z.diff.lag6    0.09464    0.19944   0.475 0.636331    
## z.diff.lag7    0.23550    0.20151   1.169 0.245769    
## z.diff.lag8    0.16423    0.19415   0.846 0.399956    
## z.diff.lag9   -0.04605    0.17778  -0.259 0.796231    
## z.diff.lag10  -0.48376    0.14395  -3.361 0.001161 ** 
## z.diff.lag11  -0.47719    0.10724  -4.450 2.56e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 45.02 on 86 degrees of freedom
## Multiple R-squared:  0.8008, Adjusted R-squared:  0.7707 
## F-statistic: 26.59 on 13 and 86 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -1.4184 2.4368 1.0872 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47
boot_union(dados_residencial_st[, "tarifa_residencial_mensal"], bootstrap = "SWB")
## Progress: |------------------| 
##           ********************
## 
##  SWB bootstrap union test on a single time series
## 
## data: tarifa_residencial_mensal
## null hypothesis: Series has a unit root
## alternative hypothesis: Series is stationary
## 
##                           estimate largest root statistic p-value
## tarifa_residencial_mensal                    NA   -0.2714  0.9355
forecast::ndiffs(dados_residencial_st[, "tarifa_residencial_mensal"])
## [1] 1
# Para a variável  consumo residencial :
adf_consumo <-ur.df(dados_residencial_st[, "consumo_residencial"],
                    type = "trend", lags = 12, selectlags = "BIC")
summary(adf_consumo)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -685.29 -243.59   -9.51  226.80  976.24 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  -1.586e+03  1.803e+03  -0.880  0.38154   
## z.lag.1       1.513e-01  1.762e-01   0.858  0.39317   
## tt           -1.174e+00  4.952e+00  -0.237  0.81322   
## z.diff.lag1  -5.945e-01  2.183e-01  -2.723  0.00784 **
## z.diff.lag2  -3.338e-01  2.202e-01  -1.516  0.13329   
## z.diff.lag3  -3.153e-01  2.033e-01  -1.551  0.12468   
## z.diff.lag4  -4.669e-01  1.923e-01  -2.429  0.01727 * 
## z.diff.lag5  -5.277e-01  1.829e-01  -2.885  0.00496 **
## z.diff.lag6  -3.371e-01  1.744e-01  -1.933  0.05655 . 
## z.diff.lag7  -4.437e-01  1.617e-01  -2.745  0.00738 **
## z.diff.lag8  -3.866e-01  1.470e-01  -2.629  0.01016 * 
## z.diff.lag9  -3.625e-01  1.372e-01  -2.642  0.00981 **
## z.diff.lag10 -3.448e-01  1.338e-01  -2.578  0.01167 * 
## z.diff.lag11 -3.198e-02  1.282e-01  -0.249  0.80367   
## z.diff.lag12  2.958e-01  1.062e-01   2.784  0.00661 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 346.5 on 85 degrees of freedom
## Multiple R-squared:  0.5707, Adjusted R-squared:    0.5 
## F-statistic: 8.072 on 14 and 85 DF,  p-value: 1.241e-10
## 
## 
## Value of test-statistic is: 0.8582 3.7993 2.6104 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47
boot_union(dados_residencial_st[, "consumo_residencial"], bootstrap = "SWB")
## Progress: |------------------| 
##           ********************
## 
##  SWB bootstrap union test on a single time series
## 
## data: consumo_residencial
## null hypothesis: Series has a unit root
## alternative hypothesis: Series is stationary
## 
##                     estimate largest root statistic p-value
## consumo_residencial                    NA   -0.1516   0.998
forecast::ndiffs(dados_residencial_st[, "consumo_residencial"])
## [1] 1
# Para a variável  isntalações :
adf_istalacoes <-ur.df(dados_residencial_st[, "numero_de_instalacoes_acumuladas"],
                    type = "trend", lags = 12, selectlags = "BIC")
summary(adf_istalacoes)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -29297.9  -1069.9     73.8   1334.2  19451.8 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.980e+03  1.999e+03  -1.491   0.1394    
## z.lag.1     -3.218e-03  1.981e-03  -1.625   0.1075    
## tt           1.020e+02  4.725e+01   2.158   0.0334 *  
## z.diff.lag   9.237e-01  5.443e-02  16.970   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5587 on 96 degrees of freedom
## Multiple R-squared:  0.9377, Adjusted R-squared:  0.9358 
## F-statistic: 481.8 on 3 and 96 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -1.6247 2.2199 2.46 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47
boot_union(dados_residencial_st[, "numero_de_instalacoes_acumuladas"], bootstrap = "SWB")
## Progress: |------------------| 
##           ********************
## 
##  SWB bootstrap union test on a single time series
## 
## data: numero_de_instalacoes_acumuladas
## null hypothesis: Series has a unit root
## alternative hypothesis: Series is stationary
## 
##                                  estimate largest root statistic p-value
## numero_de_instalacoes_acumuladas                    NA    -1.275 0.06053
forecast::ndiffs(dados_residencial_st[, "numero_de_instalacoes_acumuladas"])
## [1] 2
# Para a variável unidades que recebem credito :
adf_credito <-ur.df(dados_residencial_st[, "unidades_recebem_credito_acu"],
                    type = "trend", lags = 12, selectlags = "BIC")
summary(adf_credito)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -34105  -1795      3   2014  26885 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.790e+03  2.565e+03  -1.478   0.1428    
## z.lag.1     -3.355e-03  1.995e-03  -1.682   0.0959 .  
## tt           1.292e+02  6.016e+01   2.147   0.0343 *  
## z.diff.lag   9.270e-01  5.285e-02  17.541   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7227 on 96 degrees of freedom
## Multiple R-squared:  0.9364, Adjusted R-squared:  0.9344 
## F-statistic: 471.1 on 3 and 96 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -1.6818 2.2048 2.4516 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47
boot_union(dados_residencial_st[, "unidades_recebem_credito_acu"], bootstrap = "SWB")
## Progress: |------------------| 
##           ********************
## 
##  SWB bootstrap union test on a single time series
## 
## data: unidades_recebem_credito_acu
## null hypothesis: Series has a unit root
## alternative hypothesis: Series is stationary
## 
##                              estimate largest root statistic p-value
## unidades_recebem_credito_acu                    NA   -0.8687  0.2506
forecast::ndiffs(dados_residencial_st[, "unidades_recebem_credito_acu"])
## [1] 2
# FAZER OS TESTES PARA AS VARIÁVEIS EM PRIMEIRA DIFERENÇA

Realizando o Teste de Cointegração:

library(urca)


# As series não tem a mesma ordem de intergração, as referentes a energia fotovoltaica são I(2),
#enqautno as da tarifa e consumo de energia eletrica são I(1)
# Como proceder??

Construindo o gráfico da taxa da potência instalada residencial

grafico_dif_potencia_reseidencial<- dados_residencial_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_potencia, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa da Potência Acumulada : ",
                                         scales::number(dif_potencia,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_potencia, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa da Potência Acumulada: ",
                                         scales::number(dif_potencia,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa da Potência Acumulada -   Mensal - BR',
        subtitle = '',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_potencia_reseidencial = "text")

Construindo o gráfico da taxa do consumo residencial

grafico_dif_consumo_reseidencial<- dados_residencial_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_consumo, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa do Consumo : ",
                                         scales::number(dif_consumo,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_consumo, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa do Consumo : ",
                                         scales::number(dif_consumo,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa do Comsumo  -   Mensal - BR',
        subtitle = '',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_consumo_reseidencial = "text")

Construindo o gráfico da taxa da tarifa residencial

grafico_dif_tarifa_reseidencial<- dados_residencial_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_tarifa, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa do Consumo : ",
                                         scales::number(dif_consumo,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_tarifa, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa do Consumo : ",
                                         scales::number(dif_tarifa,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa da Tarifa  -   Mensal - BR',
        subtitle = '',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_tarifa_reseidencial = "text")

Construindo o gráfico da taxa do número de instalaçoes

grafico_dif_instalacoes_reseidencial<- dados_residencial_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_instalacoes, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa do Consumo : ",
                                         scales::number(dif_consumo,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_instalacoes, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa do Consumo : ",
                                         scales::number(dif_instalacoes,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa do Número de Instalações  -   Mensal - BR',
        subtitle = '',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_instalacoes_reseidencial = "text")

Construindo o gráfico da taxa do número de unidades que recebem crédito

grafico_dif_cresito_reseidencial<- dados_residencial_st_dif %>% 
   ggplot() + 
   geom_line(mapping = aes(x = ref_data,
                           y = dif_credito, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> "," Taxa do Consumo : ",
                                         scales::number(dif_credito,
                                                        accuracy =0.1 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#07020D",
             size = 0.5,
             linetype = 1) +
    geom_point(mapping = aes(x = ref_data,
                           y =dif_credito, 
                           group = 1,
                           text = paste0("Data: ",
                            format(ref_data, "%d-%m-%Y"),
                                         "<br> ","Taxa do Consumo : ",
                                         scales::number(dif_credito,
                                                        accuracy =0.01 ,
                                                        decimal.mark = ',',
                                                        big.mark = '.'))),
             color = "#3E4F5D",
             size = 0.1,
             linetype = 1) +
   scale_y_continuous(labels = scales::number_format(accuracy = 0.01,
                                                     decimal.mark = ',',
                                                     big.mark = '.')) +
   labs(title = 'Serie Temporal Da Taxa do Número de Unidades que Recebem Crédito  -   Mensal - BR',
        subtitle = '',
        x = 'Data',
        y = 'Taxa De Variação')

 
plotly::ggplotly(grafico_dif_cresito_reseidencial = "text")

Ordenação do Var considerando as variáveis em nível

ORD1<-dados_residencial_st[, c( "potencia_acumulada", 
                                "numero_de_instalacoes_acumuladas",
                                 "unidades_recebem_credito_acu" ,
                                "consumo_residencial",
                                "tarifa_residencial_mensal" )]


VARselect(ORD1, lag.max = 6, type = "const")
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      6      5      2      6 
## 
## $criteria
##                   1            2            3            4            5
## AIC(n) 7.169856e+01 7.078255e+01 7.052300e+01 7.003722e+01 6.932284e+01
## HQ(n)  7.200235e+01 7.133950e+01 7.133312e+01 7.110050e+01 7.063928e+01
## SC(n)  7.244795e+01 7.215643e+01 7.252138e+01 7.266009e+01 7.257020e+01
## FPE(n) 1.375760e+31 5.521456e+30 4.291969e+30 2.679068e+30 1.342968e+30
##                   6
## AIC(n) 6.909624e+01
## HQ(n)  7.066584e+01
## SC(n)  7.296810e+01
## FPE(n) 1.109708e+30

Estimação do Var considerando as variáveis em nível

# Estimando o Modelo:
p7c<-VAR(ORD1, p = 7, type = "const")


# Verificando o valor das raizes encontradas(IMPORTANTE):
roots(p7c)
##  [1] 1.0261595 1.0175425 1.0175425 0.9946226 0.9946226 0.9865560 0.9865560
##  [8] 0.9851526 0.9753031 0.9753031 0.9537925 0.9537925 0.9465689 0.9465689
## [15] 0.9352550 0.9352550 0.8940726 0.8940726 0.8835316 0.8835316 0.8783933
## [22] 0.8571942 0.8571942 0.8333648 0.8303486 0.8303486 0.8158685 0.8158685
## [29] 0.8019306 0.8019306 0.6380498 0.6380498 0.5685856 0.5685856 0.2423229
# Como a maior das raizes do modelo é maior do que 1,
#não podemos utilizar o modelo com as variáveis em nível 

Ordenação do Var considerando as variáveis em primeira diferença

ORD2<-dados_residencial_st_dif_ts[, c("dif_potencia", 
                                      "dif_instalacoes",
                                      "dif_credito",
                                      "dif_consumo", 
                                      "tarifa_residencial_mensal")]


VARselect(ORD2, lag.max = 6, type = "const")
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      5      1      1      5 
## 
## $criteria
##                    1             2             3             4             5
## AIC(n) -2.222061e+01 -2.226008e+01 -2.221862e+01 -2.219087e+01 -2.238678e+01
## HQ(n)  -2.191509e+01 -2.169995e+01 -2.140390e+01 -2.112155e+01 -2.106286e+01
## SC(n)  -2.146681e+01 -2.087810e+01 -2.020848e+01 -1.955256e+01 -1.912030e+01
## FPE(n)  2.238583e-10  2.158739e-10  2.267904e-10  2.366765e-10  1.993942e-10
##                    6
## AIC(n) -2.234688e+01
## HQ(n)  -2.076836e+01
## SC(n)  -1.845223e+01
## FPE(n)  2.153097e-10

Estimação do Var considerando as variáveis em primeira diferença

# Estimando o Modelo:
p6c<-VAR(ORD2, p = 6, type = "const")


# Verificando o valor das raizes encontradas(IMPORTANTE):
roots(p6c)
##  [1] 0.9876964 0.9352972 0.9352972 0.8807831 0.8807831 0.8639891 0.8639891
##  [8] 0.8521612 0.8521612 0.8286645 0.8286645 0.8242121 0.8238571 0.8238571
## [15] 0.7788771 0.7788771 0.7695110 0.7695110 0.7643409 0.7534739 0.7534739
## [22] 0.7146508 0.7146508 0.6857261 0.6857261 0.6846349 0.6846349 0.5955196
## [29] 0.5955196 0.2117691
# Como temos a maior raiz do modelo menor do que 1,
#podemos continuar com as análsies

Testes Econométricos

PTp6c<-serial.test(p6c,lags.pt = 12, type = "PT.asymptotic")
PTp6c$serial
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 231.49, df = 150, p-value = 2.182e-05
BG1p6c<-serial.test(p6c,lags.bg = 1, type = "BG")
BG1p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 62.391, df = 25, p-value = 4.858e-05
BG2p5c<-serial.test(p6c,lags.bg = 2, type = "BG")
BG2p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 214.72, df = 108, p-value = 4.632e-09
BG2p6c<-serial.test(p6c,lags.bg = 12, type = "BG")
BG2p6c$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 464.38, df = 300, p-value = 3.371e-09
NTestp6c<-normality.test(p6c)
NTestp6c$jb.mul
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 27769, df = 10, p-value < 2.2e-16
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 1301.8, df = 5, p-value < 2.2e-16
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object p6c
## Chi-squared = 26468, df = 5, p-value < 2.2e-16
Cusump6c<-stability(p6c, type = "OLS-CUSUM")
plot(Cusump6c)

RECusump6c<-stability(p6c, type = "Rec-CUSUM")
plot(RECusump6c)

Impulso-Resposta

ierfp6c<-irf(p6c, impulse = "tarifa_residencial_mensal", response = c("dif_potencia",
                                                       "dif_consumo",
                                                       "dif_instalacoes",
                                                       "dif_credito"), 
             ortho = TRUE, runs = 1000, n.ahead = 36)
plot(ierfp6c)

acup6c<-ierfp6c<-irf(p6c, impulse = "tarifa_residencial_mensal", response = c("dif_potencia", 
                                                               "dif_consumo",
                                                               "dif_instalacoes",
                                                               "dif_credito"), 
                     cumulative = TRUE, ortho = TRUE, runs = 1000, n.ahead = 36)
plot(acup6c)

BVAR

library(BVAR)

tictoc::tic()

mn<-bv_minnesota(lambda = bv_lambda(mode =0.60195, sd = 0.1, min = 0.0001, max = 5), 
                 alpha = bv_alpha(mode = 0.5), var = 1e07)
priors <- bv_priors(hyper = "auto", mn = mn)

x2 <- bvar(ORD2, lags = 6, n_draw = 80000, n_burn = 20000, 
           n_thin = 1, priors = priors, verbose = TRUE)
## Optimisation concluded.
## Posterior marginal likelihood: 149.453
## Hyperparameters: lambda = 0.44752
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |                                                                      |   1%
  |                                                                            
  |=                                                                     |   1%
  |                                                                            
  |=                                                                     |   2%
  |                                                                            
  |==                                                                    |   2%
  |                                                                            
  |==                                                                    |   3%
  |                                                                            
  |==                                                                    |   4%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |===                                                                   |   5%
  |                                                                            
  |====                                                                  |   5%
  |                                                                            
  |====                                                                  |   6%
  |                                                                            
  |=====                                                                 |   6%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |=====                                                                 |   8%
  |                                                                            
  |======                                                                |   8%
  |                                                                            
  |======                                                                |   9%
  |                                                                            
  |=======                                                               |   9%
  |                                                                            
  |=======                                                               |  10%
  |                                                                            
  |=======                                                               |  11%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |========                                                              |  12%
  |                                                                            
  |=========                                                             |  12%
  |                                                                            
  |=========                                                             |  13%
  |                                                                            
  |=========                                                             |  14%
  |                                                                            
  |==========                                                            |  14%
  |                                                                            
  |==========                                                            |  15%
  |                                                                            
  |===========                                                           |  15%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |============                                                          |  16%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |============                                                          |  18%
  |                                                                            
  |=============                                                         |  18%
  |                                                                            
  |=============                                                         |  19%
  |                                                                            
  |==============                                                        |  19%
  |                                                                            
  |==============                                                        |  20%
  |                                                                            
  |==============                                                        |  21%
  |                                                                            
  |===============                                                       |  21%
  |                                                                            
  |===============                                                       |  22%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |================                                                      |  24%
  |                                                                            
  |=================                                                     |  24%
  |                                                                            
  |=================                                                     |  25%
  |                                                                            
  |==================                                                    |  25%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |===================                                                   |  26%
  |                                                                            
  |===================                                                   |  27%
  |                                                                            
  |===================                                                   |  28%
  |                                                                            
  |====================                                                  |  28%
  |                                                                            
  |====================                                                  |  29%
  |                                                                            
  |=====================                                                 |  29%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |=====================                                                 |  31%
  |                                                                            
  |======================                                                |  31%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |=======================                                               |  32%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |=======================                                               |  34%
  |                                                                            
  |========================                                              |  34%
  |                                                                            
  |========================                                              |  35%
  |                                                                            
  |=========================                                             |  35%
  |                                                                            
  |=========================                                             |  36%
  |                                                                            
  |==========================                                            |  36%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |==========================                                            |  38%
  |                                                                            
  |===========================                                           |  38%
  |                                                                            
  |===========================                                           |  39%
  |                                                                            
  |============================                                          |  39%
  |                                                                            
  |============================                                          |  40%
  |                                                                            
  |============================                                          |  41%
  |                                                                            
  |=============================                                         |  41%
  |                                                                            
  |=============================                                         |  42%
  |                                                                            
  |==============================                                        |  42%
  |                                                                            
  |==============================                                        |  43%
  |                                                                            
  |==============================                                        |  44%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |===============================                                       |  45%
  |                                                                            
  |================================                                      |  45%
  |                                                                            
  |================================                                      |  46%
  |                                                                            
  |=================================                                     |  46%
  |                                                                            
  |=================================                                     |  47%
  |                                                                            
  |=================================                                     |  48%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |==================================                                    |  49%
  |                                                                            
  |===================================                                   |  49%
  |                                                                            
  |===================================                                   |  50%
  |                                                                            
  |===================================                                   |  51%
  |                                                                            
  |====================================                                  |  51%
  |                                                                            
  |====================================                                  |  52%
  |                                                                            
  |=====================================                                 |  52%
  |                                                                            
  |=====================================                                 |  53%
  |                                                                            
  |=====================================                                 |  54%
  |                                                                            
  |======================================                                |  54%
  |                                                                            
  |======================================                                |  55%
  |                                                                            
  |=======================================                               |  55%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |========================================                              |  56%
  |                                                                            
  |========================================                              |  57%
  |                                                                            
  |========================================                              |  58%
  |                                                                            
  |=========================================                             |  58%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |==========================================                            |  59%
  |                                                                            
  |==========================================                            |  60%
  |                                                                            
  |==========================================                            |  61%
  |                                                                            
  |===========================================                           |  61%
  |                                                                            
  |===========================================                           |  62%
  |                                                                            
  |============================================                          |  62%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |============================================                          |  64%
  |                                                                            
  |=============================================                         |  64%
  |                                                                            
  |=============================================                         |  65%
  |                                                                            
  |==============================================                        |  65%
  |                                                                            
  |==============================================                        |  66%
  |                                                                            
  |===============================================                       |  66%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |===============================================                       |  68%
  |                                                                            
  |================================================                      |  68%
  |                                                                            
  |================================================                      |  69%
  |                                                                            
  |=================================================                     |  69%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |=================================================                     |  71%
  |                                                                            
  |==================================================                    |  71%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |===================================================                   |  72%
  |                                                                            
  |===================================================                   |  73%
  |                                                                            
  |===================================================                   |  74%
  |                                                                            
  |====================================================                  |  74%
  |                                                                            
  |====================================================                  |  75%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |=====================================================                 |  76%
  |                                                                            
  |======================================================                |  76%
  |                                                                            
  |======================================================                |  77%
  |                                                                            
  |======================================================                |  78%
  |                                                                            
  |=======================================================               |  78%
  |                                                                            
  |=======================================================               |  79%
  |                                                                            
  |========================================================              |  79%
  |                                                                            
  |========================================================              |  80%
  |                                                                            
  |========================================================              |  81%
  |                                                                            
  |=========================================================             |  81%
  |                                                                            
  |=========================================================             |  82%
  |                                                                            
  |==========================================================            |  82%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |==========================================================            |  84%
  |                                                                            
  |===========================================================           |  84%
  |                                                                            
  |===========================================================           |  85%
  |                                                                            
  |============================================================          |  85%
  |                                                                            
  |============================================================          |  86%
  |                                                                            
  |=============================================================         |  86%
  |                                                                            
  |=============================================================         |  87%
  |                                                                            
  |=============================================================         |  88%
  |                                                                            
  |==============================================================        |  88%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |===============================================================       |  89%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |===============================================================       |  91%
  |                                                                            
  |================================================================      |  91%
  |                                                                            
  |================================================================      |  92%
  |                                                                            
  |=================================================================     |  92%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |=================================================================     |  94%
  |                                                                            
  |==================================================================    |  94%
  |                                                                            
  |==================================================================    |  95%
  |                                                                            
  |===================================================================   |  95%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |====================================================================  |  96%
  |                                                                            
  |====================================================================  |  97%
  |                                                                            
  |====================================================================  |  98%
  |                                                                            
  |===================================================================== |  98%
  |                                                                            
  |===================================================================== |  99%
  |                                                                            
  |======================================================================|  99%
  |                                                                            
  |======================================================================| 100%
## Finished MCMC after 52.45 secs.
plot(x2)

Realziendo os teste estatisticos

library(BVAR)

#Teste para a estabilidade da Cadeia de Markov(MC)
MCIC4<-coda::as.mcmc(x2, vars = c("lambda","alpha"))
GDMCIC4<-coda::geweke.diag(MCIC4)
print(GDMCIC4)
## 
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5 
## 
## lambda 
##  1.154
pnorm(abs(GDMCIC4$z),lower.tail=FALSE)*2
##    lambda 
## 0.2485969
# Equaçaõ do BVAR na forma reduzida:
#companion(x2, conf_bands = 0.10 )

Função Impulso Resposta

tictoc::tic()

opt_irf <- bv_irf(horizon = 16, fevd = TRUE, identification = TRUE)
irfx2<- irf(x2, opt_irf, conf_bands = c(0.05))
plot(irfx2, area = TRUE, vars_impulse = c("tarifa_residencial_mensal"), vars_response = c(1:4))

tictoc::toc()
## 56.57 sec elapsed

Restrição De Sinal:

tictoc::tic()

#Construindo a Matriz de Restição de Sinal:
rs1<-matrix(c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,1,1,-1,1), ncol = 5)
# Considerando a apenas as um choque positivo na tarifa
# e as demais variáveis livre
# não ´[e carantido que o choque seja isolada
#temos que continuiar a analise
print(rs1)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   NA   NA   NA   NA    1
## [2,]   NA   NA   NA   NA    1
## [3,]   NA   NA   NA   NA    1
## [4,]   NA   NA   NA   NA   -1
## [5,]   NA   NA   NA   NA    1
sinal1<-bv_irf(horizon = 16, fevd = TRUE, identification = TRUE, sign_restr = rs1)
print(sinal1)
## Object with settings for computing impulse responses.
## Horizon: 16
## Identification: Sign restrictions
## Chosen restrictions:
##          Shock to
##           Var1    Var2    Var3    Var4    Var5    
## Response of  Var1     NA  NA  NA  NA  +  
## 
##      Var2     NA  NA  NA  NA  +  
## 
##      Var3     NA  NA  NA  NA  +  
## 
##      Var4     NA  NA  NA  NA  -  
## 
##      Var5     NA  NA  NA  NA  +  
## FEVD: TRUE
irfs1<-irf(x2, sinal1, conf_bands = c(0.05), verbose = TRUE)
print(irfs1)
## Impulse response object from `bvar()`.
## Horizon: 16
## Identification: Sign restrictions
## Chosen restrictions:
##          Shock to
##           Var1    Var2    Var3    Var4    Var5    
## Response of  Var1     NA  NA  NA  NA  +  
## 
##      Var2     NA  NA  NA  NA  +  
## 
##      Var3     NA  NA  NA  NA  +  
## 
##      Var4     NA  NA  NA  NA  -  
## 
##      Var5     NA  NA  NA  NA  +  
## FEVD: TRUE
## Variables: 5
## Iterations: 60000
plot(irfs1, area = TRUE, vars_impulse = c("tarifa_residencial_mensal"), vars_response = c(1:4))

tictoc::toc()
## 106.22 sec elapsed

Restrição De Sinal:

tictoc::tic()

#Construindo a Matriz de Restição de Sinal:
rs2<-matrix(c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,1,NA,1,1,1,1,1,-1,1), ncol = 5)
print(rs2)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   NA   NA   NA    1    1
## [2,]   NA   NA   NA    1    1
## [3,]   NA   NA   NA   NA    1
## [4,]   NA   NA   NA    1   -1
## [5,]   NA   NA   NA    1    1
sinal2<-bv_irf(horizon = 16, fevd = TRUE, identification = TRUE, sign_restr = rs2)
print(sinal2)
## Object with settings for computing impulse responses.
## Horizon: 16
## Identification: Sign restrictions
## Chosen restrictions:
##          Shock to
##           Var1    Var2    Var3    Var4    Var5    
## Response of  Var1     NA  NA  NA  +   +  
## 
##      Var2     NA  NA  NA  +   +  
## 
##      Var3     NA  NA  NA  NA  +  
## 
##      Var4     NA  NA  NA  +   -  
## 
##      Var5     NA  NA  NA  +   +  
## FEVD: TRUE
irfs2<-irf(x2, sinal2, conf_bands = c(0.05), verbose = TRUE)
print(irfs2)
## Impulse response object from `bvar()`.
## Horizon: 16
## Identification: Sign restrictions
## Chosen restrictions:
##          Shock to
##           Var1    Var2    Var3    Var4    Var5    
## Response of  Var1     NA  NA  NA  +   +  
## 
##      Var2     NA  NA  NA  +   +  
## 
##      Var3     NA  NA  NA  NA  +  
## 
##      Var4     NA  NA  NA  +   -  
## 
##      Var5     NA  NA  NA  +   +  
## FEVD: TRUE
## Variables: 5
## Iterations: 60000
plot(irfs2, area = TRUE, vars_impulse = c("tarifa_residencial_mensal"), vars_response = c(1:4))

tictoc::toc()
## 422.09 sec elapsed

Restrição De Sinal:

tictoc::tic()

#Construindo a Matriz de Restição de Sinal:
rs3<-matrix(c(NA,NA,NA,NA,NA,-1,-1,0,0,0,NA,NA,NA,NA,NA,1,1,1,1,1,1,1,1,-1,1), ncol = 5)
print(rs3)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   NA   -1   NA    1    1
## [2,]   NA   -1   NA    1    1
## [3,]   NA    0   NA    1    1
## [4,]   NA    0   NA    1   -1
## [5,]   NA    0   NA    1    1
#sinal3<-bv_irf(horizon = 16, fevd = TRUE, identification = TRUE, sign_restr = rs3)
#print(sinal3)
#irfs3<-irf(x2, sinal3, conf_bands = c(0.05), verbose = TRUE)
#print(irfs2)
#plot(irfs2, area = TRUE, vars_impulse = c("tarifa_residencial_mensal"), vars_response = c(1:4))

tictoc::toc()
## 0 sec elapsed

BIBLIOGRAFIA

LIVRO

  • TAREFAS:
    • VER CAPITULOS 9,10,11
    • VER CAPITULO 3