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

news2024/10/11 13:10:31

熵权法 ]

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

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

公式如下:

我们常常通常需要使用一些统计软件以及脚本语言来计算,如: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.coloradmin.cn/o/2204913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型与生成式AI结合:HelpLook引领零售增长新篇章

近年来,零售行业在数字化、技术革新、经济波动及消费者需求多变的挑战下,展现出强大的适应性和创新力。AI技术的深度融合,正引领零售、电商、教育等领域,尤其是零售业步入一个生产力飞跃、客户至上的全新时代。企业亟需挖掘客户与…

Caffeine+Redis两级缓存架构

CaffeineRedis两级缓存架构 在高性能的服务项目中,我们一般会将一些热点数据存储到 Redis这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…

24最新秋叶V4.9整合包发布!什么是Stable Diffusion?如何安装Stable Diffusion?

前言 Stable Diffusion秋叶整合包,一键安装Stable Diffusion,门槛极低,完全免费,支持Nvidia全系列显卡。 所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~ Stable Di…

二叉树系列 10/11

一、二叉树中的伪回文路径 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数…

K8s中pod的管理和优化

一、k8s中的资源 1.1 资源管理介绍 在kubernetes中,所有的内容都抽象 资源,用户需要通过操作资源来管理kubernetes。kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务所谓的部署服务,其实就是在kubernetes集群中…

MySQL中text类型对查询效率的影响

背景 任何设计都需要结合实际的需求或者说系统来做,我们现在服务端的整体设计趋向于领域驱动模型(DDD)。将业务抽象划分成各个独立领域对象,各个领域各尽其职,只负责自己领域的工作。回到MySQL设计,在我们将…

springboot查询全部部门流程

前端发送请求后,会请求DeptController的方法list()。 package com.intelligent_learning_aid_system.controller;import com.intelligent_learning_aid_system.pojo.Dept; import com.intelligent_learning_aid_system.pojo.Result; import com.intelligent_learni…

python安装插件

报错 E:\pythonProject\pythonProject_JD\Scripts\python.exe E:\浏览器下载\pythoncode\pythonProject_JD\car.py Traceback (most recent call last): File "E:\浏览器下载\pythoncode\pythonProject_JD\car.py", line 5, in <module> from selenium…

jdk 相关网址

官方资源&#xff1a; OpenJDK: https://openjdk.org/ OpenJDK 官方网站 (https://openjdk.org/) 是 Java 开发者的重要资源。以下是该网站的主要内容和功能&#xff1a; 项目概览 OpenJDK 的介绍和目标最新版本信息 下载 源代码下载预构建二进制文件链接 文档 开发者指南AP…

视频监控汇聚平台Liveweb安防监控平台实现接入监控视频集中管理方案

随着各行业数字化转型的不断推进&#xff0c;视频监控技术在行业内的安防应用及管理支撑日益增多。然而&#xff0c;由于前期规划不清晰、管理不到位等问题&#xff0c;视频监管系统普遍存在以下问题&#xff1a; 1. 各部门单位在视频平台建设中以所属领域为单位&#xff0c;导…

java多态-cnblog

java多态 细分的重载会增加代码量&#xff0c;降低易用程度 定义一个类&#xff0c;继承所有类的对象&#xff0c;根据向上转型可以让每个类的对象都调用初始类的方法&#xff0c;在方法中设置判断&#xff0c;不同的对象导致方法做不同的事&#xff0c;这就是多态 写一个灯…

C++:vector(题目篇)

文章目录 前言一、只出现一次的数字二、只出现一次的数字 II三、只出现一次的数字 III四、杨辉三角五、删除有序数组中的重复项六、数组中出现次数超过一半的数字七、电话号码的字母组合总结 前言 今天我们一起来看vector相关的题目~ 一、只出现一次的数字 只出现一次的数字…

Windows电脑安装FileBrowser文件管理系统结合内网穿透打造个人网盘

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

数据结构:单链表OJ题

目录 相交链表解题思路代码 环形链表&#xff08;I&#xff09;解题思路代码 环形链表&#xff08;II&#xff09;解题思路代码 随机链表的复制&#xff08;深拷贝&#xff09;解题思路代码 相交链表 题目描述&#xff1a; 案例&#xff1a; 题目链接&#xff1a;https://l…

从边缘云到边缘AI,似乎边缘更有想象空间,你认同么?

【科技明说 &#xff5c; 科技热点关注】 前些天&#xff0c;我看到一个业内的行业分析说&#xff0c;边缘人工智能已经开始兴起&#xff0c;但是要到了2026年才会产生影响。这就意味着边缘AI的未来值得关注一下。 什么是边缘AI&#xff1f;边缘AI就是将人工智能处理功能带到了…

怎么找矩阵系统,怎么源码搭建,源头技术开发需要哪些支持

一、引言 在进行矩阵系统源码搭建时&#xff0c;选择合适的工具至关重要。正确的工具选择不仅可以提高开发效率&#xff0c;还能确保系统的稳定性、可扩展性和性能。本文将探讨在矩阵系统源码搭建过程中如何选择合适的工具。 二、前端开发工具选择 前端框架 React&#xff1a;由…

LLM大模型怎样进行数据和质量测试

大型语言模型&#xff08;LLMs&#xff09;的四种测试策略 测试机团队需要一套针对LLM的测试策略。在为嵌入在AI agent应用中的LLMs大模型制定测试策略时&#xff0c;可以考虑以下四点实践方法&#xff1a; 1&#xff09;创建测试数据以扩展软件质量保证 2&#xff09…

C 盘又满了?试试我用的这个方法吧,轻松腾出几十个G,还有好用的工具推荐哟!

如题&#xff0c;作为具有洁癖的程序猿&#xff0c;作为具有容量焦虑症的程序猿&#xff0c;我总是希望C盘保持轻巧状态&#xff08;看来还是Mac比较省心&#xff09;&#xff0c;奈何我给了它200G的存储&#xff0c;安装的应用都保存到了D盘&#xff0c;可它还是蹭蹭飙升&…

第一个Flutter应用解析(一)

1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范&#xff0c;其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码&#xff08;为了阅…

搭建企业私有云

A公司为国内知名大型瓶装饮料合资企业。2019年以前业务系统部署于IBM 的Unix小型机&#xff0c;该机型在IBM结束支持后&#xff0c;一直购买专业公司运维服务。Unix系统软件和运维成本相较Linux X86平台要高很多&#xff0c;不能满足应用轻量化和快速叠代的需求。公司原有的基础…