##############################################################################
########### CÓDIGO PARA LA CREACIÓN DE LOS INDICADORES    ####################
########### PRADATOS ANALÍTICA + IA                       ####################
##############################################################################

library(readxl);library(ggplot2);library(dplyr); library(tidyr); library(patchwork);  library(purrr); library(writexl);library(showtext); library(scales); library(ggnewscale); library(rlang)
rm(list = ls(all.names = TRUE))

# Diligenciamos la carpeta donde tenemos las bases procesadas
setwd("G:/Mi unidad/PRADATOS ANALÍTICA/1.Consultoría/2.Claro - CRC Dominancia - 2026/Documentos soporte/Posdata/Bases Finales/")

# Diligenciamos la carpeta donde dejaremos las gráficas

#Antes de la fusión
rutaga<-"G:/Mi unidad/PRADATOS ANALÍTICA/1.Consultoría/2.Claro - CRC Dominancia - 2026/Documentos soporte/Graficas/Antes Fusion/"

#Despues de la fusión
rutagd<-"G:/Mi unidad/PRADATOS ANALÍTICA/1.Consultoría/2.Claro - CRC Dominancia - 2026/Documentos soporte/Graficas/Con Fusion/"


options(scipen = 999)

Serviciosmoviles<-read_excel("ServiciosMoviles.xlsx")

#Paletas de colores

c1 <- c( "red", "#6ACA4A", "#D7CDB5","purple","blue" )
c2 <- c( "red",  "#D7CDB5", "purple", "blue")
c3 <- c( "#CBDD3C", "orange",  "grey")
c4 <- c( "red",  "#D7CDB5", "#CBDD3C",  "blue" ,"#6ACA4A","#E8E7E0",  "#FFFFF7")



## Cálculo de cuotas, HHI, Stenbacka ####
Serviciosmoviles_o=Serviciosmoviles


## ÍNDICE DE STENBACKA 
calcular_stenbacka <- function(base){
  
  base %>%
    group_by(ANNO, TRIMESTRE) %>%
    mutate(
      
      # Voz móvil
      S1_USUARIOS_VM = max(CUOTA_USUARIOS_VM, na.rm = TRUE),
      S2_USUARIOS_VM = sort(CUOTA_USUARIOS_VM, decreasing = TRUE)[2],
      STEN_USUARIOS_VM_G1  = 0.5 * (1 - (S1_USUARIOS_VM^2 - S2_USUARIOS_VM^2)),
      STEN_USUARIOS_VM_G05 = 0.5 * (1 - 0.5 * (S1_USUARIOS_VM^2 - S2_USUARIOS_VM^2)),
      DOM_VM_USUARIOS_G1  = ifelse(CUOTA_USUARIOS_VM == S1_USUARIOS_VM & S1_USUARIOS_VM > STEN_USUARIOS_VM_G1, 1, 0),
      DOM_VM_USUARIOS_G05 = ifelse(CUOTA_USUARIOS_VM == S1_USUARIOS_VM & S1_USUARIOS_VM > STEN_USUARIOS_VM_G05, 1, 0),
      
      S1_TRAFICO_VM = max(CUOTA_TRAFICO_VM, na.rm = TRUE),
      S2_TRAFICO_VM = sort(CUOTA_TRAFICO_VM, decreasing = TRUE)[2],
      STEN_TRAFICO_VM_G1  = 0.5 * (1 - (S1_TRAFICO_VM^2 - S2_TRAFICO_VM^2)),
      STEN_TRAFICO_VM_G05 = 0.5 * (1 - 0.5 * (S1_TRAFICO_VM^2 - S2_TRAFICO_VM^2)),
      DOM_VM_TRAFICO_G1  = ifelse(CUOTA_TRAFICO_VM == S1_TRAFICO_VM & S1_TRAFICO_VM > STEN_TRAFICO_VM_G1, 1, 0),
      DOM_VM_TRAFICO_G05 = ifelse(CUOTA_TRAFICO_VM == S1_TRAFICO_VM & S1_TRAFICO_VM > STEN_TRAFICO_VM_G05, 1, 0),
      
      S1_INGRESOS_VM = max(CUOTA_INGRESOS_VM, na.rm = TRUE),
      S2_INGRESOS_VM = sort(CUOTA_INGRESOS_VM, decreasing = TRUE)[2],
      STEN_INGRESOS_VM_G1  = 0.5 * (1 - (S1_INGRESOS_VM^2 - S2_INGRESOS_VM^2)),
      STEN_INGRESOS_VM_G05 = 0.5 * (1 - 0.5 * (S1_INGRESOS_VM^2 - S2_INGRESOS_VM^2)),
      DOM_VM_INGRESOS_G1  = ifelse(CUOTA_INGRESOS_VM == S1_INGRESOS_VM & S1_INGRESOS_VM > STEN_INGRESOS_VM_G1, 1, 0),
      DOM_VM_INGRESOS_G05 = ifelse(CUOTA_INGRESOS_VM == S1_INGRESOS_VM & S1_INGRESOS_VM > STEN_INGRESOS_VM_G05, 1, 0),
      
      # Internet móvil
      S1_USUARIOS_IM = max(CUOTA_USUARIOS_IM, na.rm = TRUE),
      S2_USUARIOS_IM = sort(CUOTA_USUARIOS_IM, decreasing = TRUE)[2],
      STEN_USUARIOS_IM_G1  = 0.5 * (1 - (S1_USUARIOS_IM^2 - S2_USUARIOS_IM^2)),
      STEN_USUARIOS_IM_G05 = 0.5 * (1 - 0.5 * (S1_USUARIOS_IM^2 - S2_USUARIOS_IM^2)),
      DOM_IM_USUARIOS_G1  = ifelse(CUOTA_USUARIOS_IM == S1_USUARIOS_IM & S1_USUARIOS_IM > STEN_USUARIOS_IM_G1, 1, 0),
      DOM_IM_USUARIOS_G05 = ifelse(CUOTA_USUARIOS_IM == S1_USUARIOS_IM & S1_USUARIOS_IM > STEN_USUARIOS_IM_G05, 1, 0),
      
      S1_TRAFICO_IM = max(CUOTA_TRAFICO_IM, na.rm = TRUE),
      S2_TRAFICO_IM = sort(CUOTA_TRAFICO_IM, decreasing = TRUE)[2],
      STEN_TRAFICO_IM_G1  = 0.5 * (1 - (S1_TRAFICO_IM^2 - S2_TRAFICO_IM^2)),
      STEN_TRAFICO_IM_G05 = 0.5 * (1 - 0.5 * (S1_TRAFICO_IM^2 - S2_TRAFICO_IM^2)),
      DOM_IM_TRAFICO_G1  = ifelse(CUOTA_TRAFICO_IM == S1_TRAFICO_IM & S1_TRAFICO_IM > STEN_TRAFICO_IM_G1, 1, 0),
      DOM_IM_TRAFICO_G05 = ifelse(CUOTA_TRAFICO_IM == S1_TRAFICO_IM & S1_TRAFICO_IM > STEN_TRAFICO_IM_G05, 1, 0),
      
      S1_INGRESOS_IM = max(CUOTA_INGRESOS_IM, na.rm = TRUE),
      S2_INGRESOS_IM = sort(CUOTA_INGRESOS_IM, decreasing = TRUE)[2],
      STEN_INGRESOS_IM_G1  = 0.5 * (1 - (S1_INGRESOS_IM^2 - S2_INGRESOS_IM^2)),
      STEN_INGRESOS_IM_G05 = 0.5 * (1 - 0.5 * (S1_INGRESOS_IM^2 - S2_INGRESOS_IM^2)),
      DOM_IM_INGRESOS_G05 = ifelse(CUOTA_INGRESOS_IM == S1_INGRESOS_IM & S1_INGRESOS_IM > STEN_INGRESOS_IM_G05, 1, 0),
      
      # Servicios móviles
      S1_USUARIOS_SM = max(CUOTA_USUARIOS_SM, na.rm = TRUE),
      S2_USUARIOS_SM = sort(CUOTA_USUARIOS_SM, decreasing = TRUE)[2],
      STEN_USUARIOS_SM_G1  = 0.5 * (1 - (S1_USUARIOS_SM^2 - S2_USUARIOS_SM^2)),
      STEN_USUARIOS_SM_G05 = 0.5 * (1 - 0.5 * (S1_USUARIOS_SM^2 - S2_USUARIOS_SM^2)),
      DOM_SM_USUARIOS_G1  = ifelse(CUOTA_USUARIOS_SM == S1_USUARIOS_SM & S1_USUARIOS_SM > STEN_USUARIOS_SM_G1, 1, 0),
      DOM_SM_USUARIOS_G05 = ifelse(CUOTA_USUARIOS_SM == S1_USUARIOS_SM & S1_USUARIOS_SM > STEN_USUARIOS_SM_G05, 1, 0),
      
      S1_INGRESOS_SM = max(CUOTA_INGRESOS_SM, na.rm = TRUE),
      S2_INGRESOS_SM = sort(CUOTA_INGRESOS_SM, decreasing = TRUE)[2],
      STEN_INGRESOS_SM_G1  = 0.5 * (1 - (S1_INGRESOS_SM^2 - S2_INGRESOS_SM^2)),
      STEN_INGRESOS_SM_G05 = 0.5 * (1 - 0.5 * (S1_INGRESOS_SM^2 - S2_INGRESOS_SM^2)),
      DOM_SM_INGRESOS_G1  = ifelse(CUOTA_INGRESOS_SM == S1_INGRESOS_SM & S1_INGRESOS_SM > STEN_INGRESOS_SM_G1, 1, 0),
      DOM_SM_INGRESOS_G05 = ifelse(CUOTA_INGRESOS_SM == S1_INGRESOS_SM & S1_INGRESOS_SM > STEN_INGRESOS_SM_G05, 1, 0)
      
    ) %>%
    ungroup()
}

#1. Cuotas de mercado

Serviciosmoviles_o<- Serviciosmoviles_o %>%group_by(ANNO, TRIMESTRE) %>%
  mutate(  across(    -any_of(c("ANNO","TRIMESTRE","EMPRESA")),    ~ .x / sum(.x, na.rm = TRUE),    .names = "CUOTA_{.col}"  )) %>% ungroup()

#2. Stenbacka y HHI antes de la unión
Stenbacka <- calcular_stenbacka(Serviciosmoviles_o)
HHI <- Serviciosmoviles_o %>%group_by(ANNO, TRIMESTRE) %>%  mutate(  across( starts_with("CUOTA_"),~ 10000 * sum(.x^2, na.rm = TRUE), .names = "HHI_{.col}")) %>%  ungroup()

Stenbacka <- Stenbacka %>%
  dplyr::select(ANNO, TRIMESTRE, dplyr::starts_with("STEN"), dplyr::starts_with("DOM")) %>%
  dplyr::distinct()
HHI <- HHI%>%dplyr::select(ANNO, TRIMESTRE, starts_with(c("HHI"))) %>%  distinct()

Stenbacka <-Stenbacka %>% mutate(  TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)),  FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))
HHI <- HHI%>% mutate(  TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)),  FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))

#3. Consolidamos la Unión Movistar Tigo

Serviciosmoviles_o <- Serviciosmoviles_o %>% mutate(  EMPRESA = case_when( EMPRESA %in% c("Movistar", "Tigo") ~ "Tigo recargado",TRUE ~ EMPRESA))
Serviciosmoviles_o <- Serviciosmoviles_o %>% group_by(ANNO, TRIMESTRE, EMPRESA) %>% 
summarise(across(where(is.numeric), sum, na.rm = TRUE), .groups = "drop" )

#4. Stenbacka y HHI después de la unión
Stenbacka2 <- calcular_stenbacka(Serviciosmoviles_o)
Stenbacka2 <-Stenbacka2 %>% mutate(  TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)),  FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))

HHI2 <- Serviciosmoviles_o %>%group_by(ANNO, TRIMESTRE) %>%  mutate(  across( starts_with("CUOTA_"),~ 10000 * sum(.x^2, na.rm = TRUE), .names = "HHI_{.col}")) %>%  ungroup()
HHI2 <- HHI2%>%dplyr::select(ANNO, TRIMESTRE, starts_with(c("HHI"))) %>%  distinct()
HHI2 <- HHI2%>% mutate(  TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)),  FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))


## Cuotas de mercado, tasas, ARPU, IPROM antes de la fusión ####

#Sólo se dejará comparando Claro, Tigo, Movistar, Partners y Otros.
Serviciosmoviles1 <- Serviciosmoviles %>% mutate(   EMPRESA = ifelse(   EMPRESA %in% c("Claro", "Movistar", "Tigo", "Partners"),  EMPRESA, "Otros"   ) )
Serviciosmoviles1 <- Serviciosmoviles1 %>% 
  group_by(ANNO, TRIMESTRE, EMPRESA) %>% 
  summarise(
    across(where(is.numeric), sum, na.rm = TRUE),
    .groups = "drop" )

#1. Cuotas de mercado
Serviciosmoviles1 <- Serviciosmoviles1 %>% group_by(ANNO, TRIMESTRE) %>%mutate(  across(-any_of(c("ANNO","TRIMESTRE","EMPRESA")),   ~ .x / sum(.x, na.rm = TRUE),  .names = "CUOTA_{.col}"  )) %>% ungroup()

#2. Tasas de crecimiento usuarios
Serviciosmoviles1 <- Serviciosmoviles1 %>% arrange(EMPRESA, ANNO, TRIMESTRE) %>% group_by(EMPRESA) %>%
  mutate( across(matches("^(ABONADOS|SUSCRIPTORES|USUARIOS|TRAFICO)"),
      ~ if_else(is.na(lag(.x)) | lag(.x) == 0, NA_real_, (.x - lag(.x)) / lag(.x) ),
      .names = "TASAC_{.col}" )) %>% ungroup()

#2. Tasas de crecimiento anual

Tasas1 <- {
  
  # Último año y último trimestre disponible
  ultimo_anno <- max(Serviciosmoviles1$ANNO, na.rm = TRUE)
  ultimo_trim <- max(Serviciosmoviles1$TRIMESTRE[Serviciosmoviles1$ANNO == ultimo_anno], na.rm = TRUE)
  
  # 1. Resumen anual completo (para todos los años)
  anual_completo <- Serviciosmoviles1 %>%
    group_by(ANNO) %>%
    summarise(
      across(matches("^(ABONADOS|SUSCRIPTORES|USUARIOS)"), ~ mean(.x, na.rm = TRUE)),
      across(matches("^(TRAFICO|INGRESOS)"), ~ sum(.x, na.rm = TRUE)),
      .groups = "drop"
    )
  
  # 2. Resumen truncado solo hasta el último trimestre disponible
  anual_truncado <- Serviciosmoviles1 %>%
    filter(TRIMESTRE <= ultimo_trim) %>%
    group_by(ANNO) %>%
    summarise(
      across(matches("^(ABONADOS|SUSCRIPTORES|USUARIOS)"), ~ mean(.x, na.rm = TRUE)),
      across(matches("^(TRAFICO|INGRESOS)"), ~ sum(.x, na.rm = TRUE)),
      .groups = "drop"
    )
  
  # 3. Base final:
  # - años antes del último: usar anual completo
  # - último año: usar truncado
  base_final <- anual_completo %>%
    filter(ANNO < ultimo_anno) %>%
    bind_rows(
      anual_truncado %>% filter(ANNO == ultimo_anno)
    ) %>%
    arrange(ANNO)
  
  # 4. Calcular tasas correctamente
  #    Solo el último año se compara contra el año anterior truncado
  for (col in names(base_final)[names(base_final) != "ANNO"]) {
    
    tasa <- rep(NA_real_, nrow(base_final))
    
    for (i in 2:nrow(base_final)) {
      anno_actual <- base_final$ANNO[i]
      anno_prev   <- base_final$ANNO[i - 1]
      
      if (anno_actual == ultimo_anno) {
        # comparar 2025 truncado vs 2024 truncado
        valor_actual <- anual_truncado %>% filter(ANNO == anno_actual) %>% pull(all_of(col))
        valor_prev   <- anual_truncado %>% filter(ANNO == anno_prev) %>% pull(all_of(col))
      } else {
        # comparar años completos
        valor_actual <- anual_completo %>% filter(ANNO == anno_actual) %>% pull(all_of(col))
        valor_prev   <- anual_completo %>% filter(ANNO == anno_prev) %>% pull(all_of(col))
      }
      
      tasa[i] <- (valor_actual - valor_prev) / valor_prev
    }
    
    base_final[[paste0("TASAC_", col)]] <- tasa
  }
  
  base_final
}

#3. IPROM, ARPU Y CONSUMO

Serviciosmoviles1 <- Serviciosmoviles1 %>%
  arrange(EMPRESA, ANNO, TRIMESTRE) %>%
  group_by(EMPRESA) %>%
  mutate(
    IPROM_VM= INGRESOS_VM / TRAFICO_VM,
    IPROM_VM_PRE= INGRESOS_VM_PRE / TRAFICO_VM_PRE,
    IPROM_VM_POS= INGRESOS_VM_POS / TRAFICO_VM_POS,
    IPROM_IM  = INGRESOS_IM / TRAFICO_IM,
    IPROM_IM_DEM  = INGRESOS_IMDEM / TRAFICO_IMDEM,
    IPROM_IM_CF = INGRESOS_IM_CF / TRAFICO_IM_CF,
    ARPU_VM = INGRESOS_VM / USUARIOS_VM,
    ARPU_VM_PRE = INGRESOS_VM_PRE / ABONADOS_VM,
    ARPU_VM_POS = INGRESOS_VM_POS / SUSCRIPTORES_VM,
    ARPU_IM = INGRESOS_IM / USUARIOS_IM,
    ARPU_IM_DEM = INGRESOS_IMDEM / ABONADOS_IM,
    ARPU_SM=INGRESOS_SM / USUARIOS_SM,
    ARPU_IM_CF= INGRESOS_IM_CF / SUSCRIPTORES_IM,
    CONS_IM =  TRAFICO_IM/USUARIOS_IM,
    CONS_VM = TRAFICO_VM/USUARIOS_VM
  ) %>%
  ungroup()

Serviciosmoviles1<- Serviciosmoviles1 %>% mutate( TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)), FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))

write_xlsx(Serviciosmoviles1, "IndicadoresEmpresasIndividuales.xlsx")


## Cuotas de mercado, tasas, ARPU, IPROM después de la fusión ####

#Sólo se dejará comparando Claro, Tigo, Movistar, Partners y Otros.
Serviciosmoviles2 <- Serviciosmoviles %>% 
  mutate( EMPRESA = case_when( EMPRESA %in% c("Movistar", "Tigo") ~ "Tigo recargado", EMPRESA %in% c("Claro", "Partners") ~ EMPRESA,TRUE ~ "Otros"))

Serviciosmoviles2 <- Serviciosmoviles2 %>% 
  group_by(ANNO, TRIMESTRE, EMPRESA) %>% summarise(  across(where(is.numeric), sum, na.rm = TRUE),  .groups = "drop" )

#Indicadores telefonía móvil

#1. Cuotas de mercado

Serviciosmoviles2 <- Serviciosmoviles2 %>%
  group_by(ANNO, TRIMESTRE) %>% mutate(across( -any_of(c("ANNO","TRIMESTRE","EMPRESA")),  ~ .x / sum(.x, na.rm = TRUE), .names = "CUOTA_{.col}")) %>%
  ungroup()

#2. Tasas de crecimiento usuarios trimestral

Serviciosmoviles2 <- Serviciosmoviles2 %>%
  arrange(EMPRESA, ANNO, TRIMESTRE) %>%
  group_by(EMPRESA) %>%
  mutate(across(  matches("^(ABONADOS|SUSCRIPTORES|USUARIOS|TRAFICO)"),
      ~ {g <- (.x - lag(.x)) / lag(.x)
        g[is.infinite(g) | is.nan(g)] <- NA
        g },
      .names = "TASAC_{.col}")) %>%
  ungroup()

#2. Tasas de crecimiento usuarios trimestral

library(dplyr)

Tasas2 <- {
  
  # Último año y último trimestre disponible
  ultimo_anno <- max(Serviciosmoviles2$ANNO, na.rm = TRUE)
  ultimo_trim <- max(Serviciosmoviles2$TRIMESTRE[Serviciosmoviles2$ANNO == ultimo_anno], na.rm = TRUE)
  
  # 1. Resumen anual completo (para todos los años)
  anual_completo <- Serviciosmoviles2 %>%
    group_by(ANNO) %>%
    summarise(
      across(matches("^(ABONADOS|SUSCRIPTORES|USUARIOS)"), ~ mean(.x, na.rm = TRUE)),
      across(matches("^(TRAFICO|INGRESOS)"), ~ sum(.x, na.rm = TRUE)),
      .groups = "drop"
    )
  
  # 2. Resumen truncado solo hasta el último trimestre disponible
  anual_truncado <- Serviciosmoviles2 %>%
    filter(TRIMESTRE <= ultimo_trim) %>%
    group_by(ANNO) %>%
    summarise(
      across(matches("^(ABONADOS|SUSCRIPTORES|USUARIOS)"), ~ mean(.x, na.rm = TRUE)),
      across(matches("^(TRAFICO|INGRESOS)"), ~ sum(.x, na.rm = TRUE)),
      .groups = "drop"
    )
  
  # 3. Base final:
  # - años antes del último: usar anual completo
  # - último año: usar truncado
  base_final <- anual_completo %>%
    filter(ANNO < ultimo_anno) %>%
    bind_rows(
      anual_truncado %>% filter(ANNO == ultimo_anno)
    ) %>%
    arrange(ANNO)
  
  # 4. Calcular tasas correctamente
  #    Solo el último año se compara contra el año anterior truncado
  for (col in names(base_final)[names(base_final) != "ANNO"]) {
    
    tasa <- rep(NA_real_, nrow(base_final))
    
    for (i in 2:nrow(base_final)) {
      anno_actual <- base_final$ANNO[i]
      anno_prev   <- base_final$ANNO[i - 1]
      
      if (anno_actual == ultimo_anno) {
        # comparar 2025 truncado vs 2024 truncado
        valor_actual <- anual_truncado %>% filter(ANNO == anno_actual) %>% pull(all_of(col))
        valor_prev   <- anual_truncado %>% filter(ANNO == anno_prev) %>% pull(all_of(col))
      } else {
        # comparar años completos
        valor_actual <- anual_completo %>% filter(ANNO == anno_actual) %>% pull(all_of(col))
        valor_prev   <- anual_completo %>% filter(ANNO == anno_prev) %>% pull(all_of(col))
      }
      
      tasa[i] <- (valor_actual - valor_prev) / valor_prev
    }
    
    base_final[[paste0("TASAC_", col)]] <- tasa
  }
  
  base_final
}

#3. IPROM, ARPU Y CONSUMO

Serviciosmoviles2 <- Serviciosmoviles2 %>%
  arrange(EMPRESA, ANNO, TRIMESTRE) %>%
  group_by(EMPRESA) %>%
  mutate(
    IPROM_VM= INGRESOS_VM / TRAFICO_VM,
    IPROM_VM_PRE= INGRESOS_VM_PRE / TRAFICO_VM_PRE,
    IPROM_VM_POS= INGRESOS_VM_POS / TRAFICO_VM_POS,
    IPROM_IM  = INGRESOS_IM / TRAFICO_IM,
    IPROM_IM_DEM  = INGRESOS_IMDEM / TRAFICO_IMDEM,
    IPROM_IM_CF = INGRESOS_IM_CF / TRAFICO_IM_CF,
    ARPU_VM = INGRESOS_VM / USUARIOS_VM,
    ARPU_VM_PRE = INGRESOS_VM_PRE / ABONADOS_VM,
    ARPU_VM_POS = INGRESOS_VM_POS / SUSCRIPTORES_VM,
    ARPU_IM = INGRESOS_IM / USUARIOS_IM,
    ARPU_IM_DEM = INGRESOS_IMDEM / ABONADOS_IM,
    ARPU_IM_CF= INGRESOS_IM_CF / SUSCRIPTORES_IM,
    ARPU_SM=INGRESOS_SM / USUARIOS_SM,
    CONS_IM =  TRAFICO_IM/USUARIOS_IM,
    CONS_VM = TRAFICO_VM/USUARIOS_VM
  ) %>%
  ungroup()

Serviciosmoviles2<- Serviciosmoviles2%>% mutate(  TRIMESTRE_ROM = as.character(as.roman(TRIMESTRE)),  FECHA = paste0(ANNO, "-", TRIMESTRE_ROM))

write_xlsx(Serviciosmoviles2, "IndicadoresTigoRecargado.xlsx")



## Gráficas Indicadores ####


graficar_cuota <- function(base, variable, titulo, colores, ano = NULL){
  
  # Filtrar si se especifica fecha de inicio
  if(!is.null(ano)){
    base <- base %>% 
      filter(ANNO >= ano)
  }
  
  ultimos <- base %>%
    group_by(EMPRESA) %>%
    slice_tail(n = 1)
  
  ggplot(base, aes(x = FECHA, y = .data[[variable]], color = EMPRESA, group = EMPRESA)) +
    
    geom_line(linewidth = 1, lineend = "round", linejoin = "round", na.rm = TRUE) +
    
    geom_text(
      data = ultimos,
      aes(label = percent(.data[[variable]], accuracy = 1)),
      vjust = -0.8,
      family = "roboto",
      color = "black",
      size = 3,
      na.rm = TRUE
    ) +
    
    scale_color_manual(values = colores, name = NULL) +
    
    scale_y_continuous(
      labels = percent_format(accuracy = 1),
      breaks = seq(0, 1, 0.05),
      expand = expansion(mult = c(0, 0.1))
    ) +
    
    labs(title = titulo, x = "", y = "") +
    
    theme_minimal() +
    
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      legend.margin = margin(t = -8),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position = "bottom",
      plot.title = element_text(size = 12, face = "bold")
    )
}

#Antes de la Fusión
CuotaI_SM=  graficar_cuota( Serviciosmoviles1, "CUOTA_INGRESOS_SM","Cuota de valores facturados – Servicios móviles",c1,2022)
CuotaI_VM=  graficar_cuota( Serviciosmoviles1, "CUOTA_INGRESOS_VM","Cuota de ingresos – Voz móvil",c1)
CuotaI_IM=graficar_cuota( Serviciosmoviles1, "CUOTA_INGRESOS_IM","Cuota de ingresos – Internet móvil",c1)
CuotaT_VM=graficar_cuota( Serviciosmoviles1, "CUOTA_TRAFICO_VM","Cuota de tráfico – Voz móvil",c1)
CuotaT_IM=graficar_cuota( Serviciosmoviles1, "CUOTA_TRAFICO_IM","Cuota de tráfico – Internet móvil",c1)
CuotaU_IM=graficar_cuota( Serviciosmoviles1, "CUOTA_USUARIOS_IM","Cuota de usuarios – Internet móvil",c1)
CuotaU_VM=graficar_cuota( Serviciosmoviles1, "CUOTA_USUARIOS_VM","Cuota de líneas – Voz móvil",c1)
CuotaU_SM=graficar_cuota( Serviciosmoviles1, "CUOTA_USUARIOS_SM","Cuota de usuarios – Servicios móviles",c1,2022)

#Después de la Fusión
CuotaI_SM1=graficar_cuota( Serviciosmoviles2, "CUOTA_INGRESOS_SM","Cuota de valores facturados – Servicios móviles",c2,2022)
CuotaI_VM1=graficar_cuota( Serviciosmoviles2, "CUOTA_INGRESOS_VM","Cuota de ingresos – Voz móvil",c2)
CuotaI_IM1=graficar_cuota( Serviciosmoviles2, "CUOTA_INGRESOS_IM","Cuota de ingresos – Internet móvil",c2)
CuotaT_VM1=graficar_cuota( Serviciosmoviles2, "CUOTA_TRAFICO_VM","Cuota de tráfico – Voz móvil",c2)
CuotaT_IM1=graficar_cuota( Serviciosmoviles2, "CUOTA_TRAFICO_IM","Cuota de tráfico – Internet móvil",c2)
CuotaU_IM1=graficar_cuota( Serviciosmoviles2, "CUOTA_USUARIOS_IM","Cuota de usuarios – Internet móvil",c2)
CuotaU_VM1=graficar_cuota( Serviciosmoviles2, "CUOTA_USUARIOS_VM","Cuota de líneas – Voz móvil",c2)
CuotaU_SM1=graficar_cuota( Serviciosmoviles2, "CUOTA_USUARIOS_SM","Cuota de usuarios – Servicios móviles",c2,2022)

# Gráficas tendencias

graficar_tendencia <- function(base, variable, titulo, ylabel, colores, divisor = 1000000, sufijo = "M", breaks_y = waiver(),   label_total = "Total", ano=NULL) {
  
  if(!is.null(ano)){
    base <- base %>% 
      filter(ANNO >= ano)
  }
  
  total <- base %>%
    group_by(FECHA) %>%
    summarise(!!variable := sum(.data[[variable]], na.rm = TRUE), .groups = "drop") %>%
    mutate(EMPRESA = label_total)
  
  base_extendida <- bind_rows(base, total)
  
  base_graf <- base_extendida %>%
    mutate(valor_graf = .data[[variable]] / divisor)
  
  # Último punto de todas las empresas
  ultimos <- base_graf %>%
    group_by(EMPRESA) %>%
    slice_tail(n = 1) %>%
    ungroup()
  
  empresas <- setdiff(unique(base_graf$EMPRESA), label_total)
  colores_finales <- setNames(c(colores[seq_along(empresas)], "black"),
                              c(empresas, label_total))
  
  ggplot(base_graf, aes(x = FECHA, y = valor_graf, color = EMPRESA, group = EMPRESA)) +
    
    geom_line(linewidth = 0.8, lineend = "round", linejoin = "round") +
    
    geom_text(
      data = ultimos,
      aes(label = number(valor_graf, accuracy = 0.1, big.mark = ".", decimal.mark = ",")),
      vjust = -1,
      hjust = 0.7,
      family = "roboto",
      color = "black",
      size = 3,
      show.legend = FALSE
    ) +
    
    scale_color_manual(values = colores_finales, name = NULL) +
    
    scale_y_continuous(
      breaks = breaks_y,
      labels = label_number(
        accuracy = 1,
        big.mark = ".",
        decimal.mark = ",",
        suffix = paste0(" ", sufijo)
      ),
      expand = expansion(mult = c(0, 0.15))
    ) +
    
    guides(
      color = guide_legend(nrow = 1, byrow = TRUE,
                           override.aes = list(linewidth = 1.5))
    ) +
    
    labs(
      title = titulo,
      x = "",
      y = ylabel
    ) +
    
    theme_minimal() +
    
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major.x = element_blank(),
      panel.grid.major.y = element_blank(),
      legend.margin = margin(t = -8),   # acerca la leyenda hacia el gráfico
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position = "bottom",
      legend.text = element_text(size = 12),
      plot.title = element_text(size = 12, face = "bold")
    )
}

#Antes de la Fusión

T_USUARIOS_SM= graficar_tendencia( Serviciosmoviles1, "USUARIOS_SM","Usuarios – Servicios móviles", "Millones de personas",c1, 1000000, "M",,"Total",2022)
T_USUARIOS_IM=graficar_tendencia( Serviciosmoviles1, "USUARIOS_IM","Usuarios – Internet Móvil", "Millones de personas",c1, 1000000, "M",,"Total")
T_USUARIOS_VM=graficar_tendencia( Serviciosmoviles1, "USUARIOS_VM","Usuarios – Voz Móvil", "Millones de personas",c1, 1000000, "M",,"Total")
T_INGRESOS_SM=  graficar_tendencia( Serviciosmoviles1, "INGRESOS_SM","Valores facturados – Servicios móviles", "Miles de millones de millones de pesos",c1, 1000000000, "MM",,"Total",2022)
T_INGRESOS_IM=graficar_tendencia( Serviciosmoviles1, "INGRESOS_IM","Ingresos – Internet Móvil", "Miles de millones de millones de pesos",c1, 1000000000, "MM",,"Total")
T_INGRESOS_VM=graficar_tendencia( Serviciosmoviles1, "INGRESOS_VM","Ingresos – Voz Móvil", "Miles de millones de millones de pesos",c1, 1000000000, "MM",,"Total")
T_TRAFICO_IM=  graficar_tendencia( Serviciosmoviles1, "TRAFICO_IM","Tráfico Internet Móvil", "Miles de millones de MB",c1, 1000000000, "MM",,"Total")
T_TRAFICO_VM= graficar_tendencia( Serviciosmoviles1, "TRAFICO_VM","Tráfico Voz Móvil", "Miles de millones de minutos",c1, 1000000000, "MM",,"Total")

#Después de la Fusión

T_USUARIOS_SM1=graficar_tendencia( Serviciosmoviles2, "USUARIOS_SM","Usuarios – Servicios móviles", "Millones de personas",c2, 1000000, "M",,"Total",2022)
T_USUARIOS_IM1=graficar_tendencia( Serviciosmoviles2, "USUARIOS_IM","Usuarios – Internet Móvil", "Millones de personas",c2, 1000000, "M",,"Total")
T_USUARIOS_VM1=graficar_tendencia( Serviciosmoviles2, "USUARIOS_VM","Usuarios – Voz Móvil", "Millones de personas",c2, 1000000, "M",,"Total")
T_INGRESOS_SM1= graficar_tendencia( Serviciosmoviles2, "INGRESOS_SM","Valores facturados – Servicios móviles", "Miles de millones de millones de pesos",c2, 1000000000, "MM",,"Total",2022)
T_INGRESOS_IM1=graficar_tendencia( Serviciosmoviles2, "INGRESOS_IM","Ingresos – Internet Móvil", "Miles de millones de millones de pesos",c2, 1000000000, "MM",,"Total")
T_INGRESOS_VM1=graficar_tendencia( Serviciosmoviles2, "INGRESOS_VM","Ingresos – Voz Móvil", "Miles de millones de millones de pesos",c2, 1000000000, "MM",,"Total")
T_TRAFICO_IM1=graficar_tendencia( Serviciosmoviles2, "TRAFICO_IM","Tráfico Internet Móvil", "Miles de millones de MB",c2, 1000000000, "MM",,"Total")
T_TRAFICO_VM1= graficar_tendencia( Serviciosmoviles2, "TRAFICO_VM","Tráfico Voz Móvil", "Miles de millones de minutos",c2, 1000000000, "MM",,"Total")


#Gráficas último trimestre resumen
graficar_cuota_barra <- function(base, variables, subtitulos, titulo_general, colores) {
  
  # Filtrar último trimestre disponible
  ultimo_periodo <- base %>%
    filter(ANNO == max(ANNO), TRIMESTRE == max(TRIMESTRE[ANNO == max(ANNO)]))
  
  # Construir dataframe largo con todas las variables
  datos_largo <- map2_dfr(variables, subtitulos, function(var, subtit) {
    ultimo_periodo %>%
      dplyr::select(EMPRESA, valor = all_of(var)) %>%
      mutate(metrica = subtit)
  }) %>%
    mutate(
      metrica = factor(metrica, levels = subtitulos)
    )
  
  ggplot(datos_largo, aes(x = metrica, y = valor, fill = EMPRESA)) +
    geom_col(position = "stack", width = 0.6) +
    geom_text(
      aes(label = ifelse(valor >= 0.05, percent(valor, accuracy = 1), "")),
      position = position_stack(vjust = 0.5),
      size = 3.2,
      fontface = "bold",
      color = "white",
      family = "roboto"
    ) +
    scale_fill_manual(values = colores, name = NULL) +
    scale_y_continuous(
      labels = percent_format(accuracy = 1),
      breaks = seq(0, 1, 0.1),
      expand = expansion(mult = c(0, 0))
    ) +
    labs(title = titulo_general, x = "", y = "") +
    theme_minimal() +
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(size = 9, vjust = 0.5),
      legend.position = "bottom",
      legend.margin = margin(t = -8),
      legend.box.margin = margin(t = -10),
      plot.title = element_text(size = 12, face = "bold")
    )
}

p_internet <- graficar_cuota_barra(Serviciosmoviles1, c("CUOTA_USUARIOS_IM", "CUOTA_TRAFICO_IM", "CUOTA_INGRESOS_IM"), c("Usuarios", "Tráfico", "Ingresos"),"Internet Móvil", c1)
p_voz <- graficar_cuota_barra(Serviciosmoviles1, c("CUOTA_USUARIOS_VM", "CUOTA_TRAFICO_VM", "CUOTA_INGRESOS_VM"), c("Usuarios", "Tráfico", "Ingresos"),"Voz Móvil", c1)


p_serviviosmoviles<-(p_voz | p_internet) + plot_annotation( title = "Participación de las principales medidas de voz e internet móvil\npor operador actualmente (antes de la fusión) – 2025 III",
                    theme = theme(  plot.title = element_text(family = "roboto", size = 11,
                                face = "bold", hjust = 0.5) ) ) + plot_layout(guides = "collect") & theme(legend.position = "bottom")

p_internet1 <- graficar_cuota_barra(Serviciosmoviles2, c("CUOTA_USUARIOS_IM", "CUOTA_TRAFICO_IM", "CUOTA_INGRESOS_IM"), c("Usuarios", "Tráfico", "Ingresos"),"Internet Móvil", c2)
p_voz1 <- graficar_cuota_barra(Serviciosmoviles2, c("CUOTA_USUARIOS_VM", "CUOTA_TRAFICO_VM", "CUOTA_INGRESOS_VM"), c("Usuarios", "Tráfico", "Ingresos"),"Voz Móvil", c2)

p_serviviosmoviles1<-(p_voz1 | p_internet1) + plot_annotation( title = "Participación de las principales medidas de voz e internet móvil\npor operador actualmente (con la fusión) – 2025 III",
                                                            theme = theme(  plot.title = element_text(family = "roboto", size = 11,
                                                                                                      face = "bold", hjust = 0.5) ) ) + plot_layout(guides = "collect") & theme(legend.position = "bottom")
p_serviviosmoviles1

p_SM <- graficar_cuota_barra(Serviciosmoviles1, c("CUOTA_USUARIOS_SM", "CUOTA_INGRESOS_SM"), c("Usuarios", "Ingresos"),"Servicios Móviles", c1)
p_SM 

# Gráficas ARPU
graficar_ARPU <- function(base, variable, titulo,colores, ano=NULL){
  
  if(!is.null(ano)){
    base <- base %>% 
      filter(ANNO >= ano)
  }
  
  
  max_val <- max(base[[variable]], na.rm = TRUE)
  tope <- ceiling(max_val / 1000) * 1000
  
  ggplot(base,
         aes(x = FECHA,
             y = .data[[variable]],
             color = EMPRESA,
             group = EMPRESA)) +
    
    geom_line(linewidth = 0.8, lineend = "round", linejoin = "round") +
    
    scale_color_manual(values = colores, name = NULL) +
    
    scale_y_continuous(
      breaks = scales::pretty_breaks(6),
      limits = c(0, tope),
      labels = scales::label_number(big.mark = ".", decimal.mark = ","),
      expand = expansion(mult = c(0, 0.1))
    ) +
    
    labs(    title = titulo,   x = "",   y = "Ingresos/Usuarios") +
    
    theme_minimal() +
    
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position = "bottom",
      legend.margin = margin(t = -8),   # acerca la leyenda hacia el gráfico
      legend.box.margin = margin(t = -10),
      plot.title = element_text(size = 12, face = "bold")
    )
}

#Antes de la Fusión
ARPU_VM=graficar_ARPU( Serviciosmoviles1, "ARPU_VM","ARPU - Voz Móvil",c1)
ARPU_IM= graficar_ARPU( Serviciosmoviles1, "ARPU_IM","ARPU - Internet Móvil",c1)
ARPU_SM=  graficar_ARPU( Serviciosmoviles1, "ARPU_SM","ARPU - Servicios Móviles",c1,2022)

#Después de la Fusión
ARPU_VM1=graficar_ARPU( Serviciosmoviles2, "ARPU_VM","ARPU - Voz Móvil",c2)
ARPU_IM1=graficar_ARPU( Serviciosmoviles2, "ARPU_IM","ARPU - Internet Móvil",c2)
ARPU_SM1= graficar_ARPU( Serviciosmoviles2, "ARPU_SM","ARPU - Servicios Móviles",c2,2022)

# Gráficas IPROM
graficar_IPROM <- function(base, variable, titulo, colores){
  
  max_val <- max(base[[variable]], na.rm = TRUE)

  ggplot(base,
         aes(x = FECHA,
             y = .data[[variable]],
             color = EMPRESA,
             group = EMPRESA)) +
    
    geom_line(linewidth = 0.8, lineend = "round", linejoin = "round") +
    
    scale_color_manual(values = colores, name = NULL) +
    
    scale_y_continuous(
      breaks = scales::pretty_breaks(6),
      #limits = c(0, tope),
      labels = scales::label_number(big.mark = ".", decimal.mark = ","),
      expand = expansion(mult = c(0, 0.1))
    ) +
    
    labs(
      title = titulo,
      x = "",
      y = "Ingresos/Tráfico"
    ) +
    
    theme_minimal() +
    
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position = "bottom",
      plot.title = element_text(size = 12, face = "bold"),
      legend.margin = margin(t = -10),   # acerca la leyenda hacia el gráfico
      legend.box.margin = margin(t = -10)
      )
    
}

#Antes de la Fusión
IPROM_VM=  graficar_IPROM( Serviciosmoviles1, "IPROM_VM","IPROM - Voz Móvil",c1)
IPROM_IM=graficar_IPROM( Serviciosmoviles1, "IPROM_IM","IPROM - Internet Móvil",c1)

#Después de la Fusión
IPROM_VM1= graficar_IPROM( Serviciosmoviles2, "IPROM_VM","IPROM - Voz Móvil",c2)
IPROM_IM1=graficar_IPROM( Serviciosmoviles2, "IPROM_IM","IPROM - Internet Móvil", c2)

# Gráficas Tasas

graficar_Tasa <- function(base, variable, titulo, ano=NULL, lim=NULL) {
  
  if(!is.null(ano)){
    base <- base %>% 
      filter(ANNO >= ano)
  }
  
  
  datos <- base %>%
    mutate(
      color_fill   = ifelse(.data[[variable]] >= 0, "#A8D5A2", "#F4A9A8"),
      color_border = ifelse(.data[[variable]] >= 0, "#2E7D32", "#C62828")
    )
  
  ggplot(datos, aes(x = ANNO, y = .data[[variable]])) +
    geom_col(
      aes(fill = color_fill, color = color_border),
      width = 0.7,
      linewidth = 0.6
    ) +
    scale_fill_identity() +
    scale_color_identity() +
    geom_hline(yintercept = 0, color = "black", linewidth = 0.4) +
    geom_text(
      aes(
        label = percent(.data[[variable]], accuracy = 1),
        vjust = ifelse(.data[[variable]] >= 0, -0.5, 1.3),
        color = color_border
      ),
      size = 3,
      family = "roboto"
    ) +
    scale_color_identity() +
    scale_y_continuous(
      labels = percent_format(accuracy = 1),
      breaks = seq(-0.5, 1.5, 0.1),
      expand = expansion(mult = c(0.05, lim))
    ) +
    scale_x_continuous(
      breaks = unique(base$ANNO)
    ) +
    labs(title = titulo, x = "", y = "") +
    theme_minimal() +
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      plot.title = element_text(size = 12, face = "bold")
    )
}

#Antes de la Fusión
TASA_USUARIOS_SM=  graficar_Tasa( Tasas1, "TASAC_USUARIOS_SM","Variación usuarios – Servicios móviles", 2023,lim=0.3)
TASA_TRAFICO_VM=   graficar_Tasa( Tasas1, "TASAC_TRAFICO_VM","Variación tráfico – Voz móvil", 2013, lim=0.2)
TASA_TRAFICO_IM=    graficar_Tasa( Tasas1, "TASAC_TRAFICO_IM","Variación tráfico – Internet móvil",2013,0.1)
TASA_INGRESOS_SM=   graficar_Tasa( Tasas1, "TASAC_INGRESOS_SM","Variación valores facturados – Servicios móviles",2023)

# Gráficas Stenbacka

graficar_stenbacka1 <- function(base_cuotas, var_cuotas, var_stenbacka, base_stenbacka, titulo, colores, ano = NULL) {
  
  # Filtrar por año si aplica
  if(!is.null(ano)){
    base_cuotas <- base_cuotas %>% 
      filter(ANNO >= ano)
    
    base_stenbacka <- base_stenbacka %>% 
      filter(ANNO >= ano)
  }
  
  # Quitar NA relevantes
  base_cuotas <- base_cuotas %>% 
    filter(
      !is.na(FECHA),
      !is.na(.data[[var_cuotas]])
    )
  
  base_stenbacka <- base_stenbacka %>% 
    filter(
      !is.na(FECHA),
      !is.na(.data[[var_stenbacka]])
    )
  
  color_sten <- "#E68600"
  
  niveles_fecha <- unique(base_cuotas$FECHA[order(base_cuotas$FECHA)])
  
  ggplot(
    base_cuotas,
    aes(
      x = factor(FECHA, levels = niveles_fecha), 
      y = .data[[var_cuotas]], 
      color = EMPRESA, 
      group = EMPRESA
    )
  ) +
    
    geom_line(linewidth = 0.8) +
    
    scale_color_manual(values = colores, name = NULL) +
    
    ggnewscale::new_scale_color() +
    
    geom_line(
      data = base_stenbacka %>% 
        mutate(FECHA = factor(FECHA, levels = niveles_fecha)),
      aes(
        x = FECHA, 
        y = .data[[var_stenbacka]],
        color = "Índice de Stenbacka", 
        group = 1
      ),
      linetype = "longdash",
      linewidth = 0.8,
      inherit.aes = FALSE
    ) +
    
    scale_color_manual(
      values = c("Índice de Stenbacka" = color_sten),
      name = NULL
    ) +
    
    scale_y_continuous(
      labels = scales::percent_format(accuracy = 1),
      breaks = seq(0, 1, 0.1),
      limits = c(0, 0.8),
      expand = expansion(mult = c(0, 0.05))
    ) +
    
    labs(title = titulo, x = "", y = "") +
    
    theme_minimal() +
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background  = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position  = "bottom",
      legend.margin = margin(t = -8),
      legend.box.margin = margin(t = -10),
      plot.title = element_text(size = 12, face = "bold")
    )
}
#Antes de la Fusión con gamma 1 y gamma = 0.5
Sten_Ingresos_SM1a<- graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_SM",  "STEN_INGRESOS_SM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Valores facturados Servicios Móviles"),c1,2022)
Sten_Ingresos_VM1a<-  graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_VM", "STEN_INGRESOS_VM_G1", Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Ingresos Voz Móvil"),c1)
Sten_Ingresos_IM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_IM", "STEN_INGRESOS_IM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Ingresos Internet Móvil"),c1)
Sten_Usuarios_SM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_SM", "STEN_USUARIOS_SM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Servicios Móviles"),c1,2022)
Sten_Usuarios_VM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_VM", "STEN_USUARIOS_VM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Voz Móvil"),c1)
Sten_Usuarios_IM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_IM", "STEN_USUARIOS_IM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Internet Móvil"),c1)
Sten_Trafico_VM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_TRAFICO_VM", "STEN_TRAFICO_VM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Tráfico Voz Móvil"),c1)
Sten_Trafico_IM1a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_TRAFICO_IM", "STEN_TRAFICO_IM_G1",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=1) - Tráfico Internet Móvil"),c1)

Sten_Ingresos_SM05a<- graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_SM",  "STEN_INGRESOS_SM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Valores facturados Servicios Móviles"),c1,2022)
Sten_Ingresos_VM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_VM", "STEN_INGRESOS_VM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Ingresos Voz Móvil"),c1)
Sten_Ingresos_IM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_INGRESOS_IM", "STEN_INGRESOS_IM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Ingresos Internet Móvil"),c1)
Sten_Usuarios_SM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_SM", "STEN_USUARIOS_SM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Servicios Móviles"),c1,2022)
Sten_Usuarios_VM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_VM", "STEN_USUARIOS_VM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Voz Móvil"),c1)
Sten_Usuarios_IM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_USUARIOS_IM", "STEN_USUARIOS_IM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Internet Móvil"),c1)
Sten_Trafico_VM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_TRAFICO_VM", "STEN_TRAFICO_VM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Tráfico Voz Móvil"),c1)
Sten_Trafico_IM05a<-graficar_stenbacka1(Serviciosmoviles1, "CUOTA_TRAFICO_IM", "STEN_TRAFICO_IM_G05",Stenbacka, titulo = expression("Índice Stenbacka (Gamma=0,5) - Tráfico Internet Móvil"),c1)

#Después de la Fusión con gamma 1 y gamma = 0.5

Sten_Ingresos_SM1<- graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_SM",  "STEN_INGRESOS_SM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Valores facturados Servicios Móviles"),c2,2022)
Sten_Ingresos_VM1<-  graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_VM", "STEN_INGRESOS_VM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Ingresos Voz Móvil con Tigo recargado"),c2)
Sten_Ingresos_IM1<- graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_IM", "STEN_INGRESOS_IM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Ingresos Internet Móvil con Tigo recargado"),c2)
Sten_Usuarios_SM1<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_SM", "STEN_USUARIOS_SM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Servicios Móviles con Tigo recargado"),c2,2022)
Sten_Usuarios_VM1<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_VM", "STEN_USUARIOS_VM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Voz Móvil con Tigo recargado"),c2)
Sten_Usuarios_IM1<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_IM", "STEN_USUARIOS_IM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Usuarios Internet Móvil con Tigo recargado"),c2)
Sten_Trafico_VM1<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_TRAFICO_VM", "STEN_TRAFICO_VM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Tráfico Voz Móvil con Tigo recargado"),c2)
Sten_Trafico_IM1<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_TRAFICO_IM", "STEN_TRAFICO_IM_G1",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=1) - Tráfico Internet Móvil con Tigo recargado"),c2)

Sten_Ingresos_SM05<- graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_SM",  "STEN_INGRESOS_SM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Valores facturados Servicios Móviles"),c2,2022)
Sten_Ingresos_VM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_VM", "STEN_INGRESOS_VM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Ingresos Voz Móvil"),c2)
Sten_Ingresos_IM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_INGRESOS_IM", "STEN_INGRESOS_IM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Ingresos Internet Móvil"),c2)
Sten_Usuarios_SM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_SM", "STEN_USUARIOS_SM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Servicios Móviles"),c2,2022)
Sten_Usuarios_VM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_VM", "STEN_USUARIOS_VM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Voz Móvil"),c2)
Sten_Usuarios_IM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_USUARIOS_IM", "STEN_USUARIOS_IM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Usuarios Internet Móvil"),c2)
Sten_Trafico_VM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_TRAFICO_VM", "STEN_TRAFICO_VM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Tráfico Voz Móvil"),c2)
Sten_Trafico_IM05<-graficar_stenbacka1(Serviciosmoviles2, "CUOTA_TRAFICO_IM", "STEN_TRAFICO_IM_G05",Stenbacka2, titulo = expression("Índice Stenbacka (Gamma=0,5) - Tráfico Internet Móvil"),c2)

# Gráficas HHI
graficar_HHI <- function(baseHHI, vars_HHI, titulo, etiquetas = NULL, ano=NULL){
  
  if(!is.null(ano)){
    baseHHI <-  baseHHI %>% 
      filter(ANNO >= ano)
      }
  
  if(is.null(etiquetas)) etiquetas <- vars_HHI
  
  base_larga <- baseHHI %>%
    dplyr::select(FECHA, all_of(vars_HHI)) %>%
    pivot_longer(
      cols      = all_of(vars_HHI),
      names_to  = "indicador",
      values_to = "valor"
    ) %>%
    mutate(indicador = factor(indicador, levels = vars_HHI, labels = etiquetas))
  
  # límites dinámicos
  tope  <- ceiling(max(base_larga$valor, na.rm = TRUE) / 200) * 200
  min_y <- floor(min(base_larga$valor, na.rm = TRUE) / 200) * 200
  
  ggplot(base_larga, aes(x = FECHA, y = valor, color = indicador, group = indicador)) +
    
    geom_ribbon(aes(ymin = min_y, ymax = valor, fill = indicador), alpha = 0.1) +
    
    geom_line(linewidth = 0.7) +
    
    scale_color_manual(
      values = c3[1:length(vars_HHI)],
      name = NULL
    ) +
    
    scale_fill_manual(
      values = c3[1:length(vars_HHI)],
      name = NULL
    ) +
    
    scale_y_continuous(
      breaks = seq(min_y, tope, 200),
      limits = c(min_y, tope),
      expand = expansion(mult = c(0, 0.08))
    ) +
    
    labs(
      title = titulo,
      x = "",
      y = "Índice Herfindahl-Hirschman"
    ) +
    
    theme_minimal() +
    theme(
      text = element_text(family = "roboto", color = "black"),
      plot.background = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      legend.position = "bottom",
      plot.title = element_text(size = 12, face = "bold"),
      legend.margin = margin(t = -10),   # acerca la leyenda hacia el gráfico
      legend.box.margin = margin(t = -10)
      
    )
}
#Antes de la Unión
HHI_SM=  graficar_HHI( HHI, c("HHI_CUOTA_INGRESOS_SM", "HHI_CUOTA_USUARIOS_SM"), "HHI Servicios Móviles", c("HHI Valores facturados", "HHI Usuarios"),2022)
HHI_VM= graficar_HHI( HHI, c("HHI_CUOTA_INGRESOS_VM", "HHI_CUOTA_USUARIOS_VM", "HHI_CUOTA_TRAFICO_VM"), "HHI Voz Móvil ", c("HHI Ingresos", "HHI Usuarios", "HHI Tráfico"))
HHI_IM=graficar_HHI( HHI, c("HHI_CUOTA_INGRESOS_IM", "HHI_CUOTA_USUARIOS_IM", "HHI_CUOTA_TRAFICO_IM"), "HHI Internet Móvil", c("HHI Ingresos", "HHI Usuarios", "HHI Tráfico"))

#Después de la Unión
HHI_SM1=graficar_HHI( HHI2, c("HHI_CUOTA_INGRESOS_SM", "HHI_CUOTA_USUARIOS_SM"), "HHI Servicios Móviles con Tigo recargado", c("HHI Valores facturados", "HHI Usuarios"),2022)
HHI_VM1=graficar_HHI( HHI2, c("HHI_CUOTA_INGRESOS_VM", "HHI_CUOTA_USUARIOS_VM", "HHI_CUOTA_TRAFICO_VM"), "HHI Voz Móvil con Tigo recargado", c("HHI Ingresos", "HHI Usuarios", "HHI Tráfico"))
HHI_IM1=graficar_HHI( HHI2, c("HHI_CUOTA_INGRESOS_IM", "HHI_CUOTA_USUARIOS_IM", "HHI_CUOTA_TRAFICO_IM"), "HHI Internet Móvil con Tigo recargado", c("HHI Ingresos", "HHI Usuarios", "HHI Tráfico"))

## Exportación de gráficas ####

graficosaf <- c(  "ARPU_IM", "ARPU_SM", "ARPU_VM",  "CuotaI_IM", "CuotaI_SM", "CuotaI_VM",
  "CuotaT_IM", "CuotaT_VM",  "CuotaU_SM", "CuotaU_VM", "CuotaU_IM", "IPROM_IM", "IPROM_VM",  "HHI_IM", "HHI_VM", "HHI_SM", "Sten_Trafico_IM1a", "Sten_Trafico_IM05a", "Sten_Trafico_VM1a", "Sten_Trafico_VM05a",
  "Sten_Ingresos_IM1a", "Sten_Ingresos_IM05a", "Sten_Ingresos_VM1a", "Sten_Ingresos_VM05a",  "Sten_Ingresos_SM1a", "Sten_Ingresos_SM05a",  "Sten_Usuarios_IM1a", "Sten_Usuarios_IM05a",
  "Sten_Usuarios_VM1a", "Sten_Usuarios_VM05a",  "Sten_Usuarios_SM1a", "Sten_Usuarios_SM05a", "p_serviviosmoviles", "TASA_USUARIOS_SM", "TASA_TRAFICO_IM", "TASA_TRAFICO_VM", "TASA_INGRESOS_SM",
  "T_USUARIOS_SM", "T_USUARIOS_IM","T_USUARIOS_VM","T_INGRESOS_SM","T_INGRESOS_IM","T_INGRESOS_VM","T_TRAFICO_IM","T_TRAFICO_VM")

for(nombre in graficosaf){
  if(exists(nombre)){
    g <- get(nombre)
    ggsave(
      filename = file.path(rutaga, paste0(nombre, ".jpg")),
      plot     = g,
      width    = 7,
      height   = 5,
      dpi      = 150
    )
    cat(nombre, "guardado exitosamente.\n")
  } else {
    cat("El objeto", nombre, "no existe en el entorno.\n")
  }
}


graficosdf <- c(  "ARPU_IM1", "ARPU_SM1", "ARPU_VM1",  "CuotaI_IM1", "CuotaI_SM1", "CuotaI_VM1",
                  "CuotaT_IM1", "CuotaT_VM1",  "CuotaU_SM1", "CuotaU_VM1", "CuotaU_IM1", "IPROM_IM1", "IPROM_VM1",  "HHI_IM1", "HHI_VM1", "HHI_SM1", "Sten_Trafico_IM1", "Sten_Trafico_IM05", "Sten_Trafico_VM1", "Sten_Trafico_VM05",
                  "Sten_Ingresos_IM1", "Sten_Ingresos_IM05", "Sten_Ingresos_VM1", "Sten_Ingresos_VM05",  "Sten_Ingresos_SM1", "Sten_Ingresos_SM05",  "Sten_Usuarios_IM1", "Sten_Usuarios_IM05",
                  "Sten_Usuarios_VM1", "Sten_Usuarios_VM05",  "Sten_Usuarios_SM1", "Sten_Usuarios_SM05", "p_serviviosmoviles1", "T_USUARIOS_SM1", "T_USUARIOS_IM1","T_USUARIOS_VM1","T_INGRESOS_SM1",
                  "T_INGRESOS_IM1","T_INGRESOS_VM1","T_TRAFICO_IM1","T_TRAFICO_VM1")

for(nombre in graficosdf){
  if(exists(nombre)){
    g <- get(nombre)
    ggsave(
      filename = file.path(rutagd, paste0(nombre, ".jpg")),
      plot     = g,
      width    = 7,
      height   = 5,
      dpi      = 150
    )
    cat(nombre, "guardado exitosamente.\n")
  } else {
    cat("El objeto", nombre, "no existe en el entorno.\n")
  }
}