按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大,该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。

熵权法

物理学上指热能除以温度所得的商,标志热量转化为功的程度。
◎ 科学技术上泛指某些物质系统状态的一种量(liàng)度,某些物质系统状态可能出现的程度。亦被社会科学用以借喻人类社会某些状态的程度。
◎ 在信息论中,熵表示的是不确定性的量度。

熵权法是一种客观赋权方法。它十分复杂,计算步骤如下:
a.构建各评价指标的判断矩阵:
b.将判断矩阵进行归一化处理, 得到归一化判断矩阵:
c.根据熵的定义,根据评价指标计算评价指标的信息熵。
d.计算系统的权重值。

详细原理可以参考知乎链接:如何用熵权法计算权重?

示例数据

演示数据量不大,读者可以直接复制为csv文件。

# dept,x1,x2,x3,x4,x5,x6,x7,x8,x9
# A,100,90,100,84,90,100,100,100,100
# B,100,100,78.6,100,90,100,100,100,100
# C,75,100,85.7,100,90,100,100,100,100
# D,100,100,78.6,100,90,100,94.4,100,100
# E,100,90,100,100,100,90,100,100,80
# F,100,100,100,100,90,100,100,85.7,100
# G,100,100,78.6,100,90,100,55.6,100,100
# H,87.5,100,85.7,100,100,100,100,100,100
# I,100,100,92.9,100,80,100,100,100,100
# J,100,90,100,100,100,100,100,100,100
# K,100,100,92.9,100,90,100,100,100,100# 需要加载包
library(tibble)
library(dplyr)

函数准备

这里先定义需要的函数,方便后面在dplyr中使用。


## 归一化,也可以使用内置函数scale
min_max_norm <- function(x) {(x - min(x)) / (max(x) - min(x))
}## 计算P值
p_value <- function(x){x / sum(x)
}## 计算熵值
entropy <- function(x){n <- length(x)(-1 / log2(n)) * (sum( x * ifelse(log2(x)==-Inf, 0, log2(x)) ))}## 计算权重
weight <- function(x){(1-x) / (length(x)-sum(x))
}## 计算得分
fscore <- function(x, y){sum(x*y)
}

R 实现熵权法

## 加载数据
dt <- read.csv("data-dp.csv")
tb.dt <- as_tibble(dt)# A tibble: 11 x 10
#    dept     x1    x2    x3    x4    x5    x6    x7    x8    x9
#    <chr> <dbl> <int> <dbl> <int> <int> <int> <dbl> <dbl> <int>
#  1 A     100      90 100      84    90   100 100   100     100
#  2 B     100     100  78.6   100    90   100 100   100     100
#  3 C      75     100  85.7   100    90   100 100   100     100
#  4 D     100     100  78.6   100    90   100  94.4 100     100
#  5 E     100      90 100     100   100    90 100   100      80
#  6 F     100     100 100     100    90   100 100    85.7   100
#  7 G     100     100  78.6   100    90   100  55.6 100     100
#  8 H      87.5   100  85.7   100   100   100 100   100     100
#  9 I     100     100  92.9   100    80   100 100   100     100
# 10 J     100      90 100     100   100   100 100   100     100
# 11 K     100     100  92.9   100    90   100 100   100     100## 计算信息熵#   mutate_all 不建议使用了
# tb.dt <- tb.dt %>% select(2:10) %>%
#  mutate_all(.funs = min_max_norm) %>%
#  mutate_all(.funs = p_value) %>%
#  summarise_all(.funs = entropy) tb.dt <- tb.dt %>% mutate(across(c(2:10), min_max_norm)) %>%mutate(across(c(2:10), p_value)) %>%summarise(across(c(2:10), entropy))
tb.dt# A tibble: 1 x 9
#      x1    x2    x3    x4    x5    x6    x7    x8    x9
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 0.954 0.867 0.836 0.960 0.936 0.960 0.960 0.960 0.960## 计算权重
w_dat <- tb.dt %>% weight
w_dat#           x1        x2        x3         x4        x5         x6         x7         x8         x9
# 1 0.07578559 0.2191587 0.2713738 0.06559212 0.1051977 0.06559212 0.06611572 0.06559212 0.06559212## 计算得分
dt %>% group_by(1:n()) %>% mutate(score = fscore(c_across(2:10), w_dat)) %>% arrange(-score) %>%ungroup() %>%select("dept", "score")# A tibble: 11 x 2
#    dept  score
#    <chr> <dbl>
#  1 F      98.0
#  2 J      97.8
#  3 K      97.0
#  4 I      96.0
#  5 E      95.8
#  6 A      95.7
#  7 H      95.2
#  8 C      93.2
#  9 B      93.1
# 10 D      92.8
# 11 G      90.2

R 实现熵权法计算权重相关推荐

  1. R 熵权法计算权重及综合得分

    最近工作中需要根据大数据智能计算,预测或者推荐出供应链付款优先/权重来,以往都是人工根据供应商关系等因素做付款的一个优先级,并不能客观的将付款策略分发到其他供应商,现根据大数据客观计算,记录一下 1, ...

  2. Python小案例(六)通过熵权法计算指标权重

    Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...

  3. 帮我用python写一个程序 输入三个列表数据 使用熵权法计算这三组数据的权重并输出...

    好的,以下是用Python实现熵权法计算三组数据权重的代码: import numpy as np# 定义熵权法函数 def entropy_weight(x):x = np.array(x)# 计算 ...

  4. 手把手教你用熵值法计算权重

    由于对数据要求少,且容易计算,熵值法一直是备受欢迎的权重计算方法. 今天的文章,将带大家一起梳理熵值法计算权重的步骤以及如何应用到综合评价研究中. 一.研究背景 研究案例是利用熵值法来对各企业的财务状 ...

  5. 多目标决策问题1.1.1:线性加权法——熵权法确定权重

    多目标决策问题是目前数学建模中比较普遍的一类问题, 此类问题要求我们满足多个目标函数最优与决策变量的线性约束条件或非线性约束条件下进行求解, 多目标决策问题主要有主要目标法.线性加权法.分层序列法.步 ...

  6. 熵值法计算权重有异常值_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  7. excel熵值法计算权重_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  8. excel熵值法计算权重_SPSS主成分分析 | 指标权重值计算真的不难!(上)

    一 指标权重计算确定的困惑 相信很多写过或者正在写指标处理类论文的朋友都曾对如何计算指标权重充满困惑,到底是用熵值法,还是主成分分析法?或者其他各种看起来奥妙无穷却难以上手操作的神奇方法?好不容易确定 ...

  9. excel熵值法计算权重_熵值法的Excel基本步骤

    各位亲们,前天从盐城回来,我收拾收拾就开始忙着补上上个星期拖的更了.本期主要内容主要是对盐城滨海湿地野外采样的总结,在论文写作中指标权重的赋予,以及分享几套宁波大学特有的PPT模板. 从7月28日-8 ...

  10. excel熵值法计算权重_SPSS主成分分析 | 权重计算amp;极差法标准化超详细教程!(下)...

    权重计算 1. 上节回顾 爱数据-橙子:SPSS主成分分析 | 指标权重值计算真的不难!(上)​zhuanlan.zhihu.com 在昨日中(点击复习),我们利用SPSS中的数据标准化方法及主成分分 ...

最新文章

  1. 小功告成:ReadIE beta
  2. SharePoint 2013 术语和术语集介绍
  3. Appium环境搭建python篇(mac系统)
  4. ip访问次数统计 nginx_Linux分析Nginx日志统计IP访问次数的shell脚本
  5. [学习OpenCV攻略][001][Ubuntu安装及配置]
  6. 汽车在怠速时有很轻微的间歇抖动,是不是节气门脏了?
  7. 启动Eclipse时,错误:WorkSpace Unavailable
  8. shell编程-条件判断与流程控制
  9. ucinet计算聚类系数大于1怎么办_UCINET 6
  10. Linux将鼠标解放,DwellClick:让鼠标下岗 解放你的手指
  11. ALTOVA XMLSPY使用,建xml文件,构建xpath和XQuery查询,xml和json格式转换
  12. 基于F340 实现Bridge功能(二):上位机应用程序编写
  13. python 英文 词频分析软件_有哪些软件可以进行中文词频分析?
  14. JavaScript与C#互通的DES加解密算法
  15. 网盘上传文件服务器失败原因,百度网盘上传文件一直失败是什么情况?具体解决方法...
  16. C语言 实现99乘法口诀表
  17. python求助神器_【python从零开始(被称之为神器的装饰器)】- 环球网校
  18. App渗透中常见的加密与解密
  19. 计算机二级MS考试题目占分数
  20. 技术干货 | 基于 MindSpore 实现图像分割之平均表面距离

热门文章

  1. 【日常小问题3】win10电脑忘记开机密码的解锁方法【转载】
  2. 表情识别相关论文摘要
  3. GeoServer离线地图
  4. python3-爬取cnnvd漏洞库
  5. vivo android 刷机教程,vivo刷机步骤盘点【图文教程】
  6. C# WPF网络实时监测客户端
  7. (云苍穹)表单插件常用代码
  8. c++ 度分秒相互转化
  9. keras中文文档网址
  10. 超实用一键破解网页不能复制/右键菜单限制的 Bookmarklet 收藏夹书签小工具