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_CRITIC<-ponderadores_critic(matriz_datos = bateria_indicadores) %>% print()
## $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_entropia<-ponderadores_entropia(matriz_datos = bateria_indicadores) %>% print()
## $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%