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”.
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_interativoCrianado 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_interativoFazendo 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
Fazendo o gráfico de boxplot considerando as variáveis Quantidade de Unidades que Recebem Crédito e Classe de Consumo
Fazendo o gráfico de boxplot considerando as variáveis Quantidade de Unidades que Recebem Crédito e sig_tipo_consumidor
Fazendo o gráfico de boxplot considerando as variáveis Média da Potência Instalada Crédito e sig_tipo_consumidor
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_graficoMapa 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_graficoMapa 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_graficoMapa 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_graficoMapa 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_graficoMapa 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_graficoANÁ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
## # 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
## # 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>
# 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
## # 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>
# 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
## # 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>
# 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 :
# 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 :
# 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 :
# 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
## # 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>
# 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
## # 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>
# 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
## # 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>
# 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
# 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
# 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
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") ## 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")## 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")## 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
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
## 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
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 7.6986, df = 9, p-value = 0.5648
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 50.547, df = 18, p-value = 6.237e-05
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 214.72, df = 108, p-value = 4.632e-09
## $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
##
## ARCH (multivariate)
##
## data: Residuals of VAR object p6c
## Chi-squared = 246.29, df = 144, p-value = 2.354e-07
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)
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
## 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
## [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
## 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
## [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
## 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
## [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
## 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
## [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
## 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
## [1] 2
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
Testes Econométricos
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object p6c
## Chi-squared = 231.49, df = 150, p-value = 2.182e-05
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 62.391, df = 25, p-value = 4.858e-05
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 214.72, df = 108, p-value = 4.632e-09
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object p6c
## Chi-squared = 464.38, df = 300, p-value = 3.371e-09
## $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
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.
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
## lambda
## 0.2485969
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))## 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
## 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
## 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
## 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
## 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
## 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
## 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