计算R中的互信息

时间:2014-09-11 15:02:45

标签: r entropy information-theory

我在解释熵包中mi.plugin()(或mi.empirical())函数的结果时遇到问题。据我所知,MI = 0告诉您,您要比较的两个变量是完全独立的;随着MI的增加,两个变量之间的关联越来越不随机。

为什么在R中运行以下内容(使用{entropy}包)时,我得到的值为0:

mi.plugin( rbind( c(1, 2, 3), c(1, 2, 3) ) )

当我比较两个完全相同的向量时?

我认为我的困惑是基于我的理论误解,有人可以告诉我哪里出错了吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

使用包infotheo中的mutinformation(x,y)

> mutinformation(c(1, 2, 3), c(1, 2, 3) ) 
[1] 1.098612

> mutinformation(seq(1:5),seq(1:5))
[1] 1.609438

和规范化的互信息将为1。

答案 1 :(得分:2)

mi.plugin函数适用于两个随机变量的联合频率矩阵。联合频率矩阵表示X和Y获得x和y的特定结果的次数。 在您的示例中,您希望X有3种可能的结果 - x = 1,x = 2,x = 3,Y也应该有3种可能的结果,y = 1,y = 2,y = 3。 让我们通过您的示例计算联合频率矩阵:

> X=c(1, 2, 3)
> Y=c(1, 2, 3)
> freqs=matrix(sapply(seq(max(X)*max(Y)), function(x) length(which(((X-1)*max(Y)+Y)==x))),ncol=max(X))
> freqs
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

该矩阵显示X = x和Y = y的出现次数。例如,有一个观察结果,其中X = 1且Y = 1。有0个观测值,其中X = 2且Y = 1。 您现在可以使用mi.plugin函数:

> mi.plugin(freqs)
[1] 1.098612