Librerias
EL SALVADOR
Obtención de datos
# Dimensión Económica
D_Economica <- wb_data(indicator = c("SI.POV.GINI", #Índice de Gin
"SI.DST.FRST.20", #Participación en el ingreso del 20% peor remunerado
"SI.DST.05TH.20", #Participación en el ingreso del 20% mejor remunerado
"NY.GDP.PCAP.PP.KD", #PIB per cápita, PPA($a precios internacionales cons
"NY.GDP.PCAP.KD.ZG", #Crecimiento del PIB per cápita (% anual)
"NY.GNS.ICTR.ZS", #Ahorro bruto (% del PIB)
"FS.AST.PRVT.GD.ZS"), #Crédito interno al sector privado (% del PIB)
country = c("SLV"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SL.TLF.ADVN.ZS", #Fuerza laboral con educación avanzada (% del total)
"EG.ELC.ACCS.ZS", #Acceso a la electricidad (% de la población)
"HD.HCI.OVRL", #Índice de Capital Humano (escala de 0 a 1)
"NY.ADJ.AEDU.GN.ZS", #Ahorro ajustado: gasto en educación (% del INB)
"SL.UEM.TOTL.ZS"), #Desempleo, total (% de la fuerza laboral total)
country = c("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))} #positiva
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))} #negativa
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select(FS.AST.PRVT.GD.ZS,
NY.GDP.PCAP.PP.KD,
SI.DST.FRST.20,
NY.GDP.PCAP.KD.ZG,
NY.GNS.ICTR.ZS,
NY.ADJ.AEDU.GN.ZS,
SL.TLF.ADVN.ZS,
HD.HCI.OVRL,
EG.ELC.ACCS.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(SI.POV.GINI,
SI.DST.05TH.20,
SL.UEM.TOTL.ZS) %>%
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("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## SI.POV.GINI SI.DST.FRST.20 SI.DST.05TH.20 NY.GDP.PCAP.PP.KD
## 0.1084869 0.1897271 0.1107287 0.1117348
## NY.GDP.PCAP.KD.ZG NY.GNS.ICTR.ZS FS.AST.PRVT.GD.ZS
## 0.1824812 0.1430002 0.1538411
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SL.TLF.ADVN.ZS EG.ELC.ACCS.ZS NY.ADJ.AEDU.GN.ZS SL.UEM.TOTL.ZS
## 0.3016527 0.2809699 0.2294359 0.1879414
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() # Repetimos los pesos para cada año
### Repetimos cada fila de W_E para que coincida con w_D_economica
veces <- nrow(w_D_economica) / nrow(W_E) # cuántas veces repetir (debería ser entero)
if (veces %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_E_expandido <- W_E[rep(1:nrow(W_E), each = veces), ]
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E_expandido
Multi_E <- Multi_E %>%
mutate(Dimension_Economica = round(rowSums(across(everything())), 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()
### Repetimos cada fila de W_S para que coincida con w_D_social
veces_s <- nrow(w_D_social) / nrow(W_S)
if (veces_s %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_S_expandido <- W_S[rep(1:nrow(W_S), each = veces_s), ]
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S_expandido
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:4]),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.6044705 0.3955295
# 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()
### Expandir pesos para que coincidan con las 42 filas
W_D_expandido <- W_D[rep(1:nrow(W_D), each = nrow(Bateria_dimensiones)/nrow(W_D)), ]
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D_expandido
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)NORTEAMERICA
Obtención de datos
# Dimensión Económica
D_Economica <- wb_data(indicator = c("SI.POV.GINI", #Índice de Gin
"SI.DST.FRST.20", #Participación en el ingreso del 20% peor remunerado
"SI.DST.05TH.20", #Participación en el ingreso del 20% mejor remunerado
"NY.GDP.PCAP.PP.KD", #PIB per cápita, PPA($a precios internacionales cons
"NY.GDP.PCAP.KD.ZG", #Crecimiento del PIB per cápita (% anual)
"NY.GNS.ICTR.ZS", #Ahorro bruto (% del PIB)
"FS.AST.PRVT.GD.ZS"), #Crédito interno al sector privado (% del PIB)
country = c("CAN", "USA", "MEX"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SL.TLF.ADVN.ZS", #Fuerza laboral con educación avanzada (% del total)
"EG.ELC.ACCS.ZS", #Acceso a la electricidad (% de la población)
"HD.HCI.OVRL", #Índice de Capital Humano (escala de 0 a 1)
"NY.ADJ.AEDU.GN.ZS", #Ahorro ajustado: gasto en educación (% del INB)
"SL.UEM.TOTL.ZS"), #Desempleo, total (% de la fuerza laboral total)
country = c("CAN", "USA", "MEX"),
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))} #positiva
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))} #negativa
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select(FS.AST.PRVT.GD.ZS,
NY.GDP.PCAP.PP.KD,
SI.DST.FRST.20,
NY.GDP.PCAP.KD.ZG,
NY.GNS.ICTR.ZS,
NY.ADJ.AEDU.GN.ZS,
SL.TLF.ADVN.ZS,
HD.HCI.OVRL,
EG.ELC.ACCS.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(SI.POV.GINI,
SI.DST.05TH.20,
SL.UEM.TOTL.ZS) %>%
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("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## SI.POV.GINI SI.DST.FRST.20 SI.DST.05TH.20 NY.GDP.PCAP.PP.KD
## 0.1050505 0.1136711 0.1040450 0.1833562
## NY.GDP.PCAP.KD.ZG NY.GNS.ICTR.ZS FS.AST.PRVT.GD.ZS
## 0.1362662 0.1554661 0.2021450
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SL.TLF.ADVN.ZS EG.ELC.ACCS.ZS NY.ADJ.AEDU.GN.ZS SL.UEM.TOTL.ZS
## 0.2180351 0.3659787 0.1887125 0.2272737
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()
### Repetimos cada fila de W_E para que coincida con w_D_economica
veces <- nrow(w_D_economica) / nrow(W_E) # cuántas veces repetir (debería ser entero)
if (veces %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_E_expandido <- W_E[rep(1:nrow(W_E), each = veces), ]
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E_expandido
Multi_E <- Multi_E %>%
mutate(Dimension_Economica = round(rowSums(across(everything())), 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()
### Repetimos cada fila de W_S para que coincida con w_D_social
veces_s <- nrow(w_D_social) / nrow(W_S)
if (veces_s %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_S_expandido <- W_S[rep(1:nrow(W_S), each = veces_s), ]
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S_expandido
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:4]),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.6690044 0.3309956
# 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()
### Expandir pesos para que coincidan con las 42 filas
W_D_expandido <- W_D[rep(1:nrow(W_D), each = nrow(Bateria_dimensiones)/nrow(W_D)), ]
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D_expandido
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)CENTROAMERICA
Obtención de datos
# Dimensión Económica
D_Economica <- wb_data(indicator = c("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS"),
country = c("BLZ", "GTM", "HND", "NIC", "CRI", "PAN"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"HD.HCI.OVRL",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS"),
country = c("CAN", "USA", "MEX"),
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))} #positiva
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))} #negativa
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select(FS.AST.PRVT.GD.ZS,
NY.GDP.PCAP.PP.KD,
SI.DST.FRST.20,
NY.GDP.PCAP.KD.ZG,
NY.GNS.ICTR.ZS,
NY.ADJ.AEDU.GN.ZS,
SL.TLF.ADVN.ZS,
HD.HCI.OVRL,
EG.ELC.ACCS.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(SI.POV.GINI,
SI.DST.05TH.20,
SL.UEM.TOTL.ZS) %>%
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("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## SI.POV.GINI SI.DST.FRST.20 SI.DST.05TH.20 NY.GDP.PCAP.PP.KD
## 0.08318655 0.11191646 0.08458804 0.20550772
## NY.GDP.PCAP.KD.ZG NY.GNS.ICTR.ZS FS.AST.PRVT.GD.ZS
## 0.12103189 0.20950260 0.18426674
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SL.TLF.ADVN.ZS EG.ELC.ACCS.ZS NY.ADJ.AEDU.GN.ZS SL.UEM.TOTL.ZS
## NA NA NA NA
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()
### Repetimos cada fila de W_E para que coincida con w_D_economica
veces <- nrow(w_D_economica) / nrow(W_E) # cuántas veces repetir (debería ser entero)
if (veces %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_E_expandido <- W_E[rep(1:nrow(W_E), each = veces), ]
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E_expandido
Multi_E <- Multi_E %>%
mutate(Dimension_Economica = round(rowSums(across(everything())), 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()
### Repetimos cada fila de W_S para que coincida con w_D_social
veces_s <- nrow(w_D_social) / nrow(W_S)
if (veces_s %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_S_expandido <- W_S[rep(1:nrow(W_S), each = veces_s), ]
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S_expandido
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:4]),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
## NA NA
# 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()
### Expandir pesos para que coincidan con las 42 filas
W_D_expandido <- W_D[rep(1:nrow(W_D), each = nrow(Bateria_dimensiones)/nrow(W_D)), ]
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D_expandido
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)CARIBE
Obtención de datos
# Dimensión Económica
D_Economica <- wb_data(indicator = c("SI.POV.GINI", #Índice de Gin
"SI.DST.FRST.20", #Participación en el ingreso del 20% peor remunerado
"SI.DST.05TH.20", #Participación en el ingreso del 20% mejor remunerado
"NY.GDP.PCAP.PP.KD", #PIB per cápita, PPA($a precios internacionales cons
"NY.GDP.PCAP.KD.ZG", #Crecimiento del PIB per cápita (% anual)
"NY.GNS.ICTR.ZS", #Ahorro bruto (% del PIB)
"FS.AST.PRVT.GD.ZS"), #Crédito interno al sector privado (% del PIB)
country = c("HTI", "CUB", "JAM", "DOM"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SL.TLF.ADVN.ZS", #Fuerza laboral con educación avanzada (% del total)
"EG.ELC.ACCS.ZS", #Acceso a la electricidad (% de la población)
"HD.HCI.OVRL", #Índice de Capital Humano (escala de 0 a 1)
"NY.ADJ.AEDU.GN.ZS", #Ahorro ajustado: gasto en educación (% del INB)
"SL.UEM.TOTL.ZS"), #Desempleo, total (% de la fuerza laboral total)
country = c("HTI", "CUB", "JAM", "DOM"),
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))} #positiva
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))} #negativa
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select(FS.AST.PRVT.GD.ZS, #
NY.GDP.PCAP.PP.KD, #
SI.DST.FRST.20, #
NY.GDP.PCAP.KD.ZG,# crec del pib pc
NY.GNS.ICTR.ZS, #
NY.ADJ.AEDU.GN.ZS, #
SL.TLF.ADVN.ZS, #
HD.HCI.OVRL, #
EG.ELC.ACCS.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(SI.POV.GINI, #
SI.DST.05TH.20, #
SL.UEM.TOTL.ZS) %>% #
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("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## SI.POV.GINI SI.DST.FRST.20 SI.DST.05TH.20 NY.GDP.PCAP.PP.KD
## 0.10482629 0.09550845 0.10989457 0.20625012
## NY.GDP.PCAP.KD.ZG NY.GNS.ICTR.ZS FS.AST.PRVT.GD.ZS
## 0.16544016 0.14185295 0.17622745
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SL.TLF.ADVN.ZS EG.ELC.ACCS.ZS NY.ADJ.AEDU.GN.ZS SL.UEM.TOTL.ZS
## 0.2387921 0.2581573 0.3127602 0.1902904
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()
### Repetimos cada fila de W_E para que coincida con w_D_economica
veces <- nrow(w_D_economica) / nrow(W_E) # cuántas veces repetir (debería ser entero)
if (veces %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_E_expandido <- W_E[rep(1:nrow(W_E), each = veces), ]
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E_expandido
Multi_E <- Multi_E %>%
mutate(Dimension_Economica = round(rowSums(across(everything())), 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()
### Repetimos cada fila de W_S para que coincida con w_D_social
veces_s <- nrow(w_D_social) / nrow(W_S)
if (veces_s %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_S_expandido <- W_S[rep(1:nrow(W_S), each = veces_s), ]
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S_expandido
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:4]),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.3593288 0.6406712
# 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()
### Expandir pesos para que coincidan con las 42 filas
W_D_expandido <- W_D[rep(1:nrow(W_D), each = nrow(Bateria_dimensiones)/nrow(W_D)), ]
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D_expandido
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)SURAMERICA
Obtención de datos
datos_ejemplo<-wb_data(indicator = "SI.POV.GINI",
country = c("BLZ", "GTM", "HND", "NIC", "CRI", "PAN"),
start_date = 2010,
end_date = 2023,
lang = "es")
# Dimensión Económica
D_Economica <- wb_data(indicator = c("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS"),
country = c("COL", "VEN", "PER", "CHL", "BOL", "ARG", "BRA"),
start_date = 2010,
end_date = 2023,
lang = "es")
D_Social <- wb_data(indicator = c("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"HD.HCI.OVRL",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS"),
country = c("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))} #positiva
norm_inversa<-function(x){(max(x, na.rm = TRUE)-x)/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))} #negativa
# Seleccionando las variables con correlación positiva
bateria_indicador_sintetico %>%
select(FS.AST.PRVT.GD.ZS, #
NY.GDP.PCAP.PP.KD, #
SI.DST.FRST.20, #
NY.GDP.PCAP.KD.ZG,# crec del pib pc
NY.GNS.ICTR.ZS, #
NY.ADJ.AEDU.GN.ZS, #
SL.TLF.ADVN.ZS, #
HD.HCI.OVRL, #
EG.ELC.ACCS.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(SI.POV.GINI, #
SI.DST.05TH.20, #
SL.UEM.TOTL.ZS) %>% #
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("SI.POV.GINI",
"SI.DST.FRST.20",
"SI.DST.05TH.20",
"NY.GDP.PCAP.PP.KD",
"NY.GDP.PCAP.KD.ZG",
"NY.GNS.ICTR.ZS",
"FS.AST.PRVT.GD.ZS")
Pesos_economicos <- ponderadores_critic(matriz_datos = w_D_economica)
Pesos_economicos$pesos_normalizados## SI.POV.GINI SI.DST.FRST.20 SI.DST.05TH.20 NY.GDP.PCAP.PP.KD
## 0.1335769 0.1139057 0.1438004 0.1879559
## NY.GDP.PCAP.KD.ZG NY.GNS.ICTR.ZS FS.AST.PRVT.GD.ZS
## 0.1202925 0.1144728 0.1859957
#Dimensión Social
w_D_social <- bateria_normalizada %>%
select("SL.TLF.ADVN.ZS",
"EG.ELC.ACCS.ZS",
"NY.ADJ.AEDU.GN.ZS",
"SL.UEM.TOTL.ZS")
Pesos_sociales <- ponderadores_critic(matriz_datos = w_D_social)
Pesos_sociales$pesos_normalizados## SL.TLF.ADVN.ZS EG.ELC.ACCS.ZS NY.ADJ.AEDU.GN.ZS SL.UEM.TOTL.ZS
## 0.2125059 0.3236604 0.2357883 0.2280454
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()
### Repetimos cada fila de W_E para que coincida con w_D_economica
veces <- nrow(w_D_economica) / nrow(W_E) # cuántas veces repetir (debería ser entero)
if (veces %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_E_expandido <- W_E[rep(1:nrow(W_E), each = veces), ]
## Multiplicación y obtención de la dimensión
Multi_E <- w_D_economica * W_E_expandido
Multi_E <- Multi_E %>%
mutate(Dimension_Economica = round(rowSums(across(everything())), 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()
### Repetimos cada fila de W_S para que coincida con w_D_social
veces_s <- nrow(w_D_social) / nrow(W_S)
if (veces_s %% 1 != 0) {
stop("No es posible repetir filas: el número de filas no es múltiplo exacto.")
}
W_S_expandido <- W_S[rep(1:nrow(W_S), each = veces_s), ]
## Multiplicación y obtención de la dimensión
Multi_S <- w_D_social * W_S_expandido
Multi_S <- Multi_S %>%
mutate(Dimension_Social= round(rowSums (Multi_S[ , 1:4]),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.5759569 0.4240431
# 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()
### Expandir pesos para que coincidan con las 42 filas
W_D_expandido <- W_D[rep(1:nrow(W_D), each = nrow(Bateria_dimensiones)/nrow(W_D)), ]
## Multiplicación y obtención de la dimensión
Indicador_Sintetico <- Bateria_dimensiones * W_D_expandido
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)