楼主: eshanzi
8702 12

[问答] 层次分析法与R软件 [推广有奖]

11
Afgr4289ch 学生认证  发表于 2014-6-2 22:47:36
其中关键的部分是从成对比较阵中算出权向量并做一致性检验。其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语言建模》作者王斌会老师编写

12
eshanzi 发表于 2014-6-3 11:04:17
Afgr4289ch 发表于 2014-6-2 22:47
其中关键的部分是从成对比较阵中算出权向量并做一致性检验。其R代码如下:

代码1:计算权重向量的函数we ...
非常感谢您

13
asdasdaseee 发表于 2014-6-3 13:22:12
围观 学习

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 03:47