R 实现熵权法计算权重

2023-05-16

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

熵权法

物理学上指热能除以温度所得的商,标志热量转化为功的程度。
◎ 科学技术上泛指某些物质系统状态的一种量(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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 实现熵权法计算权重 的相关文章

随机推荐

  • win10找不到d3dx9_43.dll,无法正常启动0xc000007b

    Win10电脑 xff0c 安装PhoenixRC时 xff0c 安装好后点击运行 xff0c 报错找不到d3dx9 43 dll 按照网上的一些教程下载d3dx9 43 dll并放到C Windows System32 下再运行regsv
  • 收录一些欧美优秀css网站

    http www dezinerfolio com 漂亮欧美风格博客 http hellomac pl http divplayers com http skipvine ro http www tooopen com 虽然是国产的 xff
  • 几种非易失性存储器的比较

    SRAM为数据访问和存储提供了一个快速且可靠的手段 由系统电源或其他备用电源 xff08 如电池 xff09 供电时 xff0c 他们就具有非易失性 表1给出了几种给定的非易失性存储器存储技术的优缺点 表1非易失性存储器比较 NVSRAM中
  • C#向Excel报表中插入图片的2种方法

    这几天做向Excel插入数据 xff0c 其中有插入图片的需求 xff0c 经试验 xff0c 下面2种方法都可以插入图片 xff0c 但各有不同的用处 现将这2种方法共享出来 xff0c 希望需要的朋友进行参考 xff0c 代码中已经有详
  • Response.Redirect 打开新窗口的两种方法

    一般情况下 xff0c Response Redirect 方法是在服务器端进行转向 xff0c 因此 xff0c 除非使用 Response Write 34 lt script gt window location 61 39 http
  • C# 实现向浏览器的兼容性视图列表中添加、删除网站和检查网站是否在兼容性网站列表中

    今天回答论坛上的一个问题 xff0c 搜索了一下网上 xff0c 并没有找到一个完整的例子 xff0c 下面根据网上的一些资料 xff0c 经过转换 完善成一个完整的例子 下面的例子可以实现添加 删除 检测网站是否在兼容性网站列表中的功能
  • Excel中 ColorIndex 属性值和颜色对照表

    Excel中 ColorIndex 属性值和颜色对照表 资料参考 http msdn microsoft com en us library cc296089 aspx http www mvps org dmcritchie excel
  • AJAX(XMLHttpRequest)进行跨域请求方法详解(一)

    注意 xff1a 以下代码请在Firefox 3 5 Chrome 3 0 Safari 4之后的版本中进行测试 IE8的实现方法与其他浏览不同 跨域请求 xff0c 顾名思义 xff0c 就是一个站点中的资源去访问另外一个不同域名站点上的
  • AJAX(XMLHttpRequest)进行跨域请求方法详解(二)

    注意 xff1a 以下代码请在Firefox 3 5 Chrome 3 0 Safari 4之后的版本中进行测试 IE8的实现方法与其他浏览不同 2 xff0c 预检请求 预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTION
  • 将文本文件的内容或者文字保存成图片

    调用方法 xff1a ConvertTextFileToImage Server MapPath 34 Log txt 34 Server MapPath 34 Log png 34 实现代码 xff1a void ConvertTextF
  • 2011年终总结:为了娜娜的微笑

    蒙娜丽莎为什么笑 xff1f 这个问题 xff0c 如果达 芬奇自己都没有交代过 xff0c 那么就没有人知道答案了 xff0c 后来所有的答案都是推测的 xff0c 答案众说纷纭 xff0c 这里就不做评论了 作为计算机运行的代码 xff
  • 安装windows+两个ubuntu(三系统)成功案例

    在已有的win10 43 ubuntu18 04双系统基础上 xff0c 再安装一个ubuntu20 04 原有配置 1T固态硬盘 43 2T机械硬盘 xff1b 固态硬盘上已经安装了win10 xff0c 机械硬盘上一个分区已经安装了ub
  • Windows 文件资源管理器中搜索带特殊字符文件名的方法

    今天处理一些文件 xff0c 文件夹这包含有类似 16年普通高等学校招生全国统一考试 英语 的文件名 xff0c 想全部找出来删除掉 xff0c 直接在文件资源管理器里面输入 是搜索不到想要的文件的 xff0c 这些是特殊字符 xff0c
  • ROS学习记录——Gazebo 里添加自己的物体模型

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 一 下载3D模型 二 编辑三维模型 1 使用sketch up 2 使用blender编辑 三 将三维模型导入Gazebo 1
  • 【NEUQ RM SI战队项目开源】gazebo仿真开源

    NEUQ RM SI战队项目开源 gazebo仿真开源 写在前面演示视频第一部分 xff1a 机器人仿真环境正文 xff1a 基于gazebo的RM仿真环境贡献照片墙 写在前面 一个新冠疫情 xff0c 打乱了所有队伍的备赛计划 xff0c
  • 嵌入式软件高频面试题

    本文转载自公众号 xff1a 嵌入式Hacker 原文地址 xff1a 职场人生 嵌入式软件高频面试题 一 进程与线程 1 什么是进程 线程 xff0c 有什么区别 xff1f 进程是资源 xff08 CPU 内存等 xff09 分配的基本
  • Ubuntu下硬件信息的查看

    一 相关命令 1 查看cpu信息概要 xff1a lscpu 2 大而全的命令 xff08 查看cpu的信更加全面 xff09 xff1a cat proc cpuinfo 3 查看整个系统的硬件信息 xff1a lshw 如果觉得终端看起
  • 我的2011—前脚踏进了IT行业的一步,大一Java开发学生。

    我写这个犹豫了很久 xff0c 想想在CSDN都是在这条路上走了几年的 xff0c 十几年的 xff0c 我还只是走了半年的一个90后 但是 xff0c 在这半年里 xff0c 我的感触颇深 xff0c 所以就献丑了吧 从高考完了的那一天就
  • Shell 脚本监控磁盘空间

    df 命令可以展示文件系统的磁盘有效空间信息 如果不指定文件名 xff0c 则当前所有挂载的文件系统有效空间信息 实现步骤 使用 df 查看磁盘信息使用 grep命令 过滤文件系统 xff0c 获取空间使用百分比通过Shell 脚本进行监控
  • R 实现熵权法计算权重

    按照信息论基本原理的解释 xff0c 信息是系统有序程度的一个度量 xff0c 熵是系统无序程度的一个度量 xff1b 根据信息熵的定义 xff0c 对于某项指标 xff0c 可以用熵值来判断某个指标的离散程度 xff0c 其信息熵值越小