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 实现熵权法计算权重 的相关文章

  • 【JokerのZYNQ7020】SDK程序从QSPI启动。

    软件环境 xff1a vivado 2017 4 硬件平台 xff1a XC7Z020 之前写的QSPI启动是对ZYNQ的PS装Linux系统的 xff0c 如果不想搞那么麻烦或者功能要求单一 xff0c 调试又想方便一些 xff0c 直接
  • 【JokerのZYNQ7020】Vxworks 6.9。

    软件环境 xff1a vivado 2017 4 硬件平台 xff1a XC7Z020 基本全程参考的官方xapp1158 zynq 7000 vxworks bsp pdf xff0c 但我感觉主要难度不在移植上 xff0c 因为pdf里
  • 【JokerのZYNQ7020】ubuntu启动后跳过验证登录。

    之前分享过一篇debian系统启动后如何自动加载用户应用的例程 xff0c 今天在这里继续分享一个非常实用的小技巧 xff0c 如何让嵌入式板卡的ubuntu系统启动后 xff0c 跳过用户名密码验证 xff0c 直接以root身份进入系统
  • 2013年终总结

    2013年即将过去 xff0c 回顾这一年 xff0c 有得有失 xff0c 有喜有悲 xff0c 些许记忆碎片留在脑海中 简单做个总结 xff0c 也算划上一个完美的句号 xff0c 再迎接充满挑战的2014 xff01 项目 一年过来
  • 用FSL进行VBM统计分析

    用FSL进行VBM统计分析 总体步骤概览1 准备数据1 1 T1数据格式1 2 Template list查看数据 2 剥头皮 xff1a fslvbm 1 bet3 数据分割 43 生成模板 xff1a fslvbm 2 template
  • 程序员的生活,其实苦不堪言

    前一天 A 下班前把这个代码发给我 B 好的 xff01 第二天 A 都他妈中午了 xff0c 代码怎么还没发过来 xff1f B 我他妈还没下班呢 xff01 程序猿的真实写照 曾经刚参加工作 xff0c 接手一个项目的维护 xff0c
  • 文件后缀大全

    file extensions with related program associations a unix library unix ada program a01 arj multi volume compressed archiv
  • Android Studio 安装Kotlin插件

    1 打开Android Studio 的File gt Settings xff0c 选择左侧Plugins显示已安装插件列表 搜索框输入kotlin xff0c 若无搜索结果 xff0c 可以点击 Search in repositori
  • Python读取文件的多种方式

    在Python编程中 xff0c 读取文件是非常常见的操作 Python提供了多种读取文件的方式 xff0c 本文将介绍其中的几种方式 1 使用open函数读取文件 使用Python内置函数open 可以打开一个文件 xff0c 并返回一个
  • 阿里Java面试题剖析:关于系统拆分,为什么要进行系统拆分?

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img Xz97Uqx1 1663815474530 https upload images jianshu io upload images 16535373 f09e8
  • 关于完全二叉树高度h与结点个数n的推导

    推导1 xff1a 具有n个 n gt 0 结点的完全二叉树的高度h为 xff1a log2 n 43 1 由于高度h的满二叉树共有2h 1个结点 高度为h 1的满二叉树有2h 1 1个结点 可得2h 1 1 lt n lt 61 2h 1
  • Android 采用fastboot刷system.img boot.img recovery.img

    手机正常启动后 xff0c 命令行模式下输入 adb reboot bootloader 该命令会自动进入fastboot模式 接着 xff1a fastboot devices 查看是否有设备 erase 擦除的意思 xff0c 你懂得
  • ButterKnife与BindView使用详解

    ButterKnife与BindView使用详解 ButterKnife的优势 具有强大的view绑定和click事件处理能力 方便处理Adapter里的viewHolder绑定问题 运行时不会影响app效率 xff0c 配置方便 代码清晰
  • libpcap的安装

    最近参加了一个实训项目 xff0c 是把一个WireShark抓到的pcapng文件用libpcap库还原成原始的TS流 xff0c 需求分析弄了一天 xff0c 安装环境用了一天 xff0c 接下来再开始写代码 xff0c 让我们一起完成
  • 【手把手教你】使用Python玩转金融时间序列模型

    01 引言 上一篇推文 Python量化基础 时间序列的自相关性与平稳性着重介绍了时间序列的一些基础概念 xff0c 包括自相关性 偏自相关性 白噪声和平稳性 xff0c 以及Python的简单实现 本文在此基础上 xff0c 以沪深300
  • Java 解决 java.lang.IllegalStateException 异常错误

    今天运行项目时出现的这个问题 xff0c 有错误提示可以看出 xff0c 大概意思是这个项目已经停止 xff0c 不能重新加载 也就是说只需重新部署基本就可以啦 网上有人说可以将项目从tomcat中先移除再部署上去 xff0c 实在不行就把
  • 学习笔记3 hive数据分析(实例)

    目的 xff1a 分析企业新闻舆情的正负面性与该公司是否有非法集资风险的关系 思路 xff1a 将两张表连接成一张新表 xff1b 根据 id 企业唯一标识 positive negtive 新闻正负面性 public date 发布日期
  • Gradle sync failed: Could not find com.android.tools.build:gradle:4.1.3解决方法

    Gradle sync failed Could not find com android tools build gradle 4 1 3解决方法 升级安卓4 1 3后导入其他项目显示如下错误 原因是软件无法更新Gradle sync x
  • AlertDialog对话框弹出后,旋转屏幕,对话框消失,造成leak window

    看log信息 按字面了解 xff0c Window Leaked大概就是说一个窗体泄漏了 xff0c 也就是我们常说的内存泄漏 xff0c 为什么窗体会泄漏呢 xff1f 我们知道Android的每一个Activity都有个WindowMa
  • 如何高效地阅读技术类书籍与博客

    原文地址 xff1a http www nowamagic net librarys veda detail 2050 如何高效地阅读技术类书籍与博客 影像阅读法 阅读是自我提升的一个有效方法 xff0c 阅读书籍 阅读博客都是我们技术提升

随机推荐

  • Java进阶面试题:如何设计一个高并发系统?

    面试原题 如何设计一个高并发系统 xff1f 面试官心理分析 说实话 xff0c 如果面试官问你这个题目 xff0c 那么你必须要使出全身吃奶劲了 为啥 xff1f 因为你没看到现在很多公司招聘的 JD 里都是说啥 xff0c 有高并发就经
  • 微擎按照UID获取用户绑定手机号

    按照UID获取用户信息 users 61 pdo fetch 34 select from 34 tablename 39 users 39 34 where uid 61 W 39 uid 39 34 按照UID获取用户绑定手机号 thi
  • AD-----间距、线宽、阻焊、铺铜规则设置

    1 间距规则 快捷键 D 43 R xff0c 出现如下界面 xff0c 在Clearance 中 即可设置对应的规则 Track 走线 SMD Pad 贴片式焊盘 TH Pad 通孔焊盘 Via xff1a 过孔 Copper xff1a
  • 【Python】程序员情人节搞事情的程序

    程序员情人节搞事情的程序 效果展示源码备注1 这段代码用 python 实现2 用 pyinstaller 打包成exe3 没有 pyinstaller 的话 xff0c 可以直接用 pip 安装 效果展示 源码 import pygame
  • Maven项目在编译及导入Eclipse时出现的错误汇总处理

    Maven项目在编译及导入Eclipse时出现的错误处理汇总 Maven在构建项目时确实是比较强大 xff0c 而且也越来越流行 xff0c 目前不但越来越多的开源项目 xff0c 甚至越来越多的商业项目都在使用Maven 但是不得不说Ma
  • AS导入项目报错:Plugin with id ‘com.android.application‘ not found

    转自 xff1a https www cnblogs com cuichen16 p 10785951 html 从github或第三方Demo中获取的项目导入到AndroidStudio中报错Plugin with id com andr
  • 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 就是一个站点中的资源去访问另外一个不同域名站点上的
  • 分享30道Redis面试题,面试官能问到的我都找到了

    1 什么是Redis xff1f 简述它的优缺点 xff1f Redis本质上是一个Key Value类型的内存数据库 xff0c 很像memcached 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
  • Windows 文件资源管理器中搜索带特殊字符文件名的方法

    今天处理一些文件 xff0c 文件夹这包含有类似 16年普通高等学校招生全国统一考试 英语 的文件名 xff0c 想全部找出来删除掉 xff0c 直接在文件资源管理器里面输入 是搜索不到想要的文件的 xff0c 这些是特殊字符 xff0c
  • 脑成像坐标系: MNI + Talairach

    一 脑成像坐标系 xff1a MNI Talairach MNI 脑 Montreal Neurological Institute 是基于大量的正常被试MRI扫描结果得到的标准脑 xff08 当然是欧罗巴人群的 xff09 Talaira
  • windows10隐藏分区(隐藏efi系统分区)

    我们需要使用diskpart来移除这个误显示的盘符 可能使用的命令 xff1a 1 以管理员身份运行CMD xff1b 2 运行diskpart命令 xff1b 3 list disk 显示所有安装的磁盘 xff1b 4 select di
  • 干支纪年和纪日算法

    怎样从已知年份和日期得到对应的干支纪年和纪日 文 xff0f 葛民勤 摘要 xff1a 从已知年份计算干支纪年很简单 xff1a 年份数减3 xff0c 除以10的余数是天干 xff0c 除以12的余数是地 支 从已知日期计算干支纪日的公式
  • Shell 脚本监控磁盘空间

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

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