Расчет взаимной информации в 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