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.MKTP.CD",
"SL.UEM.TOTL.FE.ZS",
"NE.IMP.GNFS.KD.ZG",
"NE.EXP.GNFS.KD.ZG",
"SL.TLF.TOTL.IN",
"SL.TLF.ADVN.ZS"),
country = "SLV",
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SH.XPD.CHEX.GD.ZS","SE.XPD.TOTL.GD.ZS",
"SE.XPD.TERT.ZS",
"SI.POV.GINI",
"EG.ELC.ACCS.ZS"),
country = "SLV",
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.MKTP.CD,
NE.EXP.GNFS.KD.ZG,
SL.TLF.TOTL.IN,
SL.TLF.ADVN.ZS,
EG.ELC.ACCS.ZS,
SE.XPD.TERT.ZS,
SE.XPD.TOTL.GD.ZS,
SH.XPD.CHEX.GD.ZS) %>%
apply(MARGIN = 2,FUN = norm_directa) %>%
as.data.frame() -> variables_corr_positiva_h
# Seleccionando las variables con correlación negativa
bateria_indicador_sintetico %>%
select(SL.UEM.TOTL.FE.ZS,
NE.IMP.GNFS.KD.ZG,
SI.POV.GINI) %>%
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.MKTP.CD",
"SL.UEM.TOTL.FE.ZS",
"NE.IMP.GNFS.KD.ZG",
"NE.EXP.GNFS.KD.ZG",
"SL.TLF.TOTL.IN",
"SL.TLF.ADVN.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## NY.GDP.MKTP.CD SL.UEM.TOTL.FE.ZS NE.IMP.GNFS.KD.ZG NE.EXP.GNFS.KD.ZG
## 0.1641692 0.1627351 0.1777019 0.1363492
## SL.TLF.TOTL.IN SL.TLF.ADVN.ZS
## 0.1651358 0.1939087
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SH.XPD.CHEX.GD.ZS",
"SE.XPD.TOTL.GD.ZS",
"SE.XPD.TERT.ZS",
"SI.POV.GINI",
"EG.ELC.ACCS.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SH.XPD.CHEX.GD.ZS SE.XPD.TOTL.GD.ZS SE.XPD.TERT.ZS SI.POV.GINI
## 0.1721258 0.2614017 0.1678769 0.2081396
## EG.ELC.ACCS.ZS
## 0.1904561
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 <- 14
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:6]),2))
Multi_E <- Multi_E %>% select(Dimension_Economica)
# Matriz pesos sociales
Pesos_S <- Pesos_sociales$pesos_normalizados %>% as.vector.data.frame()
n <- 14
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:5]),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.5411961 0.4588039
# Matriz pesos sociales
Pesos_D <- Pesos_dimensiones$pesos_normalizados %>% as.vector.data.frame()
n <- 14
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)