R語言:TOPSIS綜合評價法進(jìn)行多屬性最優(yōu)方案選擇

TOPSIS綜合評價法是進(jìn)行多個對象選擇排序的方法铸抑,其通過計算各對像與最優(yōu)方案餐抢、最劣方案的相對距離進(jìn)行排序洽议,它用于解決多對象多屬性決策問題偿衰。本文主要是介紹在R語言中如何用TOPSIS綜合評價法進(jìn)行多對象選擇決策挂疆。

TOPSIS綜合評價法

一般地,TOPSIS綜合評價法主要包含兩個步驟:計算權(quán)重和計算相對接近度下翎。如需詳細(xì)了解TOPSIS綜合評價法的原理和方法缤言,請自行百度,網(wǎng)上有許多非常詳盡的原理說明和案例講解视事。

計算權(quán)重

根據(jù)熵權(quán)法確定各個指標(biāo)的權(quán)重胆萧;計算各指標(biāo)信息熵,指標(biāo)的信息熵越小俐东,則該指標(biāo)表達(dá)信息的不確定性小跌穗,在綜合評價中對決策的幫助更大,即應(yīng)該有較大的權(quán)重虏辫。熵權(quán)法是一種客觀的賦予權(quán)重的方法蚌吸,它通過各個指標(biāo)所提供的信息不確定性來確定各指標(biāo)的權(quán)重

計算相對接近度

根據(jù)權(quán)重加權(quán)規(guī)范化指標(biāo)屬性矩陣后,確定正理想方案Amax和負(fù)理想方案 Amin砌庄,計算各備選方案與Amax 羹唠、Amin的距離,以評估與正負(fù)理想方案的接近程度娄昆,根據(jù)相對接近度確定優(yōu)先次序佩微。其中計算距離一般使用歐式距離。

R語言實(shí)現(xiàn)過程

按照慣例稿黄,導(dǎo)入需要使用的包data.table喊衫、plyr。然后載入使用的數(shù)據(jù)杆怕,我們簡單看一下案例數(shù)據(jù)情況族购。

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

其中的字段target即為目標(biāo)字段,我們需要對其含有的8個方案(A~H)進(jìn)行綜合評價排序陵珍,選擇其中的最優(yōu)方案寝杖。該數(shù)據(jù)集中的指標(biāo)均為正向指標(biāo)。正向指標(biāo)表示指標(biāo)的數(shù)值越高越好互纯,負(fù)向指標(biāo)則表示指標(biāo)的數(shù)值越低越好瑟幕,這決定了該指標(biāo)在進(jìn)行權(quán)重計算時的處理方式。

計算權(quán)重

計算權(quán)重的第一步是計算各個指標(biāo)的熵值,由于我們用到的指標(biāo)均是正向指標(biāo)只盹,所以選擇自定義函數(shù)entropy_positive即可辣往。如果指標(biāo)既存在正向指標(biāo)又存在負(fù)向指標(biāo),則可分開進(jìn)行計算殖卑。自定義函數(shù)情況如下:

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

#負(fù)向指標(biāo)計算熵值
entropy_negative <- function(x){
  #指標(biāo)歸一化
  y = (max(x) -x) / (max(x) - min(x))
  #計算各指標(biāo)值的比重
  p = y/ sum(y)
  #計算各指標(biāo)的熵值
  entropy = -1/log(length(x)) * sum(ifelse(p == 0,0,p *log(p)))
}

調(diào)用函數(shù)并完成權(quán)重的計算站削,x1~x8的權(quán)重依次為: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)

計算相對接近度

在將指標(biāo)向量規(guī)范化后猛频,利用熵值法得到的權(quán)重計算得到加權(quán)標(biāo)準(zhǔn)化矩陣,然后提取正理想方案和負(fù)理想方案并計算出各個方案距離正負(fù)理想方案的距離馅笙,最終根據(jù)計算得到距離比值進(jìn)行排序伦乔。具體計算過程如下:

#向量規(guī)范化
vector_normalize <- function(x){
  x / sqrt(sum(x^2))
}
#調(diào)用函數(shù)進(jìn)行向量規(guī)范化
dataset_normal <- colwise(vector_normalize)(dataset[,-9])
#加權(quán)標(biāo)準(zhǔn)化矩陣
dataset_normal_weight <-  adply(dataset_normal,1,.fun = function(x){x*entropy_weight})
#確定正理想方案和負(fù)理想方案
best_case <- colwise(max)(dataset_normal_weight)
worst_case <- colwise(min)(dataset_normal_weight)
#計算各方案與正負(fù)理想方案的距離
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)
#計算相對接近度并進(jìn)行排序
proximity_data[,proximity := distance_worst / (distance_best + distance_worst)][order(-proximity)]
proximity_data[,rank := rank(-proximity)][order(rank)]

至此,我們就完成了用TOPSIS綜合評價法進(jìn)行多對象多指標(biāo)的最優(yōu)對象選擇董习,輸出的結(jié)果如下,顯然在這八個方案中爱只,方案A為最優(yōu)方案皿淋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恬试,隨后出現(xiàn)的幾起案子窝趣,更是在濱河造成了極大的恐慌,老刑警劉巖训柴,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哑舒,死亡現(xiàn)場離奇詭異,居然都是意外死亡幻馁,警方通過查閱死者的電腦和手機(jī)洗鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仗嗦,“玉大人膘滨,你說我怎么就攤上這事∠」眨” “怎么了火邓?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我铲咨,道長躲胳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任纤勒,我火速辦了婚禮坯苹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踊东。我一直安慰自己北滥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布闸翅。 她就那樣靜靜地躺著再芋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坚冀。 梳的紋絲不亂的頭發(fā)上济赎,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機(jī)與錄音记某,去河邊找鬼司训。 笑死,一個胖子當(dāng)著我的面吹牛液南,可吹牛的內(nèi)容都是我干的壳猜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼滑凉,長吁一口氣:“原來是場噩夢啊……” “哼统扳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起畅姊,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤咒钟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后若未,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱嘴,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年粗合,在試婚紗的時候發(fā)現(xiàn)自己被綠了萍嬉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡舌劳,死狀恐怖帚湘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甚淡,我是刑警寧澤大诸,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布捅厂,位于F島的核電站,受9級特大地震影響资柔,放射性物質(zhì)發(fā)生泄漏焙贷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一贿堰、第九天 我趴在偏房一處隱蔽的房頂上張望辙芍。 院中可真熱鬧,春花似錦羹与、人聲如沸故硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吃衅。三九已至,卻和暖如春腾誉,著一層夾襖步出監(jiān)牢的瞬間徘层,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工利职, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趣效,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓猪贪,卻偏偏與公主長得像跷敬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子热押,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容