Métodos de ponderación objetivos CRITIC & Entropía
Método CRITIC
CRITIC (CRiteria Importance Through Intercriteria Correlation) es un método de ponderación de variables que se basa en dos criterios:
La dispersión de los valores de cada variable
Complemento de la correlación de cada variable con las demás.
Para calcular los pesos de las variables se hace de la siguiente manera:
Primero, se calcula la desviación estándar de cada variable, que se denota como \(\sigma_j\) para la variable \(j\)
Luego, se calcula la correlación entre cada par de variables, que se denota como \(\rho_{ij}\) para las variables \(i\) y \(j\). Es decir aquí se calcula la matriz de correlación \(R(X)\)
A continuación, se calcula el complemento de la correlación promedio para cada variable, que se denota como: \[ c_{j}=\sum_{j,i=1}^{m}(1- \rho_{ij}) \]
, donde \(m\) es el número total de variables.
- Luego el peso bruto de cada variable se calcula como \[w_j = \sigma_j \cdot c_{j} \] Finalmente los pesos normalizados (que suman 100%) se obtienen dividiendo cada peso bruto entre la suma de los ponderadores brutos: \[W_j=\frac{w_j}{\sum_{j=1}^{m}(w_j)} \]
Implementación en R del método CRITIC
### 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)
}Ejemplo de aplicación de CRITIC
library(dplyr)
bateria_indicadores<-data.frame(x1=c(4,5,6,8),
x2=c(6,4,8,4),
x3=c(4,1,1,2))
library(kableExtra)
library(dplyr)
bateria_indicadores %>% kable() %>% kable_styling() | x1 | x2 | x3 |
|---|---|---|
| 4 | 6 | 4 |
| 5 | 4 | 1 |
| 6 | 8 | 1 |
| 8 | 4 | 2 |
## $pesos_brutos
## x1 x2 x3
## 4.557951 4.317658 3.413967
##
## $pesos_normalizados
## x1 x2 x3
## 0.3708794 0.3513269 0.2777937
Pesos Normalizados: 37.09%, 35.13%, 27.78%
Método de Entropía.
Este método se fundamenta en la definición de entropía de Shannon, en la cual se considera la cantidad de información intrinsica de cada variable.
De una manera sencilla los pesos se asignan de forma tal que se tome en cuenta el componente permanente de la información de cada variable.
Para calcular los pesos de las variables se hace de la siguiente manera:
Primero si los datos incluyen valores negativos y/o cero, debe agregarse una constante a los datos para que los valores sean positivos ya que se calcularan logaritmos.
Luego se expresan las variables en porcentaje, es decir \(a_{j}=\frac{x_j}{\sum x_j}\)
A continuación se procede a calcular \(a_j\cdot log(a_j)\) para cada variable
Se calcula la constante de entropia \(K=\frac{1}{log(n)}\) donde \(n\) es la cantidad de casos en las variables.
Ahora se calculan las entropias para cada variable: \[E_j=-K\cdot \sum(a_j\cdot log(a_j)) \]
Los pesos brutos se calcularán así: \[w_j=1-E_j \]
Finalmente los pesos normalizados se calcurán así: \[W_j=\frac{1-E_j}{\sum_{j=1}^{m} (1-E_j)}=\frac{w_j}{\sum_{j=1}^{m} w_j}\]
Implementación en R del Método de Entropía
### Método de Entropía
ponderadores_entropia <- function(matriz_datos, constante = 0) {
# Agregar constante y convertir en porcentaje los datos
aj <- apply(X = matriz_datos + constante, MARGIN = 2, prop.table)
# Calcular el logaritmo de aj y su producto con aj
log_aj <- apply(X = aj, MARGIN = 2, log10)
aj_log_aj <- aj * log_aj
sum_aj_log_aj <- apply(X = aj_log_aj, MARGIN = 2, sum)
#Calcular las entropias
n <- nrow(matriz_datos)
K <- 1 / log10(n)
E <- (-K * sum_aj_log_aj)
#Cálculo de los ponderadores
pesos_brutos <- 1 - E
pesos_normalizados <- prop.table(pesos_brutos)
#Salida de resultados
resultados <- list(pesos_brutos = pesos_brutos,
pesos_normalizados = pesos_normalizados)
return(resultados)
}Ejemplo de aplicación del Método de Entropía
Usando los mismos datos del ejemplo de CRITIC, se aplica la función creada con anterioridad:
## $pesos_brutos
## x1 x2 x3
## 0.02342371 0.03186999 0.12500000
##
## $pesos_normalizados
## x1 x2 x3
## 0.1299197 0.1767671 0.6933132
Pesos Normalizados: 12.99%, 17.68%, 69.33%