Расчет взаимной информации в R

У меня проблемы с интерпретацией результатов mi.plugin() (или же mi.empirical()) функция из пакета энтропии. Насколько я понимаю, MI=0 говорит вам, что две переменные, которые вы сравниваете, полностью независимы; и когда MI увеличивается, связь между этими двумя переменными становится все более неслучайной.

Почему же тогда я получаю значение 0 при выполнении следующего в R (используя {entropy} упаковка):

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

когда я сравниваю два одинаковых вектора?

Я предполагаю, что мое замешательство основано на теоретическом недоразумении с моей стороны, может кто-нибудь сказать мне, где я ошибся?

Заранее спасибо.

2 ответа

Использование 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.

Функция 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
Другие вопросы по тегам