最近看了信息熵的相关知识,考虑用信息熵来计算互信息和条件互信息。
MI(X,Y)=H(X)-H(X|Y)
H(X):熵,一种不确定性的度量 H(X,Y):联合熵,两个元素同时发生的不确定度
MI(X,Y)即是信息增益:
H(X,Y)=H(X)+H(Y|X)->H(X|Y)=H(X,Y)-H(Y)
则MI(X,Y)=H(X)+H(Y)-H(X,Y)
MI(X1,X2|Y)=H(X1|Y)-H(X1|X2,Y)=H(X1,Y)-H(Y)-(H(X1,X2,Y)-H(X2,Y)) =H(X1,Y)+H(X2,Y)-H(Y)-H(X1,X2,Y)
正好在R语言当中有直接计算信息熵的包,代码如下:
library(infotheo)
data<-read.csv("test.csv",header = F)
mi<-function(mylist1,mylist2){
return(entropy(mylist1)+entropy(mylist2)-entropy(cbind(mylist1,mylist2)))
pvalue<-mi(data[,1],data[,2])#测试
#条件互信息
cmi<-function(mylist1,mylist2,mylist3){
return(entropy(cbind(mylist1,mylist3))+entropy(cbind(mylist2,mylist3))-entropy(mylist3)-entropy(cbind(mylist1,mylist2,mylist3)))
pvalue1<-cmi(data[,5],data[,13],data[,c(7,8)])
setwd("C:\\Users\\Administrator\\Desktop\\MI_cntry 3")
par(mfrow = c(2, 2), mar = c(4, 4, 1, 1)) ###图形分栏布局
#---------------------------------------------------------GDP
data1 <- read.csv("GDP.csv")
str(data1)
zdata1<- t(data1)
mdata1 <- zdata1[-c(1,2),]
m=seq(from = 2001, to = 2015, by=1) ## 先生成等差数列的刻度,间距为2.5
x1=seq(from =1, to = 15, by=3)
x2=seq(from = 2001, to = 2015, by=3)
plot(mdata1[,1],type='l',main="CHN",xlab="",ylab="GDP",xaxt="n")
axis(side=1,at=x1,labels=x2)
#mtext("*10^13",adj=0,font=0.0001,font.axis=6)
#----------------------------------------------------------NP
data2 <- read.csv("NP.csv")
str(data2)
zdata2<- t(data2)
mdata2 <- zdata2[-c(1,2),]
m=seq(from = 2001, to = 2015, by=1) ## 先生成等差数列的刻度,间距为2.5
x1=seq(from =1, to = 15, by=3)
x2=seq(from = 2001, to = 2015, by=3)
plot(mdata2[,1],type='l',main="CHN",xlab="",ylab="NP",xaxt="n")
axis(side=1,at=x1,labels=x2)
#mtext("*10^13",adj=0,font=0.0001,font.axis=6)
#----------------------------------------------------------U
data3 <- read.csv("U.csv")
str(data3)
zdata3<- t(data3)
mdata3 <- zdata3[-c(1,2),]
m=seq(from = 2001, to = 2015, by=1) ## 先生成等差数列的刻度,间距为2.5
x1=seq(from =1, to = 15, by=3)
x2=seq(from = 2001, to = 2015, by=3)
plot(mdata3[,1],type='l',main="CHN",xlab="",ylab="U",xaxt="n")
axis(side=1,at=x1,labels=x2)
#mtext("*10^13",adj=0,font=0.0001,font.axis=6)
#----------------------------------------------------------
############互信息值计算
#install.packages("infotheo")
library(infotheo)
#条件互信息
cmi<-function(mylist1,mylist2,mylist3){
return(entropy(cbind(mylist1,mylist3))+entropy(cbind(mylist2,mylist3))-entropy(mylist3)-entropy(cbind(mylist1,mylist2,mylist3)))
#pvalue1<-cmi(mdata1[,1],mdata2[,1],mdata3[,1])
#plot(pvalue1)
#互信息参考网站:https://www.cnblogs.com/jiangyaling/p/8040024.html
mi<-function(mylist1,mylist2){
return(entropy(mylist1)+entropy(mylist2)-entropy(cbind(mylist1,mylist2)))
pvalue01<-mi(mdata1[,2],mdata2[,2])#测试
pvalue02<-mi(mdata2[,2],mdata3[,2])#测试
plot(pvalue01,ylin=c(2,3),yaxt="n",ylab="",pch=3)
par(new=TRUE)
plot(pvalue02,ylim=c(2,3),pch=6)
作者:张丹,R语言中文社区专栏特邀作者,《R的极客理想》系列图书作者,民生银行大数据中心数据分析师,前况客创始人兼CTO。个人博客 http://fens.me, Ale...
1 data<-read.csv("E:\\qq\\alarm_data\\Alarm1_s500_v1.csv",header = F)
2 #-----------------------------------------------------------------------------
3 #函数作用:返...
H(X,Y)=−∑y∈Y∑x∈Xp(x,y)logp(x,y)H(X,Y)=-\displaystyle\sum_{y\in Y}\displaystyle\sum_{x\in X}p(x,y)logp(x,y)H(X,Y)=−y∈Y∑x∈X∑p(x,y)logp(x,y)
条件熵:(记住结论,无须推导)
条件熵为联合熵减去边缘熵,X发生的条件下,Y发生的这件事带来的信息熵。
H(Y∣X)=H(X,Y)−H(X)H(Y|X)=H(X,Y)-H(X)H(Y∣X)=H
熵值法是一种用于多指标评价的定量方法,广泛应用于综合评价、质量管理和决策分析等领域。其基本思路是通过计算各指标的信息熵来确定各指标的权重,进而计算出综合得分。熵值法是一种用于综合评价的多指标评价方法,以下是使用R语言实现熵值法分析的步骤和示例。
之前自己用R写的互信息和条件互信息代码,虽然结果是正确的,但是时间复杂度太高。
最近看了信息熵的相关知识,考虑用信息熵来计算互信息和条件互信息。
MI(X,Y)=H(X)-H(X|Y)
H(X):熵,一种不确定性的度量 H(X,Y):联合熵,两个元素同时发生的不确定度
MI(X,Y)即是信息增益,信息增益相关知识可以参考前一篇博客。
H(X,Y)=H(X)+H(Y|X)->H...