其中关键的部分是从成对比较阵中算出权向量并做一致性检验。其R代码如下:
代码1:计算权重向量的函数weight
function (B)
{
A = matrix(B, nrow = sqrt(length(B)), ncol = sqrt(length(B)),
byrow = TRUE)
n = ncol(A)
mul_collect = c(1:n)
for (i in 1:n) mul_collect[i] = prod(A[i, ])
weight = mul_collect^(1/n)
weight_one = weight/sum(weight)
round(weight_one, 4)
}
代码2:计算一致性检验的函数CI_CR
function (B)
{
RI = c(0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49,
1.51)
Wi = weight(B)
n = length(Wi)
if (n > 2) {
W = matrix(Wi, ncol = 1)
A = matrix(B, nrow = sqrt(length(B)), ncol = sqrt(length(B)),
byrow = TRUE)
AW = A %*% W
aw = as.vector(AW)
la_max = sum(aw/Wi)/n
CI = (la_max - n)/(n - 1)
CR = CI/RI[n]
cat("\n CI=", round(CI, 4), "\n")
cat("\n CR=", round(CR, 4), "\n")
cat("\n la_max=", round(la_max, 4), "\n\n")
if (CR <= 0.1) {
cat(" 通过一致性检验!\n")
cat("\n Wi: ", round(Wi, 4), "\n")
}
else {
cat(" 请调整判断矩阵!\n")
Wi = null
break
}
}
else if (n <= 2) {
return(Wi)
}
}
注:本代码由《多元统计分析及R语言建模》作者王斌会老师编写