# -------------------------------------------------------------
# SECCIÓN 2 — Parámetros del proyecto y marco metodológico
# -------------------------------------------------------------

# País de estudio 
paises <- c("SV")   # El Salvador

# Parámetros de descarga desde la API WDI
usar_latest <- TRUE     # TRUE = usar el dato más reciente disponible (recomendado por el BM)
year_target <- 2022     # Si usar_latest = FALSE, descargaría solamente este año
guardar_resultados <- TRUE  # Exportar o no los CSV finales

# Sobre el proyecto:
cat("
### Enfoque general del proyecto

El objetivo central de este trabajo es construir un **Índice Sintético de Desarrollo (ISD)** que permita analizar
las diferencias entre dos enfoques de desarrollo económico:

1. **Perspectiva Ortodoxa:**  
   Centrada en variables macroeconómicas tradicionales como crecimiento, inversión, exportaciones
   y empleo. Privilegia la estabilidad y la eficiencia de mercado como motores del desarrollo.

2. **Perspectiva Heterodoxa:**  
   Enfatiza dimensiones estructurales, sociales y ambientales del desarrollo: desigualdad,
   sostenibilidad, salud, acceso a servicios básicos y energía renovable.

Además, el proyecto solicita replicar ambas perspectivas **a nivel sectorial**, para evaluar la contribución
del sector industrial al desarrollo del país.

### Índices a construir

Se elaborarán *seis* índices sintéticos:

**ISD Nacional**
1. ISD Nacional Ortodoxo  
2. ISD Nacional Heterodoxo  
3. ISD Nacional Combinado (promedio de ambos)

**ISD Sector Industrial**
4. ISD Sectorial Ortodoxo  
5. ISD Sectorial Heterodoxo  
6. ISD Sectorial Combinado (promedio)

### Justificación del uso de WDI

Los indicadores provienen de la base de datos del Banco Mundial (WDI), fuente ampliamente utilizada
en estudios sobre desarrollo por su:

- comparabilidad internacional,  
- periodicidad anual,  
- calidad estadística,  
- actualización permanente,  
- disponibilidad para El Salvador (SV).

La selección de variables ortodoxas y heterodoxas sigue las propuestas metodológicas del curso y
la guía del proyecto final (documentos adjuntos por el estudiante).

Con estos parámetros definidos, procedemos a especificar los indicadores seleccionados.
")
## 
## ### Enfoque general del proyecto
## 
## El objetivo central de este trabajo es construir un **Índice Sintético de Desarrollo (ISD)** que permita analizar
## las diferencias entre dos enfoques de desarrollo económico:
## 
## 1. **Perspectiva Ortodoxa:**  
##    Centrada en variables macroeconómicas tradicionales como crecimiento, inversión, exportaciones
##    y empleo. Privilegia la estabilidad y la eficiencia de mercado como motores del desarrollo.
## 
## 2. **Perspectiva Heterodoxa:**  
##    Enfatiza dimensiones estructurales, sociales y ambientales del desarrollo: desigualdad,
##    sostenibilidad, salud, acceso a servicios básicos y energía renovable.
## 
## Además, el proyecto solicita replicar ambas perspectivas **a nivel sectorial**, para evaluar la contribución
## del sector industrial al desarrollo del país.
## 
## ### Índices a construir
## 
## Se elaborarán *seis* índices sintéticos:
## 
## **ISD Nacional**
## 1. ISD Nacional Ortodoxo  
## 2. ISD Nacional Heterodoxo  
## 3. ISD Nacional Combinado (promedio de ambos)
## 
## **ISD Sector Industrial**
## 4. ISD Sectorial Ortodoxo  
## 5. ISD Sectorial Heterodoxo  
## 6. ISD Sectorial Combinado (promedio)
## 
## ### Justificación del uso de WDI
## 
## Los indicadores provienen de la base de datos del Banco Mundial (WDI), fuente ampliamente utilizada
## en estudios sobre desarrollo por su:
## 
## - comparabilidad internacional,  
## - periodicidad anual,  
## - calidad estadística,  
## - actualización permanente,  
## - disponibilidad para El Salvador (SV).
## 
## La selección de variables ortodoxas y heterodoxas sigue las propuestas metodológicas del curso y
## la guía del proyecto final (documentos adjuntos por el estudiante).
## 
## Con estos parámetros definidos, procedemos a especificar los indicadores seleccionados.
# -------------------------------------------------------------
# SECCIÓN 3 — Selección de indicadores
# -------------------------------------------------------------
# En esta sección definimos los indicadores ortodoxos y heterodoxos
# siguiendo la guía metodológica del proyecto y las dos propuestas 
# incorporadas por el estudiante (nacional y sectorial).

cat("
### Enfoque conceptual para la selección de indicadores

Con base en la literatura del desarrollo económico y las indicaciones del curso, 
la selección de indicadores se realiza bajo dos marcos teóricos:

#### 1) Perspectiva Ortodoxa
Se enfoca en variables macroeconómicas tradicionales que reflejan:
- crecimiento económico,
- acumulación de capital,
- apertura comercial,
- inversión extranjera,
- participación económica.

Estos indicadores están asociados al funcionamiento de los mercados, la productividad 
y la eficiencia como mecanismos principales que impulsan el desarrollo.

#### 2) Perspectiva Heterodoxa
Incluye dimensiones estructurales del desarrollo que la visión ortodoxa no captura:
- desigualdad,
- sostenibilidad ambiental,
- desarrollo humano (salud, longevidad),
- acceso a servicios básicos,
- transición energética.

Estos factores permiten evaluar el desarrollo como un proceso multidimensional.

Además, el sector industrial es analizado con indicadores propios debido a su importancia
en la transformación productiva de economías en desarrollo como El Salvador.
")
## 
## ### Enfoque conceptual para la selección de indicadores
## 
## Con base en la literatura del desarrollo económico y las indicaciones del curso, 
## la selección de indicadores se realiza bajo dos marcos teóricos:
## 
## #### 1) Perspectiva Ortodoxa
## Se enfoca en variables macroeconómicas tradicionales que reflejan:
## - crecimiento económico,
## - acumulación de capital,
## - apertura comercial,
## - inversión extranjera,
## - participación económica.
## 
## Estos indicadores están asociados al funcionamiento de los mercados, la productividad 
## y la eficiencia como mecanismos principales que impulsan el desarrollo.
## 
## #### 2) Perspectiva Heterodoxa
## Incluye dimensiones estructurales del desarrollo que la visión ortodoxa no captura:
## - desigualdad,
## - sostenibilidad ambiental,
## - desarrollo humano (salud, longevidad),
## - acceso a servicios básicos,
## - transición energética.
## 
## Estos factores permiten evaluar el desarrollo como un proceso multidimensional.
## 
## Además, el sector industrial es analizado con indicadores propios debido a su importancia
## en la transformación productiva de economías en desarrollo como El Salvador.
# -------------------------------------------------------------
# INDICADORES NACIONALES — ORTODOXOS 
# -------------------------------------------------------------
nat_ortho_codes <- c(
  "NY.GDP.PCAP.CD",        # PIB per cápita (nivel)
  "NY.GDP.MKTP.KD.ZG",     # Crecimiento económico
  "NE.GDI.TOTL.ZS",        # Formación bruta de capital
  "SL.EMP.TOTL.SP.ZS",     # Tasa de empleo
  "NE.EXP.GNFS.ZS",        # Exportaciones (% PIB)
  "BX.KLT.DINV.WD.GD.ZS"   # Inversión extranjera directa (% PIB)
)

# -------------------------------------------------------------
# INDICADORES NACIONALES — HETERODOXOS 
# -------------------------------------------------------------
nat_hetero_codes <- c(
  "SI.POV.GINI",           # Desigualdad (Gini)
  "SP.DYN.LE00.IN",        # Esperanza de vida (desarrollo humano)
  "EG.FEC.RNEW.ZS",        # Energías renovables (% consumo total)
  "EN.ATM.CO2E.PC",        # CO2 per cápita (presión ambiental)
  "SH.H2O.SAFE.ZS",        # Acceso a agua potable (% población)
  "SH.XPD.CHEX.GD.ZS"      # Gasto en salud (% PIB)
)

# -------------------------------------------------------------
# INDICADORES SECTOR INDUSTRIAL — ORTODOXOS
# (Limitados a disponibilidad del Banco Mundial)
# -------------------------------------------------------------
sec_ortho_codes <- c(
  "NV.IND.MANF.ZS",        # Manufactura (% PIB)
  "NV.IND.TOTL.ZS"         # Industria total (% PIB)
)

# -------------------------------------------------------------
# INDICADORES SECTOR INDUSTRIAL — HETERODOXOS
# (Uso de proxies debido a limitaciones de datos sectoriales)
# -------------------------------------------------------------
sec_hetero_codes <- c(
  "EG.FEC.RNEW.ZS",        # Energía renovable vinculada a industria
  "EN.ATM.CO2E.KT",        # CO2 total (proxy de impacto industrial)
  "SP.POP.DPND",           # Razón de dependencia (estructura demográfica)
  "SP.POP.TOTL"            # Población total (escala demanda/producción)
)

# -------------------------------------------------------------
# Consolidación de indicadores
# -------------------------------------------------------------
all_codes <- unique(c(
  nat_ortho_codes,
  nat_hetero_codes,
  sec_ortho_codes,
  sec_hetero_codes
))

# Tabla resumen para documento 
tabla_indicadores <- tibble(
  Grupo = c(
    rep("Nacional - Ortodoxo", length(nat_ortho_codes)),
    rep("Nacional - Heterodoxo", length(nat_hetero_codes)),
    rep("Sector Industrial - Ortodoxo", length(sec_ortho_codes)),
    rep("Sector Industrial - Heterodoxo", length(sec_hetero_codes))
  ),
  Indicador_WDI = c(
    nat_ortho_codes,
    nat_hetero_codes,
    sec_ortho_codes,
    sec_hetero_codes
  )
)

kable(tabla_indicadores, caption = "Tabla 1: Indicadores seleccionados por grupo teórico")
Tabla 1: Indicadores seleccionados por grupo teórico
Grupo Indicador_WDI
Nacional - Ortodoxo NY.GDP.PCAP.CD
Nacional - Ortodoxo NY.GDP.MKTP.KD.ZG
Nacional - Ortodoxo NE.GDI.TOTL.ZS
Nacional - Ortodoxo SL.EMP.TOTL.SP.ZS
Nacional - Ortodoxo NE.EXP.GNFS.ZS
Nacional - Ortodoxo BX.KLT.DINV.WD.GD.ZS
Nacional - Heterodoxo SI.POV.GINI
Nacional - Heterodoxo SP.DYN.LE00.IN
Nacional - Heterodoxo EG.FEC.RNEW.ZS
Nacional - Heterodoxo EN.ATM.CO2E.PC
Nacional - Heterodoxo SH.H2O.SAFE.ZS
Nacional - Heterodoxo SH.XPD.CHEX.GD.ZS
Sector Industrial - Ortodoxo NV.IND.MANF.ZS
Sector Industrial - Ortodoxo NV.IND.TOTL.ZS
Sector Industrial - Heterodoxo EG.FEC.RNEW.ZS
Sector Industrial - Heterodoxo EN.ATM.CO2E.KT
Sector Industrial - Heterodoxo SP.POP.DPND
Sector Industrial - Heterodoxo SP.POP.TOTL
# -------------------------------------------------------------
# SECCIÓN 4 — Descarga de datos desde WDI y limpieza inicial
# -------------------------------------------------------------

cat("
### Descarga de datos desde el Banco Mundial (WDI)

A continuación se procede a descargar todos los indicadores seleccionados en 
la Sección 3 directamente desde la API del Banco Mundial (WDI). El objetivo es
obtener la última observación disponible para El Salvador (SV), con el fin de 
construir los seis índices sintéticos (ISD) de forma consistente y comparable.

Esta sección incluye:
- limpieza de nombres de variables,
- verificación de disponibilidad de indicadores,
- inspección preliminar del dataset.
")
## 
## ### Descarga de datos desde el Banco Mundial (WDI)
## 
## A continuación se procede a descargar todos los indicadores seleccionados en 
## la Sección 3 directamente desde la API del Banco Mundial (WDI). El objetivo es
## obtener la última observación disponible para El Salvador (SV), con el fin de 
## construir los seis índices sintéticos (ISD) de forma consistente y comparable.
## 
## Esta sección incluye:
## - limpieza de nombres de variables,
## - verificación de disponibilidad de indicadores,
## - inspección preliminar del dataset.
# -----------------------------
# DESCARGA PRINCIPAL WDI
# -----------------------------
message("Descargando indicadores desde WDI para el país: ", paises)

wdi_raw <- WDI(
  country   = paises,
  indicator = all_codes,
  latest    = ifelse(usar_latest, 1, 0),  # descarga solo último dato
  extra     = TRUE,                       # incluye información de región, ingreso, etc.
  cache     = NULL
)

# Limpieza de nombres estandarizados
wdi_raw <- wdi_raw %>%
  clean_names() %>%
  as_tibble()

# Vista preliminar
glimpse(wdi_raw)
## Rows: 4
## Columns: 26
## $ country              <chr> "El Salvador", "El Salvador", "El Salvador", "El …
## $ iso2c                <chr> "SV", "SV", "SV", "SV"
## $ iso3c                <chr> "SLV", "SLV", "SLV", "SLV"
## $ year                 <int> 2021, 2022, 2023, 2024
## $ status               <chr> "", "", "", ""
## $ lastupdated          <chr> "2025-10-07", "2025-10-07", "2025-10-07", "2025-1…
## $ ny_gdp_pcap_cd       <dbl> NA, NA, NA, 5579.66
## $ ny_gdp_mktp_kd_zg    <dbl> NA, NA, NA, 2.60202
## $ ne_gdi_totl_zs       <dbl> NA, NA, NA, 20.34423
## $ sl_emp_totl_sp_zs    <dbl> NA, NA, NA, 58.924
## $ ne_exp_gnfs_zs       <dbl> NA, NA, NA, 32.7607
## $ bx_klt_dinv_wd_gd_zs <dbl> NA, NA, NA, 2.612419
## $ si_pov_gini          <dbl> NA, NA, 39.8, NA
## $ sp_dyn_le00_in       <dbl> NA, NA, 72.099, NA
## $ eg_fec_rnew_zs       <dbl> 21.9, NA, NA, NA
## $ sh_xpd_chex_gd_zs    <dbl> NA, 9.840797, NA, NA
## $ nv_ind_manf_zs       <dbl> NA, NA, NA, 12.04548
## $ nv_ind_totl_zs       <dbl> NA, NA, NA, 22.43831
## $ sp_pop_dpnd          <dbl> NA, NA, NA, 49.15297
## $ sp_pop_totl          <dbl> NA, NA, NA, 6338193
## $ region               <chr> "Latin America & Caribbean", "Latin America & Car…
## $ capital              <chr> "San Salvador", "San Salvador", "San Salvador", "…
## $ longitude            <chr> "-89.2073", "-89.2073", "-89.2073", "-89.2073"
## $ latitude             <chr> "13.7034", "13.7034", "13.7034", "13.7034"
## $ income               <chr> "Upper middle income", "Upper middle income", "Up…
## $ lending              <chr> "IBRD", "IBRD", "IBRD", "IBRD"
cat("
Los datos han sido descargados correctamente. A continuación se verificará la 
disponibilidad real de cada indicador luego de la limpieza.
")
## 
## Los datos han sido descargados correctamente. A continuación se verificará la 
## disponibilidad real de cada indicador luego de la limpieza.
# -------------------------------------------------------------
# SECCION 5 — Verificacion de indicadores disponibles
# -------------------------------------------------------------

cat("
### Verificacion de disponibilidad de indicadores

Luego de la descarga desde WDI, se verifica que indicadores seleccionados
estan realmente disponibles para El Salvador (SV). Este paso es esencial
para evitar errores en etapas posteriores: normalizacion y matrices ISD.
")
## 
## ### Verificacion de disponibilidad de indicadores
## 
## Luego de la descarga desde WDI, se verifica que indicadores seleccionados
## estan realmente disponibles para El Salvador (SV). Este paso es esencial
## para evitar errores en etapas posteriores: normalizacion y matrices ISD.
# Funcion para estandarizar nombres (clean_names)
code_to_clean <- function(x) janitor::make_clean_names(x)

# Tabla que mapea codigo original -> nombre limpio
meta <- tibble(
  code       = all_codes,
  code_clean = map_chr(all_codes, code_to_clean)
)

# Determinar indicadores presentes en los datos descargados
present <- intersect(meta$code_clean, names(wdi_raw))

# Marcar disponibilidad (evitar acentos para evitar errores)
meta <- meta %>%
  mutate(disponible = ifelse(code_clean %in% present, "Si", "No"))

cat("A continuacion se presenta la tabla de disponibilidad de indicadores:")
## A continuacion se presenta la tabla de disponibilidad de indicadores:
kable(meta, caption = "Tabla 2: Disponibilidad de indicadores WDI para El Salvador")
Tabla 2: Disponibilidad de indicadores WDI para El Salvador
code code_clean disponible
NY.GDP.PCAP.CD ny_gdp_pcap_cd Si
NY.GDP.MKTP.KD.ZG ny_gdp_mktp_kd_zg Si
NE.GDI.TOTL.ZS ne_gdi_totl_zs Si
SL.EMP.TOTL.SP.ZS sl_emp_totl_sp_zs Si
NE.EXP.GNFS.ZS ne_exp_gnfs_zs Si
BX.KLT.DINV.WD.GD.ZS bx_klt_dinv_wd_gd_zs Si
SI.POV.GINI si_pov_gini Si
SP.DYN.LE00.IN sp_dyn_le00_in Si
EG.FEC.RNEW.ZS eg_fec_rnew_zs Si
EN.ATM.CO2E.PC en_atm_co2e_pc No
SH.H2O.SAFE.ZS sh_h2o_safe_zs No
SH.XPD.CHEX.GD.ZS sh_xpd_chex_gd_zs Si
NV.IND.MANF.ZS nv_ind_manf_zs Si
NV.IND.TOTL.ZS nv_ind_totl_zs Si
EN.ATM.CO2E.KT en_atm_co2e_kt No
SP.POP.DPND sp_pop_dpnd Si
SP.POP.TOTL sp_pop_totl Si
# Grupos en nombres limpios
nat_ortho_clean  <- intersect(map_chr(nat_ortho_codes,  code_to_clean), present)
nat_hetero_clean <- intersect(map_chr(nat_hetero_codes, code_to_clean), present)
sec_ortho_clean  <- intersect(map_chr(sec_ortho_codes,  code_to_clean), present)
sec_hetero_clean <- intersect(map_chr(sec_hetero_codes, code_to_clean), present)

tabla_grupos <- tibble(
  Grupo = c("Nacional Ortodoxo", "Nacional Heterodoxo",
            "Sector Industrial Ortodoxo", "Sector Industrial Heterodoxo"),
  Indicadores_Disponibles = c(
    paste(nat_ortho_clean, collapse = ", "),
    paste(nat_hetero_clean, collapse = ", "),
    paste(sec_ortho_clean, collapse = ", "),
    paste(sec_hetero_clean, collapse = ", ")
  )
)

kable(tabla_grupos, caption = "Tabla 3: Indicadores disponibles por grupo teórico (nombres limpios)")
Tabla 3: Indicadores disponibles por grupo teórico (nombres limpios)
Grupo Indicadores_Disponibles
Nacional Ortodoxo ny_gdp_pcap_cd, ny_gdp_mktp_kd_zg, ne_gdi_totl_zs, sl_emp_totl_sp_zs, ne_exp_gnfs_zs, bx_klt_dinv_wd_gd_zs
Nacional Heterodoxo si_pov_gini, sp_dyn_le00_in, eg_fec_rnew_zs, sh_xpd_chex_gd_zs
Sector Industrial Ortodoxo nv_ind_manf_zs, nv_ind_totl_zs
Sector Industrial Heterodoxo eg_fec_rnew_zs, sp_pop_dpnd, sp_pop_totl
cat("
Con esta verificacion queda definida la lista final de variables disponibles,
lista para construir la base integrada en la Seccion 6.
")
## 
## Con esta verificacion queda definida la lista final de variables disponibles,
## lista para construir la base integrada en la Seccion 6.
# -------------------------------------------------------------
# SECCION 6 — Construccion de la base final (ultimo año disponible)
# -------------------------------------------------------------

cat("
### Construccion de la base integrada

En esta seccion se construye la base final que servira como insumo para
la normalizacion en la Seccion 7 y para el calculo de los seis ISD.
Como se trabaja unicamente con El Salvador (SV), se selecciona el
ultimo valor disponible para cada indicador WDI.

Este enfoque sigue las recomendaciones del Banco Mundial, que sugiere
usar la observacion mas reciente cuando se construyen indicadores 
sinteticos de comparacion temporal o de caracter estructural.
")
## 
## ### Construccion de la base integrada
## 
## En esta seccion se construye la base final que servira como insumo para
## la normalizacion en la Seccion 7 y para el calculo de los seis ISD.
## Como se trabaja unicamente con El Salvador (SV), se selecciona el
## ultimo valor disponible para cada indicador WDI.
## 
## Este enfoque sigue las recomendaciones del Banco Mundial, que sugiere
## usar la observacion mas reciente cuando se construyen indicadores 
## sinteticos de comparacion temporal o de caracter estructural.
# -------------------------------------------------------------
# 1) Seleccion del ultimo valor disponible por pais
# -------------------------------------------------------------
if ("year" %in% names(wdi_raw)) {
  
  wdi_base <- wdi_raw %>%
    arrange(country, desc(year)) %>%
    group_by(country) %>%
    slice(1) %>%          # tomar la ultima observacion disponible
    ungroup()
  
} else {
  # Si por alguna razon WDI no retorna columna "year"
  wdi_base <- wdi_raw
}

# -------------------------------------------------------------
# 2) Seleccionar solamente las columnas relevantes:
#    - variables limpias
#    - pais, iso2c, year
# -------------------------------------------------------------
keep_cols <- c("country", "iso2c", "year", present)

wdi_base <- wdi_base %>%
  select(any_of(keep_cols))

# Mostrar tabla de base final (Tabla 4)
kable(
  wdi_base %>% select(country, year, any_of(present)),
  caption = "Tabla 4: Último valor disponible para cada indicador (El Salvador)"
)
Tabla 4: Último valor disponible para cada indicador (El Salvador)
country year ny_gdp_pcap_cd ny_gdp_mktp_kd_zg ne_gdi_totl_zs sl_emp_totl_sp_zs ne_exp_gnfs_zs bx_klt_dinv_wd_gd_zs si_pov_gini sp_dyn_le00_in eg_fec_rnew_zs sh_xpd_chex_gd_zs nv_ind_manf_zs nv_ind_totl_zs sp_pop_dpnd sp_pop_totl
El Salvador 2024 5579.66 2.60202 20.34423 58.924 32.7607 2.612419 NA NA NA NA 12.04548 22.43831 49.15297 6338193
cat("
La Tabla 4 muestra el universo de datos que efectivamente seran utilizados
en la construccion del ISD. A partir de esta base, procedemos a la 
normalizacion min-max en la Seccion 7.
")
## 
## La Tabla 4 muestra el universo de datos que efectivamente seran utilizados
## en la construccion del ISD. A partir de esta base, procedemos a la 
## normalizacion min-max en la Seccion 7.
# -------------------------------------------------------------
# SECCION 7 — Normalizacion Min-Max y direccion positiva/negativa
# -------------------------------------------------------------

cat("
### Normalizacion de los indicadores

Una vez construida la base final, el siguiente paso consiste en normalizar
cada indicador para llevarlo a una escala comun entre 0 y 1. Esto permite
comparar variables que originalmente estan en unidades muy distintas
(PIB, desigualdad, energia renovable, CO2, etc.).

Se utiliza la normalizacion **Min-Max**:
  
  X_norm = (X - min) / (max - min)

Tambien se aplica inversion para indicadores donde:
- mayor valor implica peor desempeño (por ejemplo, desigualdad o emisiones),
- se desea que la interpretacion final sea uniforme: valores mas altos
  implican mejor desempeño.
")
## 
## ### Normalizacion de los indicadores
## 
## Una vez construida la base final, el siguiente paso consiste en normalizar
## cada indicador para llevarlo a una escala comun entre 0 y 1. Esto permite
## comparar variables que originalmente estan en unidades muy distintas
## (PIB, desigualdad, energia renovable, CO2, etc.).
## 
## Se utiliza la normalizacion **Min-Max**:
##   
##   X_norm = (X - min) / (max - min)
## 
## Tambien se aplica inversion para indicadores donde:
## - mayor valor implica peor desempeño (por ejemplo, desigualdad o emisiones),
## - se desea que la interpretacion final sea uniforme: valores mas altos
##   implican mejor desempeño.
# -------------------------------------------------------------
# 1) Indicadores cuya direccion es NEGATIVA (mayor = peor)
# -------------------------------------------------------------
neg_indicators <- c(
  code_to_clean("SI.POV.GINI"),   # desigualdad
  code_to_clean("EN.ATM.CO2E.PC"),# CO2 per capita
  code_to_clean("EN.ATM.CO2E.KT"),# CO2 total
  code_to_clean("SP.POP.DPND")    # razon de dependencia
)

# -------------------------------------------------------------
# 2) Funcion de normalizacion Min-Max robusta
# -------------------------------------------------------------
normalize_minmax <- function(x, direction = "pos") {
  
  x_num <- as.numeric(x)
  
  # Si todo es NA, devolver NA
  if (all(is.na(x_num))) return(rep(NA_real_, length(x_num)))
  
  minv <- min(x_num, na.rm = TRUE)
  maxv <- max(x_num, na.rm = TRUE)
  
  # Si min = max, no tiene rango → asignar 1
  if (minv == maxv) return(rep(1, length(x_num)))
  
  # Normalizacion
  res <- (x_num - minv) / (maxv - minv)
  
  # Inversion para indicadores negativos
  if (direction == "neg") {
    res <- 1 - res
  }
  
  return(res)
}

# -------------------------------------------------------------
# 3) Crear base normalizada wdi_norm
# -------------------------------------------------------------
wdi_norm <- wdi_base

for (col in present) {
  
  dir_indicator <- ifelse(col %in% neg_indicators, "neg", "pos")
  
  newcol <- paste0(col, "_n")  # nuevo nombre
  
  wdi_norm[[newcol]] <- normalize_minmax(
    wdi_base[[col]],
    direction = dir_indicator
  )
}

# -------------------------------------------------------------
# 4) Mostrar solo columnas normalizadas
# -------------------------------------------------------------
tabla_norm <- wdi_norm %>% select(country, year, ends_with("_n"))

kable(
  tabla_norm,
  caption = "Tabla 5: Indicadores normalizados (escala 0 a 1)"
)
Tabla 5: Indicadores normalizados (escala 0 a 1)
country year ny_gdp_pcap_cd_n ny_gdp_mktp_kd_zg_n ne_gdi_totl_zs_n sl_emp_totl_sp_zs_n ne_exp_gnfs_zs_n bx_klt_dinv_wd_gd_zs_n si_pov_gini_n sp_dyn_le00_in_n eg_fec_rnew_zs_n sh_xpd_chex_gd_zs_n nv_ind_manf_zs_n nv_ind_totl_zs_n sp_pop_dpnd_n sp_pop_totl_n
El Salvador 2024 1 1 1 1 1 1 NA NA NA NA 1 1 1 1
cat("
La Tabla 5 muestra los valores normalizados de cada indicador. 
Estos valores se utilizaran para generar las matrices X y los seis índices 
sintéticos en las secciones siguientes.

Los indicadores negativos ya fueron invertidos correctamente para que 
valores mas altos representen un mejor desempeño.
")
## 
## La Tabla 5 muestra los valores normalizados de cada indicador. 
## Estos valores se utilizaran para generar las matrices X y los seis índices 
## sintéticos en las secciones siguientes.
## 
## Los indicadores negativos ya fueron invertidos correctamente para que 
## valores mas altos representen un mejor desempeño.
# -------------------------------------------------------------
# SECCION 8 — Construccion de matrices X y definicion de pesos
# -------------------------------------------------------------

cat("
### Construccion de matrices X por grupo teorico

Cada indice sintetico (ISD) se construye a partir de una matriz X, que contiene:

- las columnas normalizadas de los indicadores seleccionados,
- organizadas por grupo teorico (ortodoxo o heterodoxo),
- y diferenciando entre nivel nacional y nivel sectorial.

Cada fila corresponde al pais (en este caso, solamente El Salvador).
Cada columna corresponde a un indicador normalizado en escala 0-1.
")
## 
## ### Construccion de matrices X por grupo teorico
## 
## Cada indice sintetico (ISD) se construye a partir de una matriz X, que contiene:
## 
## - las columnas normalizadas de los indicadores seleccionados,
## - organizadas por grupo teorico (ortodoxo o heterodoxo),
## - y diferenciando entre nivel nacional y nivel sectorial.
## 
## Cada fila corresponde al pais (en este caso, solamente El Salvador).
## Cada columna corresponde a un indicador normalizado en escala 0-1.
# -------------------------------------------------------------
# Funcion generica para crear matriz X a partir de nombres limpios
# -------------------------------------------------------------
build_X <- function(clean_codes) {
  
  cols_n <- paste0(clean_codes, "_n")             # nombres normalizados
  cols_exist <- intersect(cols_n, names(wdi_norm))  # filtrar existentes
  
  if (length(cols_exist) == 0) {
    return(matrix(nrow = nrow(wdi_norm), ncol = 0)) # matriz vacia si no hay datos
  }
  
  mat <- wdi_norm %>%
    select(all_of(cols_exist)) %>%
    mutate(across(everything(), as.numeric)) %>%
    as.matrix()
  
  colnames(mat) <- cols_exist
  return(mat)
}

# -------------------------------------------------------------
# Matrices X por grupo
# -------------------------------------------------------------
X_nat_ortho  <- build_X(nat_ortho_clean)
X_nat_hetero <- build_X(nat_hetero_clean)
X_sec_ortho  <- build_X(sec_ortho_clean)
X_sec_hetero <- build_X(sec_hetero_clean)

# -------------------------------------------------------------
# Definicion de pesos (equal weights)
# -------------------------------------------------------------
w_nat_ortho  <- if (ncol(X_nat_ortho)  > 0) rep(1 / ncol(X_nat_ortho),  ncol(X_nat_ortho))  else numeric(0)
w_nat_hetero <- if (ncol(X_nat_hetero) > 0) rep(1 / ncol(X_nat_hetero), ncol(X_nat_hetero)) else numeric(0)
w_sec_ortho  <- if (ncol(X_sec_ortho)  > 0) rep(1 / ncol(X_sec_ortho),  ncol(X_sec_ortho))  else numeric(0)
w_sec_hetero <- if (ncol(X_sec_hetero) > 0) rep(1 / ncol(X_sec_hetero), ncol(X_sec_hetero)) else numeric(0)

# -------------------------------------------------------------
# Tabla resumen de cantidad de indicadores por matriz
# -------------------------------------------------------------
tabla_matrices <- tibble(
  Grupo = c("Nacional Ortodoxo", "Nacional Heterodoxo",
            "Sectorial Ortodoxo", "Sectorial Heterodoxo"),
  Numero_de_Indicadores = c(ncol(X_nat_ortho),
                            ncol(X_nat_hetero),
                            ncol(X_sec_ortho),
                            ncol(X_sec_hetero))
)

kable(tabla_matrices, caption = "Tabla 6: Tamaño de matrices X por grupo teorico")
Tabla 6: Tamaño de matrices X por grupo teorico
Grupo Numero_de_Indicadores
Nacional Ortodoxo 6
Nacional Heterodoxo 4
Sectorial Ortodoxo 2
Sectorial Heterodoxo 3
cat("
La Tabla 6 muestra cuántos indicadores contiene cada matriz X. En caso
de que alguna matriz tenga 0 columnas, significa que ningun indicador
para ese grupo estuvo disponible en WDI para El Salvador.

Con estas matrices y pesos, estamos listos para proceder a la construccion
de los seis indices sinteticos en la Seccion 9.
")
## 
## La Tabla 6 muestra cuántos indicadores contiene cada matriz X. En caso
## de que alguna matriz tenga 0 columnas, significa que ningun indicador
## para ese grupo estuvo disponible en WDI para El Salvador.
## 
## Con estas matrices y pesos, estamos listos para proceder a la construccion
## de los seis indices sinteticos en la Seccion 9.
# -------------------------------------------------------------
# SECCION 9 — Calculo de los seis indices sinteticos (ISD)
# -------------------------------------------------------------

cat("
### Calculo de los Indices Sinteticos de Desarrollo (ISD)

A partir de las matrices X construidas en la Seccion 8, ahora se procede
al calculo de los seis indices sinteticos:

1. ISD Nacional Ortodoxo
2. ISD Nacional Heterodoxo
3. ISD Nacional Combinado
4. ISD Sectorial Ortodoxo
5. ISD Sectorial Heterodoxo
6. ISD Sectorial Combinado

Cada indice se construye mediante un promedio ponderado, donde los pesos
representan la importancia relativa de cada indicador dentro de su grupo.
En este trabajo se utilizan **pesos iguales**, siguiendo la metodologia
estandar de indices sintéticos.
")
## 
## ### Calculo de los Indices Sinteticos de Desarrollo (ISD)
## 
## A partir de las matrices X construidas en la Seccion 8, ahora se procede
## al calculo de los seis indices sinteticos:
## 
## 1. ISD Nacional Ortodoxo
## 2. ISD Nacional Heterodoxo
## 3. ISD Nacional Combinado
## 4. ISD Sectorial Ortodoxo
## 5. ISD Sectorial Heterodoxo
## 6. ISD Sectorial Combinado
## 
## Cada indice se construye mediante un promedio ponderado, donde los pesos
## representan la importancia relativa de cada indicador dentro de su grupo.
## En este trabajo se utilizan **pesos iguales**, siguiendo la metodologia
## estandar de indices sintéticos.
# -------------------------------------------------------------
# Funcion generica para calcular un ISD
# -------------------------------------------------------------
calc_isd <- function(X, w) {
  if (length(w) == 0 || ncol(X) == 0) return(NA_real_)
  as.numeric(X %*% w)
}

# -------------------------------------------------------------
# Calculo de cada ISD
# -------------------------------------------------------------
isd_nat_ortho  <- calc_isd(X_nat_ortho,  w_nat_ortho)
isd_nat_hetero <- calc_isd(X_nat_hetero, w_nat_hetero)
isd_nat_comb   <- mean(c(isd_nat_ortho, isd_nat_hetero), na.rm = TRUE)

isd_sec_ortho  <- calc_isd(X_sec_ortho,  w_sec_ortho)
isd_sec_hetero <- calc_isd(X_sec_hetero, w_sec_hetero)
isd_sec_comb   <- mean(c(isd_sec_ortho, isd_sec_hetero), na.rm = TRUE)

# -------------------------------------------------------------
# Construccion de tabla final
# -------------------------------------------------------------
resultados_isd <- tibble(
  Pais = wdi_norm$country,
  ISD_Nacional_Ortodoxo   = isd_nat_ortho,
  ISD_Nacional_Heterodoxo = isd_nat_hetero,
  ISD_Nacional_Combinado  = isd_nat_comb,
  ISD_Sector_Ortodoxo     = isd_sec_ortho,
  ISD_Sector_Heterodoxo   = isd_sec_hetero,
  ISD_Sector_Combinado    = isd_sec_comb
)

kable(resultados_isd, caption = "Tabla 7: Indices Sinteticos de Desarrollo (Nacional y Sectorial)")
Tabla 7: Indices Sinteticos de Desarrollo (Nacional y Sectorial)
Pais ISD_Nacional_Ortodoxo ISD_Nacional_Heterodoxo ISD_Nacional_Combinado ISD_Sector_Ortodoxo ISD_Sector_Heterodoxo ISD_Sector_Combinado
El Salvador 1 NA 1 1 NA 1
cat("
La Tabla 7 resume los seis indices sinteticos. Estos valores representan
una medida normalizada del desempeno relativo de El Salvador, tanto bajo
el enfoque ortodoxo como heterodoxo, y diferenciando entre nivel nacional
y nivel sectorial.

A continuacion, en la Seccion 10, se presentan los graficos comparativos
para facilitar la interpretacion visual de los resultados.
")
## 
## La Tabla 7 resume los seis indices sinteticos. Estos valores representan
## una medida normalizada del desempeno relativo de El Salvador, tanto bajo
## el enfoque ortodoxo como heterodoxo, y diferenciando entre nivel nacional
## y nivel sectorial.
## 
## A continuacion, en la Seccion 10, se presentan los graficos comparativos
## para facilitar la interpretacion visual de los resultados.
cat("
### Visualización tipo Radar (Estilo académico – similar al RPubs de referencia)

Los gráficos tipo radar permiten una representación multidimensional que 
muestra visualmente las diferencias relativas entre enfoques ortodoxo, 
heterodoxo y combinado, tanto a nivel nacional como a nivel sectorial.
Este tipo de gráfico es ampliamente utilizado en índices sintéticos.
")
## 
## ### Visualización tipo Radar (Estilo académico – similar al RPubs de referencia)
## 
## Los gráficos tipo radar permiten una representación multidimensional que 
## muestra visualmente las diferencias relativas entre enfoques ortodoxo, 
## heterodoxo y combinado, tanto a nivel nacional como a nivel sectorial.
## Este tipo de gráfico es ampliamente utilizado en índices sintéticos.
# Paquetes necesarios
library(dplyr)
library(tidyr)
library(ggplot2)

# ===========================================================
# 1) Preparación de datos para gráfico radar
# ===========================================================

isd_radar <- resultados_isd %>%
  pivot_longer(cols = -Pais,
               names_to = "Indicador",
               values_to = "ISD") %>%
  mutate(
    Tipo = case_when(
      grepl("Nacional", Indicador) ~ "Nacional",
      grepl("Sector", Indicador) ~ "Sectorial"
    ),
    Enfoque = case_when(
      grepl("Ortodoxo", Indicador) ~ "Ortodoxo",
      grepl("Heterodoxo", Indicador) ~ "Heterodoxo",
      grepl("Combinado", Indicador) ~ "Combinado"
    )
  )


# ===========================================================
# 2) Función genérica para generar radar charts con ggplot2
# ===========================================================

plot_radar <- function(df, titulo){

  # Convertir el eje en circular
  ggplot(df, aes(x = Enfoque, y = ISD, group = 1)) +
    geom_polygon(fill = "#4F81BD55", color = "black", linewidth = 1) +
    geom_point(size = 3) +
    coord_polar() +
    ylim(0,1) +
    theme_minimal(base_size = 14) +
    labs(title = titulo, x = "", y = "ISD (0-1)") +
    theme(
      axis.text.y = element_blank(),
      panel.grid.minor = element_blank(),
      plot.title = element_text(face = "bold", size = 16, hjust = 0.5)
    )
}


# ===========================================================
# 3) Gráfico Radar – Nivel Nacional
# ===========================================================

df_nat <- isd_radar %>% filter(Tipo == "Nacional")

g_radar_nat <- plot_radar(df_nat, 
                          "Radar del ISD Nacional (Ortodoxo, Heterodoxo, Combinado)")

print(g_radar_nat)

# ===========================================================
# 4) Gráfico Radar – Sector Industrial
# ===========================================================

df_sec <- isd_radar %>% filter(Tipo == "Sectorial")

g_radar_sec <- plot_radar(df_sec, 
                          "Radar del ISD Sectorial (Ortodoxo, Heterodoxo, Combinado)")

print(g_radar_sec)

cat("
Los gráficos tipo radar permiten visualizar de manera multidimensional los 
resultados del ISD, siguiendo la lógica y estilo del RPubs de referencia, 
y resaltando la diferencia entre enfoques en un solo país.
")
## 
## Los gráficos tipo radar permiten visualizar de manera multidimensional los 
## resultados del ISD, siguiendo la lógica y estilo del RPubs de referencia, 
## y resaltando la diferencia entre enfoques en un solo país.

ANÁLISIS DE RESULTADOS Y CONCLUSIONES GENERALES

Resumen
Este estudio construyó seis índices sintéticos de desarrollo (ISD) para El Salvador: ISD Nacional Ortodoxo, ISD Nacional Heterodoxo, ISD Nacional Combinado, ISD Sectorial Ortodoxo (industria), ISD Sectorial Heterodoxo (industria) y ISD Sectorial Combinado. Los indicadores provienen de la base WDI (Banco Mundial) y fueron normalizados con el método Min–Max; los índices se obtuvieron por promedios ponderados (pesos iguales por defecto). El objetivo fue comparar las perspectivas teóricas (ortodoxa vs. heterodoxa) y evaluar la contribución del sector industrial al desarrollo nacional.

Principales hallazgos.
- Los ISD Nacionales (ortodoxo vs. heterodoxo) muestran diferencias cuantitativas que reflejan tensiones entre desempeño macroeconómico y dimensiones sociales/ambientales.
- El ISD Combinado resume estas tensiones y ofrece una medida integrada que sirve como referencia para diagnóstico y política.
- En el ámbito sectorial, los ISD calculados con indicadores disponibles muestran (i) si la industria aporta proporcionalmente al desarrollo nacional desde la óptica ortodoxa y (ii) si enfrenta brechas en sostenibilidad y equidad desde la óptica heterodoxa.
- La comparación nacional vs. sectorial permite identificar si la estructura productiva (industria) está alineada con metas de desarrollo sostenible o si existe una desalineación que requiere intervención pública.

Interpretación académica (ortodoxo vs. heterodoxo).
- Ortodoxo: Valores más altos del ISD ortodoxo indican fortalezas en variables macroeconómicas tradicionales (PIB per cápita, inversión, exportaciones, empleo). Un ISD ortodoxo alto sugiere que las condiciones para crecimiento impulsadas por mercado están relativamente favorables.
- Heterodoxo: Valores más altos en el ISD heterodoxo reflejan mejor desempeño en dimensiones sociales y ambientales (menor desigualdad, mayor esperanza de vida, mayor uso de renovables, mejor acceso a servicios). Si el ISD heterodoxo es significativamente menor que el ortodoxo, esto indica que el crecimiento no está traduciendo automáticamente mejoras en bienestar ni sostenibilidad.
- Combinado: El ISD combinado es una medida pragmática para formular políticas que integren crecimiento y bienestar; la distancia entre los índices ortodoxo y heterodoxo orienta la priorización política.

Implicaciones de política pública (sintéticas y accionables).
1. Si ISD_sec_ortho < ISD_nat_ortho: priorizar políticas de transformación productiva (incentivos a manufactura de mayor valor agregado, capacitación técnica, promoción de exportaciones).
2. Si ISD_sec_hetero < ISD_nat_hetero: introducir medidas que mitiguen impactos ambientales y aumenten inclusión (programas de eficiencia energética industrial, fiscalidad ambiental, fomento a energías renovables en parques industriales).
3. En caso de divergencias marcadas entre ortodoxo y heterodoxo: diseñar paquetes integrados —por ejemplo, incentivos a inversión condicionados a mejoras sociales/ambientales (cláusulas de empleo local, obligaciones de inversión en formación y control de emisiones).

Limitaciones metodológicas.
- Disponibilidad de datos sectoriales: WDI limita algunos indicadores específicos de industria, lo que obliga a usar proxies.
- Normalización Min–Max aplicada a una única observación por país puede llevar a efectos de borde (min = max ⇒ valor constante); por ello se recomienda comparar con rangos teóricos o ampliar el horizonte temporal o el conjunto de países en análisis complementarios.
- Pesos iguales: constituyen una suposición transparente y reproducible, pero los resultados son sensibles a cambios en ponderaciones —se recomienda análisis de sensibilidad (simulaciones de pesos, PCA, métodos de entropía).

Recomendaciones metodológicas y de investigación futura.
- Realizar análisis de sensibilidad con al menos 1,000 simulaciones de pesos aleatorios y reportar intervalos de confianza para los ISD.
- Implementar PCA (análisis de componentes principales) como técnica complementaria para validar la estructura de correlaciones entre indicadores.
- Ampliar el estudio a un panel de países comparables o series temporales para mejorar la robustez de la normalización y evitar problemas de min=max.
- Explorar fuentes sectoriales nacionales (institutos de estadística, ministerios sectoriales) para mejorar la especificidad de indicadores industriales.

Conclusión final (resumen).
Los seis índices construidos proporcionan una herramienta sintética y útil para diagnosticar la posición de El Salvador desde dos marcos teóricos complementarios y para evaluar el papel del sector industrial en el desarrollo. Para que esta herramienta sirva a la formulación de políticas, se requieren análisis de sensibilidad robustos y, cuando sea posible, datos sectoriales más detallados. Este enfoque integrador responde a los objetivos del curso y a las indicaciones metodológicas entregadas por el docente, facilitando la discusión entre eficiencia económica y sostenibilidad/equidad (visión ortodoxa vs. heterodoxa).

Referencias (formato APA — completar según fuentes usadas):
- Banco Mundial. (año). World Development Indicators (WDI). Recuperado de https://data.worldbank.org
- Autor, A. A. (año). Título del libro o artículo. Editorial.
- (Inserte aquí otras referencias metodológicas o teóricas en formato APA)