R语言:TOPSIS综合评价法进行多属性最优方案选择

TOPSIS综合评价法是进行多个对象选择排序的方法,其通过计算各对像与最优方案、最劣方案的相对距离进行排序,它用于解决多对象多属性决策问题。本文主要是介绍在R语言中如何用TOPSIS综合评价法进行多对象选择决策。

TOPSIS综合评价法

一般地,TOPSIS综合评价法主要包含两个步骤:计算权重和计算相对接近度。如需详细了解TOPSIS综合评价法的原理和方法,请自行百度,网上有许多非常详尽的原理说明和案例讲解。

计算权重

根据熵权法确定各个指标的权重;计算各指标信息熵,指标的信息熵越小,则该指标表达信息的不确定性小,在综合评价中对决策的帮助更大,即应该有较大的权重。熵权法是一种客观的赋予权重的方法,它通过各个指标所提供的信息不确定性来确定各指标的权重

计算相对接近度

根据权重加权规范化指标属性矩阵后,确定正理想方案Amax和负理想方案 Amin,计算各备选方案与Amax 、Amin的距离,以评估与正负理想方案的接近程度,根据相对接近度确定优先次序。其中计算距离一般使用欧式距离。

R语言实现过程

按照惯例,导入需要使用的包data.tableplyr。然后载入使用的数据,我们简单看一下案例数据情况。

dataset <- fread("/R/TOPSIS/dataset.csv")

其中的字段target即为目标字段,我们需要对其含有的8个方案(A~H)进行综合评价排序,选择其中的最优方案。该数据集中的指标均为正向指标。正向指标表示指标的数值越高越好,负向指标则表示指标的数值越低越好,这决定了该指标在进行权重计算时的处理方式。

计算权重

计算权重的第一步是计算各个指标的熵值,由于我们用到的指标均是正向指标,所以选择自定义函数entropy_positive即可。如果指标既存在正向指标又存在负向指标,则可分开进行计算。自定义函数情况如下:

#正向指标计算熵值
entropy_positive <- function(x){
  #指标归一化
  y = (x -min(x)) / (max(x) - min(x))
  #计算各指标值的比重
  p = y / sum(y)
  #计算各指标的熵值
  entropy = -1/log(length(x)) * sum(ifelse(p == 0,0,p *log(p)))
}

#负向指标计算熵值
entropy_negative <- function(x){
  #指标归一化
  y = (max(x) -x) / (max(x) - min(x))
  #计算各指标值的比重
  p = y/ sum(y)
  #计算各指标的熵值
  entropy = -1/log(length(x)) * sum(ifelse(p == 0,0,p *log(p)))
}

调用函数并完成权重的计算,x1~x8的权重依次为:11.10%、6.61%、28.19%、7.08%、11.88%、8.11%、11.94%、15.09%,计算过程如下:

entropy_data <- colwise(entropy_positive)(dataset[,-9])
entropy_weight <- (1 - entropy_data)/ sum(1 -entropy_data)

计算相对接近度

在将指标向量规范化后,利用熵值法得到的权重计算得到加权标准化矩阵,然后提取正理想方案和负理想方案并计算出各个方案距离正负理想方案的距离,最终根据计算得到距离比值进行排序。具体计算过程如下:

#向量规范化
vector_normalize <- function(x){
  x / sqrt(sum(x^2))
}
#调用函数进行向量规范化
dataset_normal <- colwise(vector_normalize)(dataset[,-9])
#加权标准化矩阵
dataset_normal_weight <-  adply(dataset_normal,1,.fun = function(x){x*entropy_weight})
#确定正理想方案和负理想方案
best_case <- colwise(max)(dataset_normal_weight)
worst_case <- colwise(min)(dataset_normal_weight)
#计算各方案与正负理想方案的距离
distance_best <- adply(dataset_normal_weight,1,.fun = function(x){sqrt(sum((x -best_case)^2))})
distance_worst <- adply(dataset_normal_weight,1,.fun = function(x){sqrt(sum((x -worst_case)^2))})
proximity_data <- data.table(target = dataset$target,distance_best  = distance_best$V1,distance_worst = distance_worst$V1)
#计算相对接近度并进行排序
proximity_data[,proximity := distance_worst / (distance_best + distance_worst)][order(-proximity)]
proximity_data[,rank := rank(-proximity)][order(rank)]

至此,我们就完成了用TOPSIS综合评价法进行多对象多指标的最优对象选择,输出的结果如下,显然在这八个方案中,方案A为最优方案。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • 第一章总 则 第一条为规范开展中央企业(以下简称企业)综合绩效评价工作,有效发挥综合绩效评价工作的评判、引导和诊断...
    cherish_y_zr阅读 1,305评论 0 2
  • 博客上看到一篇优秀的翻译文章。文章地址:http://blog.csdn.net/heyongluoyao8/ar...
    _CelesteHuang_阅读 5,320评论 0 24
  • 当 小孩子真正面对生离死别时,是从一种开始不相信到不敢面对到希望是假的一个自我假设的过程的,特别是对最亲爱...
    简单_c3d4阅读 417评论 0 1
  • 文/依然 将近有一个月没有更文了,这段时间一直都处于一种消极的状态,每次一想到要进行两个小时的思想专注,分析文章,...
    依然sir阅读 195评论 0 0
  • 从前 日色车马都慢 人心也很淳朴 一生只够做一件事 一生只会爱一个人 从前 老师只是讲课 学生乖巧善学 一辈子辛勤...
    夜落羽花阅读 315评论 0 3