• Aluno: Luiz Francisco de França Neto
  • Matrícula: 201910354411
  • Materia Geração
  • Turma: 1
  • Professor: Antonio Guilherme
  • Departamento: Engenharia Elétrica - Ênfase em Sistemas de Potência

1 Introdução

Hidrelétrica de Sobradinho
Hidrelétrica de Sobradinho

1.1 Informações básicas

As informações referente a Hidreletrica de Sobradinho neste capitulo encontram-se em Wikipedia (2024) e Companhia Hidro Elétrica do São Francisco (CHESF) (2024). A Usina Hidrelétrica de Sobradinho, localizada no rio São Francisco, mais especificamente na Bahia, é uma das maiores do Brasil em capacidade de armazenamento de água. Concluída em 1979 e operada pela Companhia Hidro Elétrica do São Francisco (CHESF), a usina é estratégica para o sistema elétrico brasileiro. Seu lago, com 4.214 km² de área e capacidade de 34,1 bilhões de metros cúbicos em sua cota nominal.

A usina possui uma potência instalada de 1.050 MW, com seis unidades geradoras acionadas por turbinas Kaplan de 175.050 kW cada. Abaixo, seguem os principais dados da usina e do reservatorio, retirados do próprio site da chesf em Companhia Hidro Elétrica do São Francisco (CHESF) (2024).

Usina:

Proprietário | CHESF |
Início das Obras | 06/73 |
Início da Operação | 11/79 |
Rio | São Francisco |
Longitude | 40° 50’ Oeste |
Latitude | 9° 35’ Sul |
Distância da Foz | 747,80 km |
Município/Estado | Sobradinho - BA |
Tipo de Construção | Externa |
Potência Instalada | 1.050.300 kW (6 UGs) |
Comprimento da Casa de Força | 250,00 m |
Altura da Casa de Força | 32,00 m |
Largura da Casa de Força | 27,00 m |

.

Reservatório:

Área do reservatório na cota 392,50 m | 4.214 km² |
Volume total do reservatório | 34.116 Hm³ |
Volume útil do reservatório | 28.669 Hm³ |
Vazão regularizada | 2.060 m³/s |
Nível máximo maximumorum | 393,50 m |
Nível máximo operativo normal | 392,50 m |
Nível mínimo operativo normal | 380,50 m |

1.2 Objetivo do trabalho:

O objetivo do trabalho é analisar diversos dados da hidreletrica de sobradinho. Dentre eles: Vazão afluente diária, Vazão vertida diária, Vazão defluente diária, Nível de Montante diário, geração de Energia horária (24 horas), Volume útil diário, Energia Natural Afluente Bruta do subsistema(Nordeste), Energia Armazenada diária no subsistema (Nordeste). Além desta analise, também foram estudas no presente relatório curvas caracteristicas como por exemplo a curva cota x volume. Esses dados foram obtidos por meio de planilhas de excel e tratados em R para análise e apresentação. Essas informações podem ser encontradas nas referências Operador Nacional do Sistema Elétrico (ONS) (2024b) e Operador Nacional do Sistema Elétrico (ONS) (2024a). Ambas do ONS (Operador Nacional do Sistema Elétrico).

2 Introdução téorica:

A teoria básica de estatistica, foi retirada de uma apostila aberta, no qual o seu endereço pode ser encontrada em Matemática e Estatística - UFRGS (2024) e Guilherme (2024).

2.1 Mediana, média e quartis:

A média, é talvez o principal conceito da estatistica e também o mais popular, em que relaciona os valores de um grupo de dados com o número total de dados, como demontra a equação (1).

\[ \bar{x} = \frac{1}{n} \sum_{i=1}^n x_i \tag{1} \] Onde n é o número de dados e \(x_{i}\) são os valores dos dados, obviamente válidos para casos de amostras totalmente númericas. Um dos maiores problemas da média é que não é possível notar como os dados são dispersos, por exemplo numa média escolar (caso em que não há pesos por matéria) é esperado que um aluno média 9 tenha grande desempenho em todas as matérias. Porém, esse aluno pode ser muito mal em geografia mas caso haja um grande número de matérias seu alto desempenho nas demais, esta deficiência pode ser mascarada pela média, não ajudando assim o aluno, professores e responsáveis a observar essa dificuldade.

O conceito de mediana é o de dividir os dados ao meio, ou seja, separar em dois grupos por meio de um valor central. Caso o número de dados, \(n\) seja ímpar, a posição da mediana é dada pela equação (2).

\[ {p} = \frac{n+1}{2} \tag{2} \] Sendo \(p\) a posição do valor em que se encotra a mediana. Por exemplo, numa amostra de 3 valores, o p é igual a dois e significa que o segundo valor na ordem crescente, ou descrecente já que é um valor central, é a mediana. Enquanto para valores pares a mediana é dada pela média dos dois valores centrais \(p_{1}\) e \(p_{2}\), como mostrado na equação (3).

\[ {M_d} = \frac{p_{1}+p_{2}}{2} \tag{3} \] Onde \(M_d\) é a o próprio valor da mediana.

A mediana assim como a média não apresenta como os dados são dispersos, a mesma somente divide os dados por meio de um valor central que muitas vezes podem “mascarar” dados com um comportamento incomum que precisam ser analisados.

Os quartis (medidas separatrizes) que delimitam proporções por meio de valores.:

-Primeiro Quartil (Q1): 25% dos valores são iguais ou menores que Q1.

-Segundo Quartil (Q2): 50% dos valores são iguais ou menores que Q2, que também corresponde a mediana.

-Terceiro Quartil(Q3): 75% dos valores são iguais ou menores que Q3.

Os quartis podem ser úteis para analisar caso se tenha interesse em como está divididos a grande parte dos valores, por exemplo, analisar o intervalo de Q1 a Q3 permite uma analise de como metade dos valores estão distantes ou próximos entre sí, porém, assim no caso da média e da mediana não é possível perceber valores nas extremidades.

2.2 Boxplot

Também chamado de gráfico de caixa, o boxplot é uma forma de demonstrar como os dados são dispersos usando conceitos previamente discutidos na seção 2.1. O boxplot, monta a partir dos dados de primeiro quartil, mediana e terceiro quartil um gráfico no modelo caixa, como mostrado na figura abaixo retirado da referência Matemática e Estatística - UFRGS (2024).

Boxplot
Boxplot

Onde termo \(IQR\) é igual a diferença entre \(Q_3\) e \(Q_1\). É comum em base de dados aparecerem os conhecidos outliers, que são pontos fora dos intervalos destacados. Estes pontos normalmente indicam condições extremas e anormais, mas também podem ser resultados de uma amostra pequena que não abrange uma quantidade de dados necessários. Exemplificando, quando vai se medir a temperatura durante um certo número de dias e acaba que o dia mais quente é um dos outliers, não quer dizer que seja uma condição extrema e nem anormal, pois se essa amostra for pequena isso pode indicar apenas uma mudaça de estação, por exemplo.

2.3 Histogramas

Os histogramas nada mais são que gráficos que permitem analisar a densidade de dados a partir de intervalos. Por isso, nesse estudo para facilitar essa visão a frequência de cada intervalo de dados foi dividida pelo número de dados, com isso o eixo Y tem valores no intervalo de 0 a 1.

Histograma definido pela frequência
Histograma definido pela frequência

Na figura acima retirada da referência Júnior (2024) que os valores no eixo denominado frequência dificultam a visualização de quantos por cento esse intervalo é definido.

Histograma definido pela densidade
Histograma definido pela densidade

Porém, nesta ultima figura é utilizado o conceito de densidade a fim de tornar essa análise mais rápida e fácil.

2.4 Percentis

Está relacionado a função probabilidade acumulada e é a probabilidade de ocorrência de um certo valor ser maior que x, de acordo com os dados fornecidos. No R, o eixo x é o da porcentagem enquanto o eixo y é o eixo dos dados, logo, uma interpretação desse gráfico seria: Para um ponto pertencente a curva (\(x_1\), \(y_1\)) significa que quando se escolhe um valor qualquer da base dados, a probabilidade deste valor ser maior que \(y_1\) é \(x_1\). A figura abaixo mostra o formato de uma gráfico utilizando a função percentil no R.

Percentil
Percentil

2.5 Séries temporais

As séries temporais nada mais são que funções aleatórias de uma variavel. Ela ajuda a satisfazer a necessidade de “prever” o futuro, já que esse não é um fator que pode ser encontrado de forma deterministica.

Ao utilizar o R é possível retirar 3 gráficos:

-Componente de tendência: Indica a direção geral da série, se está crescendo, decresndo ou estável.

-Componente sazonal: Mostra os ciclos que se repetem ao longo do tempo.

-Componente Randômica: São uma espécie de “ruídos” pertencentes a série.

2.6 Gráfico de variação

É o gráfico que relaciona os valores em sequência pela variação, ou seja, pela carcterizando-os pela diferença entre eles pela seguinte equação 4:

\[ \text{Variação Percentual} = \frac{\text{Valor Atual} - \text{Valor Anterior}}{\text{Valor Anterior}} \times 100 \tag{4} \] Esse gráfico é fundamental para o entendimento da variação e é muito útil para analisar com que frequência uma série tem uma mudança extrema, pois, em alguns casos taxas de variações extremas em um curto intervalo de tempo são piores que valores extremos.

2.7 Gráfico de autocorrelação

Autocorrelação é uma técnica utilizada para analisar a relação de uma série temporal com seus próprios valores passados. Ela mede o grau de correlação entre os dados em diferentes intervalos de tempo (defasagens), ajudando a identificar padrões ou dependências temporais nos dados. Ou seja, mede a dependência de um valor com seu histórico, por exemplo, um atleta de alto nível se prepara para uma maratona olimpica em um periódo de 2 anos, de um dia para o outro não haverá muita evolução em relação a sua velocidade máxima, força física, massa magra e outros fatores que podem ser medidos, além do fato de que nem todos os dias ele irá evoluir pois podem acontecer problemas que não o permita treinar como doenças, problemas familiares e etc. Mas ao observar em uma “janela” de tempo maior, como 2 meses, será possível ver uma boa evolução, ou seja, a correlação entre os dados analisados que medem seu desempenho é menor que ao observar de forma diária, esses padrões são frequentemente representados graficamente por meio de uma Função de Autocorrelação (ACF), que mostra como as correlações variam em diferentes defasagens.

Correlação de dados
Correlação de dados

A linha azul pontilhada indica os limites de significância estatística para os valores de autocorrelação em cada defasagem (lag). Esses limites são calculados para verificar se a correlação observada em um dado lag é estatisticamente significativa ou um evendo causado por acaso, ruídos. Se as barras de autocorrelação ultrapassam a linha azul, isso indica que há uma relação significativa entre os valores da série no lag correspondente. Ou seja, os dados atuais influenciam diretamente os valores passados ou futuros com essa defasagem. Caso as barras fiquem dentro dos limites das linhas azuis, a autocorrelação para aquele lag pode ser considerada não significativa, sugerindo que não há uma relação forte com os valores em intervalos passados.

As informações foram baseadas na Referência IBM (2024) assim como a imagem.

2.8 Conceitos básicos de geração

Este tópico busca principalmente descrever os dados que foram analisados no presente trabalho. Como dito anteriormente, diversas informações podem ser retiradas da referência Operador Nacional do Sistema Elétrico (ONS) (2024a). Os principais dados retirados e sua descrição são:

-Vazão Afluente diária: Vazão diária que chega para a usina;

-Vazão vertida diária: Vazão diária liberada por um reservatório através de vertedouros;

-Vazão defluente diária: Vazão diária que sai da usina;

-Nível de Montante diário: Nível da água diário na usina, equivalente a cota;

-Geração de Energia horária: É a gração de energia por hora da usina em um determinado periodo previamente definido;

-Volume útil diário: É dado pelo volume da usina desconsiderando o volume morto, ou seja, é o volume capaz de produzir energia;

-Energia Natural Afluente Bruta do subsistema: Energia elétrica que pode ser gerada a partir da vazão natural do subsistema;

-Energia Armazenada diária no subsistema: É relativo a capacidade do sistema de armazenar volume de água para de certa forma “guardar energia” para que seja aproveitado posteriormente;

-Custo Marginal de operação semanal do subsistema: É o valor do custo para produzir um pouco mais de um MWh de energia que o sistema precisa.

A data de análise desses dados foi de 01/01/2000 até 06/10/2024, menos a geração de energia horária que apresentou problemas durante sua extração de dados em que só era possível obter um único dia (16 de março de 2024).

Outro dado retirado foi a vazão natural afluente, que como o nome diz é a vazão afluente mas de forma que não haja intervensão humana. Para este foi utilizado todo o periodo de tempo disponivel (01/01/1931 a 31/12/2020).

3 Gráfico cota x volume e evaporação mensal

3.1 Cota x volume

Um dos tópicos a ser relacionado no presente trabalho é apresentar o gráfico cota x volume, onde a cota é dada em metros e representa o nível do reservatório. Seus valores máximos e mínimo são encontrados no arquivo Hidr.xls, da mesma forma para o volume dado em hectometro cúbico. O primeiro passo dessa ánalise consistiu em contruir o polinômio que relaciona essas duas grandezas. No Hidr.xls é disponibilizado os fatores por meio do nome PCV e de um índice em parênteses que representa qual a potência esse fator se relaciona. Por exemplo, a coluna PCV(2) é o fator que multiplica o volume elevado a 2 para encontrar a cota. Desta forma, a relação entre cota e o volume é dada pela seguinte expressão:

\[ C = (-9.55E-18){V^4}+(1,16E-12){V^3}+(-5.35E-8){V^2}+(1.40E-3){V^1}+3.74E2\tag{3} \] Na equação 3, a variavel \(C\) é a cota e a \(V\) é o volume. Com isso, transformou-se a variavel de volume em um vetor de tamanho 1000 que vai do valor mínimo de volume ao valor máximo e com isso, foi definido o intervalo de aplicação da equação 3, como apresentado pela figura abaixo:

setwd("C:/Geracao")
df <- read.csv2("Hidr.csv")
#summary(df)

# Remover linhas com NA em colunas PCV
df <- df[!is.na(df$PCV.4.) & !is.na(df$PCV.3.) & 
           !is.na(df$PCV.2.) & !is.na(df$PCV.1.) & 
           !is.na(df$PCV.0.), ]

# Definir volume máximo e mínimo
Vol_max <- 34116
vol_min <- 5447

# Criar sequência de volumes
volume <- seq(Vol_max, vol_min, length.out = 1000)
#print(df$PCV.4.)
# Garantir que os coeficientes sejam numéricos
df$PCV.4. <- as.numeric(df$PCV.4.)
df$PCV.3. <- as.numeric(df$PCV.3.)
df$PCV.2. <- as.numeric(df$PCV.2.)
df$PCV.1. <- as.numeric(df$PCV.1.)
df$PCV.0. <- as.numeric(df$PCV.0.)

# Criar o polinômio usando a primeira linha
cota <- (df$PCV.4. * volume^4)+(df$PCV.3.*volume^3)+(df$PCV.2.*volume^2)+(df$PCV.1. * volume)+(df$PCV.0.)

# Verificar valores gerados
#print(head(volume))
#print(head(cota))

# Plotar o gráfico
plot(volume, cota, type = "l", col = "blue",
     xlab = "Volume (hm³)", ylab = "Cota (m)",
     main = "Gráfico de Cota vs Volume")
grid()

Observa-se no gráfico acima que houve coerência nos valores, já que o a partir dos limites de volume mínimo e máximo é possível observar pelo polinômio que ao aplicar a função cota x volume estes limites atingem os valores de cota mínima e máxima, reespectivamente.

3.2 Evaporação mensal

A evaporação mensal é dada no arquivo Hidr.xls, por mês e em mm. É um valor dado em mílimitro porque toma como referência a altura que alguma refêrencia evapora. Tomando como base o reservatório, basta multiplicar pela área do reservatório para se obter o volume. Com isso, tem-se duas curvas: área máxima e área mínima, com ambas, foi possível obter uma área média dado pela média dos dois valores. O primeiro passo é passar a área e o volume para metros, o volume máximo foi usado como base para a normalização do gráfico. Posteriormente, criou-se um vetor com os 12 valores obtidos de evaporação e, posteriormente, mais 3 vetores foram criados para representar a evaporação pelas áreas mínima, média e máxima, passando a evaporação para metros também. Por fim, esses vetores foram normalizados e foi possível plotar o gráfico mensal para essas três curvas. Abaixo segue o gráfico em m³ e seguido do gráfico normalizado

setwd("C:/Geracao")

# Carregar o dataframe
df <- read.csv2("Hidr.csv")


# Definir as áreas e volume máximo
area_max <- 4214 * 1000000  # Área máxima em m²
area_min <- 1143.2* 1000000  # Área mínima em m²
area_med <- (area_min + area_max) / 2  # Área média em m²
Vol_max <- 34116 * 1000000  # Volume máximo em m³

# Selecionar as colunas de evaporação "Evap.Men.1." até "Evap.Men.12."
evaporacao <- df[, paste0("Evap.Men..", 1:12, ".")]

# Remover linhas com NA nas colunas de evaporação
evaporacao_clean <- na.omit(evaporacao)

# Converter as colunas para numéricas
evaporacao_clean <- as.data.frame(lapply(evaporacao_clean, as.numeric))

# Calcular a evaporação para cada área (mínima, média, máxima) sobre o volume máximo e passando para metros
evaporacao_min <- (evaporacao_clean * area_min* 0.001)
evaporacao_med <- (evaporacao_clean * area_med* 0.001) 
evaporacao_max <- (evaporacao_clean * area_max* 0.001) 

# Criar uma sequência de meses (1 a 12)
meses <- 1:12

# Plotar o gráfico com as 3 linhas de evaporação para as 3 áreas
plot(meses, evaporacao_min, type = "l", col = "blue", lwd = 2, 
     xlab = "Meses", ylab = "Evaporação m³", 
     main = "Evaporação por Mês (Área Min, Média, Máxima)", 
     xlim = c(1, 12), ylim = range(c(evaporacao_min, evaporacao_med, evaporacao_max)), 
     xaxt = "n", col.axis = "darkblue", col.lab = "darkblue")

# Personalizar os valores do eixo X (meses)
axis(1, at = 1:12, labels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", 
                              "Jul", "Ago", "Set", "Out", "Nov", "Dez"), las = 2, col.axis = "darkblue")

# Adicionar as linhas para evaporação média e máxima
lines(meses, evaporacao_med, type = "l", col = "red", lwd = 2)
lines(meses, evaporacao_max, type = "l", col = "green", lwd = 2)

# Adicionar a legenda
legend("topleft", legend = c("Evaporação Mínima", "Evaporação Média", "Evaporação Máxima"), 
       col = c("blue", "red", "green"), lty = 1, lwd = 2, pch = 16, 
       bty = "n", cex = 0.8, text.col = "black")

# Adicionar a grade para facilitar a leitura
grid(col = "gray", lty = "dotted")

#___________________________________________________________________________________________
#Normalizado


# Selecionar as colunas de evaporação "Evap.Men.1." até "Evap.Men.12."
evaporacao <- df[, paste0("Evap.Men..", 1:12, ".")]

# Remover linhas com NA nas colunas de evaporação
evaporacao_clean <- na.omit(evaporacao)

# Converter as colunas para numéricas
evaporacao_clean <- as.data.frame(lapply(evaporacao_clean, as.numeric))

# Calcular a evaporação para cada área (mínima, média, máxima) sobre o volume máximo e passando para metros
evaporacao_min <- (evaporacao_clean * area_min* 0.001) / Vol_max
evaporacao_med <- (evaporacao_clean * area_med* 0.001) / Vol_max
evaporacao_max <- (evaporacao_clean * area_max* 0.001) / Vol_max

# Criar uma sequência de meses (1 a 12)
meses <- 1:12

# Plotar o gráfico com as 3 linhas de evaporação para as 3 áreas
plot(meses, evaporacao_min, type = "l", col = "blue", lwd = 2, 
     xlab = "Meses", ylab = "Evaporação p.u.", 
     main = "Evaporação por Mês (Área Min, Média, Máxima)", 
     xlim = c(1, 12), ylim = range(c(evaporacao_min, evaporacao_med, evaporacao_max)), 
     xaxt = "n", col.axis = "darkblue", col.lab = "darkblue")

# Personalizar os valores do eixo X (meses)
axis(1, at = 1:12, labels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", 
                              "Jul", "Ago", "Set", "Out", "Nov", "Dez"), las = 2, col.axis = "darkblue")

# Adicionar as linhas para evaporação média e máxima
lines(meses, evaporacao_med, type = "l", col = "red", lwd = 2)
lines(meses, evaporacao_max, type = "l", col = "green", lwd = 2)

# Adicionar a legenda
legend("topleft", legend = c("Evaporação Mínima", "Evaporação Média", "Evaporação Máxima"), 
       col = c("blue", "red", "green"), lty = 1, lwd = 2, pch = 16, 
       bty = "n", cex = 0.8, text.col = "black")

# Adicionar a grade para facilitar a leitura
grid(col = "gray", lty = "dotted")

4 Sumários estatisticos

4.1 Definição

Os sumarios estatísticos são um resumo dado pelo R, a partir da função summary. As base de dados contém tanto os valores dos dados em sí como uma base para as datas. O valores dos dados estão organizados no dataframe chamado “SOBRADINHO”, menos a geração de energia horária que está com a data que foi retirada o dado (15 de março).

4.2 Sumário da vazão afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
summary(df)
##     datas             SOBRADINHO  
##  Length:9045        Min.   :-997  
##  Class :character   1st Qu.: 770  
##  Mode  :character   Median :1109  
##                     Mean   :1580  
##                     3rd Qu.:2000  
##                     Max.   :7791

Normalizando a vazão alfuente e aplicando utilizando a função summary em R:

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_normalizada)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -0.6310  0.4874  0.7019  1.0000  1.2659  4.9311

4.3 Sumário da vazão natural afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
summary(df)
##     datas             SOBRADINHO   
##  Length:32873       Min.   :  156  
##  Class :character   1st Qu.: 1095  
##  Mode  :character   Median : 1742  
##                     Mean   : 2521  
##                     3rd Qu.: 3422  
##                     Max.   :18525

Normalizando a vazão natural afluente e aplicando utilizando a função summary em R:

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_normalizada)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.06189 0.43443 0.69112 1.00000 1.35765 7.34965

4.4 Sumário da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
summary(df)
##     datas             SOBRADINHO     
##  Length:9046        Min.   :   0.00  
##  Class :character   1st Qu.:   0.00  
##  Mode  :character   Median :   0.00  
##                     Mean   :  27.28  
##                     3rd Qu.:   0.00  
##                     Max.   :3590.00

Normalizando a vazão vertida e desconsiderando os zeros para analise, tem-se

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
dados_filt_normal<-dados_filtrados/mean(dados_filtrados)
summary(dados_filt_normal)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.001913 0.516883 0.827683 1.000000 1.425613 3.433138

4.5 Sumário da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
summary(df)
##     datas             SOBRADINHO  
##  Length:9046        Min.   : 551  
##  Class :character   1st Qu.:1099  
##  Mode  :character   Median :1435  
##                     Mean   :1559  
##                     3rd Qu.:1975  
##                     Max.   :6098

Normalizando a vazão defluente e aplicando utilizando a função summary em R:

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_afluente_defluente <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_defluente)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.3535  0.7050  0.9206  1.0000  1.2670  3.9120

4.6 Sumário do nível de montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
summary(df)
##    SOBRADINHO       datas          
##  Min.   :380.8   Length:9046       
##  1st Qu.:385.6   Class :character  
##  Median :388.1   Mode  :character  
##  Mean   :387.8                     
##  3rd Qu.:390.2                     
##  Max.   :392.6

Normalizando o nível do montante diário pela cota máxima (392,5 metros):

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5
nivel <- df$SOBRADINHO / maximo
summary(nivel)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9702  0.9825  0.9888  0.9881  0.9941  1.0003

4.7 Sumário da geração de energia horária

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
summary(df)
##   X15.de.marco  
##  Min.   :405.0  
##  1st Qu.:408.8  
##  Median :411.0  
##  Mean   :410.8  
##  3rd Qu.:412.2  
##  Max.   :416.0

A geração de energia horária foi normalizada pelo seu valor máximo e posteriormente aplicado a função summary no R.

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<- max(df$X15.de.marco)
normal<-df$X15.de.marco/maximo
summary(normal)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9736  0.9826  0.9880  0.9875  0.9910  1.0000

4.8 Sumário do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
summary(df)
##    SOBRADINHO        datas          
##  Min.   :  1.00   Length:9046       
##  1st Qu.: 27.70   Class :character  
##  Median : 48.00   Mode  :character  
##  Mean   : 49.51                     
##  3rd Qu.: 70.40                     
##  Max.   :101.50

O volume útil diário, como foi dado em porcentagem, basta dividir 100 para encontrar o valor em p.u:

maximo <- 100
nivel <- df$SOBRADINHO / maximo
summary(nivel)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0100  0.2770  0.4800  0.4951  0.7040  1.0150

4.9 Sumário da energia natural afluente bruta do subsitema nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
summary(df)
##     datas             SOBRADINHO   
##  Length:9046        Min.   :  618  
##  Class :character   1st Qu.: 2172  
##  Mode  :character   Median : 3569  
##                     Mean   : 5508  
##                     3rd Qu.: 7310  
##                     Max.   :33141

A energia natural afluente bruta do subsistema nordeste foi normalizada considerando o valor máximo:

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
summary(nivel)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01865 0.06555 0.10769 0.16620 0.22056 1.00000

4.10 Sumário estatístico da Energia armazenada diária do subsitema nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
summary(df)
##     datas             SOBRADINHO   
##  Length:9046        Min.   : 1641  
##  Class :character   1st Qu.:12336  
##  Mode  :character   Median :19692  
##                     Mean   :19694  
##                     3rd Qu.:27248  
##                     Max.   :37635

A Energia armazenada diária do subsitema nordeste foi normalizada considerando o valor máximo:

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
summary(nivel)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0436  0.3278  0.5232  0.5233  0.7240  1.0000

4.11 Sumário do custo marginal de operação

setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
summary(df)
##     datas             SOBRADINHO     
##  Length:1032        Min.   :   0.00  
##  Class :character   1st Qu.:  13.25  
##  Mode  :character   Median :  96.67  
##                     Mean   : 184.61  
##                     3rd Qu.: 229.77  
##                     Max.   :3044.45

5 Histogramas das séries

5.1 histograma da vazão afluente

setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão afluente", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

A vazão afluente foi normalizada pela média, como mostra o resultado a seguir do seu histograma:

setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

hist_data <- hist(vazao_afluente_normalizada,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão afluente normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Por fim, foi aplicado o log nos valores normalizados

#Histograma com Log
setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
## Warning in log(normal): NaNs produzidos
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão afluente normalizado com log aplicado", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Os histogramas apresentam uma concentração significativa de valores nas faixas mais baixas, próximas de 0 a 2000 m³/s, e uma “cauda” (Valores dispersos do conjunto que formam algo similiar a uma calda) longa para os valores mais elevados, acima de 2000 m³/s. Como a calda é maior no sentido positivo, observa-se que há uma tendência maior para extremos relacionados a enchentes, chuvas fortes do que secas. O que não significa que sejam os piores cenários para o sistema. Ao aplicar o logaritmo na vazão normalizada, a distribuição torna-se mais simétrica, aproximando-se de uma distribuição normal. O histograma log-normalizado revela que a maior parte dos valores se concentra entre -1 e 0, indicando que os valores estam concentrados abaixo da média, apesar de que os maiores outliers serem positivos, e ainda o valor de maior proporção está em torno de (-0,5) no gráfico com log.

5.2 histograma da vazão natural afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 130)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão natural afluente", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

# histograma da vazão natural afluente
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão natural afluente", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

A vazão natural afluente foi normalizada pela média, como mostra o resultado a seguir do seu histograma:

setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

hist_data <- hist(vazao_afluente_normalizada,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão natural afluente normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Por fim, foi aplicado o log nos valores normalizados

#Histograma com Log
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão natural afluente com log aplicado", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

5.3 histograma da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
#Fazer um histograma sem normalização
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)



n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma vazão vertida", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

A vazão vertida por ter muitos zeros, foi feita duas vezes desconsiderando os zeros:

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
hist_data <- hist(dados_filtrados,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)



n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n



# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma vazão vertida desconsiderando o zero", 
     xlab = "[m³/s]", ylab = "Proporção")

Normalizou-se a Vazão vertida pela média:

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

hist_data <- hist(vazao_afluente_normalizada,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de vazão vertida normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Desconsiderando os zeros tem-se:

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
hist_data <- hist(dados_filtrados/mean(dados_filtrados),
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)



n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n



# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma vazão vertida normalizada desconsiderando o zero", 
     xlab = "p.u.", ylab = "Proporção")

Com isso, aplicou-se o log na normalizada desconsiderando o log:

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
log <- log(dados_filtrados/mean(dados_filtrados))
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)



n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n



# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma vazão vertida normalizada  com log", 
     xlab = "p.u.", ylab = "Proporção")

5.4 histograma da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão defluente", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

Normalizou-se a Vazão defluente pela média:

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

hist_data <- hist(vazao_afluente_normalizada,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão defluente normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Com isso aplicou-se o log:

#Histograma com Log
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma de Vazão defluente normalizado com log aplicado", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

5.5 histograma do nível do montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma do nível de montante diário", 
     xlab = "[m]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

Normalizou-se o nível do montante diário pela cota máxima da usina, retirado do Hidr.xls.

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5

nivel <- df$SOBRADINHO / maximo

hist_data <- hist(nivel,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma do nível de montante diário normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Aplicando o log:

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5
normal<-df$SOBRADINHO/maximo
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma do nivel de montante normalizado com log", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Observa-se que pela característica da normalização que foi o valor máximo da cota, então o logaritimo não tem mais o zero como um valor central e sim como o limite. Pois o log máximo é 0 (log(1)) e os demais são negativos pois estão entre 0 e 1.

5.6 histograma da geração de energia horária

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")


hist_data <- hist(df$X15.de.marco,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 25)

n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da Geração Horária dia 15/03/24", 
     xlab = "MW", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

A geração de energia horária foi normalizada pelo valor máximo:

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<- max(df$X15.de.marco)

hist_data <- hist(df$X15.de.marco/maximo,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 25)

n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da Geração Horária dia 15/03/24 normalizado", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Com isso, como o valor máximo foi usado para normalizar, o valor máximo no eixo x será 0, pois corresponde ao valor máximo.

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo <- max(df$X15.de.marco)
normal<-df$X15.de.marco/maximo
log <- log(normal)
log2 <- log[!is.na(log)]

hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 25)

n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Geração horáia normalizado com log aplicado", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

5.7 histograma do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma do volume útil diário", 
     xlab = "%", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

O volume útil já veio em porcentagem, logo para passa-lo para p.u. basta dividir por 100:

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
maximo <- 100

nivel <- df$SOBRADINHO / maximo

hist_data <- hist(nivel,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma do volume útil diário normalizada", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Aplicando o log:

normal<-df$SOBRADINHO/100
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma volume útil normalizado normalizado com log", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Observa-se que pela característica da normalização que foi 100% o logaritimo não tem mais o zero como um valor central e sim como o limite. Pois o log máximo é 0 (log(1)) e os demais são negativos pois estão entre 0 e 1.

5.8 Histograma da energia natural afluente bruta do subsistema nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da energia natural afluente bruta do subsistema nordeste", 
     xlab = "MWm", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

A normalização da energia natural afluente bruta do subsistema nordeste foi feita a partir do valor máximo da mesma.

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo <- max(df$SOBRADINHO)

nivel <- df$SOBRADINHO / maximo

hist_data <- hist(nivel,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "energia natural afluente bruta do subsistema nordeste normalizado", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

Como em alguns casos anteriores, ao aplicar o log o valor mais a direita no eixo x do histograma será 0 e corresponde ao valor máximo.

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")

normal<-df$SOBRADINHO/max(df$SOBRADINHO)
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "log da energia natural afluente bruta do subsistema", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

5.9 Histograma da energia armazenada diária no subsitema Nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da energia armazenada diária no subsitema nordeste", 
     xlab = "GWh", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

A normalização da energia armazenada diária do subsistema nordeste foi feita a partir do valor máximo da mesma.

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo <- max(df$SOBRADINHO)

nivel <- df$SOBRADINHO / maximo

hist_data <- hist(nivel,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "energia armazenada diária do subsistema nordeste normalizado", 
     xlab = "p.u.", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

O mesmo que o caso que a energia natural afluente bruta do subsistema nordeste ocorre ao logaritimizar:

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")

normal<-df$SOBRADINHO/max(df$SOBRADINHO)
log <- log(normal)
log2 <- log[!is.na(log)]



hist_data <- hist(log2,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "log da energia armazenada diária do subsistema", 
     xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
## Warning in plot.window(...): "color" não é um parâmetro gráfico
## Warning in plot.xy(xy, type, ...): "color" não é um parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in axis(side = side, at = at, labels = labels, ...): "color" não é um
## parâmetro gráfico
## Warning in box(...): "color" não é um parâmetro gráfico
## Warning in title(...): "color" não é um parâmetro gráfico
axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  

5.10 Histograma do custo marginal de operação

setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
# Substituir os meses abreviados por seu número correspondente
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)

# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)


# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")

# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")



hist_data <- hist(df$SOBRADINHO,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 150)

n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Custo marginal de operação semanal do subsitema nordeste", 
     xlab = "custo marginal (R$)", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1)  # Coloca o texto na horizontal

O custo marginal de operação não foi normalizada.

6 Bloxplot das séries

Nas séries, foi desenhado além dos item citados no capítulo de bloxplot, também foi feito uma linha pontilhada vermelha que coincide com a média.

As séries são normalizadas da mesma forma que o sumário estatístico e os histrogramas. Posteriormente, aplicou-se a função logo em cada série.

6.1 Bloxplot da vazão afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
#Boxplot sem normalização
boxplot(df$SOBRADINHO, 
        main = "Box Plot de Vazão afluente [m³/s]",    # Título do gráfico
        ylab = "[m³/s]",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)  # linha da média

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
boxplot(normal, 
        main = "Box Plot de Vazão afluente ",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(normal), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media

log <- log(normal)
## Warning in log(normal): NaNs produzidos
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Box Plot da Vazão afluente log normalizada",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

Como esperado por conta da análise dos histogramas, a linha vermelha (média) está posicionada acima da mediana. Idicando a forte influência dos outliers no calculo da média e que valores extremos são majoritariamente positivo. Após a transformação logarítmica, a média está mais próxima da mediana, indicando uma redução significativa da assimetria nos dados. Os outliers negativos no gráfico do log indicam a grande influência dos extremos no cálculo da média, fazendo com que não haja outliers positivos e sim negativos nesse gráfico.

6.2 Bloxplot da vazão natural afluente:

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
boxplot(df$SOBRADINHO, 
        main = "Box Plot de Vazão natural afluente [m³/s]",    # Título do gráfico
        ylab = "[m³/s]",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2) 

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
boxplot(normal, 
        main = "Box Plot de Vazão natural afluente ",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(normal), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
summary(normal)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.06189 0.43443 0.69112 1.00000 1.35765 7.34965
log <- log(normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Box Plot da Vazão natural afluente log normalizada",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

6.3 Bloxplot da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
boxplot(df$SOBRADINHO, 
        main = "Box Plot de Vazão afluente [m³/s]",    # Título do gráfico
        ylab = "[m³/s]",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)  # linha da média

A vazão vertida por ter muitos zeros, foi feita duas vezes desconsiderando os zeros:

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
boxplot(dados_filtrados, 
        main = "Box Plot de Vazão Vertida (sem zeros)",    
        ylab = "Valores (m³/s)",                       
        col = "lightblue",                      
        border = "black")                       


abline(h = mean(dados_filtrados), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
mlt<-mean(df$SOBRADINHO)
vazao_vertida_numerico_mlt<-df$SOBRADINHO/mlt
boxplot(vazao_vertida_numerico_mlt, 
        main = "Box Plot de Vazão Vertida ",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

abline(h = mean(vazao_vertida_numerico_mlt), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]

mlt<-mean(dados_filtrados)
df_normal<-dados_filtrados/mlt
summary(df_normal)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.001913 0.516883 0.827683 1.000000 1.425613 3.433138
log <- log(df_normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
      main = "Box Plot de Vazão vertida com log",    
      ylab = "log",                       
      col = "lightblue",                      
      border = "black")                       
abline(h = mean(log2), col = "red", lwd = 2, lty = 2)

6.4 Bloxplot da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
boxplot(df$SOBRADINHO, 
      main = "Box Plot de Vazão defluente",    
      ylab = "[m³/s]",                       
      col = "lightblue",                      
      border = "black")                       
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)

media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media


boxplot(normal, 
        main = "Box Plot de Vazão defluente normalizada ",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media

log <- log(normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Box Plot de Vazão defluente normalizada com log aplicado",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

6.5 Bloxplot do nível de montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
boxplot(df$SOBRADINHO, 
        main = "Boxplot do nível de montante diário",   
        ylab = "(m)",                       
        col = "lightblue",                      
        border = "black")                      


abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2) 

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo<-392.5
df_normal<-df$SOBRADINHO/maximo
boxplot(df_normal, 
        main = "Box Plot do nível de montante diario normalizado",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

media_log <- log(mean(df_normal, na.rm = TRUE))

# Adicionar uma linha horizontal na média logarítmica
abline(h = media_log, col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo<-392.5
df_normal<-df$SOBRADINHO/maximo


log <- log(df_normal)
log2 <- log[!is.na(log)]
boxplot(log2, 
        main = "Box Plot do nível de montante diario com log aplicado",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

media_log <- log(mean(df_normal, na.rm = TRUE))

# Adicionar uma linha horizontal na média logarítmica
abline(h = media_log, col = "red", lwd = 2, lty = 2)

6.6 Bloxplot da geração de energia horária

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
boxplot(df$X15.de.marco, 
        main = "Boxplot Geração Horária dia 15/03/24",    # Título do gráfico
        ylab = "MW",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(df$X15.de.marco), col = "red", lwd = 2, lty = 2) 

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<-1050.3
df_normal<-df/maximo


boxplot(df$X15.de.marco/maximo, 
        main = "Boxplot normalizado Geração Horária dia 15/03/24",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

abline(h = mean(df$X15.de.marco/maximo), col = "red", lwd = 2, lty = 2)  # linha da média

setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<-1050.3
df_normal<-df/maximo
log <- log(df_normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Boxplot com log da Geração Horária dia 15/03/24",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

abline(h = mean(df$X15.de.marco/maximo), col = "red", lwd = 2, lty = 2)  # linha da média

6.7 Bloxplot do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
boxplot(df$SOBRADINHO, 
        main = "Boxplot do volume útil",    # Título do gráfico
        ylab = "%",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2) 

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
cem_porcento<-100
df_normal<-df$SOBRADINHO/cem_porcento
boxplot(df_normal, 
        main = "Boxplot normalizado volume util diario normalizado",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box

abline(h = mean(df$SOBRADINHO/cem_porcento), col = "red", lwd = 2, lty = 2)  # linha da média

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
x<-df$SOBRADINHO/100

log <- log(x)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Box Plot do volume util diario log normalizada",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(log2), col = "red", lwd = 2, lty = 2)

6.8 Bloxplot da energia natural afluente bruta do subsitema nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
boxplot(df$SOBRADINHO, 
        main = "Box Plot da Energia Natural Afluente Bruta do subsistema Nordeste MWm",    # Título do gráfico
        ylab = "[MWm]",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maxi<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maxi

boxplot(normal, 
        main = "Box Plot Energia Natural Afluente Bruta do subsistema em p.u",    # Título do gráfico
        ylab = "p.u.",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(normal), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maximo

log <- log(normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "Box Plot do log da energia natural afluente bruta do subsistema ",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

6.9 Bloxplot estatístico da Energia armazenada diária do subsitema nordeste

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
boxplot(df$SOBRADINHO, 
        main = "BoxPlot da Energia armazenada diária no subsistema Nordeste",    # Título do gráfico
        ylab = "GWh",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maxi<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maxi

boxplot(normal, 
        main = "Energia armazenada diária no subsistema Nordeste p.u",    # Título do gráfico
        ylab = "p.u",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(normal), col = "red", lwd = 2, lty = 2)

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maximo

log <- log(normal)
log2 <- log[!is.na(log)]

boxplot(log2, 
        main = "log Energia armazenada diária no subsistema",    # Título do gráfico
        ylab = "log",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)

6.10 Bloxplot do custo marginal de operação

setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)

# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)

# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")

# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")

boxplot(df$SOBRADINHO, 
        main = "Boxplot custo marginal",    # Título do gráfico
        ylab = "custo marginal (R$)",                       
        col = "lightblue",                      # Cor do box
        border = "black")                       # Cor da borda do box


abline(h = mean(df$m), col = "red", lwd = 2, lty = 2)
## Warning in mean.default(df$m): argumento não é numérico nem lógico: retornando
## NA

7 Séries temporais

7.1 Série temporal da vazão afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
library(xts)
## Warning: pacote 'xts' foi compilado no R versão 4.4.2
## Carregando pacotes exigidos: zoo
## 
## Anexando pacote: 'zoo'
## Os seguintes objetos são mascarados por 'package:base':
## 
##     as.Date, as.Date.numeric
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Série Temporal - Vazão afluente Sobradinho",
     xlab = "Data", ylab = "[m³/s] ")
grid()

7.2 Série temporal da vazão natural afluente

Para a série temporal da natural afluente, dividiu-se em 3 periodos iguais como segue a baixo

library(xts)
library(zoo)  # Para agregação de dados


setwd("C:/Geracao")


df <- read.csv2("vazao_natural_afluente.csv")

# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)

# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
## NOTE: `apply.monthly(..., FUN = mean)` operates by column, unlike other math
##   functions (e.g. median, sum, var, sd). Please use `FUN = colMeans` instead,
##   and use `FUN = function(x) mean(x)` to take the mean of all columns. Set
##   `options(xts.message.period.apply.mean = FALSE)` to suppress this message.
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]



# Gráfico 1: 1931 a 1960
plot(serie1, type = "l", col = "blue",
     main = "Vazão natural afluente Sobradinho (1931-1960)",
     xlab = "Data", ylab = "[m³/s]")
grid()

library(xts)
library(zoo)  # Para agregação de dados

setwd("C:/Geracao")

df <- read.csv2("vazao_natural_afluente.csv")

# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)

# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
## NOTE: `apply.monthly(..., FUN = mean)` operates by column, unlike other math
##   functions (e.g. median, sum, var, sd). Please use `FUN = colMeans` instead,
##   and use `FUN = function(x) mean(x)` to take the mean of all columns. Set
##   `options(xts.message.period.apply.mean = FALSE)` to suppress this message.
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]



# Gráfico 2: 1961-1990
plot(serie2, type = "l", col = "blue",
     main = "Vazão natural afluente Sobradinho (1961-1990)",
     xlab = "Data", ylab = "[m³/s]")
grid()

library(xts)
library(zoo)  # Para agregação de dados

setwd("C:/Geracao")

df <- read.csv2("vazao_natural_afluente.csv")

# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)

# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
## NOTE: `apply.monthly(..., FUN = mean)` operates by column, unlike other math
##   functions (e.g. median, sum, var, sd). Please use `FUN = colMeans` instead,
##   and use `FUN = function(x) mean(x)` to take the mean of all columns. Set
##   `options(xts.message.period.apply.mean = FALSE)` to suppress this message.
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]



# Gráfico 2: 1961-1990
plot(serie3, type = "l", col = "blue",
     main = "Vazão natural afluente Sobradinho (1991-2020)",
     xlab = "Data", ylab = "[m³/s]")
grid()

7.3 Série temporal da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Série Temporal - vazão vertida Sobradinho",
     xlab = "Data", ylab = "[m³/s] ")
grid()

7.4 Série temporal da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Série Temporal - vazão defluente Sobradinho",
     xlab = "Data", ylab = "[m³/s] ")
grid()

7.5 Série temporal do nível de montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Nível de montante Sobradinho",
     xlab = "Data", ylab = "[m] ")
grid()

7.6 Série temporal da geração de energia horária

# Criar o vetor de horas
# Criar o vetor de horas para um único dia
hora <- seq(from = as.POSIXct("2024-11-22 00:00"), 
            to = as.POSIXct("2024-11-22 23:00"), 
            by = "hour")


setwd("C:/Geracao")

df <- read.csv2("geracao_horaria.csv")

# Verifique o nome correto da coluna com os dados (exemplo: "Sobradinho")
serie_temporal <- xts(df$X15.de.marco, order.by = hora)

# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Geração de energia horária Sobradinho",
     xlab = "Horas", ylab = "MW")
grid()

7.7 Série temporal do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Série Temporal - vazão defluente Sobradinho",
     xlab = "Data", ylab = "%")
grid()

7.8 Série temporal da Energia natural afluente bruta do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")


library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Energia natural afluente bruta do subsitema",
     xlab = "Data", ylab = "MWm")
grid()

7.9 Série temporal Energia armazenada diária do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")

library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "Energia armazenada diária do subsitema",
     xlab = "Data", ylab = "GWh")
grid()

7.10 Série temporal do custo marginal de operação

setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)

# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)

# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")

# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")

library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)


# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
     main = "custo marginal de operação",
     xlab = "Data", ylab = "R$")
grid()

8 Boxplot anuais

Os boxplots anuais são valores que permitem analisar tdas as informações de um boxplot, como já discutido, mas co os valores organizados de forma anual. Para meios de comparação, os valores forma analisados em p.u.

8.1 Bloxplot anual da vazão afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
library(dplyr)
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:xts':
## 
##     first, last
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores Anuais vazão afluente Sobradinho", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.2 Boxplot anual da vazão natural afluente

Assim como para o caso de série temporal, foi divido em 3 partes iguais.

setwd("C:/Geracao")

df <- read.csv2("vazao_natural_afluente.csv")
# Box plot com intervalos de 30 anos separados
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media <- mean(df$SOBRADINHO)

# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = as.numeric(format(datas, "%Y")))  # Extrair o ano como número

# Criar subsets para cada intervalo de 30 anos
df_1931_1960 <- df %>% filter(ano >= 1931 & ano <= 1960)
df_1961_1990 <- df %>% filter(ano >= 1961 & ano <= 1990)
df_1991_2020 <- df %>% filter(ano >= 1991 & ano <= 2020)

# Criar os boxplots para cada intervalo
boxplot_1931_1960 <- ggplot(df_1931_1960, aes(x = factor(ano), y = SOBRADINHO / media)) +
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores de vazao natural afluente (1931-1960)", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

boxplot_1961_1990 <- ggplot(df_1961_1990, aes(x = factor(ano), y = SOBRADINHO / media)) +
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores de vazao natural afluente (1961-1990)", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

boxplot_1991_2020 <- ggplot(df_1991_2020, aes(x = factor(ano), y = SOBRADINHO / media)) +
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores de vazao natural afluente (1991-2020)", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Exibir os gráficos
print(boxplot_1931_1960)

print(boxplot_1961_1990)

print(boxplot_1991_2020)

8.3 Bloxplot anual da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores Anuais vazão vertida Sobradinho", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.4 Bloxplot anual da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores Anuais vazão defluente Sobradinho", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.5 Bloxplot anual do nível de montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores Anuais vazão nivel do montante diario", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

## Bloxplot anual do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")

library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-100
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot dos Valores Anuais volume útil diário", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.6 Bloxplot anual da Energia natural afluente bruta do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Energia natural afluente bruta do subsitema", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.7 Bloxplot anual da Energia armazenada diária do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot Anual Energia armazenada diária do subsitema", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

8.8 Bloxplot anual do custo marginal de operação

setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)

# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)

# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")

# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")
library(dplyr)
library(ggplot2)

# Converter a coluna de datas para o formato Date, caso ainda não esteja

# Adicionar a coluna de ano
df <- df %>%
  mutate(ano = format(datas, "%y"))  # Extrair o ano como texto

# Criar o boxplot dos valores anuais

ggplot(df, aes(x = factor(ano), y = SOBRADINHO)) +  # Usar o ano como eixo x
  geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
  labs(title = "Boxplot Anual custo marginal de operação", x = "Ano", y = "Vazão p.u.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajusta o texto do eixo x

9 Gráfico de persistência da série da vazão natural afluente

Utilizou-se a vazão natural afluente normalizada e posteriormente utilizou-se a função percentil para se obter o gráfico de persistência. Com isso, foi possível percerber em quantas turbinas poderam atuar em conjunto. Isso é dado pelas linhas verticais que representam as vazões correspondentes ao engolimento das turbinas (Q1 a Q6), destacadas nos percentis associados. Percentil no eixo x: Representa a frequência relativa acumulada da vazão ao longo do tempo, do maior (100º percentil) ao menor (0º percentil). Percentis mais altos indicam situações de maior disponibilidade de água.

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")

# Vazão das turbinas (cada turbina tem 710 m³/s)
vazao_turbina <- 710 / mean(df$SOBRADINHO)

# Calculo das vazões para diferentes números de turbinas ligadas (Q1, Q2, ..., Q6)
turbinas <- 1:6
vazao_turbinas <- turbinas * vazao_turbina

vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

# Calculo dos percentis
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))


# Definir cores para as turbinas
cores_turbinas <- c("red", "green", "blue", "purple", "orange", "brown")  # Cores para Q1 a Q6

percentis_turbinas <- sapply(vazao_turbinas, function(vazao) {
  which.min(abs(percentis - vazao))  # Encontra o índice do percentil mais próximo da vazão
})

# Gráfico de persistência para média, mediana e percentis
plot(seq(100, 0, -1), percentis, type = "l", 
     xlab = "Percentil", ylab = "Vazão Normalizada", 
     main = "Persistência da Vazão Natural Afluente Normalizada - Turbinas", 
     col = "blue", lwd = 2)
grid()

# Destacando as vazões das turbinas com linhas verticais
for(i in 1:6) {
  abline(v = 100 - percentis_turbinas[i], col = cores_turbinas[i], lty = 3,lwd = 2)  # Linhas verticais para Q1, Q2, ..., Q6
}

# Adicionando a legenda ao gráfico
legend("topright",
       legend = c(paste("Q", 1:6, sep = "")),
       col = cores_turbinas, 
       lty = rep(3, 6),  # Linhas com estilo 3 para as turbinas
       cex = 0.8, 
       box.lwd = 1,   # Ajustar a espessura da borda da caixa da legenda
       bg = "white",  # Fundo branco para a legenda
       inset = 0.05)

A interpretação do gráfico pode ser dada que em mais de 90% do tempo é possível operar com ao menos 1 turbina com sua vazão nominal. Quanto mais turbinas operam em conjunto, mais as linhas verticais se aproximam.

Por fim, Colocou as linhas verticais indicando a média, mediana e o percentil, assim como a energia assegurada. Onde a energia assegurada foi dada pelas seguintes formulas: \[ Energia_{assegurada} = \frac{457.5}{k \cdot Q_{max} \cdot \Delta H} \tag{5} \] Onde na Equação 5: - 457.5 é a Garantia física (MWm) da usina de sobradinho; -k é o fator de produtibilidade específico [MW.s/m4]; - Delta H representa uma variação entre a altura e o canal de fuga que não representa energia.

É possível obter uma energia assegurada máxima (considerando a variação de H mínima) e uma energia assegurada mínima (considerando a variação de H máxima). Sempre diminuido pelo do canal de fuga (362,5 metros) na altura.

# Definir a codificação para UTF-8
#Sys.setlocale("LC_CTYPE", "pt_BR.UTF-8")

# Carregar o arquivo CSV
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")

# Grafico de persistência para média, mediana e percentis
vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

# Calcular os percentis e a média da série normalizada
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))
media <- 1  # Como a série foi normalizada pela média, a média será 1
mediana <- median(vazao_normalizada)
percentil_5 <- quantile(vazao_normalizada, 0.05)
percentil_95 <- quantile(vazao_normalizada, 0.95)

# Definir parâmetros adicionais
k = 0.009023 
Qmax = 7791 
canal_fuga = 362.5 # Dado do Hidri
Hmax = 392.5 - canal_fuga   # Delta H máximo
Hmin = 380.5 - canal_fuga   # Delta H mínimo
Energia_assegurada_minima = 457.5 / (k * Qmax * Hmax) # Garantia física (MWm)/(k*Hmax*Qmax), como é o inverso da altura, para altura máxima tem-se a assegurada mínima
Energia_assegurada_maxima = 457.5 / (k * Qmax * Hmin)

# Definir cores para a média, mediana, percentis
cores_referencia <- c("red", "green", "purple", "orange", "blue", "brown")  # Cores para Média, Mediana, P5, P95

dados<-c(media,mediana,percentil_5,percentil_95,Energia_assegurada_minima,Energia_assegurada_maxima)

percentis_dados <- sapply(dados, function(vazao) {
  which.min(abs(percentis - vazao))  # Encontra o índice do percentil mais próximo da vazão
})




# Plotando o gráfico de persistência (vazão normalizada)
plot(seq(100, 0, -1), percentis, type = "l", 
     xlab = "Percentil", ylab = "Vazão Normalizada", 
     main = enc2utf8("Persistência da Vazão Natural Afluente Normalizada"),  # Usando enc2utf8 para garantir a codificação correta
     col = "blue", lwd = 2)
grid()


# Destacando os valores de média, mediana, percentis
abline(v = 100-percentis_dados[1], col = cores_referencia[1], lty = 2,lwd = 2)  # Linha da média
abline(v = 100-percentis_dados[2], col = cores_referencia[2], lty = 2,lwd = 2)  # Linha da mediana
abline(v = 100-percentis_dados[3], col = cores_referencia[3], lty = 2,lwd = 2)  # Linha do percentil 5%
abline(v = 100-percentis_dados[4], col = cores_referencia[4], lty = 2,lwd = 2)  # Linha do percentil 95%
abline(v = 100-percentis_dados[5], col = cores_referencia[5], lty = 2,lwd = 2)  # Linha da energia assegurada máxima
abline(v = 100-percentis_dados[6], col = cores_referencia[6], lty = 2,lwd = 2)  # Linha da energia assegurada mínima

# Adicionando a legenda ao gráfico
legend("topright", 
       legend = c("Média", "Mediana", "Percentil 5%", "Percentil 95%", "Energia assegurada máxima", "Energia assegurada mínima"), 
       col = cores_referencia, 
       lty = c(2, 2, 2, 2),  # Linha com estilo 2 para as referências
       cex = 0.8, 
       box.lwd = 1,   # Ajustar a espessura da borda da caixa da legenda
       bg = "white",  # Fundo branco para a legenda
       inset = 0.05) 

9.1 Persistência da energia realmente gerada

Para comparar a energia realmente gerada, foram feitos as seguintes considerações: Como tem-se a vazão natural afluente na usina em p.u., para transformar em energia, basta multiplicar pelo fator de produtibilidade específico [MW.s/m4] e pela variação de altura. Já que a energia em p.u. não depende mais do tempo por conta da normalização. A outra consideração foi considerar os valores de 01/01/2000, para se ter uma amostragem de dados igual para comparação. Com isso, a energia gerada a partir de um valor de vazão em p.u é dada pela Equação 6.

\[ Energia_{gerada} = {k \cdot Q \cdot \Delta H} \tag{5} \]

setwd("C:/Geracao")
energia<- read.csv2("energia_gerada.csv")

setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")

#Item 6 energia a partir da persistência da vazão natural afluente normalizada
k=0.009023 
Qmax=7791 
canal_fuga=362.5 #Dado do Hidri
Hmax=392.5- canal_fuga   #Delta H máximo
Hmin=380.5- canal_fuga   #Delta H mínimo

# Filtrar os dados entre 01/01/2020 e 31/12/2020
df_2020 <- subset(df, datas >= as.Date("01/01/2000") & datas <= as.Date("31/12/2020"))
energia_2020 <- subset(energia, datas >= as.Date("01/01/2000") & datas <= as.Date("31/12/2020"))


# Normalizar a vazão apenas para o período selecionado
vazao_2020 <- df_2020$SOBRADINHO 
vazao_normalizada_2020<-vazao_2020/mean(vazao_2020)
summary(vazao_normalizada_2020)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.06199 0.43471 0.69060 1.00000 1.35696 7.36098
# Calcular os percentis e a média da série normalizada
percentis_max <- quantile((vazao_2020*k*Hmax), probs = seq(0, 1, 0.01))
percentis_min<- quantile((vazao_2020*k*Hmin), probs = seq(0, 1, 0.01))

energia_2020 <- energia_2020$SOBRADINHO 
summary(energia_2020)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   102.0   231.0   327.0   352.7   462.0  1035.0
percentis_energia <- quantile(energia_2020, probs = seq(0, 1, 0.01))


summary(percentis_energia)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   102.0   231.0   327.0   354.9   462.0  1035.0
summary(percentis_max)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   42.23  296.13  470.46  705.76  924.41 5014.53
summary(percentis_energia)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   102.0   231.0   327.0   354.9   462.0  1035.0
# Plotar as duas curvas no gráfico
plot(seq(100, 0, -1), percentis_max, type = "l", 
     xlab = "Percentil", ylab = "Energia (MWm)", 
     main = "energia realmente gerada x energia da persistência", 
     col = "blue", lwd = 2, las = 1)
lines(seq(100, 0, -1), percentis_min, col = "red", lwd = 2) # Adicionar a segunda curva
lines(seq(100, 0, -1), percentis_energia, col = "green", lwd = 2)
grid()

legend("topright", legend = c("Percentis Máximos", "Percentis Mínimos", 'Energia realmente gerada'), 
       col = c("blue", "red","green"), lwd = 2)

Os percentis mínimos e máximos representam a energia gerada para uma determinada variação de altura.

A grande diferença é nítida pois está considerando que toda a vazão natural afluente está produzindo energia. Por isso que a energia realmente gerada não se encontra integralmente dentro dos limites de máximos e mínimos.

10 Adição de uma nova máquina

setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
#Grafico de persistÊncia para as turbinas
# Vazão das turbinas (cada turbina tem 710 m³/s)
vazao_turbina <- 710 / mean(df$SOBRADINHO)

# Calcular as vazões para diferentes números de turbinas ligadas (Q1, Q2, ..., Q6)
turbinas <- 1:7
vazao_turbinas <- turbinas * vazao_turbina
#Grafico de persistÊncia para media, mediana e percentis
vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)

# Calcular os percentis e a média da série normalizada
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))


# Definir cores para as turbinas
cores_turbinas <- c("red", "green", "blue", "purple", "orange", "brown","black")  # Cores para Q1 a Q7

percentis_turbinas <- sapply(vazao_turbinas, function(vazao) {
  which.min(abs(percentis - vazao))  # Encontra o índice do percentil mais próximo da vazão
})

# Gráfico de persistência para média, mediana e percentis
plot(seq(100, 0, -1), percentis, type = "l", 
     xlab = "Percentil", ylab = "Vazão Normalizada", 
     main = "Adição de uma turbina", 
     col = "blue", lwd = 2)
grid()

# Destacando as vazões das turbinas com linhas verticais
for(i in 1:7) {
  abline(v = 100 - percentis_turbinas[i], col = cores_turbinas[i], lty = 3, lwd = 2)  # Linhas verticais para Q1, Q2, ..., Q6
}

# Adicionando a legenda ao gráfico
legend("topright", 
       legend = c(paste("Q", 1:7, sep = "")),
       col = cores_turbinas, 
       lty = rep(3, 6),  # Linhas com estilo 3 para as turbinas
       cex = 0.8, 
       box.lwd = 1,   # Ajustar a espessura da borda da caixa da legenda
       bg = "white",  # Fundo branco para a legenda
       inset = 0.05)

Observa-se que o percentual para turbina 7 é muito, representando assim um ganho muito baixo de energia. Isso é possivel a partir da função decompose no R.

10.1 Componentes de tendência, sazonal e randômica das séries

11 Componentes de tendência, sazonal e randômica da vazão afluente

setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
# Componentes de tendência, sazonal e randômica

vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.1 Componentes de tendência, sazonal e randômica da vazão natural afluente

setwd("C:/Geracao")

df <- read.csv2("vazao_natural_afluente.csv")

vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(1931, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.2 Componentes de tendência, sazonal e randômica da vazão vertida

setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(1931, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.3 Componentes de tendência, sazonal e randômica da vazão defluente

setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.4 Componentes de tendência, sazonal e randômica de montante diário

setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.5 Componentes de tendência, sazonal e randômica do volume útil diário

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
vazao_ts <- ts(df$SOBRADINHO/100, start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.6 Componentes de tendência, sazonal e randômica da Energia natural afluente bruta do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")

vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

11.7 Componentes de tendência, sazonal e randômica da Energia armazenada diária do subsitema

setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)

# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")

# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

12 Série de temporal de média móvel da vazão natural afluente

Para a vazão natural afluente, foi realizado a média móvel de 12 meses, a fim de realizar as seguintes analises:

  • O sumário estatístico;

  • A autocorrelação;

  • O Histograma;

  • As componentes de tendência, sazonal e randômica.

12.1 Sumário estatísco

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")

library(zoo)

# Certifique-se de que a coluna de datas esteja no formato correto
df$datas <- as.Date(df$datas, format = "%d/%m/%Y") # Ajuste o formato 
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)

# Calcular a média móvel de 12 meses
df$media_movel_12 <- rollmean(df$SOBRADINHO, k = 12, fill = NA, align = "right")
df <- df[!is.na(df$media_movel_12), ]


#Sumario média móvel
summary(df$media_movel_12)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   162.2  1101.8  1759.0  2520.2  3429.2 18228.1

13 Autocorrelação

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
library(zoo)


# Calcular a média móvel para a coluna desejada (por exemplo, "SOBRADINHO")
df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)

# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)

# Ajustar o tamanho da janela de plotagem e o tamanho do título
par(mar = c(5, 4, 4, 2) + 0.1)  # Ajusta as margens do gráfico
acf(media_movel, main = "Autocorrelação - Média Móvel de 12 Meses", las = 1, cex.main = 0.8)  # Ajusta o tamanho do título

Pode-se observar que houve uma grande correlação entre a vazão e os anos seguintes, durante mais de 20 anos, onde a correlação passou a ser menor que 0,8 mas em todos os casos, as linhas ficarão acima da azul, indicando que essas indicações não são fruto

13.1 Histograma

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)



df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)

# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(media_movel,
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 120)

n <- length(media_movel)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da média móvel", 
     xlab = "[m³/s]", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1) 

Normalizado pela média tem-se:

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)



df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)

# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)

# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(media_movel/mean(media_movel),
                  plot = FALSE,   # Não exibe o gráfico automaticamente
                  breaks = 120)

n <- length(media_movel)
frequencia_normalizada <- hist_data$counts / n

# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",  
     lwd = 2, main = "Histograma da média móvel normalizado", 
     xlab = "p.u", ylab = "Proporção", las = 1)

axis(2, 
     at = seq(0, max(frequencia_normalizada)),
     labels = round(seq(0, max(frequencia_normalizada)), 4),
     las = 1) 

13.2 Componentes de tendência, sazonal e randômica

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)

df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Calcular a média móvel mensal
# Vamos usar rollapply para calcular a média móvel de 30 dias (aproximadamente um mês)
df$media_movel_mensal <- rollapply(df$SOBRADINHO, width = 30, FUN = mean, fill = NA, align = "right")

# Agregar os dados para obter a média mensal (somando as médias móveis em cada mês)
df$mes <- format(df$datas, "%Y-%m")  # Criar uma coluna com o mês no formato "yyyy-mm"
df_media_movel_mensal <- aggregate(df$media_movel_mensal, by = list(df$mes), FUN = mean, na.rm = TRUE)

# Renomear as colunas para melhor entendimento
colnames(df_media_movel_mensal) <- c("mes", "media_movel_mensal")

# Criar a série temporal para a média móvel mensal
ts_media_movel_mensal <- ts(df_media_movel_mensal$media_movel_mensal, 
                            start = c(as.numeric(substr(df_media_movel_mensal$mes[1], 1, 4)), 
                                      as.numeric(substr(df_media_movel_mensal$mes[1], 6, 7))),
                            frequency = 12)  # Frequência mensal

# Decompor a série temporal
decomposicao <- decompose(ts_media_movel_mensal, type = "multiplicative")  # Você pode usar "additive" se achar mais adequado


# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomposicao$trend
sazonal <- decomposicao$seasonal
randomico <- decomposicao$random

# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2))  # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)

grid()

14 Variação da Vazão natural afluente normalizada e Armazenamento da usina

Foi realizado o gráfico da variação das seguintes séries:

  • Vazão natural afluente normalizada;

  • Armazenamento da usina em %.

14.1 Vazão natural afluente normalizada

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
#Variação
# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Calcular a variação percentual entre os valores consecutivos d
variacao <- diff(df$SOBRADINHO) / head(df$SOBRADINHO, -1) * 100

# Criar o vetor de tempo correspondente à variação (removendo o primeiro valor)
tempo <- df$datas[-1]

# Criar um gráfico de variação com o tempo como eixo X
plot(tempo, variacao, type = "l", col = "blue", xlab = "Tempo", ylab = "Variação (%)", main = "Variação da Série Natural afluente")

## Armazenamento da usina

setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
#Variação
# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Calcular a variação percentual entre os valores consecutivos 
variacao <- diff(df$SOBRADINHO) / head(df$SOBRADINHO, -1) * 100

# Criar o vetor de tempo correspondente à variação (removendo o primeiro valor)
tempo <- df$datas[-1]

# Criar um gráfico de variação com o tempo como eixo X
plot(tempo, variacao, type = "l", col = "blue", xlab = "Tempo", ylab = "Variação (%)", main = "Variação da Série de volume útil")
grid()

# Periodo crítico de Sobradinho

setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
# Converter a coluna de datas para formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")

# Ordenar os dados por data, caso necessário
df <- df[order(df$datas), ]

# Calcular a média móvel de 5 anos (60 meses)
library(zoo)
df$media_movel <- rollapply(df$SOBRADINHO, width = 60, FUN = mean, align = "right", fill = NA)

# Encontrar o menor valor da média móvel
periodo_critico <- df[which.min(df$media_movel), ]
print(periodo_critico)
##            datas SOBRADINHO media_movel
## 31727 2017-11-11        346    389.8667

Referências:

Companhia Hidro Elétrica do São Francisco (CHESF). 2024. “Usina Hidrelétrica de Sobradinho.” 2024. https://www.chesf.com.br/SistemaChesf/Pages/SistemaGeracao/Sobradinho.aspx.
Guilherme, Antônio. 2024. “Blog de Antônio Guilherme.” 2024. https://www.antonioguilherme.web.br.com/blog/.
IBM. 2024. “Autocorrelação.” 2024. https://www.ibm.com/br-pt/topics/autocorrelation.
Júnior, PUC Consultoria. 2024. “Histograma: O Que é e Como Usar.” 2024. https://pucconsultoriajr.com.br/histograma-o-que-e-e-como-usar/.
Matemática e Estatística - UFRGS, Instituto de. 2024. “Apostila de Estatística Básica.” 2024. https://www.ufrgs.br/probabilidade-estatistica/extra/material/apostila_de_estatistica_basica.pdf.
Operador Nacional do Sistema Elétrico (ONS). 2024a. “Histórico Da Operação - Dados Gerais.” 2024. https://www.ons.org.br/paginas/resultados-da-operacao/historico-da-operacao/dados-gerais.
———. 2024b. “Página de Autenticação Do ONS.” 2024. https://sso.ons.org.br/auth/realms/ONS/protocol/openid-connect/auth?client_id=POP&redirect_uri=https%3A%2F%2Fpops.ons.org.br%2Fons.pop.federation%2FAzure%2F&response_type=code&scope=openid&code_challenge=zEJe1iVadaLobPegX6TgHkT3b-p0goY19xKUbpqoPZE&code_challenge_method=S256&state=OpenIdConnect.AuthenticationProperties%3DFaaxn8Q86I0OuqUT6Rm7LOf6-nWBKG_pr0OR6gpi7hoeeLGTuOI5w3JQ-9fOclZZ0GdUYPI51JgxR2SRQortxvlqY0Zoac0Tb35zascCFjKVpswv-VwcVHlXcRTra31r_OQ8DLi688OQAQNBLfXTZrzuDctJey7h-jr9hMBt6mWe1dtx54xVZuG8iXVjZI5WI2XE7_NYJoAn_OskoMBk3yPvDyvvDdOUWJVkK6ITG5hhdgUZfdsW4V6G18t1ejWe8xH6eekkmXNHGeqj3Z_RuUZ3ATGaGhJu6B0JgzuVD74__ti99Qo8x_sL_aikoSBCi96zAAlBtRxt3Jk4K5IlhRT3bCjK48Ptic2VnopakWK1w64zrN4PgQVWpbHyCuib7n38had1TmiScHwlkzIRC4rMCGYrQDiZlEHPh5DdqTCmHxGLVAV2GVCDA7YtLJN6O1hra7EvE-1G601Gg9IzyzI5Thlt4ElUSTX7vO41JjM_wg0jeFuzQOwychGI0W-MhKeWm-2eRvN37QHQFGl5AR91BNHum4weqL1JAbJAVGdh_v_9DoVKVKL41Hwlje_KZxqt8rvtzBwP8Tz1y-iyn48mk1nr5mpfgGzc58JulqmzQHaK0Rlh_XMDpm55NurimzKqAQ&response_mode=form_post&nonce=638667785951650102.MGMzODI5MDItNzEwYi00M2E1LTg3M2QtNWFiOTQ3M2U2NzEwNjY1M2RkNGEtNTQzOS00ZGM1LWEyOTAtODBhMjQxZGQ1OTlh&x-client-SKU=ID_NET461&x-client-ver=5.3.0.0.
Wikipedia. 2024. “Usina Hidrelétrica de Sobradinho.” 2024. https://pt.wikipedia.org/wiki/Usina_Hidrel%C3%A9trica_de_Sobradinho.