# Establecer opciones para los chunks de código
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
# Instalar y cargar las bibliotecas necesarias
if (!require("ggplot2")) install.packages("ggplot2")
## Loading required package: ggplot2
if (!require("dplyr")) install.packages("dplyr")
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
if (!require("tidyr")) install.packages("tidyr")
## Loading required package: tidyr
library(ggplot2)
library(dplyr)
library(tidyr)
library(knitr) # Para la función kable()

# Crear un data frame con los datos de la imagen
data <- data.frame(
  Modelo = c("PredicSTRNRSimpleSolarEolDemEspaOkGit",
             "PredicSTGRUSolarEolDemEspaOkGit",
             "PredicSTLMSTMEolEspaOkGit",
             "PredicSTLMSTMSolarEspaOkGit",
             "PredicSTLMSTMDemanEspaOkGit"),
  R2 = c(-1.7543, 0.5497, 0.9682, 0.9321, 0.9741),
  MSE = c(6628466.0602, 1083730.1660, 318625.3579, 156120.5356, 545427.1076),
  RMSE = c(2574.5808, 1041.0236, 564.4691, 395.1209, 738.5304),
  MAE = c(1993.7411, 634.2040, 247.9988, 234.2132, 592.9710)
)
# Mostrar la tabla para verificar que se creó
kable(data)
Modelo R2 MSE RMSE MAE
PredicSTRNRSimpleSolarEolDemEspaOkGit -1.7543 6628466.1 2574.5808 1993.7411
PredicSTGRUSolarEolDemEspaOkGit 0.5497 1083730.2 1041.0236 634.2040
PredicSTLMSTMEolEspaOkGit 0.9682 318625.4 564.4691 247.9988
PredicSTLMSTMSolarEspaOkGit 0.9321 156120.5 395.1209 234.2132
PredicSTLMSTMDemanEspaOkGit 0.9741 545427.1 738.5304 592.9710
# Convertir el data frame a formato largo para ggplot
data_long <- data %>%
  pivot_longer(
    cols = c(R2, MSE, RMSE, MAE),
    names_to = "Metrica",
    values_to = "Valor"
  )
# Mostrar las primeras filas de la tabla larga
kable(head(data_long))
Modelo Metrica Valor
PredicSTRNRSimpleSolarEolDemEspaOkGit R2 -1.7543
PredicSTRNRSimpleSolarEolDemEspaOkGit MSE 6628466.0602
PredicSTRNRSimpleSolarEolDemEspaOkGit RMSE 2574.5808
PredicSTRNRSimpleSolarEolDemEspaOkGit MAE 1993.7411
PredicSTGRUSolarEolDemEspaOkGit R2 0.5497
PredicSTGRUSolarEolDemEspaOkGit MSE 1083730.1660
# Gráfico para R2 y MAE (sin escala logarítmica)
ggplot(data_long %>% filter(Metrica %in% c("R2", "MAE")), aes(x = Modelo, y = Valor, fill = Modelo)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ Metrica, scales = "free_y") +
  geom_text(aes(label = round(Valor, 2)), vjust = -0.5, size = 3) +
  theme_minimal() +
  labs(
    title = "Comparación de R2 y MAE por Modelo",
    subtitle = "Valores más altos de R2 y más bajos de MAE son mejores",
    x = "Modelo",
    y = "Valor de la Métrica"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Filtrar y escalar los datos para el segundo gráfico
data_long_scaled <- data_long %>%
  filter(Modelo != "PredicSTRNRSimpleSolarEolDemEspaOkGit") %>%
  mutate(
    Valor_Escalado = case_when(
      Metrica %in% c("MSE", "RMSE") ~ log(Valor + 1), # Usar log para escalar
      TRUE ~ Valor
    )
  )

ggplot(data_long_scaled %>% filter(Metrica %in% c("MSE", "RMSE")), aes(x = Modelo, y = Valor, fill = Modelo)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ Metrica, scales = "free_y") +
  theme_minimal() +
  labs(
    title = "Comparación de MSE y RMSE (escala logarítmica)",
    subtitle = "Valores más bajos de MSE y RMSE son mejores. El modelo PredicSTRNR ha sido excluido.",
    x = "Modelo",
    y = "Valor de la Métrica (Logarítmica)"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))