###### ### 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