9

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

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

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

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

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

提前致谢。

4

2 回答 2

7

mutinformation(x,y)从包 infotheo使用。

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

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

归一化互信息为 1。

于 2016-07-15T19:12:21.487 回答
3

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
于 2017-03-26T10:42:35.813 回答