######
### CREAR UNA MATRIZ PARA CADA CRITERIO
Criterio1=c(1,5,3,1/5,1,1/3,1/3,3,1) ### VECTOR CON LOS ELEMENTOS DE LA MATRIZ
Criterio1=matrix(data = Criterio1, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio1 #### verifico la matriz
#### estandarizo
Criterio1Std=sweep(Criterio1, 2, colSums (Criterio1), "/")
Criterio1Std
# vector de prioridad del criterio
Criterio1_VP=rowSums(Criterio1Std)/3
names(Criterio1_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio1_VP
##### REPETIR PARA CADA UNA DE LAS OTROS 5 CRITERIOS
####### CRITERIO 2
Criterio2=c(
1, 3, 5,
1/3, 1, 6,
1/5, 1/6, 1)
Criterio2=matrix(data = Criterio2, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio2 #### verifico la matriz
#### estandarizo
Criterio2Std=sweep(Criterio2, 2, colSums (Criterio2), "/")
Criterio2Std
# vector de prioridad del criterio
Criterio2_VP=rowSums(Criterio2Std)/3
names(Criterio2_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio2_VP
####### CRITERIO 3
Criterio3=c(
1, 5, 1/6,
1/5, 1, 7,
6, 1/7, 1
)
Criterio3=matrix(data = Criterio3, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio3 #### verifico la matriz
#### estandarizo
Criterio3Std=sweep(Criterio3, 2, colSums (Criterio3), "/")
Criterio3Std
# vector de prioridad del criterio
Criterio3_VP=rowSums(Criterio3Std)/3
names(Criterio3_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio3_VP
####### CRITERIO 4
Criterio4=c(
1, 1/4, 1/6,
4, 1, 1/3,
6, 3, 1
)
Criterio4=matrix(data = Criterio4, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio4 #### verifico la matriz
#### estandarizo
Criterio4Std=sweep(Criterio4, 2, colSums (Criterio4), "/")
Criterio4Std
# vector de prioridad del criterio
Criterio4_VP=rowSums(Criterio4Std)/3
names(Criterio4_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio4_VP
####### CRITERIO 5
Criterio5=c(
1, 1/6, 4,
6, 1, 7,
1/4, 1/7, 1
)
Criterio5=matrix(data = Criterio5, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio5 #### verifico la matriz
#### estandarizo
Criterio5Std=sweep(Criterio5, 2, colSums (Criterio5), "/")
Criterio5Std
# vector de prioridad del criterio
Criterio5_VP=rowSums(Criterio5Std)/3
names(Criterio5_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio5_VP
####### CRITERIO 6
Criterio6=c(
1, 7, 1,
1/7, 1, 1/7,
7, 1/7, 1
)
Criterio6=matrix(data = Criterio6, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 3, ## numero de lineas
ncol = 3, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
Criterio6 #### verifico la matriz
#### estandarizo
Criterio6Std=sweep(Criterio6, 2, colSums (Criterio6), "/")
Criterio6Std
# vector de prioridad del criterio
Criterio6_VP=rowSums(Criterio6Std)/3
names(Criterio6_VP)=c("Punto A", "Punto B", "Punto C")
##### Vector de Prioridad
Criterio6_VP
#################################################################################
Criterios_All=cbind(Criterio1_VP,Criterio2_VP,Criterio3_VP,
Criterio4_VP, Criterio5_VP, Criterio6_VP)
criterios=c("C1", "C2", "C3", "C4", "C5", "C6")
colnames(Criterios_All)=criterios
Criterios_All
#################################################################################
#vector de prioridad de los criterios.
VPC=c(
1, 1/5, 1/6, 1/6, 2, 1/4,
5, 1, 1, 2, 2, 2,
6, 1, 1, 2, 6, 1,
6, 1/2, 1/2, 1, 5, 2,
1/2, 1/5, 1/6, 1/5, 1, 1/3,
4, 1/2, 1, 1/2, 3, 1
)
VPC=matrix(data = VPC, ### USO EL VECTOR CON EL COMANDO DE R "matrix()"
nrow = 6, ## numero de lineas
ncol = 6, ### numero de columnas
byrow = TRUE ### llenado por lineas
)
VPC #### verifico la matriz
#### estandarizo
VPCStd=sweep(VPC, 2, colSums (VPC), "/");VPCStd
VPCStd_V=rowSums(VPCStd)/6
VPCStd_V
names(VPCStd_V)=criterios
##### Vector
VPCStd_V
###################################################################################
class(Criterios_All)
dim(Criterios_All) # 3x6
class(VPCStd_V)
VPCStd_V=as.matrix(VPCStd_V) #### convertimos a matriz este objeto
dim(VPCStd_V) # 6x1
### multiplicamos matricialmente
Criterios_All%*%VPCStd_V
###################################################################################
# Indicadores de consistencia para los criterios
# Matriz en cuestion
VPC
# Matriz estandarizada
rownames(VPCStd)=criterios; colnames(VPCStd)=criterios;VPCStd
#promedios
VPCStd_V
# multiplico la matriz estandarizada por el promedio
M1=as.matrix(VPC[1,]);Mp=t(as.matrix(VPCStd_V));(Mp%*%M1)/VPCStd_V[1]
M1=as.matrix(VPC[2,]);(Mp%*%M1)/VPCStd_V[2]
M1=as.matrix(VPC[3,]);(Mp%*%M1)/VPCStd_V[3]
M1=as.matrix(VPC[4,]);(Mp%*%M1)/VPCStd_V[4]
M1=as.matrix(VPC[5,]);(Mp%*%M1)/VPCStd_V[5]
M1=as.matrix(VPC[6,]);(Mp%*%M1)/VPCStd_V[6]
# manualmente copy and paste los valores en el vector de abajo
CI=(mean(c(5.898597,6.415586,6.246236,6.274721,6.038823,6.19394))-6)/5
CR=CI/1.24
# [1] 0.02870707
# CR de 0.10 o menos es considerado aceptable
Proceso de Análisis Jerárquico
Dr. Luis Alan Navarro Navarro
Centro de Estudios en Gobierno y Asuntos Públicos
El Colegio de Sonora
El Proceso de Análisis Jerárquico (PAJ o Analytic Hierarchy Process AHP por sus siglas en Inglés) es una técnica que fue desarrollada por el Dr. Thomas L. Saaty a inicios de la década de los 70s. En términos simples, es una metodología cuantitativa que auxilia la toma de decisiones cuando se tiene(n): un objetivo, criterios (a maximizar o minimizar) y alternativas.
Es rara la ocasión en que, en política pública, no se tiene más de una opinión o no existen alternativas. Vivimos una época en la que los ciudadanos demandan información del gobierno: rápida, expedita, sin complicaciones ¿por que no? si las redes sociales ofrecen ubicuidad y tiempo real. Pongamos de ejemplo el debate de la "localización del nuevo Hospital General de Especialidades" en Hermosillo (buscar tema en Google), la plataforma change.org llevaba 1,999 firmas (Julio, 26, 2017 9:37 hora local) de personas que se oponían a la ubicación propuesta por el gobierno, aún cuando no se tiene información de ¿cuáles son las alternativas? ¿cuáles son los criterios que hay que tomar en cuenta? ¿a qué criterios se les dará más importancia? Este caso en tan solo un ejemplo de los retos en el proceso de toma de decisiones que enfrentan las autoridades.
El PAJ permite incluir criterios que se miden a través de variables cualitativas y cuantitativas. Así mismo, es una técnica que se ha generalizado para incluir la opinión de un panel de expertos o grupos de personas interesadas en un proyecto. El PAJ permite "objetivizar" lo más posible la toma de decisiones.
Mi primer contacto con este procedimiento fue en el curso Natural Resource Economics and Planning (RNR585) durante mi primer semestre de doctorado en la Universidad de Arizona. En el curso utilizamos software comercial, sin embargo, este procedimiento se puede desarrollar usando software libre: R. Aunque R tiene dos librerías (paquetes) especializados para el PAJ: "ahp" y "Prize", estos requieren de una estructura de datos muy específica. En el tutorial que aquí presento se analiza un ejemplo hipotético donde se pretende ubicar una planta de tratamiento de aguas residuales, con un análisis sencillo, sin el uso de los paquetes especializados de R.
Básicamente el PAJ posee la siguiente estructura: objetivos, criterios y alternativas. Los analistas deben de comparar por pares si el criterio "i" comparado con el criterio "j" es igualmente importante, asignando después un valor del 1 al 9 (ver tutorial); luego, se compara por pares cada las alternativas para cada uno de los criterios, por ejemplo: "la alternativa "i" para el criterio "k" comparada con la alternativa "j" es absolutamente mejor por lo que se asigna un valor de 9".
Por último, aunque los costos de las alternativas se pueden incluir en el análisis, se recomienda dejar de lado los costos y analizar las alternativas en base a sus ventajas (beneficios). Esto es para eliminar el efecto psicológico y matemático de que opciones muy costosas "obscurezcan" las ventajas relativas de las otras alternativas. Se recomienda entonces normalizar los costos CN = (costo de la alternativa "i"/ ∑ costos de todas las alternativas) y dividir el vector de preferencias obtenido del PAJ entre el respectivo CN de cada alternativa.
Tutorial
R code




