我在解释熵包中mi.plugin()
(或mi.empirical()
)函数的结果时遇到问题。据我所知,MI = 0告诉您,您要比较的两个变量是完全独立的;随着MI的增加,两个变量之间的关联越来越不随机。
为什么在R中运行以下内容(使用{entropy}
包)时,我得到的值为0:
mi.plugin( rbind( c(1, 2, 3), c(1, 2, 3) ) )
当我比较两个完全相同的向量时?
我认为我的困惑是基于我的理论误解,有人可以告诉我哪里出错了吗?
提前致谢。
答案 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