index construction wirh entropy method(用熵值法研究指标构建)
熵值法是什么:核心思路就是判断各个指标在所有指标中的地位
1.dataframe(构造一个简单的指标体系的数据集)
we simply select several indicators:
简单地选择几个指标:卫生、文化、交通、教育、饮食、环境6个,如下:
1 2 3 4 5 6 7 8
| indi_health<- runif(50, 10, 50) indi_culture<- runif(50,1,16.2) indi_jiaotong<- runif(50,100,200) indi_edu<-runif(50, 10, 50) indi_mm<-runif(50, 10, 50) indi_environ<-runif(50, 10, 50)
|
1 2 3 4 5 6 7 8 9
| df_public1<-data.frame( indi_culture, indi_edu, indi_health, indi_jiaotong, indi_mm, indi_environ )
|
2.处理数据:min_max或者z_score方法
这里我们选择大多数论文中选择的min_max方法
设置处理数据的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13
| min.max.norm <- function(x){ (x-min(x))/(max(x)-min(x)) }
max.min.norm <- function(x){ (max(x)-x)/(max(x)-min(x)) }
scaledata_z <- apply(df_public1[,-c(2,4)],2,min.max.norm) scaledata_f <- apply(df_public1[,c(2,4)],2,max.min.norm) public_1 <- cbind(scaledata_z,scaledata_f)
|
3.进入熵值法的函数构建
首先,我们的目的是:得到各指标的权重,从而计算各地区的指标综合得分权重:wj=∑j=1mgjgj计算得分:si=100×(w1pi1+w2pi2+…)变异系数:gj=1−ej熵值:ej=−ki=1∑npijln(pij),k=1/ln(n)
(1)计算指标比重Pij
1 2 3 4 5 6 7 8 9
| first1 <- function(data) { x <- c(data) for(i in 1:length(data)) x[i] = data[i]/sum(data[]) return(x) } df_pij <- apply(public_1,2,first1)
|
(2) 计算熵值ej
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| first2 <- function(data) { x <- c(data) for(i in 1:length(data)){ if(data[i] == 0){ x[i] = 0 }else{ x[i] = data[i] * log(data[i]) } } return(x) } dataframe1 <- apply(df_pij,2,first2)
k <- 1/log(length(dataframe1[,1])) e_j1<- -k * colSums(dataframe1) e_j1
|
(3) 计算差异系数gj
此时我们可以明显地看出数值上的不同!!!
(4) 计算指标权重wj
(5) 计算最后各地区的得分si
1 2 3 4 5
| mat3 <- as.matrix(df_pij) mat4<- as.matrix(w_j) si1<-mat3 %*% mat4*100 si1
|