GIS之时空数据分析

Python 基尼系数 属性值为负值(二)

2020-07-01  本文已影响0人  王叽叽的小心情

上一篇中提到针对升序排序的正值的列表如何计算基尼系数,但是实际应用中会遇到属性值为负值的情况,同时还有加权的情况(上一篇中的代码可以设置权重)。

查找了一下,发现R中有一个对此进行改进的包GiniWegNeg(Computing the Gini-Based Coefficients for Weighted and Negative Attributes),该包主要有两个函数,一个是Gini_CTR_BS(),该函数是基于Chen, Tasur and Rhai (1982)文章的方法, 并进一步被Berebbei and Silber (1985)改进。另一个函数Gini_RSV,该函数是由该R包的作者(Emanuela Raffinetti emanuela.raffinetti@unimi.it)提出,他在2015年的时候提出了另外一种计算方法(负值和正值的总和分别设置为1等,具体可以看原文章)。

  1. 安装GiniWegNeg包
    在R中需要安装,可以查看具体的函数
install.packages("GiniWegNeg")
library(GiniWegNeg)
help(GiniWegNeg)

说明文档:Package ‘GiniWegNeg’说明文档

  1. 使用方法
    以中国的经济复杂度和多样性指标为例,进行计算,其中经济复杂度指标存在正值和负值,多样性指标在(0,1)之间,不存在负值情况,因此可以作为衡量两个函数Gini_CTR_BS和Gini_RSV的计算结果的基准。
#加载所需的包
library(GiniWegNeg)
library(data.table)

#设置当前工作路径
setwd("E:\\China Economics\\1 Economic complexity and diversity\\Code\\")

#读取经复杂度文件
df <- read.csv("E:\\China Economics\\Data\\Statistics\\year_ECI_city_size.csv", header=TRUE, sep=',')

#计算经济复杂度的基尼系数
gini_ECI_CTR_BS <- list()
gini_ECI_RSV <- list()

for(i in 0:15){
  field = paste('X', 2000+i,sep = "", collapse = "")
  gini_ECI_CTR_BS[i+1] <- Gini_CTR_BS(df[field])
  gini_ECI_RSV[i+1] <- Gini_RSV(df[field])
}

# 计算经济多样性
#读取经济多样性文件
df2 <- read.csv("E:\\China Economics\\1 Economic complexity and diversity\\Data\\year_diversity_norm3_del_marco_and_sansha.csv", 
                header=TRUE, sep=',')

#计算基尼系数
gini_divers_CTR_BS <- list()
gini_divers_RSV <- list()

for(i in 0:15){
  field = paste('X', 2000+i, sep = "", collapse = "")
  gini_divers_CTR_BS[i+1] <- Gini_CTR_BS(df2[field])
  gini_divers_RSV[i+1] <- Gini_RSV(df2[field])
}

接下来查看下两个函数计算的结果,对于属性全为正值的数据,计算结果是一样的,懒得画图了,截个图,


经济多样性的基尼系数,两个函数结果一致

但是对于存在负值的属性,两个函数的结果就不一样了,且趋势也不一致,一个增加,一个减少


经济复杂度计的基尼系数,结果不一致
  1. 再生问题
    所以针对存在负值的属性,两个函数计算结果不一致,这不得让人纠结应该如何选择,同时更进一步思考,基尼系数对于人为构造的已进行归一化的变量是否实用,继续做点调研,回去看看它提出的初衷,再回来看看。
上一篇下一篇

猜你喜欢

热点阅读