熵权法计算评价指标权重——使用Excel VBA实现

熵权法 ]

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

在进行熵权法之前,如果数据方向不一致时,需要进行提前数据处理,通常为正向化或者逆向化两种处理(统称为数据归一化处理)。

公式如下:

我们常常通常需要使用一些统计软件以及脚本语言来计算,如:Spss,Matlab,stata,python等诸如此类的工具,但对于大部分不太习惯用统计软件或者其他编程语言的人来说使用并不方便。

为大家分享一段Excel内的VBA代码来实现在Excel中自动计算熵权权重,无需下载任何软件即可计算权重。

下面是我所使用的示范数据,大家可以从后台找我领取或者微信号公众号主页回复 “熵值法”即可获取代码以及练习数据哦。

Excel自动计算熵值法链接:https://pan.quark.cn/s/3fe506701b6c

具体代码如下

Sub 熵权法()

Dim rg As Range, nrow As Integer, ncol As Integer

Dim r As Integer, c As Integer



   '************************变量初始化*******************************

   Set rg = Selection  '选区

   With rg

   nrow = .Rows.Count   '选区总行数

   ncol = .Columns.Count '选区总列数

   r = .Row '选区第一个单元格行号

   c = .Column '选区第一个单元格列号

   lr = r + nrow - 1 '选区最后一个单元格行号

   lc = c + ncol - 1 '选区最后一个单元格列号

   End With



  '*******  Step 1 . 标准化处理  *****************************************************

   For k = 1 To ncol - 1



    Max = Application.WorksheetFunction.Max(Range(Cells(r + 2, c + k), Cells(lr, c + k)))

    Min = Application.WorksheetFunction.Min(Range(Cells(r + 2, c + k), Cells(lr, c + k)))



      For i = 2 To nrow - 1



         If Cells(r + 1, c + k) = 1 Then



          Cells(lr + i, c + k) = (Cells(r + i, c + k) - Min) / (Max - Min)

         ElseIf Cells(r + 1, c + k) = -1 Then

           Cells(lr + i, c + k) = (Max - Cells(r + i, c + k)) / (Max - Min)

         Else

           MsgBox ("请输入正确的指标标签,-1或1,1表示指标为正向指标;-1表示指标为负向指标")

           Exit For

        End If

      Next





   Next

   Cells(lr + 2, c) = "标准化"

 '********************************************************************



   '********  Step 2 .计算第i年份第j项指标值的比重 ********************************

        '1初始化变量的值

    r = lr + 2 '标准化矩阵的第一个单元格行号

    c = c + 1 '标准化矩阵的第一个单元格列号

    lr = lr + nrow - 1  '标准化矩阵的最后一个单元格行号

    lc = ncol - 1 '标准化矩阵的最后一个单元格列号



    For k = 0 To ncol - 2

     Sum = Application.WorksheetFunction.Sum(Range(Cells(r, c + k), Cells(lr, c + k)))

       For i = 0 To nrow - 3

       Cells(lr + 2 + i, c + k) = Cells(r + i, c + k) / Sum

       Next

    Next

      Cells(lr + 2, c - 1) = "第i年份第j项指标值的比重:"

'************************************************************************



'**********  Step 3 . 计算指标信息熵  *******************************************

    r = lr + 2  '比重矩阵第一个单元格行号

    lr = lr + nrow - 1 '比重矩阵最后一个单元格行号

    m = -1 / Application.Ln(nrow - 2)

         For k = 0 To ncol - 2

             For i = 0 To nrow - 3

              n = Application.Ln(Cells(r + i, c + k))

              b = Application.WorksheetFunction.IfError(n, 0)

              Cells(lr + 2 + i, c + k) = Cells(r + i, c + k) * b



            Next

        Next

     r = lr + 2   'ylny矩阵第一个个单元格行号

     lr = lr + nrow - 1  'ylny矩阵最后一个单元格行号



  For k = 0 To ncol - 2

      Cells(lr + 2, c + k) = Application.WorksheetFunction.Sum(Range(Cells(r, c + k), Cells(lr, c + k))) * m



   Next

      Cells(lr + 2, c - 1) = "信息熵:"

 '*******************************************************************************

 '**********  Step 4 . 计算信息冗余度  *******************************************

   r = lr + 2 '信息熵矩阵第一个单元格行号

   For k = 0 To ncol - 2

    Cells(r + 2, c + k) = 1 - Cells(r, c + k)

   Next

    Cells(r + 2, c - 1) = "信息冗余度:"

'************************************************************************************

'***********  Step 5 . 计算指标权重  **************************************************

  r = r + 2

  Sum = Application.WorksheetFunction.Sum(Range(Cells(r, c), Cells(r, c + ncol - 2)))

  For k = 0 To ncol - 2

      Cells(r + 2, c + k) = Cells(r, c + k) / Sum

      With Cells(r + 2, c + k)

       .Font.ColorIndex = 3

       .Font.Bold = True

      End With

  Next

  Cells(r + 2, c - 1) = "指标权重:"

  With Cells(r + 2, c - 1)

   .Font.ColorIndex = 3

   .Font.Bold = True

  End With

'***************************************************************************************

End Sub

需要资料的欢迎私信后台!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/889367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科研绘图系列:R语言绘制SCI文章图2

文章目录 介绍加载R包导入数据图a图b图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码 加载R包 library(ggplot2) library(dplyr) library(readxl) library(ggpmisc)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度网盘下载链接: https://pan.baid…

遍历有向图链路(DFS算法)- 优化版

在上一节基础上,去除了节点的pre集合,只保留节点next的结合,对数据模型进行了优化,实现思想做了优化。 有向图示例: 基本思路 构建有向图数据模型校验有向图不能出现回路,即当前节点不能出现在历史链路中首…

股指期货的杠杆是怎么体现和使用的?

股指期货的杠杆效应是通过保证金交易实现的。投资者只需支付合约价值的一小部分作为保证金,即可控制整个合约的价值。例如,如果一个股指期货合约的价值为100,000元,而保证金比例为10%,那么投资者只需支付10,000元即可控制这个合约…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础)

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础) 简介适用场景Quartz核心概念Quartz 存储方式Quartz 版本类型引入相关依赖开始集成方式一:内存方式(MEMORY)存储实现定时任务1. 定义任务类2. 定…

从commit校验失效问题探究husky原理

一、背景 之前创建的项目,发现代码 commit 提交的时候没有了任何校验,具体表现: 一是 feat fix 等主题格式校验没有了二是代码 lint 不通过也能提交 尝试解决这个问题,并深入了解husky的实现原理,将相关的一些知识点…

【Vue】Vue扫盲(三)计算属性和监听器

【Vue】Vue扫盲(一)事件标签、事件修饰符:click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲(二)指令:v-for 、v-if、v-else-if、v-else、v-show 文章目录 1、 计算属…

用FPGA做一个全画幅无反相机

做一个 FPGA 驱动的全画幅无反光镜数码相机是不是觉得很酷? 就是上图这样。 Sitina 一款开源 35 毫米全画幅 (3624 毫米) CCD 无反光镜可换镜头相机 (MILC),这个项目最初的目标是打造一款数码相机,将 SLR [单镜头反光] 相机转换为 DSLR [数码…

Spring事务的1道面试题

每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是:通过AOP切面的方式实现的,也就是通过代理模式去实现事务增强。 具体过程是…

【3dgs】总结3DGS与NeRF如何重塑SLAM24年4月最新进展

【3dgs】总结3DGS与NeRF如何重塑SLAM! 1. 摘要2. 简洁3. 背景3.1 Existing SLAM Surveys3.2 progress in Radiance Field Theory3.3.1 NeRF3.3.2 3dgs3.4 数据集 4 数据集4.1 SLAM3.1 RGB-D SLAM方法3.1.1 基于NeRF风格的RGB-D SLAM3.1.2 基于3DGS风格的 RGB-D SLAM…

opencv的相机标定与姿态解算

首先我们要知道四个重要的坐标系 世界坐标系相机坐标系图像成像坐标系图像像素坐标系 坐标系之间的转换 世界坐标系——相机坐标系 从世界坐标系到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。绕着不…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗?使用Python编程,你可以创造出独一无二的爱心图案,为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码,让你的创意和情感通过代码展现出来。 话不多说,咱…

C++开发五子棋游戏案例详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

MSYS2+GCC 安装与应用保姆手册

msys2 提供可在Windows下使用 GCC 编译器;并且,借助 Linux 包管理功能,可轻松下载丰富的可在Windows下直接使用的 C/C 开发包,包括编译好的二进制包。 网络库asio、准标准库boost、zip解压缩、json格式处理、引擎 SDL……十八般兵…

图片美化SDK解决方案,赋能H5与小程序极致体验

无论是社交媒体分享、电商产品展示,还是个人日常生活的记录,一张经过精心美化的图片总能瞬间吸引眼球,传递出更加丰富和动人的信息。如何在不增加应用体积、不牺牲用户体验的前提下,为H5页面和小程序提供媲美原生APP的图片美化功能…

前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录 一.前端项目概述1.系统登录注册模块1.对注册的密码进行加密 (使用加密中间件bcrypt.js)2.登录成功后返回token3.前端登录页面有用到弹性布局,ref和reactive4.登录头像:文件上传 2.系统设置模块2.系统首页模块&#xff08…

Unity 从零开始的框架搭建1-2 事件的发布-订阅-取消的小优化及调用对象方法总结[半干货]

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激 Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】-CSDN博客 原来 其实就是对上一节的事件发布订阅类的小优化,原来是这样子的 p…

【SEO】什么是SEO?

什么是SEO(搜索引擎优化)?为什么SEO对于⼀个⽹站⾄关重要? SEO 全称是搜索引擎优化(Search Engine Optimization) 因为我们目前开发的网址,需要人看到,除了通过宣传营销的方式展现…

计算机毕业设计 校内跑腿业务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

【环境搭建】MAC M1安装ElasticSearch

STEP1 官网下载ES Download Elasticsearch | Elastic&#xff0c;下载mac m1对应版本的es STEP2 进入bin文件夹&#xff0c;执行./elasticSearch 浏览器输入 127.0.0.1:9200 STEP 3 下载对应Kibana版本&#xff0c;Download Kibana Free | Get Started Now | Elastic 出现报错…