熵值法测算面板数据的影响因素权重,怎么计算?是全部扔进去还是分省份分年份?

结论

计算的权重略有区别,个别可能比较大;计算的综合指标差异不大,但趋势一致。
反思:如果嫌麻烦,那就全扔进去。因为面板的个体差异和时间差异,如果很看重权重,那还是分开计算好。

最后,模拟数据,结论仅供参考

当你使用熵值法来测算面板数据的影响因素权重,你面临的主要决策之一是是否应该将数据按省份或年份分组来进行分析,或者是将所有数据作为一个整体来分析。这个决定取决于你的研究目标以及数据本身的性质。以下是一些指导原则和步骤,帮助你决定如何操作,并说明了如何计算权重。

决定是否分组

  • 研究目标为整体趋势分析:如果你的目标是理解整体趋势,比如整个国家不同因素随时间的影响权重变化,那么可以将所有数据一起分析,不进行分组。这样可以得到一个全国范围内各影响因素的综合权重。

  • 研究目标为区域或时间细分析:如果你关注的是不同省份之间或不同时间段内的差异,分组分析将更有意义。按省份分组可以帮助你理解不同地区之间的差异;按年份分组则可以揭示时间序列上的变化趋势。

模拟数据实验

不同方式计算的权重

import numpy as np
import pandas as pd# 步骤 1: 生成模拟数据
np.random.seed(0)  # 确保生成的数据是可复现的
data = {'Province': np.repeat(['A', 'B', 'C'], 4),  # 省份'Year': np.tile([2020, 2021, 2022, 2023], 3),  # 年份'X1': np.random.rand(12),  # 影响因素1'X2': np.random.rand(12),  # 影响因素2'X3': np.random.rand(12)   # 影响因素3
}
df = pd.DataFrame(data)# 计算熵值法权重的函数
def entropy_weight(data):# 数据标准化data_normalized = data / data.sum()# 计算熵值epsilon = 1e-12  # 避免对0取对数data_entropy = -np.sum(data_normalized * np.log(data_normalized + epsilon), axis=0) / np.log(len(data))# 计算权重weights = (1 - data_entropy) / (1 - data_entropy).sum()return weights# 步骤 2A: 不分组直接计算权重
weights_all = entropy_weight(df[['X1', 'X2', 'X3']])# 步骤 2B: 按省份分组计算权重
weights_by_province = df.groupby('Province')[['X1', 'X2', 'X3']].apply(entropy_weight)# 输出结果
print("全数据权重:\n", weights_all)
print("\n按省份分组计算的权重:\n", weights_by_province)
print("\n按省份分组计算的权重平均值:\n", weights_by_province.mean())

全数据权重:X1    0.084956
X2    0.477880
X3    0.437164
dtype: float64按省份分组计算的权重:X1        X2        X3
Province                              
A         0.008879  0.567479  0.423642
B         0.131374  0.677755  0.190871
C         0.173210  0.096664  0.730126按省份分组计算的权重平均值:X1    0.104487
X2    0.447300
X3    0.448213
dtype: float64

不同方式计算的综合指标

# 继续使用之前的df# 标准化函数
def normalize_data(data):return (data - data.min()) / (data.max() - data.min())# 应用标准化
df_normalized = df[['X1', 'X2', 'X3']].apply(normalize_data)# 使用全数据权重计算综合指标
composite_score_all = df_normalized.mul(weights_all, axis=1).sum(axis=1)# 将综合指标添加到df
df['Composite_Score_All'] = composite_score_all# 使用按省份分组的权重计算综合指标
# 注意,由于每个省份的权重可能不同,我们需要对每个省份单独计算
for province in df['Province'].unique():province_weights = weights_by_province.loc[province]province_data = df[df['Province'] == province][['X1', 'X2', 'X3']].apply(normalize_data)df.loc[df['Province'] == province, 'Composite_Score_By_Province'] = province_data.mul(province_weights, axis=1).sum(axis=1)# 查看结果
print(df[['Province', 'Year', 'Composite_Score_All', 'Composite_Score_By_Province']])
 Province  Year  Composite_Score_All  Composite_Score_By_Province
0         A  2020             0.344345                     0.330248
1         A  2021             0.793291                     0.843774
2         A  2022             0.116266                     0.015874
3         A  2023             0.494165                     0.434329
4         B  2020             0.243413                     0.096354
5         B  2021             0.630426                     0.766517
6         B  2022             0.501895                     0.608406
7         B  2023             0.854848                     1.000000
8         C  2020             0.769341                     0.803114
9         C  2021             0.647918                     0.733258
10        C  2022             0.279804                     0.121882
11        C  2023             0.683157                     0.833184

画图展示

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 生成模拟数据
np.random.seed(0)  # 确保生成的数据是可复现的
data = {'Province': np.repeat(['A', 'B', 'C'], 4),  # 省份'Year': np.tile([2020, 2021, 2022, 2023], 3),  # 年份'X1': np.random.rand(12),  # 影响因素1'X2': np.random.rand(12),  # 影响因素2'X3': np.random.rand(12)   # 影响因素3
}
df = pd.DataFrame(data)# 计算熵值法权重的函数
def entropy_weight(data):# 数据标准化data_normalized = data / data.sum()# 计算熵值epsilon = 1e-12  # 避免对0取对数data_entropy = -np.sum(data_normalized * np.log(data_normalized + epsilon), axis=0) / np.log(len(data))# 计算权重weights = (1 - data_entropy) / (1 - data_entropy).sum()return weights# 标准化函数
def normalize_data(data):return (data - data.min()) / (data.max() - data.min())# 计算权重
weights_all = entropy_weight(df[['X1', 'X2', 'X3']])
weights_by_province = df.groupby('Province')[['X1', 'X2', 'X3']].apply(entropy_weight)# 应用标准化
df_normalized = df[['X1', 'X2', 'X3']].apply(normalize_data)# 使用全数据权重计算综合指标
composite_score_all = df_normalized.mul(weights_all, axis=1).sum(axis=1)
df['Composite_Score_All'] = composite_score_all# 使用按省份分组的权重计算综合指标
for province in df['Province'].unique():province_weights = weights_by_province.loc[province]province_data = df[df['Province'] == province][['X1', 'X2', 'X3']].apply(normalize_data)df.loc[df['Province'] == province, 'Composite_Score_By_Province'] = province_data.mul(province_weights, axis=1).sum(axis=1)# 绘制图形
plt.figure(figsize=(10, 6))for province in df['Province'].unique():province_data = df[df['Province'] == province]plt.plot(province_data['Year'], province_data['Composite_Score_All'], label=f'All - {province}', linestyle='-', marker='o', color='black')plt.plot(province_data['Year'], province_data['Composite_Score_By_Province'], label=f'By Province - {province}', linestyle='--', marker='x', color='grey')plt.title('Composite Score Comparison')
plt.xlabel('Year')
plt.ylabel('Composite Score')
plt.legend()
plt.grid(True, which='both', linestyle='--', linewidth=0.5, color='grey')
plt.tight_layout()
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA打开项目文件目录不见了

偶尔发生新拉下来的代码,或者旧代码修改了包名,项目名称等,idea左侧project一栏不显示代码的文件目录。例如下面此时不要慌张,不用删除项目重新拉取,通过以下方式解决: 本人尝试能够解决,如果无…

Javaweb之Maven高级之聚合的详细解析

2.2 聚合 分模块设计与开发之后啊,我们的项目被拆分为多个模块,而模块之间的关系,可能错综复杂。 那就比如我们当前的案例项目,结构如下(相对还是比较简单的): 此时,tlias-web-mana…

Long-term Correlation Tracking LCT 目标跟踪算法源码运行

资源 LCT-tracker项目地址VLFeat官网OpenCV下载地址OTB50数据集百度网盘资源 参考博客 一步一步教你跑lct-tracker(Win10Matlab 2016bVisual Studio 2015)LCT代码跑起来先文章思路总结 正文 1. 环境配置 我的环境:Win11、Visual Studio…

编译支持国密的抓包工具 WireShark

目录 前言WireShark支持国密的 WireShark小结前言 在上一篇文章支持国密的 Web 服务器中,我们搭建了支持国密的 Web 服务器,但是,我们使用 360 安全浏览器去访问,却出现了错误: 是我们的 Web 服务器没有配置好?在这里插入图片描述还是 360 安全浏览器不支持国密?还是两…

【三两波折】指向函数的指针

函数占用内存,在虚拟内存中属于txt段(只读),函数也是有地址的。 函数指针的定义: (返回值类型)(*函数指针名)(参数列表) 当我们调用Proc函数时,一般写作: double ans Proc(6, 7.8f); 实际上是C…

C中的流程控制

顺序结构 自上而下逐条执行 选择结构 if if(条件){执行语句1}else{执行语句2} if(条件){执行语句1}else if{执行语句2}else{执行语句2} switch 根据条件直接跳转到位置处 格式 switch(表达式) { case 目标值1: 执行语句1 break;…

Text Field文本输入框

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Text Field文本输入框 一、最基本的本文输入框1、基础示例2、一些表单属性3、验证 二、多行文本 一、最基本的本文输入框 1、基础示例 import {Box, TextField} from "…

磁盘无法访问?别慌,这里有解决之道!

电脑中,那块储存着重要文件与数据的磁盘,突然之间无法访问,是不是让你感到惊慌失措?面对这样的突发状况,很多人可能会感到手足无措。但别担心,本文将为你解析磁盘无法访问的原因,并提供实用的数…

Address already in dse_JVM_Bind。端口莫名被占用【占用8080端口!!!】

文章目录 问题描述:Address already in dse:JVM_Bind问题可能的原因解决方案 问题描述:Address already in dse:JVM_Bind 问题可能的原因 当前端口已经有别的程序在占用着 我曾经被QQ占用过8080端口,Oracle启动了OracleHttp服务会占用8080端…

数学建模-敏感度分析(美赛)

从多个不确定性因素中逐一找出对投资项目经济效益指标有重要影响的敏感性因素,并分析、测算其对项目经济效益指标的影响程度和敏感性程度,进而判断项目承受风险的能力。若某参数的小幅度变化能导致经济效益指标的较大变化,则称此参数为敏感性…

Ps:清理

清理 Purge命令位于“编辑”菜单下,它主要用于释放 Photoshop 使用的内存资源,有助于提高系统的性能。 通过使用“清理”命令,用户可以有效管理 Photoshop 的资源使用,特别是在处理大型文件或进行长时间编辑会话时。 定期清理可以…

windows10+cpu+pycharm跑yolov5

1、安装anaconda和pycharm,安装方法参考: anaconda和pycharm安装(windows10 )-CSDN博客 2、创建yolov5环境,打开Anaconda Prompt命令打开cmd命令行窗口,如下所示: 输入:conda crea…