You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中计算连续矩阵数据的互信息(替代Spearman相关)

生成互信息矩阵替代Spearman相关矩阵

要生成和Spearman相关矩阵格式一致的互信息矩阵,需要注意连续变量计算互信息需先离散化(互信息默认基于离散变量的概率分布),以下是几种R语言实现方案:

方案1:使用infotheo包计算互信息

  1. 安装并加载包:
install.packages("infotheo")
library(infotheo)
  1. 处理数据并生成互信息矩阵:
# 转置数据,和原Spearman计算的输入结构保持一致(变量为行,样本为列)
data_t <- t(mydata)

# 对连续变量离散化(等宽分箱,可调整分箱数nbins)
data_discrete <- discretize(data_t, disc = "equalwidth", nbins = 5)

# 生成21×21的互信息矩阵
MiMatrix <- outer(1:nrow(data_discrete), 1:nrow(data_discrete), 
                  function(i, j) mutinformation(data_discrete[i, ], data_discrete[j, ]))

方案2:使用entropy包计算互信息

  1. 安装并加载包:
install.packages("entropy")
library(entropy)
  1. 生成互信息矩阵:
data_t <- t(mydata)

# 直接在计算时离散化变量,生成对称矩阵
MiMatrix <- outer(1:nrow(data_t), 1:nrow(data_t),
                  function(i, j) mi(discretize(data_t[i, ]), discretize(data_t[j, ])))

方案3:使用minerva包的最大信息系数(MIC)

如果不需要严格的互信息,而是适合连续变量的类似度量(MIC对非线性关系更敏感),可以用这个方案:

install.packages("minerva")
library(minerva)

data_t <- t(mydata)
# 生成MIC矩阵,格式与相关矩阵一致
MiMatrix <- mine(data_t)$MIC

关键注意点:

  • 离散化的分箱方式(等宽/等频)和分箱数会直接影响互信息结果,建议根据数据分布调整;
  • 互信息本身是非负的,因此不需要像Spearman相关那样用abs()取绝对值;
  • 所有方案生成的矩阵都是21×21的对称矩阵,和原SpearMatrix的维度、格式完全匹配。

内容的提问来源于stack exchange,提问作者Dr. Statistics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:37:02