熵值法解析-附R代码
熵的概念源于热力学,是对系统状态不确定性的一种度量。在信息论中,信息是系统有序程度的一种度量,而熵是系统无序程度的一种度量,两者绝对值相等,但符号相反。根据此性质可利用评价中各方案的固有信息,通过熵值法得到各个指标信息熵,熵值越小-无序程度越低-指标权重越小
熵是不确定性的度量(可用于判断一个事件的随机性+无序程度),如果用表示第j个信息的不确定性程度,则整个信息(设有n个)的不确定性度量可以用下式表示
#归一化之最大最小化处理
min.max.norm<-function(x){
(x-min(x))/(max(x)-min(x))
}
max.min.norm<-function(x){
(max(x)-x)/(max(x)-min(x))
}
sourui_1<-apply(sourui[,-c(7,11)],2,min.max.norm) #正向指标
sourui_2<-apply(sourui[,c(7,11)],2,max.min.norm) #负向指标
sourui_t<-cbind(sourui_1,sourui_2)
#所有方案对指标Xi的贡献度
first1 <- function(data)
{
x <- c(data)
for(i in 1:length(data))
x[i] = data[i]/sum(data)
return(x)
}
dataframe <- apply(sourui_t,2,first1)
#计算信息熵
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(dataframe,2,first2)
k<-1/log(length(dataframe1[,1]))
d<--k * colSums(dataframe1)
#计算冗余度
d=1-d
#计算各指标权重
w=d/sum(d)