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

如何在R的FNN包中为mutinfo()的互信息计算p值

用FNN::mutinfo计算互信息后获取p值的方法

FNN::mutinfo()函数只会返回互信息的数值,不会直接给出p值。要计算对应的p值,最常用且通用的方法是置换检验——通过打乱其中一列数据的顺序,生成无关联的零假设分布,再对比观测到的互信息值在这个分布中的位置来得到p值。

具体步骤与代码示例

  1. 先加载包并准备数据(这里用模拟数据演示)
# 加载FNN包
library(FNN)

# 模拟两列相关数据
set.seed(123)
x <- rnorm(100)
y <- x + rnorm(100, 0, 0.5)
  1. 计算观测到的互信息值
obs_mi <- mutinfo(x, y)
obs_mi
  1. 实现置换检验计算p值
    我们重复打乱其中一列(比如y)的顺序,每次计算置换后的互信息,最后统计有多少个置换后的MI大于等于观测MI:
# 设置置换次数(次数越多结果越稳定,通常至少1000次)
n_perm <- 1000

# 初始化向量存储置换后的MI值
perm_mi <- numeric(n_perm)

# 循环执行置换
for (i in 1:n_perm) {
  # 打乱y的顺序
  y_perm <- sample(y)
  # 计算置换后的MI
  perm_mi[i] <- mutinfo(x, y_perm)
}

# 计算p值:置换后MI >= 观测MI的比例
p_value <- mean(perm_mi >= obs_mi)
p_value

补充说明

  • 如果你的数据是离散型变量,也可以用卡方检验来间接关联互信息(互信息和卡方统计量存在转换关系:MI = chi2/(2*n),其中n是样本量),但置换检验的适用性更广,无论数据是连续还是离散都能用。
  • 置换次数建议设置为1000以上,条件允许的话用10000次能得到更可靠的p值。

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:15:39