原帖地址(http://blog.sina.com.cn/s/blog_c9d4e1380102xiof.html),作者也是本人。
在对多个层次指标对重要性进行主观判断时,往往会面临跨层不可比的问题,层次分析正是为了解决这问题而诞生的方法。随着计算工具的完善,层次分析的实现变得越来越简单,但是层次分析为什么会生效?如果已经有一个理论上的权重,能否根据该权重逆向生成判断矩阵?本文将围绕上述两个基本问题展开介绍。
层次分析的一般流程如下:在单层权重计算的过程中,对于一个待决策层(假设有n个指标),需要先构建判断矩阵,构建判断矩阵的方法可以参考这一篇博文(https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4278049.html);之后需要检验该判断矩阵是否可以通过一致性检验。
在很多实操的时候,一致性检验在某些时候会很难通过。实际上,一致性检验是层次分析生效的保证。换句话说,一致性检验是判断矩阵的一个质量控制手段,一个逻辑无法自洽的判断矩阵,是无法通过一致性检验的。有一定线性代数基础的人都知道,方阵的秩是的极大无关组的向量个数。在判断矩阵中,每一行都代表着当前指标与其余指标的相对重要性,当该判断矩阵完全自洽的时候,所有的行应该是成比例的,换言之,判断矩阵的秩应该为1。此时,对称方阵秩为1,非零特征值只有1个,因此为矩阵的迹(也就是对角线的和),为n。所以在一致性检验无法通过的时候,只需要检查是不是出现了相对重要性矛盾的地方,进行调整即可。
那么,如果给定一个权重,是否可以逆向生成判断矩阵呢?当然是可以的。层次分析中输出到权向量,实际上就是特征向量。将特征向量作为权向量的依据是,每一个特征向量都是矩阵空间中的一个向量,而由于判断矩阵的空间理论上只有一个维度,因此只能有一个线性无关的特征向量,那么则个特征向量自然也就等价于判断矩阵的每一行,也就自然是我们要求的权向量。所以说,给定一个权向量,返回判断矩阵,相当于将该权向量重复n列,形成一个方阵,之后按照同乘或者同除的方法,将这个方阵变成对角线为1,其余元素均近似为1-9整数或者整数分之一的数值即可。以下是我常用来逆向生成判断矩阵的R语言code:
#其中b为初始权重,judgeMatrix为生成的最符合初始权重的判断矩阵。
b<-c(0.3,0.5,0.2)
judgeMatirx<-matrix(1,ncol=length(b),nrow=length(b))
for (i in 1:length(b)) {
for (j in 1:length(b)) {
if (b[i]/b[j]>=1){
judgeMatrix[i,j]<-round(b[i]/b[j])
judgeMatrix[j,i]<-1/round(b[i]/b[j])
}
}
}