改进熵权TOPSIS综合评价方法

R
Author

Rui

Published

February 10, 2023

文献综述

指标体系

孙红兵和向刚(2011):

选取四个直辖市和26个全国省会城市(去除拉萨市),共30个城市作为评价对象。以知识创新、技术创新、制度创新、中介服务创新、金融创新和创新环境构建指标体系。

陶雪飞(2013):

设计了以综合性、层次性、代表性和可靠性为原则,以技术创新体系能力为核心的”5位一体”(包括技术创新体系能力、知识创新体系能力、多元化创新体系能力、创新服务体系能力和政府科技管理体系能力)的科技创新能力一级评价指标和13个二级评价指标(科技活动人员数、新产品开发经费研究支出、高新技术产业值等)体系。

邓智团,屠启宇(2016):

选取的核心评价指标为科技投入、人才资源、创新载体、经济社会环境、成果产出和经济社会发展。

李斌等(2020):

在知识创新、技术创新、政府支持和服务、创新基础环境4个维度上对城市创新能力进行测度。

评价方法

颜莉(2011):

从创新业绩和创新效率两方面入手,构建五大城市区域创新投入、产出指数,使用DEA模型进行评价。

孙红兵和向刚(2011):

利用主成分分析法计算2005-2008年我国30个省会城市和直辖市的创新综合能力,利用综合因子得分对城市进行排名;进一步利用聚类分析动态考察各类的创新综合能力。

邓智团,屠启宇(2016):

对14个特大城市的创新能力进行评价,构建了”类型-阶段”的二维评价模型。其中,类型维度是将城市按照服务创新型和工业创新型进行分类,阶段维度是将城市创新能力的发展阶段分为启动、起飞和成熟阶段。

李斌等(2020):

使用熵权法在上述4个维度上计算出全国35个大中城市的创新能力指数,并对各年份总体创新能力指数进行动态分析,进一步使用全局莫兰指数和局部莫兰指数分析了城市创新能力的空间自相关性。

数据与指标

数据来源与指标选择

参考毛文峰和陆军(2020),使用2019年全国区域创新创业指数数据,选取新建企业数、外来投资笔数、vcpe投资数目、发明专利授权数目、实用新型专利公开数目、外观专利公开数目和商标授权数目共计7个指标,对长三角25个地级市(不包括新加入的温州市和直辖市上海)的创新能力进行综合评价。

Code
# 设置工作路径
setwd("F:\\RuiBlog\\posts\\R\\改进熵权TOPSIS综合评价方法")

# 读取数据
library(knitr)
df <- read.csv(".\\数据\\2019年长三角地区各地市创新创业指数.CSV", header = TRUE, encoding = "UTF-8")
knitr::kable(
  df[ , -1], 
  digits = 4,
  align = "lccccccc",
  col.names = c(
    "城市", "新建企业进入", "外来投资笔数", "vcpe投资数", "发明专利授权数", 
    "实用新型专利公开数", "外观专利公开数", "商标授权数"
  )
) # 展示数据
城市 新建企业进入 外来投资笔数 vcpe投资数 发明专利授权数 实用新型专利公开数 外观专利公开数 商标授权数
南京市 95.8904 97.2603 97.6027 97.9452 98.2877 95.8904 96.2329
无锡市 89.3836 91.4384 92.8082 95.5479 97.6027 92.8082 92.1233
常州市 81.5069 92.1233 89.7260 90.7534 95.2055 93.8356 88.0137
苏州市 96.2329 99.3151 98.2877 99.3151 99.6575 97.6027 98.6301
南通市 85.6164 91.7808 83.9041 92.1233 91.7808 95.2055 88.3562
盐城市 84.2466 84.9315 79.7945 88.0137 92.4658 88.3562 86.6438
扬州市 78.4247 83.9041 80.1370 86.9863 90.4110 90.7534 79.4521
镇江市 70.8904 83.2192 79.1096 86.6438 88.6986 86.9863 72.9452
泰州市 78.7671 79.7945 75.6849 86.3014 89.0411 85.9589 77.7397
杭州市 98.9726 98.2877 98.6301 98.6301 97.9452 99.3151 99.3151
宁波市 94.1781 96.5753 97.2603 96.2329 96.9178 98.9726 95.2055
嘉兴市 81.1644 95.8904 99.6575 93.1507 96.5753 94.1781 90.7534
湖州市 75.0000 90.7534 96.5753 89.3836 93.4931 93.1507 82.8767
绍兴市 82.5342 88.6986 90.0685 94.5205 96.2329 93.4931 86.9863
金华市 95.5479 81.5069 84.5890 89.7260 88.3562 96.5753 97.9452
舟山市 49.3151 71.2329 67.8082 53.0822 54.7945 64.3836 35.6164
台州市 85.2740 65.0685 83.2192 92.4658 91.4384 94.8630 91.4384
合肥市 97.2603 92.8082 91.7808 97.6027 95.8904 90.4110 93.8356
芜湖市 72.9452 82.8767 94.5205 94.8630 83.5616 79.4521 84.9315
马鞍山市 50.3425 54.1096 63.3562 87.3288 81.8493 69.5205 61.3014
铜陵市 27.7397 37.3288 73.9726 70.8904 58.2192 24.6575 36.6438
安庆市 70.5479 44.1781 78.0822 75.3425 62.6712 43.4932 70.2055
滁州市 65.0685 73.9726 68.1507 85.2740 81.1644 70.8904 58.5616
池州市 24.6575 50.6849 45.5479 44.5205 67.4658 44.8630 33.5616
宣城市 48.6301 58.9041 61.6438 79.1096 66.4384 60.6164 50.0000

原始数据矩阵记为\(\mathbf{A}=(a_{ij})_{n \times m}\)

数据一致化与无量纲化

所谓一致化是极大型指标与极小型指标进行统一,比如全部转换为极大型指标。无量纲化消除原始指标的单位及其数值数量级影响。这里使用比例变换法得到评价矩阵\(\mathbf{B}=(b_{ij})_{n \times m}\)

\[ b_{ij}=\displaystyle \frac{a_{ij}}{\mathop{\max}_{1\leqslant i \leqslant n}a_{ij}}, \\ b_{ij}=\displaystyle \frac{\mathop{\min}_{1\leqslant i \leqslant n}a_{ij}}{a_{ij}}, \\ i=1,2,\cdots,n, \\ j=1,2,\cdots,m \]

Code
adcode <- df[ , 1] # 城市代码
city <- df[ , 2] # 城市名
a <- df[ , -c(1, 2)] # 删除第一列城市代码、第二列城市名

# 使用比例变换法
max_norm <- function(x) {
  x / max(x)
} # 极大型指标
min_norm <- function(x) {
  min(x) / x
} # 极小型指标

b <- apply(a, 2, max_norm) # 全部为极大型指标
b <- data.matrix(b) # 初始评价矩阵
knitr::kable(
  b, 
  align = "ccccccc", 
  digits = 4, 
  col.names = c(
    "新建企业进入", "外来投资笔数", "vcpe投资数", "发明专利授权数", 
    "实用新型专利公开数", "外观专利公开数", "商标授权数"
  )
) # 展示数据,保留4位小数
新建企业进入 外来投资笔数 vcpe投资数 发明专利授权数 实用新型专利公开数 外观专利公开数 商标授权数
0.9689 0.9793 0.9794 0.9862 0.9863 0.9655 0.9690
0.9031 0.9207 0.9313 0.9621 0.9794 0.9345 0.9276
0.8235 0.9276 0.9003 0.9138 0.9553 0.9448 0.8862
0.9723 1.0000 0.9863 1.0000 1.0000 0.9828 0.9931
0.8651 0.9241 0.8419 0.9276 0.9210 0.9586 0.8897
0.8512 0.8552 0.8007 0.8862 0.9278 0.8897 0.8724
0.7924 0.8448 0.8041 0.8759 0.9072 0.9138 0.8000
0.7163 0.8379 0.7938 0.8724 0.8900 0.8759 0.7345
0.7958 0.8034 0.7595 0.8690 0.8935 0.8655 0.7828
1.0000 0.9897 0.9897 0.9931 0.9828 1.0000 1.0000
0.9516 0.9724 0.9759 0.9690 0.9725 0.9966 0.9586
0.8201 0.9655 1.0000 0.9379 0.9691 0.9483 0.9138
0.7578 0.9138 0.9691 0.9000 0.9381 0.9379 0.8345
0.8339 0.8931 0.9038 0.9517 0.9656 0.9414 0.8759
0.9654 0.8207 0.8488 0.9034 0.8866 0.9724 0.9862
0.4983 0.7172 0.6804 0.5345 0.5498 0.6483 0.3586
0.8616 0.6552 0.8351 0.9310 0.9175 0.9552 0.9207
0.9827 0.9345 0.9210 0.9828 0.9622 0.9103 0.9448
0.7370 0.8345 0.9485 0.9552 0.8385 0.8000 0.8552
0.5087 0.5448 0.6357 0.8793 0.8213 0.7000 0.6172
0.2803 0.3759 0.7423 0.7138 0.5842 0.2483 0.3690
0.7128 0.4448 0.7835 0.7586 0.6289 0.4379 0.7069
0.6574 0.7448 0.6838 0.8586 0.8144 0.7138 0.5897
0.2491 0.5103 0.4570 0.4483 0.6770 0.4517 0.3379
0.4913 0.5931 0.6186 0.7966 0.6667 0.6103 0.5034

熵权TOPSIS

熵权法

在信息论中信息熵是信息不确定性的一种度量。一般来说,信息量越大,熵值越小,信息的效用值越大;反之,信息的效用值越小。而熵值法就是通过计算各指标观测值的信息熵,根据指标的相对变化程度对系统整体的影响来确定指标权重系数的一种赋权方法。计算过程如下:

  1. 计算在第\(j\)项指标下的第\(i\)个评价对象的特征比重

\[ \begin{align} & p_{ij}= \left\{\begin{array}{l} \frac{b_{ij}}{\sum_{i=1}^{n}b_{ij}}, \quad if \quad b_{ij}>0 \\[3mm] \frac{b_{ij}+1}{\sum_{i=1}^{n}(b_{ij}+1)}, \quad if \quad b_{ij}=0 \end{array}\right.\\[3mm] & i=1,2,\cdots,n; \quad j = 1,2,\cdots,m \end{align} \]

  1. 计算第\(j\)项指标的熵值

\[ \begin{align} & e_{j} = - \frac{1}{\ln{n}}\sum_{i=1}^{n}p_{ij}\ln{p_{ij}} \\ & j = 1,2,\cdots,m \end{align} \]

不难看出,如果第\(j\)项指标的观测值差异较大,则熵值越小;反之,熵值越大。

  1. 计算第\(j\)项指标的差异系数

\[ \begin{align}\ & g_{j}=1-e_{j} \\ & j = 1,2,\cdots,m \end{align} \]

如果第\(j\)项指标的观测差异值越大,则差异系数\(g_{j}\)就越大,第\(j\)项指标也就越重要。

  1. 计算第\(j\)项指标的权重系数

\[ \begin{align} & w_{j} =\frac{g_{j}}{\sum_{j=1}^{m}g_{j}} = \frac{1-e_{j}}{\sum_{j=1}^{m}(1-e_{j})} \\ & j = 1,2,\cdots,m \end{align} \]

  1. 计算第\(i\)个评价对象的综合评价值

\[ f_{i} = \sum_{j=1}^{m}w_{j}p_{ij} \]

也即:

\[ \mathbf{f} = \mathbf{P} \mathbf{w} \]

其中\(\mathbf{P} = (p_{ij})_{n \times m}\)为特征比重矩阵,\(\mathbf{w} = (w_1,w_2,\cdots,w_{m})^\top\)为权重系数向量,\(\mathbf{f} = (f_1,f_2,\cdots,f_{n})^\top\)为评价值向量。评价值\(f_{i}\)越大越好。

Code
# 计算特征比重矩阵
char_ratio <- function(data) {
  x <- c(data)
  for(i in 1:length(data)) {
    if (x[i] > 0) {
      x[i] = data[i] / sum(data[])
    } else {
      x[i] = (data[i] + 1) / sum(data[] + 1)
    }
  }
  return(x)
}
p <- apply(b, 2, char_ratio)

# 计算熵值
entropy <- function(data) {
  x <- -sum(data * log(data)) / log(length(data))
  return(x)
}  
e <- apply(p, 2, entropy)

# 计算权重系数
w <- (1- e) / (length(e) - sum(e))

# 验算一下:求和应该等于1
if (abs(sum(w) - 1) < 1e+10) {print("Done!")} # 浮点运算是个坑!
## [1] "Done!"
# 或者
library(dplyr)
if (near(sum(w), 1)) {print("Done!")} # 浮点运算是个坑!
## [1] "Done!"

权重系数衡量了指标的相对重要程度,排序结果为:

Code
names(w)[order(w, decreasing = TRUE)]
## [1] "新建企业进入"         "商标授权数目"         "外观专利公开数目"    
## [4] "外来投资笔数"         "vcpe投资数目"         "发明专利授权数目"    
## [7] "实用新型专利公开数目"

TOPSIS

TOPSIS 法全称为理想解的排序方法(technique for order preference by similarity to ideal solution)。它借助于评价问题的正理想解和负理想解,对各评价对象进行排序。所谓正理想解是一个虚拟的最佳对象,其每个指标值都是所有评价对象中该指标的最好值;而负理想解则是另一个虚拟的最差对象,其每个指标值都是所有评价对象中该指标的最差值。求出各评价对象与正理想解和负理想解的距离,并以此对各评价对象进行优劣排序。

设综合评价问题含有\(n\)个评价对象、\(m\)个指标,相应的指标观测值为\(a_{ij},i=1,2,\cdots,n;j=1,2,\cdots,m\)。计算过程如下:

  1. 将评价指标进行预处理

包括一致化(全部化为极大型指标)和无量纲化,并构造评价矩阵\(\mathbf{B}=(b_{ij})_{n \times m}\)

  1. 确定正理想解\(C^+\)和负理想解\(C^-\)

\[ \begin{align} & C^+ = (c_{1}^+,c_{2}^+,\cdots,c_{m}^+), \\[3mm] & C^- = (c_{1}^-,c_{2}^-,\cdots,c_{m}^-), \\[3mm] & c_{j}^+ = \mathop{\max}_{1\leqslant i \leqslant n}b_{ij}, \quad j = 1,2,\cdots,m, \\[3mm] & c_{j}^- = \mathop{\min}_{1\leqslant i \leqslant n}b_{ij}, \quad j = 1,2,\cdots,m. \end{align} \]

  1. 计算各评价对象到正理想解及到负理想解的距离

\[ s_{i}^+=\sqrt{\sum_{j=1}^{m}(b_{ij}-c_{j}^+)^2}, \quad i=1,2,\cdots,n, \\[20mm] s_{i}^-=\sqrt{\sum_{j=1}^{m}(b_{ij}-c_{j}^-)^2}, \quad i=1,2,\cdots,n. \]

  1. 计算各评价对象对理想解的相对接近度

\[ f_i = \frac{s_{i}^{-}}{s_{i}^{+}+s_{i}^{-}}, \quad i=1,2,\cdots,n \]

  1. \(f_i\)由大到小排列各评价对象的优劣次序

熵权TOPSIS

先利用熵权法求得权重系数向量\(\mathbf{w} = (w_1,w_2,\cdots,w_{m})^\top\),再与评价矩阵\(\mathbf{B}=(b_{ij})_{n \times m}\)结合得到加权评价矩阵\(\tilde{\mathbf{B}}=(\tilde{b_{ij}})_{n \times m}\),其中\(\tilde{b_{ij}}=w_{j}b_{ij}\),然后对\(\tilde{\mathbf{B}}\)使用 TOPSIS 方法。

Code
# 加权评价矩阵
B <- matrix(nrow = nrow(b), ncol = ncol(b))
for (i in 1:ncol(b)) {
  B[ , i] <- b[ , i] * w[i]
}

# 计算相对接近程度
c_max <- apply(B, 2, max)
c_min <- apply(B, 2, min)

# 计算到理想解的欧式距离
s_positive_Eu <- vector(length = nrow(B))
s_negative_Eu <- vector(length = nrow(B))
for (i in 1:nrow(B)) {
  s_positive_Eu[i] <- sqrt(sum((B[i, ] - c_max)^2))
  s_negative_Eu[i] <- sqrt(sum((B[i, ] - c_min)^2))
} 
s <- s_negative_Eu / (s_positive_Eu + s_negative_Eu) # 基于欧式距离的熵权TOPSIS综合评价值

s_output <- data.frame("adcode" = adcode, "city" = city, "topsis" = s) # 美化结果方便GeoDa读取

write.csv(s_output, ".\\数据\\基于欧式距离的熵权TOPSIS结果.csv", row.names = FALSE) # 保存结果

output1 <- s_output[order(s_output$topsis, decreasing = TRUE), ][ , -1] # 结果降序排列

knitr::kable(output1, digits = 4, align = "cc") # 对结果降序排列展示
city topsis
10 杭州市 0.9925
4 苏州市 0.9742
1 南京市 0.9573
11 宁波市 0.9474
18 合肥市 0.9175
15 金华市 0.8911
2 无锡市 0.8866
5 南通市 0.8495
12 嘉兴市 0.8398
3 常州市 0.8257
14 绍兴市 0.8241
6 盐城市 0.8058
17 台州市 0.7857
13 湖州市 0.7670
7 扬州市 0.7520
9 泰州市 0.7261
19 芜湖市 0.7155
8 镇江市 0.6774
23 滁州市 0.5296
22 安庆市 0.4611
20 马鞍山市 0.4322
25 宣城市 0.3567
16 舟山市 0.3524
24 池州市 0.1433
21 铜陵市 0.1018

TOPSIS改进

TOPSIS存在的问题

王先甲,汪磊(2012)与刘筱慧,王斌等(2021)的观点汇总如下:

1.各属性指标之间普遍存在线性相关,运用欧氏距离公式计算距离不合理。

2.到”正理想解”的负向距离和到”负理想解”的正向距离直接相加运算不合理。

TOPSIS 方法的相对接近度是根据被评价对象与”正理想解”和”负理想解”的距离合成的,其中\(s_{i}^-\) 是一个正向指标,\(s_{i}^+\)是一个负向指标,二者直接相加是不合适的。

3.到”正理想解”和”负理想解”的两个距离的数量级差异问题。

TOPSIS 重点考虑的是被评价对象与”正理想解”和”负理想解”的距离,当被评价对象与”正理想解”和”负理想解”的距离不在同一数量级上,其中一个过小的数很可能对最后排序结果起不到任何作用。

TOPSIS改进方法

  1. 使用马氏距离替代欧式距离

王先甲,汪磊(2012):使用马氏距离代替欧式距离可以消除量纲影响以及变量间相关性。

\[ \begin{align} &d_{i}^+ = [(b_i -C^+)^\top \Sigma^{-1}(b_i -C^+)]^{\frac{1}{2}}, \\ &d_{i}^- = [(b_i -C^-)^\top \Sigma^{-1}(b_i -C^-)]^{\frac{1}{2}}, \\ &b_i = (b_{i1},b_{i2},\cdots,b_{im})^\top, \\ &i=1,2,\cdots,n \end{align} \]

  1. 密切值修正

刘筱慧,王斌等(2021):使用修正后的密切值代替原来的相对接近程度。

\[ \begin{align} &D_{i}^+ = \frac{\mathop{\max}_{1\leqslant i \leqslant n}d_{i}^+ - d_{i}^+} {\mathop{\max}_{1\leqslant i \leqslant n}d_{i}^+ - \mathop{\min}_{1\leqslant i \leqslant n}d_{i}^+} \\[3mm] &D_{i}^- = \frac{d_{i}^- - \mathop{\min}_{1\leqslant i \leqslant n}d_{i}^-} {\mathop{\max}_{1\leqslant i \leqslant n}d_{i}^- - \mathop{\min}_{1\leqslant i \leqslant n}d_{i}^-} \\[3mm] &D_i = D_{i}^+ + D_{i}^- \end{align} \]

改进后的熵权TOPSIS

Code
# 计算到理想解的马氏距离
s_positive_Mal <- vector(length = nrow(B))
s_negative_Mal <- vector(length = nrow(B))
sigma <- cov(B) # 计算协方差矩阵
for (i in 1:nrow(B)) {
  s_positive_Mal[i] <- sqrt(t(as.matrix(B[i, ] - c_max)) %*% solve(sigma) %*% as.matrix(B[i, ] - c_max))
  s_negative_Mal[i] <- sqrt(t(as.matrix(B[i, ] - c_min)) %*% solve(sigma) %*% as.matrix(B[i, ] - c_min))
} # 利用马氏距离定义计算

# 对马氏距离的相对接近程度进行密切值修正
min_max_norm <- function(x) {
  (x-min(x))/(max(x)-min(x))
} # 极大型指标
max_min_norm <- function(x) {
  (max(x)-x)/(max(x)-min(x))
} # 极小型指标

d_positive_Mal <- max_min_norm(s_positive_Mal)
d_negative_Mal <- min_max_norm(s_negative_Mal)
D <- d_positive_Mal + d_negative_Mal # 基于马氏距离的改进的TOPSIS结果

D_output <- data.frame("adcode" = adcode, "city" = city, "topsis" = D) # 美化结果方便GeoDa读取

write.csv(D_output, ".\\数据\\基于马氏距离的改进的TOPSIS结果.csv", row.names = FALSE) # 保存结果

output2 <- D_output[order(D_output$topsis, decreasing = TRUE), ][ , -1] # 结果降序排列

knitr::kable(output2, digits = 4, align = "cc") # 对结果降序排列展示
city topsis
1 南京市 1.6179
10 杭州市 1.5757
11 宁波市 1.5703
4 苏州市 1.4787
2 无锡市 1.4737
14 绍兴市 1.4241
18 合肥市 1.3758
13 湖州市 1.3078
8 镇江市 1.2643
7 扬州市 1.2638
12 嘉兴市 1.2166
9 泰州市 1.1868
17 台州市 1.1835
23 滁州市 1.1813
3 常州市 1.1772
5 南通市 1.0278
16 舟山市 1.0011
6 盐城市 0.9645
20 马鞍山市 0.9507
15 金华市 0.8971
19 芜湖市 0.8849
21 铜陵市 0.8691
25 宣城市 0.8543
22 安庆市 0.6856
24 池州市 0.0000

参考文献

孙红兵, 向刚. 城市创新系统的创新综合能力评价. 经济问题探索[J]. 2011 (3): 97 - 103.

颜莉. 城市创新绩效综合评价体系及其实证应用. 经济地理[J]. 2011 (9): 1470 - 1475.

陶雪飞. 城市科技创新综合能力评价指标体系及实证研究. 经济地理[J]. 2013 (10): 16 - 19.

邓智团, 屠启宇. 特大城市创新能力评价模型的构建与应用–基于我国14个特大城市的实证研究. 科技管理研究[J]. 2016 (12): 52 - 55.

李斌, 田秀林, 张所地, 赵华平. 城市创新能力评价及时空格局演化研究. 数理统计与管理[J]. 2020 (1): 139 - 153.

毛文峰, 陆军. 土地要素错配如何影响中国的城市创新创业质量–来自地级市城市层面的经验证据. 农业经济研究[J]. 2020 (3): 17 - 29.

王先甲, 汪磊. 基于马氏距离的改进型TOPSIS在供应商选择中的应用. 控制与决策[J]. 2012 (10): 1566 - 1570.

刘筱慧, 王斌, 陈凯, 焦阳, 李刚. 基于密切值改进TOPSIS的低碳经济评价研究. 技术经济[J]. 2021 (12): 74 - 84.