Desarrolle el siguiente ejercicio:
Se necesita construir un indicador multivariado sintético, que mida la “Seguridad Municipal” Para ello se dispone de la siguiente información:
A través del análisis de componentes principales, identifique para un modelo de 3 factores:
a. Los ponderadores normalizados para cada factor.
library(dplyr)
library(kableExtra)
load("C:/Users/Jacqueline Vanessa/Desktop/UES/Ciclo II - 2022/MAE118/TAREAS/UNIDAD 2/Practica - unidad 2/data_parcial_2_A_rev.RData")
datos_parcial_2 %>% head() %>%
kable(caption = "Matriz de variables para la Seguridad Municipal",
align = "c",
digits = 4) %>%
kable_material(html_font = "Time New Roman")
ID | Municipio | X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 |
---|---|---|---|---|---|---|---|---|---|
1 | ATIQUIZAYA | 9 | 2 | 20.0000 | 20.0000 | 0.0000 | 0.0000 | 2 | 56.4000 |
2 | EL CARMEN | 10 | 6 | 62.5000 | 50.0000 | 37.5000 | 3.9474 | 11 | 147.3750 |
3 | ALEGRIA | 10 | 20 | 50.0000 | 50.0000 | 50.0000 | 2.5641 | 16 | 135.0000 |
4 | SAN JULIAN | 8 | 3 | 42.8571 | 42.8571 | 14.2857 | 1.3514 | 35 | 121.1429 |
5 | TEJUTLA | 7 | 7 | 75.0000 | 75.0000 | 75.0000 | 9.0909 | 8 | 202.5000 |
6 | PASAQUINA | 6 | 13 | 30.0000 | 30.0000 | 30.0000 | 8.1081 | 25 | 81.0000 |
library(dplyr)
norm_directa_a <- function(x){(x-min(x))/(max(x)-min(x))}
norm_inversa_a <- function(x){(max(x)-x)/(max(x)-min(x))}
# Seleccionando las variables con correlación positiva para la Seguridad Municipal
datos_parcial_2 %>%
select(X1,X2,X3,X5,X7,X8) %>%
apply(MARGIN = 2,FUN = norm_directa_a) %>%
as.data.frame() -> variables_corr_positiva_a
# Seleccionando las variables con correlación negativa para la Seguridad Municipal
datos_parcial_2 %>%
select(X4,X6) %>%
apply(MARGIN = 2,
FUN = norm_inversa_a) %>%
as.data.frame() -> variables_corr_negativa_a
# Juntando y reordenando las variables
variables_corr_positiva_a %>%
bind_cols(variables_corr_negativa_a) %>%
select(X1,X2,X3,X4,X5,X6,X7,X8) -> datos_seguridad_normalizados
datos_seguridad_normalizados %>% head() %>%
kable(caption = "Datos normalizados",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 |
---|---|---|---|---|---|---|---|
0.193548 | 0.000000 | 0.040000 | 0.800000 | 0.000000 | 1.000000 | 0.000000 | 0.158227 |
0.225806 | 0.017167 | 0.550000 | 0.500000 | 0.428571 | 0.784413 | 0.098901 | 0.516749 |
0.225806 | 0.077253 | 0.400000 | 0.500000 | 0.571429 | 0.859961 | 0.153846 | 0.467980 |
0.161290 | 0.004292 | 0.314286 | 0.571429 | 0.163265 | 0.926195 | 0.362637 | 0.413371 |
0.129032 | 0.021459 | 0.700000 | 0.250000 | 0.857143 | 0.503497 | 0.065934 | 0.733990 |
0.096774 | 0.047210 | 0.160000 | 0.700000 | 0.342857 | 0.557173 | 0.252747 | 0.255172 |
library(PerformanceAnalytics)
# Matriz de correlación
chart.Correlation(as.matrix(datos_seguridad_normalizados),histogram = TRUE,pch=12)
Varias de las correlaciones son significativas al 1%. Hay una evidente correlación entre las variables propuestas en la batería de indicadores, se puede ver esto a simple vista por los asteriscos.
library(rela)
# KMO
KMO_a <- paf(as.matrix(datos_seguridad_normalizados))$KMO
print(KMO_a)
## [1] 0.67931
El valor mínimo para considerar aceptable el análisis factorial es de 0.5 y la base de datos tiene el 0.68, podemos considerar que es adecuado hacer el análisis.
library(psych)
# Prueba de Barlett
options(scipen = 99999)
Barlett_a <- cortest.bartlett(datos_seguridad_normalizados)
print(Barlett_a)
## $chisq
## [1] 1025.9
##
## $p.value
## [1] 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046951
##
## $df
## [1] 28
El \(P-value\) es casi 0, quiere decir que se rechaza la hipótesis nula y no se rechaza la hipótesis alternativa, hay evidencia de correlación poblacional entre la batería de indicadores propuestas.
library(FactoMineR)
library(factoextra)
library(kableExtra)
Rx_a <- cor(datos_seguridad_normalizados)
PC_a <- princomp(x = datos_seguridad_normalizados,
cor = TRUE,
fix_sign = FALSE)
variables_pca_a <- get_pca_var(PC_a)
factoextra::get_eig(PC_a) %>% kable(caption="Resumen de PCA",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("hover"))
eigenvalue | variance.percent | cumulative.variance.percent | |
---|---|---|---|
Dim.1 | 3.90 | 48.72 | 48.72 |
Dim.2 | 1.96 | 24.55 | 73.27 |
Dim.3 | 0.84 | 10.52 | 83.78 |
Dim.4 | 0.50 | 6.24 | 90.03 |
Dim.5 | 0.45 | 5.68 | 95.70 |
Dim.6 | 0.28 | 3.45 | 99.16 |
Dim.7 | 0.07 | 0.82 | 99.98 |
Dim.8 | 0.00 | 0.02 | 100.00 |
Podemos ver la cantidad de factores a retener:
fviz_eig(PC_a,
choice = "eigenvalue",
barcolor = "steelblue",
barfill = "steelblue",
addlabels = TRUE,
)+labs(title = "Gráfico de Sedimentación",
subtitle = "Usando princomp, con Autovalores")+
xlab(label = "Componentes")+
ylab(label = "Autovalores")+
geom_hline(yintercept = 1)
Mediante este criterio se puede observar que el punto de quiebre ocurre en los primeros dos. Por el momento los criterios de extracción se mantienen entre 2 y 3 factores.
library(corrplot)
library(psych)
# Modelo de 3 Factores (Rotada)
numero_de_factores_a <- 3
modelo_factores_a <- principal(r = Rx_a,
nfactors = numero_de_factores_a,
covar = FALSE,
rotate = "varimax")
modelo_factores_a
## Principal Components Analysis
## Call: principal(r = Rx_a, nfactors = numero_de_factores_a, rotate = "varimax",
## covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
## RC1 RC2 RC3 h2 u2 com
## X1 -0.16 0.80 -0.03 0.67 0.3316 1.1
## X2 0.08 0.84 -0.03 0.71 0.2879 1.0
## X3 0.93 -0.09 0.28 0.95 0.0493 1.2
## X4 -0.95 0.05 -0.26 0.98 0.0208 1.2
## X5 0.43 -0.06 0.80 0.83 0.1742 1.5
## X6 -0.25 0.03 -0.91 0.89 0.1142 1.2
## X7 -0.07 0.83 -0.04 0.69 0.3107 1.0
## X8 0.96 -0.06 0.27 0.99 0.0087 1.2
##
## RC1 RC2 RC3
## SS loadings 2.97 2.05 1.68
## Proportion Var 0.37 0.26 0.21
## Cumulative Var 0.37 0.63 0.84
## Proportion Explained 0.44 0.31 0.25
## Cumulative Proportion 0.44 0.75 1.00
##
## Mean item complexity = 1.2
## Test of the hypothesis that 3 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.06
##
## Fit based upon off diagonal values = 0.98
Al hacerlo con 3 factores, en la primer variable, el 0.67% de su varianza es explicada por la solución. La segunda variable tiene un 0.71% de su varianza explicada por la extracción. De la tercer variable, el 0.95 de su varianza es explicada. Entonces es una solución representativa de los datos originales.
En los ponderadores (Proportion Explained) que se han extraído, la primera variable que se construya va a tener un ponderador de 0.44, la segunda de 0.31 y la tercera de 0.25.
b. Las variables incluidas en cada factor.
library(factoextra)
correlaciones_modelo_a <- variables_pca_a$coord
rotacion_a <- varimax(correlaciones_modelo_a[,1:numero_de_factores_a])
correlaciones_modelo_rotada_a <- rotacion_a$loadings
corrplot(correlaciones_modelo_rotada_a[,1:numero_de_factores_a],
is.corr = FALSE,
method = "square",
addCoef.col="grey",
number.cex = 0.75)
Para la variable latente 1, está representada con \(X_3\), \(X_4\) y \(X_8\). La dimensión 2 está más asociada con \(X_1\), \(X_2\) y \(X_7\). La dimensión 3 está más asociada con \(X_5\) y \(X_6\).
library(kableExtra)
cargas_a <- rotacion_a$loadings[1:8,1:numero_de_factores_a]
ponderadores_a <- prop.table(apply(cargas_a^2,
MARGIN = 2,sum))
t(ponderadores_a) %>% kable(caption="Ponderadores de los Factores Extraídos",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Dim.1 | Dim.2 | Dim.3 |
---|---|---|
0.44 | 0.31 | 0.25 |
Al factor 1 se le debe asignar un peso del 44%, al factor 2 un peso del 31% y al factor 3 un 25%.
contribuciones_a <- apply(cargas_a^2,
MARGIN = 2,
prop.table)
contribuciones_a %>% kable(caption = "Contribución de las variables en los Factores",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Dim.1 | Dim.2 | Dim.3 | |
---|---|---|---|
X1 | 0.01 | 0.31 | 0.00 |
X2 | 0.00 | 0.34 | 0.00 |
X3 | 0.29 | 0.00 | 0.05 |
X4 | 0.31 | 0.00 | 0.04 |
X5 | 0.06 | 0.00 | 0.38 |
X6 | 0.02 | 0.00 | 0.49 |
X7 | 0.00 | 0.33 | 0.00 |
X8 | 0.31 | 0.00 | 0.04 |
Aquí se pueden observar los pesos que deberían tener cada una de las variables.
Para el factor 1, utilice el método CRITIC para obtener los ponderadores normalizados para cada variable.
Normalización de datos y cálculos:
library(dplyr)
# Funciones para normalizar los datos
norm_directa_a <- function(x){
return((x-min(x)) / (max(x)-min(x)))
}
norm_inverza_a <- function(x){
return((max(x)-x) / (max(x)-min(x)))
}
# Normalización de los datos
datos_parcial_2 %>% dplyr::select(X3,X4,X8) %>%
dplyr::transmute(X3 = norm_directa_a(X3),
X4 = norm_inverza_a(X4),
X8 = norm_directa_a(X8)) -> data_factor_1_a
data_factor_1_a %>% head() %>%
kable(caption = "Datos normalizados - método CRITIC",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
X3 | X4 | X8 |
---|---|---|
0.04000 | 0.80000 | 0.15823 |
0.55000 | 0.50000 | 0.51675 |
0.40000 | 0.50000 | 0.46798 |
0.31429 | 0.57143 | 0.41337 |
0.70000 | 0.25000 | 0.73399 |
0.16000 | 0.70000 | 0.25517 |
# Cálculo de las desviaciones estándar de cada variable
data_factor_1_a %>% dplyr::summarise(S3 = sd(X3),
S4 = sd(X4),
S8 = sd(X8)) -> sd_vector_a
sd_vector_a %>% head() %>%
kable(caption = "Desviaciones estándar - método CRITIC",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
S3 | S4 | S8 |
---|---|---|
0.24628 | 0.20111 | 0.20874 |
# Cálculo de la matriz de correlación
cor(data_factor_1_a) -> mat_R_F1_a
mat_R_F1_a %>% head() %>%
kable(caption = "Matriz de correlación - método CRITIC",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
X3 | X4 | X8 | |
---|---|---|---|
X3 | 1.00000 | -0.93872 | 0.95905 |
X4 | -0.93872 | 1.00000 | -0.99585 |
X8 | 0.95905 | -0.99585 | 1.00000 |
# Cálculo de los ponderadores brutos
1-mat_R_F1_a -> sum_data_a
colSums(sum_data_a) -> sum_vector_a
sd_vector_a*sum_vector_a -> vj_a
vj_a %>% head() %>%
kable(caption = "Ponderadores brutos - método CRITIC",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
S3 | S4 | S8 |
---|---|---|
0.48755 | 0.79129 | 0.42517 |
# Cálculo de los ponderadores netos
vj_a/sum(vj_a) -> wj_a
wj_a %>% head() %>%
kable(caption = "Ponderadores netos - método CRITIC",
align = "c",
digits = 7) %>%
kable_material(html_font = "Time New Roman")
S3 | S4 | S8 |
---|---|---|
0.28612 | 0.46437 | 0.24951 |
# Ponderadores:
ponderadores_a <- round(wj_a*100,2)
ponderadores_a %>% head() %>%
kable(caption = "Ponderadores - método CRITIC",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman")
S3 | S4 | S8 |
---|---|---|
28.61 | 46.44 | 24.95 |
Para el factor 2, utilice el método de Entropía para obtener los ponderadores normalizados para cada variable.
library(dplyr)
# Normalización de los datos
datos_parcial_2 %>% dplyr::select(X1,X2,X7) -> data_norm_a
apply(data_norm_a,2,prop.table) -> data_norm_a
data_norm_a %>% head() %>%
kable(caption = "Datos normalizados - método Entropía",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
X1 | X2 | X7 |
---|---|---|
0.007812 | 0.000707 | 0.001399 |
0.008681 | 0.002122 | 0.007692 |
0.008681 | 0.007073 | 0.011189 |
0.006944 | 0.001061 | 0.024476 |
0.006076 | 0.002476 | 0.005594 |
0.005208 | 0.004598 | 0.017483 |
# Fórmula de entropía
entropy_a <- function(x){
return(x*log(x))
}
apply(data_norm_a,2,entropy_a) -> data_norm_a_2
data_norm_a_2 %>% head() %>%
kable(caption = "Fórmula - método Entropía",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
X1 | X2 | X7 |
---|---|---|
-0.037906 | -0.005131 | -0.009192 |
-0.041204 | -0.013062 | -0.037443 |
-0.041204 | -0.035023 | -0.050270 |
-0.034513 | -0.007266 | -0.090806 |
-0.031010 | -0.014857 | -0.029013 |
-0.027383 | -0.024746 | -0.070744 |
# Número de variables en el factor:
ncol(data_norm_a) -> m_a
# Constante de entropía:
-1/log(m_a) -> K_a
K_a %>% head() %>%
kable(caption = "Constante - método Entropía",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x |
---|
-0.91024 |
# Cálculo de las entropías
K_a*colSums(data_norm_a_2) -> Ej_a
Ej_a %>% head() %>%
kable(caption = "Entropías",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 4.1805 |
X2 | 3.2029 |
X7 | 3.7019 |
# Cálculo de las especificidades:
1-Ej_a -> vj_a
vj_a %>% head() %>%
kable(caption = "Especificidades - método Entropía",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | -3.1805 |
X2 | -2.2029 |
X7 | -2.7019 |
# Cálculo de los ponderadores:
prop.table(vj_a) -> wj_a
wj_a %>% head() %>%
kable(caption = "Ponderadores - método Entropía",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 0.39337 |
X2 | 0.27246 |
X7 | 0.33417 |
Para el factor 3, utilice el método de Ranking para obtener los ponderadores normalizados para cada variable (utilice la numeración de las variables para establecer la jerarquía).
library(magrittr)
# Vector de Jerarquías
rj_a <- c(1,2)
names(rj_a) <- c("X5","X6")
# Función para generar los pesos
ponderadores_subjetivos_rank_suma <- function(vector_jerarquias){
n <- length(vector_jerarquias)
vector_pesos <- n-vector_jerarquias+1
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_suma_a <- ponderadores_subjetivos_rank_suma(rj_a)
# Pesos brutos
pesos_brutos_suma_a <- pesos_ranking_suma_a$w_brutos
pesos_brutos_suma_a %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía de Suma",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 2 |
X6 | 1 |
# Pesos normalizados
pesos_normalizados_a <- pesos_ranking_suma_a$w_normalizados %>% round(digits = 3)
pesos_normalizados_a %>% head() %>%
kable(caption = "Pesos normalizados - método Ranking - Jerarquía de Suma",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 0.667 |
X6 | 0.333 |
# Gráfico de los pesos normalizados
barplot(pesos_ranking_suma_a$w_normalizados,
main = "Ponderadores Ranking de Suma",
ylim = c(0,0.9),col = "mediumslateblue")
library(magrittr)
# Vector de Jerarquías
rj_a <- c(1,2)
names(rj_a) <- c("X5", "X6")
# Función para generar los pesos
ponderadores_subjetivos_rank_reciproco <- function(vector_jerarquias){
vector_pesos <- 1/vector_jerarquias
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_reciproco_a <- ponderadores_subjetivos_rank_reciproco(rj_a)
# Pesos brutos
pesos_brutos_reciproco_a <- pesos_ranking_reciproco_a$w_brutos
pesos_brutos_reciproco_a %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía Recíproca",
align = "c",
digits = 1) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 1.0 |
X6 | 0.5 |
# Pesos normalizados
pesos_normalizados_reciproco_a <- pesos_ranking_reciproco_a$w_normalizados %>% round(digits = 3)
pesos_normalizados_reciproco_a %>% head() %>%
kable(caption = "Pesos normalizado - método Ranking - Jerarquía Recíproca",
align = "c",
digits = 3) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 0.667 |
X6 | 0.333 |
# Gráfico de los pesos normalizados
barplot(pesos_ranking_reciproco_a$w_normalizados,
main = "Ponderadores Ranking Recíproco",
ylim = c(0,0.9),col = "slateblue")
library(magrittr)
# Vector de Jerarquías
rj_a <- c(1,2)
names(rj_a) <- c("X5", "X6")
# Función para generar los pesos
ponderadores_subjetivos_rank_exponencial <- function(vector_jerarquias,p=2){
n <- length(vector_jerarquias)
vector_pesos <- (n-vector_jerarquias+1)^p
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_exponencial_a<-ponderadores_subjetivos_rank_exponencial(rj_a)
# Pesos brutos
pesos_brutos_exponencial_a <- pesos_ranking_exponencial_a$w_brutos
pesos_brutos_exponencial_a %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía Exponencial",
align = "c") %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 4 |
X6 | 1 |
# Pesos normalizados
pesos_normalizados_exponencial_a <- pesos_ranking_exponencial_a$w_normalizados %>% round(digits = 3)
pesos_normalizados_exponencial_a %>% head() %>%
kable(caption = "Pesos normalizados - método Ranking - Jerarquía Exponencial",
align = "c",
digits = 1) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X5 | 0.8 |
X6 | 0.2 |
# Gráfico de los pesos normalizados (por default p=2)
barplot(pesos_ranking_suma_a$w_normalizados,
main = "Ponderadores Ranking Exponencial",
ylim = c(0,1),col = "darkslateblue")
# Comparación de valores de "p"
par(mfrow=c(1,3))
for(p in 2:4){
pesos_a <- ponderadores_subjetivos_rank_exponencial(vector_jerarquias = rj_a,
p = p)
barplot(pesos_a$w_normalizados,
main = paste0("p=",p),
ylim = c(0,1.2),
col = "thistle",
cex.main=3,
cex.axis = 3)
}
A medida aumenta el valor de “p”, se saturan más las variables que tienen mayor importancia, pero se extrae peso del resto de variables.
Se pretende construir un indicador multivariado sintético sobre el Desarrollo en las Economías.
Los indicadores a considerar son: el índice de alfabetización (alfabet)[+], el incremento de la población (inc_pob)[+], la esperanza de vida femenina (espvidaf)[+], la mortalidad infantil (mortinf)[-], el número promedio de hijos por mujer (fertilid)[+], la tasa de natalidad (tasa_nat)[+], el logaritmo del PIB (log_pib)[+], la población urbana (urbana)[+] y la tasa de mortalidad (tasa_mor)[-].
*Entre Corchetes aparece la correlación teórica esperada entre la variable compleja y el indicador.
Todas las varibles se encuentran en el archivo data_parcial_2_B.Rdata
Todas los indicadores se encuentran en el archivo data_parcial_2_B.Rdata
Usando Análisis Factorial determine cuántos factores deberían retenerse.
library(dplyr)
library(kableExtra)
load("C:/Users/Jacqueline Vanessa/Desktop/UES/Ciclo II - 2022/MAE118/TAREAS/UNIDAD 2/Practica - unidad 2/data_parcial_2_B_rev.RData")
data_parcial_2 %>% head() %>%
kable(caption = "Matriz de variables para el Desarrollo en las Economías",
align = "c",
digits = 4) %>%
kable_material(html_font = "Time New Roman")
PAÍS | POBLAC | DENSIDAD | URBANA | RELIG | ESPVIDAF | ESPVIDAM | ALFABET | INC_POB | MORTINF | PIB_CAP | REGIÓN | CALORÍAS | SIDA | TASA_NAT | TASA_MOR | TASASIDA | LOG_PIB | LOGTSIDA | NAC_DEF | FERTILID | LOG_POB | CREGRANO | ALFABMAS | ALFABFEM | CLIMA |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Acerbaján | 7400 | 86.0 | 54 | Musulma. | 75 | 67 | 98 | 1.40 | 35.0 | 3000 | 5 | NA | NA | 23 | 7 | NA | 3.4771 | NA | 3.2857 | 2.80 | 3.8692 | 18 | 100 | 100 | 3 |
Afganistán | 20500 | 25.0 | 18 | Musulma. | 44 | 45 | 29 | 2.80 | 168.0 | 205 | 3 | NA | 0 | 53 | 22 | 0.0000 | 2.3118 | 0.0000 | 2.4091 | 6.90 | 4.3118 | 12 | 44 | 14 | 3 |
Alemania | 81200 | 227.0 | 85 | Protest. | 79 | 73 | 99 | 0.36 | 6.5 | 17539 | 1 | 3443 | 11179 | 11 | 11 | 13.7672 | 4.2440 | 1.6895 | 1.0000 | 1.47 | 4.9096 | 34 | NA | NA | 8 |
Arabia Saudí | 18000 | 7.7 | 77 | Musulma. | 70 | 66 | 62 | 3.20 | 52.0 | 6651 | 5 | 2874 | 61 | 38 | 6 | 0.3389 | 3.8229 | 0.8054 | 6.3333 | 6.67 | 4.2553 | 1 | 73 | 48 | 1 |
Argentina | 33900 | 12.0 | 86 | Católica | 75 | 68 | 95 | 1.30 | 25.6 | 3408 | 6 | 3113 | 3904 | 20 | 9 | 11.5162 | 3.5325 | 1.6303 | 2.2222 | 2.80 | 4.5302 | 9 | 96 | 95 | 8 |
Armenia | 3700 | 126.0 | 68 | Ortodoxa | 75 | 68 | 98 | 1.40 | 27.0 | 5000 | 5 | NA | 2 | 23 | 6 | 0.0541 | 3.6990 | 0.5579 | 3.8333 | 3.19 | 3.5682 | 17 | 100 | 100 | NA |
library(dplyr)
library(tidyr)
norm_directa_a<-function(x){(x-min(x))/(max(x)-min(x))}
norm_inversa_b<-function(x){(max(x)-x)/(max(x)-min(x))}
data_parcial_2 %>% replace_na(list(ALFABET = 0, INC_POB = 0, ESPVIDAF = 0, MORTINF = 0, FERTILID = 0, TASA_NAT = 0, LOG_PIB = 0, URBANA = 0, TASA_MOR = 0)) -> data_parcial_2
# Seleccionando las variables con correlación positiva para el Desarrollo en las Economías
data_parcial_2 %>%
select(ALFABET, INC_POB, ESPVIDAF, FERTILID, TASA_NAT, LOG_PIB, URBANA) %>%
apply(MARGIN = 2,FUN = norm_directa_a) %>% as.data.frame() -> variables_corr_positiva_b
# Seleccionando las variables con correlación negativa para el Desarrollo en las Economías
data_parcial_2 %>%
select(MORTINF, TASA_MOR) %>%
apply(MARGIN = 2,FUN = norm_inversa_b) %>% as.data.frame() -> variables_corr_negativa_b
# Juntando y reordenando las variables
variables_corr_positiva_b %>%
bind_cols(variables_corr_negativa_b) %>%
select(ALFABET, INC_POB, ESPVIDAF, MORTINF, FERTILID, TASA_NAT, LOG_PIB, URBANA, TASA_MOR) -> datos_desarrollo_normalizados
datos_desarrollo_normalizados %>% head() %>%
kable(caption = "Datos normalizados",
align = "c") %>%
kable_material(html_font = "Time New Roman")
ALFABET | INC_POB | ESPVIDAF | MORTINF | FERTILID | TASA_NAT | LOG_PIB | URBANA | TASA_MOR |
---|---|---|---|---|---|---|---|---|
0.98 | 0.30686 | 0.82051 | 0.81098 | 0.34188 | 0.30233 | 0.60885 | 0.54 | 0.70833 |
0.29 | 0.55957 | 0.02564 | 0.00000 | 0.84249 | 1.00000 | 0.09867 | 0.18 | 0.08333 |
0.99 | 0.11913 | 0.92308 | 0.98476 | 0.17949 | 0.02326 | 0.94458 | 0.85 | 0.54167 |
0.62 | 0.63177 | 0.69231 | 0.70732 | 0.81441 | 0.65116 | 0.76023 | 0.77 | 0.75000 |
0.95 | 0.28881 | 0.82051 | 0.86829 | 0.34188 | 0.23256 | 0.63310 | 0.86 | 0.62500 |
0.98 | 0.30686 | 0.82051 | 0.85976 | 0.38950 | 0.30233 | 0.70598 | 0.68 | 0.75000 |
library(PerformanceAnalytics)
# Matriz de correlación
chart.Correlation(as.matrix(datos_desarrollo_normalizados),histogram = TRUE,pch=12)
Casi todas las correlaciones son significativas al 1%. Hay una evidente correlación entre las variables propuestas en la batería de indicadores.
library(rela)
# KMO
KMO_b <- paf(as.matrix(datos_desarrollo_normalizados))$KMO
print(KMO_b)
## [1] 0.85275
El valor mínimo para considerar aceptable el análisis factorial es de 0.5 y la base de datos tiene el 0.85, podemos considerar que es adecuado hacer el análisis.
library(psych)
# Prueba de Barlett
options(scipen = 99999)
Barlett_b <- cortest.bartlett(datos_desarrollo_normalizados)
print(Barlett_b)
## $chisq
## [1] 1478.1
##
## $p.value
## [1] 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017846
##
## $df
## [1] 36
El \(P-value\) es casi 0, quiere decir que se rechaza la hipótesis nula y no se rechaza la hipótesis alternativa, hay evidencia de correlación poblacional entre la batería de indicadores propuestas.
library(FactoMineR)
library(factoextra)
library(kableExtra)
Rx_b <- cor(datos_desarrollo_normalizados)
PC_b <- princomp(x = datos_desarrollo_normalizados,
cor = TRUE,
fix_sign = FALSE)
variables_pca_b <- get_pca_var(PC_b)
factoextra::get_eig(PC_b) %>% kable(caption="Resumen de PCA",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("hover"))
eigenvalue | variance.percent | cumulative.variance.percent | |
---|---|---|---|
Dim.1 | 6.45 | 71.63 | 71.63 |
Dim.2 | 1.24 | 13.81 | 85.44 |
Dim.3 | 0.56 | 6.18 | 91.62 |
Dim.4 | 0.39 | 4.36 | 95.98 |
Dim.5 | 0.18 | 2.01 | 97.99 |
Dim.6 | 0.08 | 0.86 | 98.85 |
Dim.7 | 0.06 | 0.64 | 99.49 |
Dim.8 | 0.03 | 0.32 | 99.81 |
Dim.9 | 0.02 | 0.19 | 100.00 |
Podemos ver la cantidad de factores a retener:
fviz_eig(PC_b,
choice = "eigenvalue",
barcolor = "steelblue",
barfill = "steelblue",
addlabels = TRUE,
)+labs(title = "Gráfico de Sedimentación",
subtitle = "Usando princomp, con Autovalores")+
xlab(label = "Componentes")+
ylab(label = "Autovalores")+
geom_hline(yintercept = 1)
Aquí podemos observar que el punto de quiebre se da en el segundo componente. Por el momento los criterios de extracción se satisfacen o concluyen de la misma manera.
¿Qué variables quedan representadas en cada factor?
library(corrplot)
library(psych)
# Modelo de 2 Factores (Rotada)
numero_de_factores_b <- 2
modelo_factores_b <- principal(r = Rx_b,
nfactors = numero_de_factores_b,
covar = FALSE,
rotate = "varimax")
modelo_factores_b
## Principal Components Analysis
## Call: principal(r = Rx_b, nfactors = numero_de_factores_b, rotate = "varimax",
## covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
## RC1 RC2 h2 u2 com
## ALFABET 0.70 0.51 0.74 0.260 1.8
## INC_POB -0.98 0.04 0.96 0.041 1.0
## ESPVIDAF 0.62 0.76 0.95 0.048 1.9
## MORTINF 0.65 0.71 0.92 0.075 2.0
## FERTILID -0.87 -0.40 0.91 0.091 1.4
## TASA_NAT -0.90 -0.40 0.96 0.036 1.4
## LOG_PIB 0.62 0.59 0.73 0.270 2.0
## URBANA 0.39 0.71 0.66 0.342 1.6
## TASA_MOR -0.03 0.92 0.85 0.148 1.0
##
## RC1 RC2
## SS loadings 4.35 3.34
## Proportion Var 0.48 0.37
## Cumulative Var 0.48 0.85
## Proportion Explained 0.57 0.43
## Cumulative Proportion 0.57 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 2 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.05
##
## Fit based upon off diagonal values = 0.99
De la primer variable, el 0.74% de su varianza es explicada por la solución. La segunda variable tiene un 0.96% de su varianza explicada por la extracción. Entonces es una solución bastante representativa de los datos originales, se pierde muy poca información al sustituir la batería original de indicadores por los dos componentes que se han estimado.
En los ponderadores (Proportion Explained) que se han extraído, la primera variable va a tener un ponderador de 0.57 y otra de 0.43.
correlaciones_modelo_b <- variables_pca_b$coord
rotacion_b <- varimax(correlaciones_modelo_b[,1:numero_de_factores_b])
correlaciones_modelo_rotada_b <- rotacion_b$loadings
corrplot(correlaciones_modelo_rotada_b[,1:numero_de_factores_b],
is.corr = FALSE,
method = "square",
addCoef.col="grey",
number.cex = 0.75)
Para el factor 1, este está representad0 con ALFABET, INC_POB, FERTILID, TASA_NAT y LOG_PIB. El factor 2 está más asociado con ESPVIDAF, MORTINF, URBANA Y TASA_MOR.
Determine qué pesos deben asignarse a cada factor y a las variables dentro de cada uno de ellos.
library(kableExtra)
cargas_b <- rotacion_b$loadings[1:9,1:numero_de_factores_b]
ponderadores_b <- prop.table(apply(cargas_b^2,MARGIN = 2,sum))
t(ponderadores_b) %>% kable(caption = "Ponderadores de los Factores Extraídos",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Dim.1 | Dim.2 |
---|---|
0.57 | 0.43 |
Al factor 1 se le debe asignar un peso del 57% y al factor 2 un peso del 43%.
contribuciones_b <- apply(cargas_b^2,
MARGIN = 2,
prop.table)
contribuciones_b %>% kable(caption="Contribución de las variables en los Factores",
align = "c",
digits = 2) %>%
kable_material(html_font = "Time New Roman") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Dim.1 | Dim.2 | |
---|---|---|
ALFABET | 0.11 | 0.08 |
INC_POB | 0.22 | 0.00 |
ESPVIDAF | 0.09 | 0.17 |
MORTINF | 0.10 | 0.15 |
FERTILID | 0.17 | 0.05 |
TASA_NAT | 0.19 | 0.05 |
LOG_PIB | 0.09 | 0.10 |
URBANA | 0.04 | 0.15 |
TASA_MOR | 0.00 | 0.25 |
Aquí se pueden observar los pesos que deberían tener cada una de las variables.
Una empresa se encuentra calculando un Indicador del desempeño de sus líneas de producción, para ello no dispone de información previa, pero hay una importante consultora que posee expertos en el sector donde se ubica la empresa en cuestión.
La consultora, ha han determinado 4 variables que definen adecuadamente el desempeño de las líneas de producción:
La consultora jerarquizó las variables de la siguiente manera:
Dentro de la consultora hay 3 expertos que propusieron la jerarquía anterior, pero también realizaron un ejercicio de comparación por pares y los resultados fueron los siguientes:
Calcule los pesos normalizados, de las variables, usando los métodos de ranking directo, por suma, por reciproco y por ranking exponencial (use p=4)
library(magrittr)
# Vector de Jerarquías
rj_b <- c(3, 4, 2, 1)
names(rj_b) <- c("X1", "X2", "X3", "X4")
# Función para generar los pesos
ponderadores_subjetivos_rank_suma <- function(vector_jerarquias){
n <- length(vector_jerarquias)
vector_pesos <- n-vector_jerarquias+1
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_suma_b <- ponderadores_subjetivos_rank_suma(rj_b)
# Pesos brutos
pesos_brutos_suma_b <- pesos_ranking_suma_b$w_brutos
pesos_brutos_suma_b %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía de Suma",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 2 |
X2 | 1 |
X3 | 3 |
X4 | 4 |
# Pesos normalizados
pesos_normalizados_b <- pesos_ranking_suma_b$w_normalizados %>% round(digits = 3)
pesos_normalizados_b %>% head() %>%
kable(caption = "Pesos normalizados - método Ranking - Jerarquía de Suma",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 0.2 |
X2 | 0.1 |
X3 | 0.3 |
X4 | 0.4 |
# Gráfico de los pesos normalizados
barplot(pesos_ranking_suma_b$w_normalizados,
main = "Ponderadores Ranking de Suma",
ylim = c(0,0.5),col = "mediumslateblue")
library(magrittr)
# Vector de Jerarquías
rj_b <- c(3, 4, 2, 1)
names(rj_b) <- c("X1", "X2", "X3", "X4")
# Función para generar los pesos
ponderadores_subjetivos_rank_reciproco <- function(vector_jerarquias){
vector_pesos <- 1/vector_jerarquias
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_reciproco_b <- ponderadores_subjetivos_rank_reciproco(rj_b)
# Pesos brutos
pesos_brutos_reciproco_b <- pesos_ranking_reciproco_b$w_brutos
pesos_brutos_reciproco_b %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía Recíproca",
align = "c",
digits = 1) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 0.3 |
X2 | 0.2 |
X3 | 0.5 |
X4 | 1.0 |
# Pesos normalizados
pesos_normalizados_reciproco_b <- pesos_ranking_reciproco_b$w_normalizados %>% round(digits = 3)
pesos_normalizados_reciproco_b %>% head() %>%
kable(caption = "Pesos normalizado - método Ranking - Jerarquía Recíproca",
align = "c",
digits = 3) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 0.16 |
X2 | 0.12 |
X3 | 0.24 |
X4 | 0.48 |
# Gráfico de los pesos normalizados
barplot(pesos_ranking_reciproco_b$w_normalizados,
main = "Ponderadores Ranking Recíproco",
ylim = c(0,0.6),col = "slateblue")
library(magrittr)
# Vector de Jerarquías
rj_b <- c(3, 4, 2, 1)
names(rj_b) <- c("X1", "X2", "X3", "X4")
# Función para generar los pesos
ponderadores_subjetivos_rank_exponencial <- function(vector_jerarquias,p=4){
n <- length(vector_jerarquias)
vector_pesos <- (n-vector_jerarquias+1)^p
list(w_brutos = vector_pesos,
w_normalizados = vector_pesos/sum(vector_pesos))
}
# Aplicando la función:
pesos_ranking_exponencial_b <- ponderadores_subjetivos_rank_exponencial(rj_b)
# Pesos brutos
pesos_brutos_exponencial_b <- pesos_ranking_exponencial_b$w_brutos
pesos_brutos_exponencial_b %>% head() %>%
kable(caption = "Pesos brutos - método Ranking - Jerarquía Exponencial",
align = "c") %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 16 |
X2 | 1 |
X3 | 81 |
X4 | 256 |
# Pesos normalizados
pesos_normalizados_exponencial_b <- pesos_ranking_exponencial_b$w_normalizados %>% round(digits = 3)
pesos_normalizados_exponencial_b %>% head() %>%
kable(caption = "Pesos normalizados - método Ranking - Jerarquía Exponencial",
align = "c",
digits = 1) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
X1 | 0.0 |
X2 | 0.0 |
X3 | 0.2 |
X4 | 0.7 |
# Gráfico de los pesos normalizados (por default p=2)
barplot(pesos_ranking_suma_b$w_normalizados,
main = "Ponderadores Ranking Exponencial",
ylim = c(0,0.5),col = "darkslateblue")
# Comparación de valores de "p"
par(mfrow=c(1,3))
for(p in 2:4){
pesos_b <- ponderadores_subjetivos_rank_exponencial(vector_jerarquias = rj_b,
p = p)
barplot(pesos_b$w_normalizados,
main = paste0("p=",p),
ylim = c(0,1),
col = "thistle",
cex.main = 3,
cex.axis = 3)
}
A medida aumenta el valor de “p”, se saturan más las variables que tienen mayor importancia, pero se extrae peso del resto de variables.
Usando la técnica de comparación por pares, calcule los pesos normalizados para las variables:
Experto 1:
library(FuzzyAHP)
valores_matriz_comparacion_exper1 = c(1,7,4,5,
NA,1,6,3,
NA,NA,1,2,
NA,NA,NA,1)
matriz_comparacion_exper1 <- matrix(valores_matriz_comparacion_exper1,
nrow = 4,
ncol = 4,
byrow = TRUE)
matriz_comparacion_exper1 <- pairwiseComparisonMatrix(matriz_comparacion_exper1)
matriz_comparacion_exper1@variableNames <- c("X1", "X2", "X3", "X4")
show(matriz_comparacion_exper1)
## An object of class "PairwiseComparisonMatrix"
## Slot "valuesChar":
## [,1] [,2] [,3] [,4]
## [1,] "1" "7" "4" "5"
## [2,] "1/7" "1" "6" "3"
## [3,] "1/4" "1/6" "1" "2"
## [4,] "1/5" "1/3" "1/2" "1"
##
## Slot "values":
## [,1] [,2] [,3] [,4]
## [1,] 1.00000 7.00000 4.0 5
## [2,] 0.14286 1.00000 6.0 3
## [3,] 0.25000 0.16667 1.0 2
## [4,] 0.20000 0.33333 0.5 1
##
## Slot "variableNames":
## [1] "X1" "X2" "X3" "X4"
# Cálculo de los pesos:
pesos_normalizados_exper1 = calculateWeights(matriz_comparacion_exper1)
show(pesos_normalizados_exper1)
## An object of class "Weights"
## Slot "weights":
## w_X1 w_X2 w_X3 w_X4
## 0.606592 0.223310 0.094748 0.075350
barplot(pesos_normalizados_exper1@weights,
main = "Ponderadores por comparación de pares de Experto 1",
ylim = c(0,0.7),
col = "midnightblue")
Experto 2:
library(FuzzyAHP)
valores_matriz_comparacion_exper2 = c(1,7,6,3,
NA,1,5,2,
NA,NA,1,4,
NA,NA,NA,1)
matriz_comparacion_exper2 <- matrix(valores_matriz_comparacion_exper2,
nrow = 4,
ncol = 4,
byrow = TRUE)
matriz_comparacion_exper2 <- pairwiseComparisonMatrix(matriz_comparacion_exper2)
matriz_comparacion_exper2@variableNames <- c("X1", "X2", "X3", "X4")
show(matriz_comparacion_exper2)
## An object of class "PairwiseComparisonMatrix"
## Slot "valuesChar":
## [,1] [,2] [,3] [,4]
## [1,] "1" "7" "6" "3"
## [2,] "1/7" "1" "5" "2"
## [3,] "1/6" "1/5" "1" "4"
## [4,] "1/3" "1/2" "1/4" "1"
##
## Slot "values":
## [,1] [,2] [,3] [,4]
## [1,] 1.00000 7.0 6.00 3
## [2,] 0.14286 1.0 5.00 2
## [3,] 0.16667 0.2 1.00 4
## [4,] 0.33333 0.5 0.25 1
##
## Slot "variableNames":
## [1] "X1" "X2" "X3" "X4"
# Cálculo de los pesos:
pesos_normalizados_exper2 = calculateWeights(matriz_comparacion_exper2)
show(pesos_normalizados_exper2)
## An object of class "Weights"
## Slot "weights":
## w_X1 w_X2 w_X3 w_X4
## 0.60919 0.19879 0.10987 0.08215
barplot(pesos_normalizados_exper2@weights,
main = "Ponderadores por comparación de pares de Experto 2",
ylim = c(0,0.7),
col = "midnightblue")
Experto 3:
library(FuzzyAHP)
valores_matriz_comparacion_exper3 = c(1,7,5,4,
NA,1,3,2,
NA,NA,1,6,
NA,NA,NA,1)
matriz_comparacion_exper3 <- matrix(valores_matriz_comparacion_exper3,
nrow = 4,
ncol = 4,
byrow = TRUE)
matriz_comparacion_exper3 <- pairwiseComparisonMatrix(matriz_comparacion_exper3)
matriz_comparacion_exper3@variableNames <- c("X1", "X2", "X3", "X4")
show(matriz_comparacion_exper3)
## An object of class "PairwiseComparisonMatrix"
## Slot "valuesChar":
## [,1] [,2] [,3] [,4]
## [1,] "1" "7" "5" "4"
## [2,] "1/7" "1" "3" "2"
## [3,] "1/5" "1/3" "1" "6"
## [4,] "1/4" "1/2" "1/6" "1"
##
## Slot "values":
## [,1] [,2] [,3] [,4]
## [1,] 1.00000 7.00000 5.00000 4
## [2,] 0.14286 1.00000 3.00000 2
## [3,] 0.20000 0.33333 1.00000 6
## [4,] 0.25000 0.50000 0.16667 1
##
## Slot "variableNames":
## [1] "X1" "X2" "X3" "X4"
# Cálculo de los pesos:
pesos_normalizados_exper3 = calculateWeights(matriz_comparacion_exper3)
show(pesos_normalizados_exper3)
## An object of class "Weights"
## Slot "weights":
## w_X1 w_X2 w_X3 w_X4
## 0.61676 0.17252 0.14259 0.06812
barplot(pesos_normalizados_exper3@weights,
main = "Ponderadores por comparación de pares de Experto 3",
ylim = c(0,0.7),
col = "midnightblue")
Asumiendo que la opinión de los 3 expertos es igualmente válida.
library(kableExtra)
ponderacion_igual <- 1/3
ponderacion_expertos_1 <- (pesos_normalizados_exper1@weights+pesos_normalizados_exper2@weights+pesos_normalizados_exper3@weights)
promedio_1 <- ponderacion_igual*ponderacion_expertos_1
promedio_1 %>% head() %>%
kable(caption = "Ponderación - expertos con igual ponderación",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
w_X1 | 0.610848 |
w_X2 | 0.198207 |
w_X3 | 0.115739 |
w_X4 | 0.075207 |
sum(promedio_1)
## [1] 1
pesos_normalizados_exper123_1 <- promedio_1/sum(promedio_1)
pesos_normalizados_exper123_1 %>% head() %>%
kable(caption = "Pesos normalizados - expertos con igual ponderación",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
w_X1 | 0.610848 |
w_X2 | 0.198207 |
w_X3 | 0.115739 |
w_X4 | 0.075207 |
Si el experto 1 se pondera con 0.25, el experto 2 con 0.35 y el experto 3 con 0.4
ponderacion_expertos_2 <- (pesos_normalizados_exper1@weights*0.25)+
(pesos_normalizados_exper2@weights*0.35)+
(pesos_normalizados_exper3@weights*0.4)
ponderacion_expertos_2 %>% head() %>%
kable(caption = "Ponderación - expertos con poderación desigual",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
w_X1 | 0.611569 |
w_X2 | 0.194412 |
w_X3 | 0.119180 |
w_X4 | 0.074838 |
sum(ponderacion_expertos_2)
## [1] 1
pesos_normalizados_exper123_2 <- ponderacion_expertos_2/sum(ponderacion_expertos_2)
pesos_normalizados_exper123_2 %>% head() %>%
kable(caption = "Pesos normalizados - expertos con ponderación desigual",
align = "c",
digits = 6) %>%
kable_material(html_font = "Time New Roman")
x | |
---|---|
w_X1 | 0.611569 |
w_X2 | 0.194412 |
w_X3 | 0.119180 |
w_X4 | 0.074838 |