层次分析法(Analyt Hierarchy Process,缩写AHP)是将决策有关的元素分解成目标、准指、方案等层次,在次基础上进行定性和定量分析的决策方法。本文通过一个示例描述R的实现过程。

概述

层次分析法计算指标权重的基本思路是,首先建立有效的递阶指标系统,然后主管地将指标两两对比构造判定矩阵,再根据判定矩阵进行数字处理及一致性检验,就可获得各个指标的相对重要性权数。

例子:

在地区间宏观经济效益评价中,选取资金利税率(x1)、投资效果系数(x2)和劳动生产率(x3)三项指标。某专家认为,资金利税率比劳动生产率极端重要,比投资效果系数稍重要,而投资效果系数比劳动生产率重要。试根据这位专家的判断确定三项评价指标的权数。

指标 X1 X2 X3
X1 1 3 9
X2 1/3 1 5
X3 1/9 1/5 1

tibble存储判定矩阵

options(digits = 2)
library(tidyverse)macro <- tibble(x1=c(1,1/3,1/9), x2=c(3,1,1/5), x3=c(9,5,1))
macro# A tibble: 3 x 3
#      x1    x2    x3
#   <dbl> <dbl> <dbl>
# 1 1       3       9
# 2 0.333   1       5
# 3 0.111   0.2     1

计算行向几何平均

即计算行数据成绩,然后再求行积结果的P次方根,即行向几何平均。

# 增加w变量
macro %>% mutate(w = '^'(x1*x2*x3, 1/3)) -> macro
macro# A tibble: 3 x 4
#      x1    x2    x3     w
#   <dbl> <dbl> <dbl> <dbl>
# 1 1       3       9 3
# 2 0.333   1       5 1.19
# 3 0.111   0.2     1 0.281

对w变量归一化处理

w变量中的值除以w列向量之和。

# 定义归一化函数
std <- function(x){x / sum(x)
}# 通过归一化计算权重
macro %>% mutate_at(c("w"), .funs = std) -> macro
macro# A tibble: 3 x 4
#      x1    x2    x3      w
#   <dbl> <dbl> <dbl>  <dbl>
# 1 1       3       9 0.672
# 2 0.333   1       5 0.265
# 3 0.111   0.2     1 0.0629

下面要对三个变量的权重进行检验

一致性检验

一致性检验保证各指标的相对重要程度的判定要协调一致,不要出现相互矛盾的现象。
判定矩阵B具有一致性的条件是矩阵B的最大特征根等于指标的个数。

计算过程如下:

options(digits = 2)
library(tidyverse)# 随机一致性表
ri_table <- c(0, 0, 0.58, 0.89, 1.12, 1.26, 1.36, 1.41, 1.46, 1.49, 1.52,1.54)b <- as.matrix(macro[,-4])
w <- as.matrix(macro[,4])## 矩阵乘积
bw <- b %*% w
## 最大特征根
lmda <- 1/3 * sum(bw / w)
lmda## 一致性指标CI
ci <- (lmda-length(bw)) / (length(bw) -1)
ci## 一致性比率CR
cr <- ci / ri_table[length(bw)]
cr
# [1] 0.025# cr = 0.025 < 0.10,一致性检验通过, 上述 w 的权重是合理的
#          w
# [1,] 0.672
# [2,] 0.265
# [3,] 0.063

cr = 0.025 < 0.10,一致性检验通过, 因此上述 w 的权重是合理的。
最终计算X1(67%), X2(27%), X3(6%),三个变量权重总和等于1.

完整代码

options(digits = 2)
library(tidyverse)macro <- tibble(x1=c(1,1/3,1/9), x2=c(3,1,1/5), x3=c(9,5,1))
macro %>% mutate(w = '^'(x1*x2*x3, 1/3)) -> macro
macro# 定义归一化函数
unif <- function(x){x / sum(x)
}# 通过归一化计算权重
macro %>% mutate_at(c("w"), .funs = std) -> macro
macro# 随机一致性表
ri_table <- c(0, 0, 0.58, 0.89, 1.12, 1.26, 1.36, 1.41, 1.46, 1.49, 1.52,1.54)# 一致性检验
b <- as.matrix(macro[,-4])
w <- as.matrix(macro[,4])bw <- b %*% w
lmda <- 1/3 * sum(bw / w)
lmdaci <- (lmda-length(bw)) / (length(bw) -1)
cicr <- ci / ri_table[length(bw)]
cr

R 实现层次分析法确定指标权重相关推荐

  1. 层次分析法——确定指标权重、解决评价类问题

    "评价类问题可以用打分解决." 譬如我们想对A.B.C三个景点进行评分,若题目没给数据可查阅文献(显得专业)得到关于景点评分的几个指标,显然,不同指标对景点的评价高低影响程度不同, ...

  2. 评价方法-层次分析法确定指标权重

    Pros: 依据专家经验判断,相对偏主观,方便业务基于不同阶段的需求进行调整 code: class AHP:def __init__(self, arr):self.RI = (0, 0, 0.58 ...

  3. matlab层次分析法迅速求权重

    层次分析法是一种用处非常广的决策算法 虽然内容等于拍脑袋,不过有时候我们就是需要为拍脑袋找到合适的说法. 虽然它往往用于解决多目标选择的问题,但我们也可对其因素进行分析,来得到一个因素权重. 当然对于 ...

  4. 数学建模 层次分析法 python计算权重

    这里用python语言来计算判断矩阵的权重,网上大部分是matlab语言,里面也包含一致性检验的函数,具体各函数使用方法详见代码注释的部分 import numpy as np a=np.array( ...

  5. 层次分析法代码—一致性检验权重计算

    以下内容是听课笔记 课程内容来自B站up主:数学建模学习交流

  6. Matlab:如何利用层次分析法(升级版)计算具有多重指标的判断矩阵的一致性检验和权重

    02 论文提供的太阳镜的评价体系 03 建立目标层和准则层的判断矩阵 (论文提供) 04 首先需要对判断矩阵进行一致性检验 4.1 一致性检验的一般步骤 4.2 对应上方步骤的变量和代码 05 一致性 ...

  7. 【1.2】 评价类模型之层次分析法中判断矩阵的填写方法、一致性检验的步骤、以及根据判断矩阵计算权重的方法

    目录: 准则层判断矩阵怎么填写 方案层判断矩阵怎么填写 关于判断矩阵和一致矩阵的知识点补充 一致性检验的步骤 怎样通过判断矩阵去计算权重(三种方法),及相应的代码示例 准则层判断矩阵的填写: 填写准则 ...

  8. 使用层次分析法对国内主流旅游电商网站进行评分排名

    一.原理: 主要运用层次分析法和模糊综合评价两种信息分析方法,通过定量与定性相结合方法对国内五个知名旅游电商网站进行综合评价,使用层次分析法和模糊综合评价对相应对象进行综合评价主要是通过构建判断矩阵, ...

  9. ahp层次分析法软件_层次分析法在历史街区研究中的应用简析

    摘要 AHP (Analytic Hierarchy Process)层次分析法通常被运用于解决多目标.多标准.多要素.多层次的非结构化的复杂决策性问题,特别是战略决策性问题,在建筑.规划.风景园林等 ...

  10. 层次分析法实例:选择旅游目的地

    层次分析法(AHP) AHP(Analytic Hierarchy Process)方法,简称AHP,是指将与决策总是有关的元素分解成目标.准则.方案等层次,在此基础之上进行定性和定量分析的决策方法. ...

最新文章

  1. python画误差棒/带
  2. Python数据清理之解析XLRD文件
  3. 深度学习在搜索业务中的探索与实践
  4. nginx 修改并隐藏版本号
  5. [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)
  6. Python3需要安装的MySQL库是mysqlclient
  7. 《Python Cookbook 3rd》笔记(2.14):合并拼接字符串
  8. VirtualBox安装Centos6.8出现——E_INVALIDARG (0x80070057)
  9. 吉林大学计算机英语成绩,吉林大学复试出结果,初试分差84分,复试成绩却相差无几!...
  10. 水滴石穿C语言之可变参数问题
  11. 企业部署BI系统怎么能一直做下去,PDCA闭环是关键
  12. JS(JQuery)操作Array的相关方法
  13. 南阳oj-----n-1位数(多解法汇总)
  14. Mac版Java反编译工具jd-gui解压即用
  15. 由四位央行官员为你制作的“数字货币”说明书
  16. 运行代码到一半不动了
  17. 人脸特征点定位方法DEST, 基于VS2019+OpenCV3.4.6
  18. 做微商的朋友们都想知道代购怎么在闲鱼上引流?
  19. Pipeline快速入门
  20. barcode.jar处理条形码

热门文章

  1. 怎么将多个Excel工作簿合并成一个新的工作簿
  2. MATLAB的semilogy函数的理解
  3. webgame中常见安全问题、防御方式与挽救措施
  4. 每日单词20110501
  5. 20181018 考试记录
  6. 学习PPT好帖子 分享之
  7. correl函数相关系数大小意义_Excel使用Correl函数返回相关系数并确定属性关系的方法...
  8. 安装打印机提示未能添加服务器,打印机未能链接到服务器
  9. 几个函数泰勒展开式及其记忆技巧
  10. 实际成本调整(R12)