【统计方法】基于熵值法的面板数据指标权重计算

面板数据熵值法

  本文主要是讲解熵值法的处理过程和代码实现。
  建立指标体系和指标评价时有可能用到熵值法(熵权法),但以往的经验来看,熵值法常用于时序数据或者是截面数据。实际上,熵值法在面板数据的应用也是十分常见,但很多时候在数据的处理上各种论文的做法有所不同。本文提供一种常用的面板数据熵值法,给大家提供参考。

一、原始数据设定

  • 假设数据为d个年度(year)m个省份(prov)的n个指标。
  • 显然数据是(d, m, n)三维数组,但.csv存储数据一般是二维表,因此实际取得的数据是(d*m, n)的二维数组
  • X θ i j X_{\theta i j} Xθij 表示第 θ \theta θ 年省份 i i i 的第 j j j 个指标值。

二、数据标准化

  • 这里采用的是极差标准化,注意这里的最值取的是某一指标下所有年度所有省份的最值。

  • 正向指标和负向指标采用的方法有所不同:
    X θ i j ′ = { X θ i j − min ⁡ ( X θ i j ) max ⁡ ( X θ i j ) − min ⁡ ( X θ i j ) 第 j 个指标为正向指标 max ⁡ ( X θ i j ) − X θ i j max ⁡ ( X θ i j ) − min ⁡ ( X θ i j ) 第 j 个指标为负向指标 X'_{\theta i j} = \left\{\begin{matrix} \frac{X_{\theta i j} - \min(X_{\theta i j})} {\max(X_{\theta i j}) - \min(X_{\theta i j})} & 第j个指标为正向指标 \\ \frac{\max(X_{\theta i j}) - X_{\theta i j}} {\max(X_{\theta i j}) - \min(X_{\theta i j})} & 第j个指标为负向指标 \end{matrix}\right. Xθij={max(Xθij)min(Xθij)Xθijmin(Xθij)max(Xθij)min(Xθij)max(Xθij)Xθijj个指标为正向指标j个指标为负向指标

  • 注意:极差标准化后会生成0的数据,需要对此作数据平移。

  • 这里计算得到的 X ′ = [ X θ i j ] ( d × m ) × n X' = [X_{\theta i j}]_{(d \times m) \times n} X=[Xθij](d×m)×n 是一个二维数组。

三、几率(比重)计算

  • 这里计算的是第 θ \theta θ 年省份 i i i 的第 j j j 个指标值在第 j j j 个指标下的占比。
    P θ i j = X θ i j ′ ∑ θ = 1 d ∑ i = 1 m X θ i j ′ P_{\theta i j} = \frac{X'_{\theta i j}} {\sum\limits_{\theta=1}^{d}\sum\limits_{i=1}^{m}X'_{\theta i j}} Pθij=θ=1di=1mXθijXθij

  • 这里计算得到的 P = [ P θ i j ] ( d × m ) × n P = [P_{\theta i j}]_{(d \times m) \times n} P=[Pθij](d×m)×n 是一个二维数组。

四、信息熵计算

  • 计算第 j j j 个指标对应的信息熵
    E j = − 1 ln ⁡ ( d m ) ∑ θ = 1 d ∑ i = 1 m [ P θ i j ⋅ ln ⁡ ( P θ i j ) ] E_j = - \frac{1}{\ln(dm)} \sum\limits_{\theta = 1}^{d}\sum\limits_{i = 1}^{m} [P_{\theta i j}\cdot \ln(P_{\theta i j})] Ej=ln(dm)1θ=1di=1m[Pθijln(Pθij)]

  • 这里计算得到的 E = [ E j ] n × 1 E = [E_j]_{n \times 1} E=[Ej]n×1 是一个二维数组。

五、权重计算

  • 计算第 j j j 项指标的差异系数
    G j = 1 − E j G_j = 1 - E_j Gj=1Ej

  • 计算第 j j j 项指标的权重
    W j = G j ∑ j = 1 n G j W_j = \frac{G_j}{\sum\limits_{j=1}^{n}G_j} Wj=j=1nGjGj

  • 这里计算得到的 W = [ W j ] n × 1 W = [W_j]_{n \times 1} W=[Wj]n×1 是一个二维数组。

六、综合得分计算

  • 计算第 θ \theta θ 年第 i i i 个省的综合得分
    Z θ i = ∑ j = 1 n ( W j ⋅ X θ i j ′ ) Z = X ′ ⋅ W \begin{aligned} Z_{\theta i} &= \sum\limits_{j = 1}^{n} (W_j \cdot X'_{\theta i j}) \\ Z &= X' \cdot W \end{aligned} ZθiZ=j=1n(WjXθij)=XW

  • 这里最终计算得到的 Z = [ Z θ i ] ( d × m ) × 1 Z = [Z_{\theta i}]_{(d \times m) \times 1} Z=[Zθi](d×m)×1 是同样是一个二维数组。

七、Python代码实现(更新于2021.12.19)

  • 下面的代码输出的结果包括:标准化后的数据,指标权重和得分。如果后续想要用Topsis法,可以直接使用标准化后的数据进行下一轮计算。
  • 代码中是基于上面原始数据的假定设定的,代码内容修改需要看具体的数据情况。
  • 注:2021年12月19日对“极差标准化”部分作了修改,原代码存在错误,造成数据异常变动。
import pandas as pd
import numpy as np


# 熵值法
def entropy_method(data_, features_, m_, d_, ne_features_=None, zero_offset=1e-6):
    """
    data_:DataFrame类型,数据集(需要包含年份year)
    features_:List类型,变量名列表
    ne_features_:List类型,负向指标变量名列表
    m_:int类型,省份数量
    d_: int类型,年份数量
    zero_offset: float类型, 最小值平移数
    """
    # 极差标准化
    normal_data_ = data_.copy()
    for feature_ in features_:
        # 该部分是固定某指标下的最值,用于标准化处理(2021.12.19)
        normal_data_min = min(normal_data_.loc[:, feature_])
        normal_data_max = max(normal_data_.loc[:, feature_])
        for year_ in normal_data_['year'].unique():
            # 原代码中该部分存在错误,标准化时发生变动,数据不具有可比性
            # normal_data_min = min(normal_data_.loc[:, feature_])
            # normal_data_max = max(normal_data_.loc[:, feature_])
            if ne_features_ and feature_ in ne_features_:
                temp = normal_data_max - normal_data_.loc[normal_data_['year'] == year_, feature_]
            else:
                temp = normal_data_.loc[normal_data_['year'] == year_, feature_] - normal_data_min
            temp = temp / (normal_data_max - normal_data_min)
            normal_data_.loc[normal_data_['year'] == year_, feature_] = temp

    # 最小值平移处理
    for feature_ in features_:
        normal_data_.loc[normal_data_[feature_] == 0, feature_] = zero_offset

    # 计算指标比重
    pro_data_ = normal_data_.copy()
    for feature_ in features_:
        index_ = pro_data_.loc[:, feature_] / sum(pro_data_.loc[:, feature_])
        pro_data_.loc[:, feature_] = index_

    # 计算信息熵
    entropy_ = np.arange(len(features_)).astype(float)  # 注意初始化需要设定为浮点型
    for ind_, feature_ in enumerate(features_):
        entropy_[ind_] = (- 1 / np.log(m_ * d_)) * sum(pro_data_[feature_] * np.log(pro_data_[feature_]))

    # 权重计算
    g_ = 1 - entropy_  # 计算变异系数
    w_ = g_ / sum(g_)  # 计算权重

    # 综合得分计算
    score_ = np.dot(normal_data_.loc[:, features_], w_)

    # 汇总信息输出
    res_ = dict()
    res_['normal_data'] = normal_data_
    res_['weight'] = pd.DataFrame(data=w_, index=features_)
    res_['score'] = pd.DataFrame(data=score_)

    return res_

参考资料

[1]王晓红,李雅欣.数字经济对经济高质量发展的影响研究——基于2013-2018年省级面板数据[J].经济视角,2021,40(01):44-53.
[2]贺健,张红梅.数字普惠金融对经济高质量发展的地区差异影响研究——基于系统GMM及门槛效应的检验[J].金融理论与实践,2020(07):26-32.

  • 22
    点赞
  • 202
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
面板数据熵值法是一种用于综合评价多指标数据的方法,可以帮助决策者从多个指标中选择最优方案。以下是使用Excel进行面板数据熵值法计算的步骤: 1. 收集并整理数据:将所有待评价的指标数据收集到Excel表格中,并确保每一列对应一个指标,每一行对应一个评价对象。 2. 计算权重:根据各个指标对于决策的相对重要性,为每个指标计算权重。可以使用主成分分析、层次分析法等方法来确定指标权重。 3. 数据标准化:对于每个指标,需将原始数据进行标准化处理,以确保不同指标间的单位差异对结果的影响。 4. 计算熵值:根据标准化后的数据,计算各个指标的熵值。熵值表示指标数据的离散程度,可以用于衡量该指标的信息量。 5. 计算权重和熵值的乘积:将每个指标的熵值与其权重相乘,得到每个指标的带权熵值。 6. 计算正向指标的熵权值:对于正向指标,需要将其带权熵值除以所有正向指标的带权熵值之和,得到正向指标的熵权值。 7. 计算负向指标的熵权值:对于负向指标,需要将其带权熵值除以所有负向指标的带权熵值之和,并取倒数,得到负向指标的熵权值。 8. 计算综合得分:根据正向指标的熵权值和负向指标的熵权值,计算每个评价对象的综合得分。可以将正向指标的熵权值与其对应的标准化数据相乘,再将负向指标的熵权值与其对应的标准化数据相乘,最后相加求和。 9. 对综合得分进行排序:将每个评价对象的综合得分进行排序,得到最优解。 以上是使用Excel进行面板数据熵值法计算的主要步骤,通过这个方法可以快速、客观地评价多个指标下的不同对象,帮助决策者做出相对较优的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值