1 Usina Hidrelétrica Salto Santiago

Localizada no Rio Iguaçu, no município de Saudade do Iguaçu, no Paraná, a Usina Hidrelétrica Salto Santiago está em operação desde 1980, com concessão válida até 2028. Este empreendimento utiliza um reservatório de acumulação com área de 208 km², que sustenta uma capacidade instalada de 1.420 MW, distribuída em quatro unidades geradoras de 355 MW cada, equipadas com turbinas verticais do tipo Francis. Essas turbinas passaram por um processo de modernização entre 2014 e 2017, garantindo uma operação eficiente. A usina possui uma garantia física de 733,3 MW médios para comercialização.

A Bacia do Iguaçu, localizada na região sul do Brasil, é uma das principais bacias hidrográficas do país e possui grande importância para a geração de energia elétrica. O Rio Iguaçu, que percorre mais de mil quilômetros, atravessa o estado do Paraná e conta com uma série de usinas hidrelétricas ao longo de seu curso. Essas usinas desempenham um papel essencial no suprimento energético regional e nacional, aproveitando o potencial hidráulico do rio para geração de eletricidade. Dentre as usinas situadas na bacia, destacam-se as de Baixo Iguaçu, Gov. José Richa, Salto Osório, Segredo, Foz do Areia e, especialmente, a Usina Hidrelétrica Salto Santiago.

1.1 Dados Técnicos

1.1.1 Características Hidrológicas

  • Área da bacia hidrográfica: 43.330 km²
  • Área do reservatório: 208 km²
  • Vazão média anual: 902 m³/s
  • Vazão nominal por unidade: 346 m³/s
  • Volume acumulado útil: 4.094 hm³
  • Queda bruta: 106 m
  • Coordenadas: 25º47’S 52º6’O

1.1.2 Características das Obras Civis

  • Descarga máxima dos vertedouros: 24.000 m³/s
  • Barragem:
    • Tipo: Enroncamento
    • Altura máxima: 80 m
    • Comprimento: 1.400 m

1.1.3 Potência Instalada

  • Potência total (1ª etapa): 1.332.000 kW (1.332 MW)
  • Após repotenciação: 1.420.000 kW (1.420 MW)

1.1.4 Equipamentos

  • 4 Turbinas tipo Francis
    • Potência nominal unitária: 460.000 CV
  • 4 Geradores
    • Potência nominal unitária: 369.800 kVA
    • Fator de potência: 0,96
  • 2 Bancos transformadores monofásicos com capacidade nominal unitária de 233 MVA
  • 6 Condutos forçados (previstos para futuras unidades) com diâmetro de 7,6 m
  • 8 Comportas radiais dos vertedouros com dimensões de 21,5 x 15,3 m

1.1.5 Datas de Entrada em Operação

  • Unidade 1: 31/12/1980
  • Unidade 2: 30/07/1981
  • Unidade 3: 25/02/1982
  • Unidade 4: 16/09/1982

2 Etapas Preliminares do Estudo

A etapa inicial do trabalho consistiu em obter as bases de dados necessárias para a análise. Para isso, foram baixados os dados específicos da usina, disponíveis no site do ONS, com registros diários desde 1º de janeiro de 2000 até a data inical do estudo (05/10/2024). As informações coletadas incluíram vazão afluente, vertida, defluente, transferida e de outras estruturas, todas em m³/s, além do nível de montante diário em metros, geração de energia horária em MWm, volume útil diário em porcentagem, energia natural afluente bruta e energia armazenada no subsistema da usina, e o custo marginal de operação semanal. Além desses dados, também foram baixados os arquivos Hidr.xls e as vazões naturais afluentes, diárias e mensais, contendo informações de todas as hidrelétricas do Sistema Interligado Nacional (SIN), disponíveis no portal SINtegre do ONS.

2.1 Gráfico de Volume x Cota

Abixo é possível analisar o gráfico Volume x Cota da UHE Salto Santiago. De acordo com o arquivo .Hidr desta usina, seu volume máximo é de cerca de 6775 hm³ e seu volume mínimo 2662 hm³. Além disso, a cota máxima é de 506 m e a cota mínima de 481 m.

setwd("C:/Trabalho_Geracao")

hidr <- read.csv2("Hidr.csv")


# Gráfico de Volume x Cota
volumes <- seq(hidr$Vol.Máx..hm3., hidr$Vol.min..hm3., length.out = 1000)
cotas <- (hidr$PCV.4.*volumes^4) + (hidr$PCV.3.*volumes^3) + (hidr$PCV.2.*volumes^2) + 
  (hidr$PCV.1.*volumes^1) + (hidr$PCV.0.)

plot(volumes, cotas, type = "o", col = "black", 
     xlab = "Volume (hm³)", ylab = "Cota (m)", 
     main = "Gráfico Volume x Cota", 
     pch = 20,  
     cex = 0.7, 
     lwd = 1)   

grid()

2.2 Gráfico de Cota x Área

# Carregar o script que contém a leitura dos dados
# Gráfico de Cota x Área


area_max <- 208  # km² 
area_min <- 122.91 # km²

areas <- seq(area_min, area_max, length.out = 1000)

cotas_2 <- (hidr$PAC.4.[1] * areas^4) + (hidr$PAC.3.[1] * areas^3) + 
           (hidr$PAC.2.[1] * areas^2) + (hidr$PAC.1.[1] * areas) + hidr$PAC.0.[1]


plot(cotas_2, areas, type = "o", col = "black", 
     xlab = "Cota (m)", ylab = "Área (km²)", 
     main = "Gráfico Cota x Área", 
     pch = 10,  
     cex = 0.7, 
     lwd = 2)   

grid()

2.3 Gráfico de Evaporação Líquida Mensal (m³)

A precipitação é a entrada de água da atmosfera para o reservatório, enquanto a evaporação e a transpiração devolvem parte dessa água para a atmosfera, formando o processo de evapotranspiração. No solo, ocorre a infiltração, onde a água penetra e pode alimentar o sistema de águas subterrâneas, enquanto as nascentes contribuem com a vazão afluente para o reservatório. A água armazenada nos rios e reservatórios pode ser direcionada para o escoamento superficial ou para o escoamento defluente, demonstrando a complexa interação entre atmosfera, solo e corpos d’água que sustenta o ciclo hidrológico.

setwd("C:/Trabalho_Geracao")
hidr <- read.csv2("Hidr.csv")

# Determinar a Área do reservatório (em km²) - MÁX, MÍN E MÉDIA.
area_max <- 208  # km² (informado no site da ENGIE - SALTO SANTIAGO)
area_min <- 122.91 # km² (informado no site da ENGIE - SALTO SANTIAGO) 
area_media <- (area_max + area_min) / 2  

# Evaporação mensal - Dados de Evaporação mensal (Dado em mm)
evap_mensal_mm <- c(hidr$Evap.Men..1., hidr$Evap.Men..2., hidr$Evap.Men..3., hidr$Evap.Men..4., 
                    hidr$Evap.Men..5., hidr$Evap.Men..6., hidr$Evap.Men..7., hidr$Evap.Men..8., 
                    hidr$Evap.Men..9., hidr$Evap.Men..10., hidr$Evap.Men..11., hidr$Evap.Men..12.)

# Converter evaporação de mm para metros 
evap_mensal_m3 <- evap_mensal_mm * 0.001  

evap_m3_max <- evap_mensal_m3 * area_max * 1e6  # Para área máxima em metros quadrados
evap_m3_min <- evap_mensal_m3 * area_min * 1e6  # Para área mínima em metros quadrados
evap_m3_media <- evap_mensal_m3 * area_media * 1e6  # Para área média em metros quadradros

meses_de_analise <- 1:12

plot(meses_de_analise, evap_m3_max, type = "o", col = "blue", 
     ylim = c(min(evap_m3_min), max(evap_m3_max)),
     xlab = "Meses", ylab = "Evaporação Líquida (m³)",
     main = "Evaporação Líquida Mensal (m³) - Áreas Mín., Máx. e Média", xaxt = "n")

# Adicionar as outras áreas ao gráfico - Área mínima e média
lines(meses_de_analise, evap_m3_min, type = "o", col = "red")
lines(meses_de_analise, evap_m3_media, type = "o", col = "green")

axis(1, at = seq(1, 12, by = 1), labels = seq(1, 12, by = 1))

legend("topright", legend = c("Área Máxima", "Área Mínima", "Área Média"), 
       col = c("blue", "red", "green"), lty = 1, pch = 16)

grid()

2.4 Gráfico de Evaporação Líquida Mensal - Normalizado pelo Volume Máximo da Usina

Os valores do gráfico referente a Evaporação Líquida Mensal foram normalizados utilizando o volume máximo da Usina de Salto Santiago, cerca de 6775 hm³. Observa-se através do gráfico abaixo que a evaporação não se apresenta como uma perda tão significante para a usina, quando comparado a seu volume máximo.

## Plot normalizado

# Definindo o volume máximo em m³
volume_max_m3 <- 6775 * 1e6  # 6775 hm³ em m³

# Normalizar os valores de evaporação dividindo pelo volume máximo
evap_m3_max_norm <- evap_m3_max / volume_max_m3
evap_m3_min_norm <- evap_m3_min / volume_max_m3
evap_m3_media_norm <- evap_m3_media / volume_max_m3

# Plotando os valores normalizados
plot(meses_de_analise, evap_m3_max_norm, type = "o", col = "blue", 
     ylim = c(min(evap_m3_min_norm), max(evap_m3_max_norm)),
     xlab = "Meses", ylab = "Evaporação (p.u.)",
     main = "Evaporação Mensal Normalizada- Áreas Mín., Máx. e Média", xaxt = "n")

# Adicionar as outras áreas normalizadas ao gráfico - Área mínima e média
lines(meses_de_analise, evap_m3_min_norm, type = "o", col = "red")
lines(meses_de_analise, evap_m3_media_norm, type = "o", col = "green")

axis(1, at = seq(1, 12, by = 1), labels = seq(1, 12, by = 1))

legend("topright", legend = c("Área Máxima", "Área Mínima", "Área Média"), 
       col = c("blue", "red", "green"), lty = 1, pch = 16)

grid()

3 Análise de Dados

3.1 Normalização dos Dados

Normalizar os dados é importante porque ajusta os valores para uma escala comum, facilitando a comparação entre diferentes conjuntos de dados ou variáveis que possam ter unidades ou magnitudes distintas. Em análises de séries temporais, por exemplo, a normalização ajuda a identificar padrões e anomalias sem que as flutuações de escala interfiram, o que é especialmente útil ao combinar dados de fontes diferentes ou ao observar mudanças ao longo do tempo. Além disso, a normalização melhora o desempenho de muitos métodos estatísticos e algoritmos de aprendizado de máquina, que funcionam melhor quando os dados estão dentro de uma faixa padronizada, evitando que valores maiores dominem a análise e distorçam os resultados. Abaixo está como cada conjunto de dados foi normalizado:

  • Os dados para as séries de Vazão foram normalizados considerando a MLT (Média de Longo Prazo);
  • Foi considerado 100% como base para as séries em %;
  • Foram considerados os valores máximos de projeto como base para as séries de Nível;
  • Foi considerada a energia correspondente a um fator de capacidade de 100% como base para as séries de Energia;
  • A série de Custo Marginal não foi normalizada.

3.2 Estudo da Vazão Afluente

A vazão afluente é a quantidade de água que chega ao reservatório de uma usina hidrelétrica em um determinado ponto e momento. Essa vazão, medida geralmente em metros cúbicos por segundo (m³/s), representa o volume de água escoado superficialmente por unidade de tempo. Ela pode ser determinada através de medições diretas ou estimada por modelos hidrológicos que consideram fatores como precipitação, características do solo e relevo da região. A vazão afluente é uma variável essencial para o cálculo do potencial hidráulico disponível para a geração de energia, pois é a partir dela que a usina define a quantidade de água que movimentará suas turbinas.

No entanto, nem toda a vazão afluente é convertida em energia. Parte da água se perde por evapotranspiração, especialmente em áreas de reservatórios expostos, enquanto outra parte é vertida sem passar pelas turbinas, principalmente em períodos de cheia, quando o reservatório atinge sua capacidade máxima. Além disso, uma porção da vazão contribui para o volume útil do reservatório, garantindo a operação contínua da usina mesmo em épocas de menor afluência.

3.2.1 Sumário Estatístico

# Carregar e preparar os dados
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])

# Exibir o sumário estatístico
summary(vazao_afluente_normalizado)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.01461  0.55327  0.88011  1.00000  1.19418 14.05715

3.2.2 Histograma da Vazão Afluente

setwd("C:/Trabalho_Geracao")

# HISTOGRAMA VAZÃO AFLUENTE - NORMALIZADO
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")

vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])

total_dados <- length(vazao_afluente_normalizado)

# Gerar o histograma com frequência relativa em porcentagem
hist(vazao_afluente_normalizado, 
     main = "Histograma dos Valores de Vazão Afluente - Normalizado",  
     xlab = "Vazão (p.u.)", 
     ylab = "Porcentagem de Ocorrência (%)", 
     col = "lightgreen", 
     border = "black", 
     breaks = 300, 
     freq = FALSE)

3.2.3 Histograma da Vazão Afluente com Log Aplicado

# HISTOGRAMA VAZÃO AFLUENTE - LOGARITMO

vazao_afluente_log <- log(vazao_afluente_normalizado)
vazao_afluente_log <- vazao_afluente_log[!is.na(vazao_afluente_log)]

# Calcular o número total de dados após log
total_dados_log <- length(vazao_afluente_log)

# Gerar o histograma com frequência relativa em porcentagem para o log
hist(vazao_afluente_log,
     main = "Histograma dos Valores de Vazão Afluente (Log)",
     xlab = "Vazão (p.u.)",
     ylab = "Frequência (%)",
     col = "lightgreen",
     border = "black",
     breaks = 300,
     freq = FALSE)

axis(2, at = seq(0, 0.3, by = 0.05), labels = round(seq(0, 0.3, by = 0.05) * 100, 1))
grid()

3.2.4 BoxPlot Vazão Afluente - Normalizado

# BOXPLOT VAZÃO AFLUENTE - NORMALIZADO

# VAZÃO AFLUENTE
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")

vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])

media_vazao <- mean(vazao_afluente_normalizado, na.rm = TRUE)

# Gerar o box plot dos dados de vazão
boxplot(vazao_afluente_normalizado, 
        main = "Box Plot dos Valores de Vazão Afluente - Normalizado", 
        ylab = "Vazão (m³/s)", 
        xlab = "Vazão Afluente", 
        col = "lightblue", 
        border = "black", 
        outline = TRUE,  
        notch = TRUE,    
        las = 1,         
        cex.axis = 0.8,  
        frame.plot = FALSE)  

points(1, media_vazao, col = "red", pch = 19, cex = 1.5)

grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")

legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")

3.2.5 BoxPlot Vazão Afluente por Ano - Normalizado

# BOXPLOT NORMALIZADO POR ANO
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv", encoding = "latin1", sep = ";")

nomes_colunas <- colnames(vazao_afluente_normalizado)

anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))

anos <- as.numeric(anos)

# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
  vazao_afluente_normalizado = as.numeric(vazao_afluente_normalizado[1, ]),
  ano = anos
)

media_vazao <- 1

# Gerar o boxplot dos dados de vazão por ano
boxplot(vazao_afluente_normalizado ~ ano, data = df_vazao_anos,
        main = "Boxplot Vazão Afluente por Ano - Normalizado",
        xlab = "Ano",
        ylab = "Vazão Afluente (p.u.)",
        col = "lightgray",
        border = "black",
        outline = TRUE,  
        notch = FALSE,   
        las = 1,         
        cex.axis = 0.8)  

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

grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")

legend("topright", legend = paste("Média =", media_vazao), col = "red", pch = 19, bty = "n")

3.2.6 BoxPlot Vazão Afluente por Ano - Normalizado e com Log

# BOXPLOT NORMALIZADO POR ANO
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv", encoding = "latin1", sep = ";")

nomes_colunas <- colnames(vazao_afluente_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)

# Criar um data frame para armazenar os valores de vazão (com log) e seus respectivos anos
df_vazao_anos <- data.frame(
  vazao_afluente_log = log(as.numeric(vazao_afluente_normalizado[1, ])),
  ano = anos
)

media_vazao_log <- log(1) # Aplicando log na média original

boxplot(vazao_afluente_log ~ ano, data = df_vazao_anos,
        main = "Boxplot Vazão Afluente por Ano - Normalizado (Log)",
        xlab = "Ano",
        ylab = "Vazão Afluente (log(p.u.))",
        col = "lightgray",
        border = "black",
        outline = TRUE,  
        notch = FALSE,   
        las = 1,         
        cex.axis = 0.8)  

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

grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")

legend("topright", legend = paste("Média =", round(media_vazao_log, 2)), col = "red", pch = 19, bty = "n")

3.2.7 Série da Vazão Afluente por Ano

# 
library(dplyr)
library(lubridate)

vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")

vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"

data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))

vazao_annual_mean <- vazao_data %>%
  group_by(Ano = year(Data)) %>%
  summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))

# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o", 
     xlab = "Período", ylab = "Vazão Afluente (p.u.)",
     main = "Série Vazão Afluente por Ano - Normalizado", xaxt = "n")

# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()

3.2.8 Série da Vazão Afluente Diária

# 
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")

vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"

data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))

# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l", 
     xlab = "Período", ylab = "Vazão Afluente (p.u.)",
     main = "Série Vazão Afluente Diária - Normalizado", xaxt = "n")

axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()

3.2.9 Série da Vazão Afluente Diária em Períodos (2000 - 2012) e (2013 - 2024)

# 
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")

vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"

data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))

# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))

par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))

# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l", 
     xlab = "Período", ylab = "Vazão Afluente p.u.",
     main = "Série Vazão Afluente Diária (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()

# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l", 
     xlab = "Período", ylab = "Vazão Afluente p.u.",
     main = "Série Vazão Afluente Diária (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()

par(mfrow = c(1, 1))

3.2.10 Persistência da Vazão Afluente

# Carregar as bibliotecas necessárias
library(dplyr)

# Ler os dados de Vazão Afluente Natural normalizado
vazao_afluente_data <- read.csv2("Vazao_afluente_normalizado.csv")

# Transpor e ajustar o formato dos dados
vazao_afluente_data <- as.data.frame(t(vazao_afluente_data))
colnames(vazao_afluente_data) <- "Vazao"

# Definir a média da vazão como 1095 m³/s para normalização
media_vazao <- 1095

# Definir as vazões correspondentes para Q1, Q2, Q3 e Q4 em p.u.
Q1 <- 346 / media_vazao   # Vazão para 1 turbina ligada em p.u.
Q2 <- 692 / media_vazao   # Vazão para 2 turbinas ligadas em p.u.
Q3 <- 1038 / media_vazao  # Vazão para 3 turbinas ligadas em p.u.
Q4 <- 1384 / media_vazao  # Vazão para 4 turbinas ligadas em p.u.

# Ordenar os dados de vazão de forma decrescente para a persistência
vazao_ordenada <- sort(vazao_afluente_data$Vazao, decreasing = TRUE)

# Calcular a mediana, percentil 5% e percentil 95%
mediana_vazao <- median(vazao_afluente_data$Vazao, na.rm = TRUE)
percentil_5 <- quantile(vazao_afluente_data$Vazao, 0.05, na.rm = TRUE)
percentil_95 <- quantile(vazao_afluente_data$Vazao, 0.95, na.rm = TRUE)

# Calcular os percentis correspondentes aos valores específicos
indice_media <- which.min(abs(vazao_ordenada - 1))  # média normalizada é 1 em p.u.
indice_mediana <- which.min(abs(vazao_ordenada - mediana_vazao))
indice_5 <- which.min(abs(vazao_ordenada - percentil_5))  # Correção para que 5% esteja correto
indice_95 <- which.min(abs(vazao_ordenada - percentil_95))  # Correção para que 95% esteja correto

# Encontrar os índices mais próximos no vetor ordenado para cada Q1, Q2, Q3 e Q4
indice_Q1 <- which.min(abs(vazao_ordenada - Q1))
indice_Q2 <- which.min(abs(vazao_ordenada - Q2))
indice_Q3 <- which.min(abs(vazao_ordenada - Q3))
indice_Q4 <- which.min(abs(vazao_ordenada - Q4))

# Criar o gráfico de persistência
plot(vazao_ordenada, type = "l", 
     xlab = "Tempo/Probabilidade (%)", ylab = "Vazão Afluente (p.u.)",
     main = "Gráfico de Persistência da Vazão Afluente", 
     xaxt = "n", col = "blue")

# Ajustar o eixo x para mostrar os percentis
axis(1, at = seq(1, length(vazao_ordenada), length.out = 11), 
     labels = seq(0, 100, by = 10))

# Adicionar pontos específicos para média, mediana, percentil 5%, percentil 95%, Q1, Q2, Q3 e Q4
points(c(indice_media, indice_mediana, indice_5, indice_95, indice_Q1, indice_Q2, indice_Q3, indice_Q4), 
       c(1, mediana_vazao, percentil_5, percentil_95, Q1, Q2, Q3, Q4), 
       col = "blue", pch = 16)

# Adicionar rótulos aos pontos, com posições ajustadas para evitar sobreposição
text(indice_media, 1, "Média: 1", pos = 3, col = "blue", offset = 0.5)
text(indice_mediana, mediana_vazao, paste("Mediana:", round(mediana_vazao, 2)), pos = 1, col = "blue", offset = 0.5)
text(indice_5, percentil_5, paste("5%:", round(percentil_5, 2)), pos = 3, col = "blue", offset = 0.5)  # Correção para 5%
text(indice_95, percentil_95, paste("95%:", round(percentil_95, 2)), pos = 3, col = "blue", offset = 0.5)  # Correção para 95%

# Adicionar rótulos para Q1, Q2, Q3 e Q4 com os valores em p.u.
text(indice_Q1, Q1, paste("Q1:", round(Q1, 2)), pos = 4, col = "red", offset = 0.5)
text(indice_Q2, Q2, paste("Q2:", round(Q2, 2)), pos = 4, col = "red", offset = 0.5)
text(indice_Q3, Q3, paste("Q3:", round(Q3, 2)), pos = 4, col = "red", offset = 0.5)
text(indice_Q4, Q4, paste("Q4:", round(Q4, 2)), pos = 4, col = "red", offset = 0.5)

# Adicionar uma grade
grid()

3.3 Estudo da Vazão Natural Afluente

A vazão natural afluente é uma estimativa das vazões de um rio ou curso d’água que considera o fluxo como ele seria em condições naturais, sem intervenções humanas. Essa medida é obtida a partir do processamento de dados de vazão observada, ajustando-os para remover os efeitos artificiais causados por atividades humanas, como a construção de represas e desvios de água. A vazão natural afluente permite uma análise mais precisa do comportamento hidrológico da bacia, refletindo o regime hídrico que existiria se não houvesse alterações antropogênicas, como se o rio estivesse em seu estado natural ao longo do tempo.

3.3.1 Sumário Estatístico - Normalizado

# Definir o diretório de trabalho
setwd("C:/Trabalho_Geracao")

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

vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])

# Fazer o sumário estatístico dos valores de vazão natural afluente
summary(vazao_natural_afluente)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.09    0.42    0.72    1.00    1.25   16.38

3.3.2 Histograma da Vazão Natural Afluente - Normalizado

# Carregar os dados
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")

vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_total <- 1019.28148148148  
vazao_afluente_normalizado <- vazao_natural_afluente 

total_dados <- length(vazao_afluente_normalizado)

# Gerar o histograma com frequência relativa em porcentagem
hist(vazao_afluente_normalizado, 
     main = "Histograma dos Valores de Vazão Natural Afluente - Normalizado",  
     xlab = "Vazão (p.u.)", 
     ylab = "Porcentagem de Ocorrência (%)", 
     col = "lightgreen", 
     border = "black", 
     breaks = 300, 
     freq = FALSE)

# Ajustar a densidade do histograma para representar porcentagem
counts <- hist(vazao_afluente_normalizado, breaks=800, plot=FALSE)$counts
relative_counts <- (counts / total_dados) * 100  # Dividir pelo total e multiplicar por 100 para porcentagem

# Ajustar o eixo y com porcentagem
axis(2, at = seq(0, max(relative_counts), by = 5), labels = round(seq(0, max(relative_counts), by = 5), 1))

3.3.3 Histograma da Vazão Natural Afluente com Log Aplicado

# HISTOGRAMA VAZÃO AFLUENTE - LOGARITMO

# Aplicar o logaritmo aos valores de vazão natural afluente, removendo NA
vazao_natural_afluente_log <- log(vazao_natural_afluente)
vazao_natural_afluente_log <- vazao_natural_afluente_log[!is.na(vazao_natural_afluente_log)]

# Calcular o número total de dados após o log
total_dados_log <- length(vazao_natural_afluente_log)

# Gerar o histograma com frequência relativa em porcentagem para o log
hist(vazao_natural_afluente_log,
     main = "Histograma dos Valores de Vazão Natural Afluente - Normalizado (Log)",
     xlab = "Vazão (p.u.)",
     ylab = "Porcentagem de Ocorrência (%)",
     col = "lightgreen",
     border = "black",
     breaks = 300,
     freq = FALSE)

# Ajustar o eixo Y para porcentagem de forma correta
axis(2, at = seq(0, 0.006, by = 0.001), labels = seq(0, 0.6, by = 0.1), las = 2)
grid()

3.3.4 BoxPlot Vazão Natural Afluente - Normalizado

# BOXPLOT VAZÃO NATURAL AFLUENTE - NORMALIZADO

# VAZÃO AFLUENTE
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")

vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])

media_vazao <- mean(vazao_natural_afluente, na.rm = TRUE)

# Gerar o box plot dos dados de vazão
boxplot(vazao_natural_afluente, 
        main = "Box Plot dos Valores de Vazão Natural Afluente - Normalizado", 
        ylab = "Vazão (p.u.)", 
        xlab = "Vazão Natural Afluente", 
        col = "lightblue", 
        border = "black", 
        outline = TRUE,  
        notch = TRUE,    
        las = 1,         
        cex.axis = 0.8,  
        frame.plot = FALSE)  

points(1, media_vazao, col = "red", pch = 19, cex = 1.5)

grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")

legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")

3.3.5 BoxPlot Vazão Natural Afluente por Ano - Normalizado

data <- read.csv2("Natural_Afluente.csv")

colnames(data)[1] <- "Ano"

data <- subset(data, Ano >= 1940)

media_total <- mean(unlist(data[,-1]), na.rm = TRUE)
data_norm <- data
data_norm[,-1] <- data[,-1] / media_total

# Dividir os dados em períodos de 30 anos, excluindo o primeiro período se necessário
periodos <- split(data_norm, ceiling((data_norm$Ano - min(data_norm$Ano)) / 30))
periodos <- periodos[-1]  # Excluir o primeiro período, se aplicável

# Gerar o boxplot para cada período separadamente
for (i in seq_along(periodos)) {
  periodo <- periodos[[i]]
  
  library(reshape2)
  data_long <- melt(periodo, id.vars = "Ano", variable.name = "Mes", value.name = "Vazao")
  
  boxplot(Vazao ~ Ano, data = data_long, main = paste("Boxplot Vazão Natural Afluente por Ano - Período", i),
          ylab = "Vazão Natural Afluente (p.u.)", xlab = "Ano", las=2, cex.axis=0.7)
  
  abline(h = 1, col = "red", lty = 2)
  
  x_pos <- length(unique(data_long$Ano)) * 0.95  # Ajusta para o ano final
  y_pos <- max(data_long$Vazao, na.rm = TRUE) * 0.9  # Ajusta a altura
  points(x = x_pos, y = y_pos, col = "red", pch = 19)
  text(x = x_pos, y = y_pos, "Média = 1", pos = 3, col = "red", cex = 0.8)
}

3.3.6 BoxPlot Vazão Afluente por Ano - Normalizado e com Log

data <- read.csv2("Natural_Afluente.csv")

colnames(data)[1] <- "Ano"

data <- subset(data, Ano >= 1940)

# Calcular a média total e normalizar os dados
media_total <- mean(unlist(data[,-1]), na.rm = TRUE)
data_norm <- data
data_norm[,-1] <- data[,-1] / media_total

# Aplicar o log nos valores normalizados (evitar log(0) adicionando uma pequena constante, se necessário)
data_norm[,-1] <- log(data_norm[,-1] + 1e-10)

# Dividir os dados em períodos de 30 anos, excluindo o primeiro período se necessário
periodos <- split(data_norm, ceiling((data_norm$Ano - min(data_norm$Ano)) / 30))
periodos <- periodos[-1]  # Excluir o primeiro período, se aplicável

# Gerar o boxplot para cada período separadamente
for (i in seq_along(periodos)) {
  periodo <- periodos[[i]]
  
  library(reshape2)
  data_long <- melt(periodo, id.vars = "Ano", variable.name = "Mes", value.name = "Vazao")
  
  boxplot(Vazao ~ Ano, data = data_long, main = paste("Boxplot Vazão Natural Afluente (Log) por Ano - Período", i),
          ylab = "Log(Vazão Natural Afluente) (p.u.)", xlab = "Ano", las=2, cex.axis=0.7)
  
  abline(h = log(1), col = "red", lty = 2)
  
  x_pos <- length(unique(data_long$Ano)) * 0.95  # Ajusta para o ano final
  y_pos <- max(data_long$Vazao, na.rm = TRUE) * 0.9  # Ajusta a altura
  points(x = x_pos, y = y_pos, col = "red", pch = 19)
  text(x = x_pos, y = y_pos, "Média", pos = 2, col = "red", cex = 0.8)
}

3.3.7 Série da Vazão Natural Afluente por Ano - Normalizado

data <- read.csv2("Natural_Afluente.csv")

colnames(data)[1] <- "Ano"

data_filtrada <- subset(data, Ano >= 1940 & Ano <= 2020)

data_filtrada$Media_Anual <- rowMeans(data_filtrada[,-1], na.rm = TRUE)

media_total <- 1019.28148148148
data_filtrada$Media_Anual_Normalizada <- data_filtrada$Media_Anual / media_total

# Dividir o intervalo total de 1940 a 2020 em três partes
periodo1 <- subset(data_filtrada, Ano >= 1940 & Ano <= 1969, select = c("Ano", "Media_Anual_Normalizada"))
periodo2 <- subset(data_filtrada, Ano >= 1970 & Ano <= 1999, select = c("Ano", "Media_Anual_Normalizada"))
periodo3 <- subset(data_filtrada, Ano >= 2000 & Ano <= 2020, select = c("Ano", "Media_Anual_Normalizada"))

# Função auxiliar para plotar o período, verificando se há dados
plot_periodo <- function(periodo, titulo) {
  if (nrow(periodo) > 0) {
    plot(periodo$Ano, periodo$Media_Anual_Normalizada, type = "o", pch = 21, col = "black", bg = "white",
         xlab = "Ano", ylab = "Vazão Afluente Normalizada (p.u.)", main = titulo, xaxt = "n")
    axis(1, at = periodo$Ano, labels = periodo$Ano, las = 2, cex.axis = 0.7)
  } else {
    plot(1, type = "n", xlab = "", ylab = "", main = titulo)
    text(1, 1, "Sem dados disponíveis para este período", cex = 1.2)
  }
}

# Gerar gráficos separadamente para cada período
plot_periodo(periodo1, "Série Temporal da Vazão Natural Afluente Normalizada - 1940 a 1969")

plot_periodo(periodo2, "Série Temporal da Vazão Natural AfluenteNormalizada - 1970 a 1999")

plot_periodo(periodo3, "Série Temporal da VazãoNatural Afluente Normalizada - 2000 a 2020")

3.3.8 Série da Vazão Natural Afluente Diária

data <- read.csv2("Vazoes_Diarias_1931_2020.csv")

data$Data <- as.Date(data$Data, format = "%d/%b/%Y")

colnames(data)[which(names(data) == "SLT.SANTIAGO..77.")] <- "Vazao"

data <- na.omit(data)

media_total <- 1019.28148148148
data$Vazao <- data$Vazao / media_total

# Filtrar os dados para o intervalo desejado (1940 a 2020)
data_filtrada <- subset(data, format(Data, "%Y") >= 1940 & format(Data, "%Y") <= 2020)

# Dividir o intervalo total em três períodos
periodo1 <- subset(data_filtrada, format(Data, "%Y") >= 1940 & format(Data, "%Y") <= 1960)
periodo2 <- subset(data_filtrada, format(Data, "%Y") >= 1961 & format(Data, "%Y") <= 1980)
periodo3 <- subset(data_filtrada, format(Data, "%Y") >= 1981 & format(Data, "%Y") <= 2020)

# Função auxiliar para plotar cada período
plot_periodo <- function(periodo, titulo, intervalo) {
  if (nrow(periodo) > 0) {
    plot(periodo$Data, periodo$Vazao, type = "l", col = "blue", 
         xlab = "Data", ylab = "Vazão Diária Normalizada (p.u.)", main = titulo, xaxt = "n") # Remover o eixo x padrão
    
    axis(1, at = seq(min(periodo$Data), max(periodo$Data), by = intervalo), 
         labels = format(seq(min(periodo$Data), max(periodo$Data), by = intervalo), "%Y"), las = 1, cex.axis = 1)
  } else {
    plot(1, type = "n", xlab = "", ylab = "", main = titulo)
    text(1, 1, "Sem dados disponíveis para este período", cex = 1.2)
  }
}

# Gerar gráficos separadamente para cada período com intervalos de 2 anos no eixo x
plot_periodo(periodo1, "Série da Vazão Natural Afluente Diária Normalizada - 1940 a 1960", "2 years")

plot_periodo(periodo2, "Série da Vazão Natural Afluente Diária Normalizada - 1961 a 1980", "2 years")

plot_periodo(periodo3, "Série da Vazão Natural Afluente Diária Normalizada - 1981 a 2020", "2 years")