Librerias
Ejemplo de calculo de indicador sintetico
Obtención de datos
Indicadores_disponibles<-wb_indicators(lang = "es")
datos_ejemplo<-wb_data(indicator = "NY.GDP.MKTP.KD.ZG",
country = "SLV",
start_date = 2010,
end_date = 2024,
lang = "es")
# Dimensión Económica
D_Economica <- wb_data(indicator = c("NY.GDP.PCAP.CD",
"NY.GNP.PCAP.PP.CD",
"SI.DST.FRST.20",
"9.0.Employer.All",
"NY.GNS.ICTR.CD",
"SL.AGR.EMPL.ZS",
"SL.TLF.TOTL.IN",
"SL.SRV.EMPL.ZS",
"GC.REV.XGRT.CN",
"GC.XPN.INTP.ZS"),
country = c("SLV","CAN", "USA",
"MEX", "BLZ", "GTM",
"HND", "NIC", "CRI",
"PAN", "HTI", "CUB", "JAM",
"DOM", "COL", "VEN", "PER",
"CHL", "BOL", "ARG","BRA"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SI.POV.GINI",
"SI.POV.NAHC",
"1.0.PSev.1.90usd",
"1.0.PSev.2.5usd",
"SI.POV.DDAY",
"SL.TLF.CACT.ZS",
"SL.UEM.TOTL.ZS",
"SE.XPD.TOTL.GB.ZS",
"SH.XPD.CHEX.GD.ZS"),
country = c("SLV","CAN", "USA",
"MEX", "BLZ", "GTM",
"HND", "NIC", "CRI",
"PAN", "HTI", "CUB", "JAM",
"DOM", "COL", "VEN", "PER",
"CHL", "BOL", "ARG","BRA"),
start_date = 2010,
end_date = 2023,
lang = "es")
# Batería del indicador sintetico
bateria_indicador_sintetico<- D_Economica %>% merge(D_Social, by.x = c("country","iso3c","iso2c","date"),by.y =c("country","iso3c","iso2c","date"), all.x = T ) Normalización de los datos
# funciones de normalizacion de Carlos Ademir Perez Alas.
norm_directa<-function(x){(x-min(x,na.rm = TRUE))/(max(x,na.rm = TRUE)-min(x, na.rm = TRUE))}
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))}
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select("NY.GDP.PCAP.CD", # PIB per cápita
"NY.GNP.PCAP.PP.CD", # Ingreso nacional bruto per cápita
"SI.DST.FRST.20", # % ingreso 20% más pobre
"NY.GNS.ICTR.CD", # Ahorro nacional bruto
"SL.SRV.EMPL.ZS", # Empleo en servicios
"SL.TLF.CACT.ZS", # Participación laboral
"SE.XPD.TOTL.GB.ZS", # Gasto en educación
"SH.XPD.CHEX.GD.ZS",
"9.0.Employer.All",
"SL.TLF.TOTL.IN",
"GC.REV.XGRT.CN") %>% # Gasto en salud
apply(MARGIN = 2,FUN = norm_directa) %>%
as.data.frame() -> variables_corr_positiva_h
# Seleccionando las variables con correlación negativa
bateria_indicador_sintetico %>%
select("SI.POV.GINI", # Gini
"SI.POV.NAHC", # Pobreza nacional
"1.0.PSev.1.90usd", # Pobreza severa ($1.90)
"1.0.PSev.2.5usd", # Pobreza severa ($2.5)
"SI.POV.DDAY", # Pobreza diaria
"SL.UEM.TOTL.ZS", # Desempleo
"SL.AGR.EMPL.ZS", # Empleo agrícola
"GC.XPN.INTP.ZS") %>% # Pago de intereses
apply(MARGIN = 2,FUN = norm_inversa) %>%
as.data.frame() -> variables_corr_negativa_h
# Union de datos normalizados
bateria_normalizada<-bind_cols(variables_corr_positiva_h,variables_corr_negativa_h)Imputación de datos
Calculo de las ponderaciones
Función
### Método CRITIC Funcion creada por Carlos Ademir Perez Alas, obtenida de https://rpubs.com/ca_ademir/critic_entropia
# Método CRITIC
ponderadores_critic <- function(matriz_datos) {
# Desviaciones de las variables
sigma <- apply(X = matriz_datos, MARGIN = 2, sd)
# Correlaciones entre las variables
rho <- cor(matriz_datos)
# Suma de las correlaciones excedentes
cj <- apply(X = 1 - rho, MARGIN = 2, sum)
# Cálculos de ponderadores
pesos_brutos <- sigma * cj
pesos_normalizados <- prop.table(pesos_brutos)
# Salida de resultados
resultados <- list(pesos_brutos = pesos_brutos,
pesos_normalizados = pesos_normalizados)
return(resultados)
}Ponderaciones Variables
#Dimensión Económica
w_D_economica <- bateria_normalizada %>%
select("NY.GDP.PCAP.CD",
"NY.GNP.PCAP.PP.CD",
"SI.DST.FRST.20",
"9.0.Employer.All",
"NY.GNS.ICTR.CD",
"SL.AGR.EMPL.ZS",
"SL.TLF.TOTL.IN",
"SL.SRV.EMPL.ZS",
"GC.REV.XGRT.CN",
"GC.XPN.INTP.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## NY.GDP.PCAP.CD NY.GNP.PCAP.PP.CD SI.DST.FRST.20 9.0.Employer.All
## 0.07688171 0.07463735 0.10701575 0.08600576
## NY.GNS.ICTR.CD SL.AGR.EMPL.ZS SL.TLF.TOTL.IN SL.SRV.EMPL.ZS
## 0.07909822 0.12059667 0.12161783 0.12826417
## GC.REV.XGRT.CN GC.XPN.INTP.ZS
## 0.09526723 0.11061531
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SI.POV.GINI",
"SI.POV.NAHC",
"1.0.PSev.1.90usd",
"1.0.PSev.2.5usd",
"SI.POV.DDAY",
"SL.TLF.CACT.ZS",
"SL.UEM.TOTL.ZS",
"SE.XPD.TOTL.GB.ZS",
"SH.XPD.CHEX.GD.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SI.POV.GINI SI.POV.NAHC 1.0.PSev.1.90usd 1.0.PSev.2.5usd
## 0.12291196 0.08882917 0.06405932 0.06259196
## SI.POV.DDAY SL.TLF.CACT.ZS SL.UEM.TOTL.ZS SE.XPD.TOTL.GB.ZS
## 0.06898877 0.15604613 0.18835642 0.10231428
## SH.XPD.CHEX.GD.ZS
## 0.14590198
Multiplicación de Ponderaciones por datos normalizados para obtener Dimensión
# Matriz pesos económicos
Pesos_E <- Pesos_economicos$pesos_normalizados %>% as.vector.data.frame()
n <- 324
W_E <- map2(Pesos_E,n,.f = rep) %>% as.data.frame()
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E
Multi_E <- Multi_E %>%
mutate(Dimension_Economica= round(rowSums (Multi_E[ , 1:10]),2))
Multi_E <- Multi_E %>% select(Dimension_Economica)
# Matriz pesos sociales
Pesos_S <- Pesos_sociales$pesos_normalizados %>% as.vector.data.frame()
n <- 324
W_S <- map2(Pesos_S,n,.f = rep) %>% as.data.frame()
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:9]),2))
Multi_S <- Multi_S %>% select(Dimension_Social)
#Union de dimensiones
Bateria_dimensiones <- cbind(Multi_E,Multi_S)Ponderaciones de dimensiones
Pesos_dimensiones <- ponderadores_critic(matriz_datos = Bateria_dimensiones)
Pesos_dimensiones$pesos_normalizados## Dimension_Economica Dimension_Social
## 0.6244428 0.3755572
# Matriz pesos sociales
Pesos_D <- Pesos_dimensiones$pesos_normalizados %>% as.vector.data.frame()
n <- 324
W_D <- map2(Pesos_D,n,.f = rep) %>% as.data.frame()
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D
Indicador_Sintetico <- Indicador_Sintetico %>%
mutate(Indicador_Sintetico_Calculado= round(rowSums (Indicador_Sintetico[ , 1:2]),2))
Indicador_Sintetico <-Indicador_Sintetico %>% select(Indicador_Sintetico_Calculado)
Tabla_completa <- D_Economica %>% select(date,country)
Tabla_completa<-bind_cols(Tabla_completa,Bateria_dimensiones,Indicador_Sintetico)Exportar Tabla a Excel
Agrupar Paises por región
library(dplyr)
library(readxl)
Tabla_de_Indicador_Sintetico1 <- read_excel("Tabla de Indicador Sintetico1.xlsx")norteamerica <- Tabla_de_Indicador_Sintetico1 %>%
filter(country %in% c("Canadá", "Estados Unidos", "México")) %>%
select(country, Indicador_Sintetico_Calculado,date)
df_na <- norteamerica %>%
mutate(id = row_number()) %>% # Crea un identificador único para cada fila
pivot_wider(names_from = country, values_from = Indicador_Sintetico_Calculado, date)
centroamerica <- Tabla_de_Indicador_Sintetico1 %>%
filter(country %in% c("Belice", "Guatemala", "Honduras","El Salvador", "Nicaragua", "Costa Rica", "Panamá")) %>%
select(country, Indicador_Sintetico_Calculado,date)
df_ca <- centroamerica %>%
mutate(id = row_number()) %>% # Crea un identificador único para cada fila
pivot_wider(names_from = country, values_from = Indicador_Sintetico_Calculado, date)
caribe <- Tabla_de_Indicador_Sintetico1 %>%
filter(country %in% c("Haití", "Cuba", "Jamaica", "República Dominicana")) %>%
select(country, Indicador_Sintetico_Calculado,date)
df_caribe <- caribe %>%
mutate(id = row_number()) %>% # Crea un identificador único para cada fila
pivot_wider(names_from = country, values_from = Indicador_Sintetico_Calculado, date)
suramerica <- Tabla_de_Indicador_Sintetico1 %>%
filter(country %in% c("Colombia", "Venezuela", "Perú", "Chile", "Bolivia", "Argentina", "Brasil")) %>%
select(country, Indicador_Sintetico_Calculado, date)
df_sa <- suramerica %>%
mutate(id = row_number()) %>% # Crea un identificador único para cada fila
pivot_wider(names_from = country, values_from = Indicador_Sintetico_Calculado, date)
bloques_geograficos <- df_ca %>%
left_join(df_caribe, by = "date") %>%
left_join(df_na, by = "date") %>%
left_join(df_sa, by = "date")Creacion de graficos
# Crear columna de región en la tabla completa
Tabla_completa <- Tabla_completa %>%
mutate(region = case_when(
country %in% c("Canadá", "Estados Unidos", "México") ~ "Norteamérica",
country %in% c("Belice", "Guatemala", "Honduras", "El Salvador", "Nicaragua", "Costa Rica", "Panamá") ~ "Centroamérica",
country %in% c("Haití", "Cuba", "Jamaica", "República Dominicana") ~ "Caribe",
country %in% c("Colombia", "Venezuela", "Perú", "Chile", "Bolivia", "Argentina", "Brasil") ~ "Suramérica",
TRUE ~ NA_character_
)) %>%
filter(!is.na(region)) # Elimina los NA (antes llamados "Otro")
# Calcular promedio por región y año
region_avg <- Tabla_completa %>%
group_by(region, date) %>%
summarise(promedio_indice = mean(Indicador_Sintetico_Calculado, na.rm = TRUE), .groups = "drop")
# Graficar evolución temporal
ggplot(region_avg, aes(x = date, y = promedio_indice, color = region, group = region)) +
geom_line(size = 1.2) +
geom_point() +
theme_minimal() +
labs(title = "Evolución del Indicador Sintético por Región",
x = "Año", y = "Índice Promedio",
color = "Región")Tabla_completa %>%
filter(date == 2023) %>%
ggplot(aes(x = region, y = Indicador_Sintetico_Calculado, fill = region)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Distribución del Indicador Sintético por Región (2023)",
x = "Región", y = "Índice")library(ggplot2)
Tabla_completa %>%
ggplot(aes(x = date, y = reorder(country, Indicador_Sintetico_Calculado), fill = Indicador_Sintetico_Calculado)) +
geom_tile(color = "white") +
scale_fill_viridis_c(option = "plasma") +
labs(title = "Mapa de Calor del Indicador Sintético por País y Año",
x = "Año", y = "País", fill = "Índice") +
theme_minimal()library(plotly)
plot_ly(region_avg, x = ~date, y = ~promedio_indice, color = ~region, type = 'scatter', mode = 'lines+markers') %>%
layout(title = "Evolución Interactiva del Indicador Sintético por Región",
xaxis = list(title = "Año"),
yaxis = list(title = "Índice Promedio"))# Países a comparar
paises_comparar <- c("El Salvador", "Estados Unidos", "México", "Guatemala", "Argentina", "Brasil")
# Filtrar datos
comparacion <- Tabla_completa %>%
filter(country %in% paises_comparar)
# Gráfico
ggplot(comparacion, aes(x = date, y = Indicador_Sintetico_Calculado, color = country)) +
geom_line(size = 1.2) +
geom_point() +
labs(title = "Comparación del Indicador Sintético: El Salvador vs Otros Países",
x = "Año", y = "Indicador Sintético", color = "País") +
theme_minimal()# Último año disponible
ultimo_anio <- max(Tabla_completa$date)
# Filtrar ese año
datos_ultimo <- Tabla_completa %>%
filter(date == ultimo_anio)
# Gráfico de barras
ggplot(datos_ultimo, aes(x = reorder(country, Indicador_Sintetico_Calculado), y = Indicador_Sintetico_Calculado, fill = country == "El Salvador")) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("TRUE" = "darkred", "FALSE" = "gray")) +
labs(title = paste("Indicador sintético en", ultimo_anio, "- El Salvador en contexto"),
x = "País", y = "Indicador Sintético") +
coord_flip() +
theme_minimal() +
theme(legend.position = "none")elsalvador <- Tabla_completa %>% filter(country == "El Salvador")
ggplot(elsalvador, aes(x = date, y = Indicador_Sintetico_Calculado)) +
geom_line(color = "darkblue", size = 1.5) +
geom_point(color = "darkblue") +
labs(title = "Evolución del Indicador Sintético de El Salvador",
x = "Año", y = "Indicador Sintético") +
theme_minimal()# Preparar datos
scatter_data <- bateria_indicador_sintetico %>%
select(country, date, NY.GDP.PCAP.CD,
SL.AGR.EMPL.ZS, SL.SRV.EMPL.ZS) %>%
filter(date == max(date)) # año más reciente
# Convertir a formato largo (sin industria)
scatter_long <- scatter_data %>%
pivot_longer(cols = c(SL.AGR.EMPL.ZS, SL.SRV.EMPL.ZS),
names_to = "sector",
values_to = "empleo") %>%
mutate(sector = recode(sector,
"SL.AGR.EMPL.ZS" = "Agricultura",
"SL.SRV.EMPL.ZS" = "Servicios"))
# Crear gráfico sin industria
ggplot(scatter_long, aes(x = NY.GDP.PCAP.CD, y = empleo, label = country)) +
geom_point(color = "steelblue", size = 3, alpha = 0.7) +
geom_text(size = 3, vjust = -1) +
facet_wrap(~ sector, scales = "free_y") +
labs(title = "Relación entre PIB per cápita y Empleo por Sector (sin Industria)",
x = "PIB per cápita (USD)",
y = "% Empleo") +
theme_minimal()#indice de Gini
library(WDI)
gini_data <- WDI(
indicator = "SI.POV.GINI",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
gini_data_1 <- gini_data %>%
mutate(custom_region = case_when(
country %in% c("Canada", "United States", "Mexico") ~ "Norteamérica",
country %in% c("Belize", "Guatemala", "Honduras", "El Salvador", "Nicaragua", "Costa Rica", "Panama") ~ "Centroamérica",
country %in% c("Haiti", "Cuba", "Jamaica", "Dominican Republic") ~ "Caribe",
country %in% c("Colombia", "Venezuela, RB", "Peru", "Chile", "Bolivia", "Argentina", "Brazil") ~ "Suramérica",
TRUE ~ NA_character_
)) %>%
filter(!is.na(custom_region))
gini_clean <- gini_data_1 %>%
filter(!is.na(SI.POV.GINI), !is.na(custom_region)) %>%
select(country, iso2c, year, gini = SI.POV.GINI, custom_region)
ggplot(gini_clean, aes(x = year, y = gini, group = custom_region, color = custom_region)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
labs(
title = "Índice de Gini por región (2010–2023)",
x = "Año",
y = "Índice de Gini (promedio regional)",
color = "Región"
) +
theme_minimal()#pib per capita por regiones
pibpc_data <- WDI(
indicator = "NY.GDP.PCAP.CD",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
pibpc_data <- pibpc_data %>%
mutate(custom_region = case_when(
country %in% c("Canada", "United States", "Mexico") ~ "Norteamérica",
country %in% c("Belize", "Guatemala", "Honduras", "El Salvador", "Nicaragua", "Costa Rica", "Panama") ~ "Centroamérica",
country %in% c("Haiti", "Cuba", "Jamaica", "Dominican Republic") ~ "Caribe",
country %in% c("Colombia", "Venezuela, RB", "Peru", "Chile", "Bolivia", "Argentina", "Brazil") ~ "Suramérica",
TRUE ~ NA_character_
)) %>%
filter(!is.na(custom_region))
pibpc_clean <- pibpc_data %>%
filter(!is.na(NY.GDP.PCAP.CD), !is.na(custom_region)) %>%
select(country, iso2c, year, pibpc = NY.GDP.PCAP.CD, custom_region)
ggplot(pibpc_clean, aes(x = year, y = pibpc, group = custom_region, color = custom_region)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
labs(
title = "PIB per capita por región (2010–2023)",
x = "Año",
y = "PIB (promedio regional)",
color = "Región"
) +
theme_minimal()#pib per capita comparación entre cinco países
pibpc_data_paises <- WDI(
indicator = "NY.GDP.PCAP.CD",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
pibpc_data_paises <- pibpc_data_paises %>%
filter(country %in% c("United States", "El Salvador", "Cuba", "Argentina"))
pibpc_paises_clean <- pibpc_data_paises %>%
filter(!is.na(NY.GDP.PCAP.CD), !is.na(country)) %>%
select(country, iso2c, year, pibpc_paises = NY.GDP.PCAP.CD, country)
ggplot(pibpc_paises_clean, aes(x = year, y = pibpc_paises, group = country, color = country)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
labs(
title = "PIB per capita por país (2010–2023)",
x = "Año",
y = "PIB (promedio regional)",
color = "Región"
) +
theme_minimal()tdesempleo_data <- WDI(
indicator = "SL.UEM.TOTL.ZS",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
tdesempleo_data <- tdesempleo_data %>%
mutate(custom_region = case_when(
country %in% c("Canada", "United States", "Mexico") ~ "Norteamérica",
country %in% c("Belize", "Guatemala", "Honduras", "El Salvador", "Nicaragua", "Costa Rica", "Panama") ~ "Centroamérica",
country %in% c("Haiti", "Cuba", "Jamaica", "Dominican Republic") ~ "Caribe",
country %in% c("Colombia", "Venezuela, RB", "Peru", "Chile", "Bolivia", "Argentina", "Brazil") ~ "Suramérica",
TRUE ~ NA_character_
)) %>%
filter(!is.na(custom_region))
tdesempleo_clean <- tdesempleo_data %>%
filter(!is.na(SL.UEM.TOTL.ZS), !is.na(custom_region)) %>%
select(country, iso2c, year, tasa_desempleo = SL.UEM.TOTL.ZS, custom_region)
ggplot(tdesempleo_clean, aes(x = year, y = tasa_desempleo, group = custom_region, color = custom_region)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
labs(
title = "Tasa de desempleo (% de la población total) (2010–2023)",
x = "Año",
y = "Desempleo (promedio regional)",
color = "Región"
) +
theme_minimal()#pib per capita comparación entre cinco países
gini_data_paises <- WDI(
indicator = "SI.POV.GINI",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
gini_data_paises <- gini_data_paises %>%
filter(country %in% c("United States", "El Salvador", "Costa Rica", "Argentina"))
gini_paises_clean <- gini_data_paises %>%
filter(!is.na(SI.POV.GINI), !is.na(country)) %>%
select(country, iso2c, year, gini_paises = SI.POV.GINI, country)
ggplot(gini_paises_clean, aes(x = year, y = gini_paises, group = country, color = country)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
geom_text(aes(label = round(gini_paises, 1)), vjust = -0.5, size = 3, check_overlap = TRUE) +
labs(
title = "Indice de gini por paises (2010–2023)",
x = "Año",
y = "Indice de gini (promedio regional)",
color = "Región"
) +
theme_minimal()#pib per capita comparación entre cinco países
tdesempleo_data_paises <- WDI(
indicator = "SL.UEM.TOTL.ZS",
start = 2010,
end = 2023,
extra = TRUE,
cache = NULL
)
tdesempleo_data_paises <- tdesempleo_data_paises %>%
filter(country %in% c("United States", "El Salvador", "Costa Rica", "Argentina"))
tdesempleo_paises_clean <- tdesempleo_data_paises %>%
filter(!is.na(SL.UEM.TOTL.ZS), !is.na(country)) %>%
select(country, iso2c, year, tdesempleo_paises = SL.UEM.TOTL.ZS, country)
ggplot(tdesempleo_paises_clean, aes(x = year, y = tdesempleo_paises, group = country, color = country)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
geom_text(aes(label = round(tdesempleo_paises, 1)), vjust = -0.5, size = 3, check_overlap = TRUE) +
labs(
title = "Tasa de desempleo (% de la población total) por paises (2010–2023)",
x = "Año",
y = "tasa de desempleo (promedio regional)",
color = "Región"
) +
theme_minimal()