R语言中使用Chord diagram展示变量共现关联强度的方法咨询
需求实现可行性
该需求完全可以实现,弦图是这类二元事件共现关系可视化的可选方案之一,能直观呈现不同事件共同发生的频率差异。
R语言弦图实现步骤
你可以使用circlize包完成绘制,完整代码如下:
1. 预处理数据,构建共现矩阵
# 安装加载依赖包 install.packages("circlize") library(circlize) # 将Yes/No转换为0/1数值矩阵,去掉无需分析的PatientID列 bin_df <- apply(df[, -1], 2, function(x) ifelse(x == "Yes", 1, 0)) # 计算两两变量同时为Yes的共现次数 co_occur_matrix <- t(bin_df) %*% bin_df # 对角线赋值为0,忽略变量自身的共现统计 diag(co_occur_matrix) <- 0
2. 绘制弦图
chordDiagram( co_occur_matrix, # 自定义各变量的配色,可按需调整 grid.col = c(A = "#E41A1C", B = "#377EB8", C = "#4DAF4A", D = "#984EA3", E = "#FF7F00", G = "#A65628"), transparency = 0.5, annotationTrack = c("grid", "name") ) # 重置绘图参数,避免影响后续绘图 circos.clear()
绘制结果中,两个变量之间的弦宽度即代表共现次数,宽度越大说明两个事件同时发生的频率越高。
其他可选可视化方案
如果你的场景不需要突出共现的流向关系,也可以选择门槛更低、更易读的可视化方案:
- 共现热图:用颜色深浅映射共现次数,支持直接读取数值,适合需要精确对比的场景,可通过
pheatmap包或者ggplot2的geom_tile实现 - 关联网络图:将每个事件作为节点,共现强度作为边的粗细/颜色深浅,可直观识别关联紧密的事件集群,可通过
igraph、ggraph包实现 - 标准化关联热图:如果需要消除事件本身发生率的影响,可计算两两变量的Phi相关系数后绘制热图,能更准确反映两个事件的关联紧密程度,而非单纯的共现次数
内容的提问来源于stack exchange,提问作者Lili
相关产品推荐
相关产品推荐

