Métodos básados en el ranking

Se fundamentan en la asignación de jerarquía en las variables, esto con base en el criterio del investigador, fundamentado lo mejor que se pueda en evidencias lógicas de la teoría o de la experiencia derivada de otras investigaciones similares.

1. Jerarquía de Suma

Supongase que hay 5 variables: X1, X2,X3,X4,X5 y se asígna el siguiente ranking:

Variables X1 X2 X3 X4 X5
Ranking (Jerarquía) 4 2 5 1 3

El peso (bruto) se asigna mediante la expresión: \[w_{j}=n-r_j+1 \] y los pesos normalizados mediante: \[ \bar{w}_j=\frac{w_j}{\sum{w_j}}\]

library(magrittr)
#Vector de Jerarquías
rj<-c(4,2,5,1,3)
names(rj)<-c("X1","X2","X3","X4","X5")

#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<-ponderadores_subjetivos_rank_suma(rj)

#Pesos brutos
pesos_ranking_suma$w_brutos
## X1 X2 X3 X4 X5 
##  2  4  1  5  3
#Pesos normalizados
pesos_ranking_suma$w_normalizados %>% round(digits = 3)
##    X1    X2    X3    X4    X5 
## 0.133 0.267 0.067 0.333 0.200
#Gráfico de los pesos normalizados
barplot(pesos_ranking_suma$w_normalizados,
        main = "Ponderadores Ranking de Suma",
        ylim = c(0,0.5),col = "red")

2. Jerarquía Reciproca

El peso (bruto) se asigna mediante la expresión: \[w_{j}=1/r_j\] y los pesos normalizados mediante: \[ \bar{w}_j=\frac{w_j}{\sum{w_j}}\]

library(magrittr)
#Vector de Jerarquías
rj<-c(4,2,5,1,3)
names(rj)<-c("X1","X2","X3","X4","X5")

#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<-ponderadores_subjetivos_rank_reciproco(rj)

#Pesos brutos
pesos_ranking_reciproco$w_brutos
##        X1        X2        X3        X4        X5 
## 0.2500000 0.5000000 0.2000000 1.0000000 0.3333333
#Pesos normalizados
pesos_ranking_reciproco$w_normalizados %>% round(digits = 3)
##    X1    X2    X3    X4    X5 
## 0.109 0.219 0.088 0.438 0.146
#Gráfico de los pesos normalizados
barplot(pesos_ranking_reciproco$w_normalizados,
        main = "Ponderadores Ranking Recíproco",
        ylim = c(0,0.5),col = "green")

3. Jerarquía Exponencial

El peso (bruto) se asigna mediante la expresión: \[w_{j}=(n-r_j+1)^p \] y los pesos normalizados mediante: \[ \bar{w}_j=\frac{w_j}{\sum{w_j}}\]

library(magrittr)
#Vector de Jerarquías
rj<-c(4,2,5,1,3)
names(rj)<-c("X1","X2","X3","X4","X5")

#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<-ponderadores_subjetivos_rank_exponencial(rj)

#Pesos brutos
pesos_ranking_exponencial$w_brutos
## X1 X2 X3 X4 X5 
##  4 16  1 25  9
#Pesos normalizados
pesos_ranking_exponencial$w_normalizados %>% round(digits = 3)
##    X1    X2    X3    X4    X5 
## 0.073 0.291 0.018 0.455 0.164
#Gráfico de los pesos normalizados (por default p=2)
barplot(pesos_ranking_suma$w_normalizados,
        main = "Ponderadores Ranking Exponencial",
        ylim = c(0,0.5),col = "coral")

#Comparación de valores de "p"

par(mfrow=c(1,3))
for(p in 2:4){
  
  pesos<-ponderadores_subjetivos_rank_exponencial(vector_jerarquias = rj,p = p)
  barplot(pesos$w_normalizados,main = paste0("p=",p),ylim = c(0,0.7),col = "coral",cex.main=3,cex.axis = 3)
}

4. Ponderación por comparación de Pares

En este caso la obtención de los pesos se logrará asignando importancia relativa a pares de variables, para el ejemplo se utilizarán 3 variables price, slope y view.

referencia del paquete “FuzzyAHP”

library(FuzzyAHP)
## Loading required package: MASS
valores_matriz_comparacion = c(1,4,7,
                               NA,1,5,
                               NA,NA,1)
matriz_comparacion<-matrix(valores_matriz_comparacion,
                           nrow = 3, ncol = 3, byrow = TRUE)
matriz_comparacion<-pairwiseComparisonMatrix(matriz_comparacion)
matriz_comparacion@variableNames<-c("price","slope","view")
show(matriz_comparacion)
## An object of class "PairwiseComparisonMatrix"
## Slot "valuesChar":
##      [,1]  [,2]  [,3]
## [1,] "1"   "4"   "7" 
## [2,] "1/4" "1"   "5" 
## [3,] "1/7" "1/5" "1" 
## 
## Slot "values":
##           [,1] [,2] [,3]
## [1,] 1.0000000  4.0    7
## [2,] 0.2500000  1.0    5
## [3,] 0.1428571  0.2    1
## 
## Slot "variableNames":
## [1] "price" "slope" "view"
# Cálculo de los pesos:
pesos_normalizados = calculateWeights(matriz_comparacion)
show(pesos_normalizados)
## An object of class "Weights"
## Slot "weights":
##    w_price    w_slope     w_view 
## 0.68708616 0.24374097 0.06917288
barplot(pesos_normalizados@weights,
        main = "Ponderadores por comparación de pares",
        ylim = c(0,0.7),col = "blue")