
应粉丝要求复现一篇18分文章的交叉滞后网络分析图文章是下面这篇复现这篇文章的图三也是文章的亮点作者复现了5个数据库我就charls这个来说下怎么看下面这个图这张图是一个交叉滞后网络分析图主要用于展示不同变量如疾病、身体功能、日常生活能力在时间维度上的相互预测关系。结合图中的节点、颜色和连线可以从以下四个维度来解读1. 识别节点类型看颜色图中的圆圈代表不同的变量颜色区分了它们的属性粉色节点 (CVD)代表心血管疾病结局。CVD1心脏问题CVD2中风绿色节点 (Highlight)代表关键风险因素/亮点。这些通常是研究者重点关注的慢性病或特定健康行为如高血压、糖尿病、吸烟等。浅蓝色节点 (Function)代表功能指标。涵盖了身体机能如视力、听力、日常生活能力如穿衣、洗澡、上下床以及认知功能。2. 理解连线含义看箭头图中的蓝色线条带有箭头这是解读的核心方向性箭头从 A 指向 B意味着在统计上A 是 B 的预测因子。也就是说前一个时间点的 A 状态能显著预测后一个时间点 B 的发生或变化。格兰杰因果关系这种网络通常基于格兰杰因果检验暗示了一种时间上的先后影响逻辑。例如如果有一条线从 FI11高血压指向 CVD1心脏问题说明高血压病史增加了后续患心脏问题的风险。线的粗细/深浅虽然图中看起来比较均匀但通常在更精细的分析中线条越粗或颜色越深代表这种预测关系的强度越大即统计学上的系数越高。3. 分析网络结构看位置与连接数中心度观察哪些节点发出的箭头最多出度或者接收的箭头最多入度。核心驱动因素如果某个绿色节点如 FI11 高血压发出了很多箭头指向其他蓝色节点或粉色节点说明它是一个核心的驱动因素控制着网络中的多个下游结果。核心后果如果粉色节点 CVD1/CVD2 接收了大量箭头说明它们是多种前期因素共同作用的最终结果。4.聚类可以看到节点大致分成了几个区域。右侧主要是慢病和心血管结局左侧和下方主要是身体功能和日常生活能力指标。总的来说这张图实际上是一张“健康风险地图”。它告诉你为了预防粉色的心血管疾病终点你应该优先关注哪些绿色的关键指标起点以及这些指标是如何通过影响蓝色的身体功能中间过程最终导致疾病发生的。下面我来介绍一下怎么制作这张图我打算分成两章来介绍本次先介绍怎么制作这样的图我先模拟一个数据下期介绍怎么生成这种图的数据。绘图主要是通过igraph包或者qgraph包本章这里我使用igraph包library(igraph)library(RColorBrewer)先生成一个节点数据nodes-data.frame(idc(CVD1,CVD2,FI11,FI12,FI10,FI13,FI20,FI22,FI1,FI2,FI3,FI4,FI5,FI6,FI7,FI8,FI9,FI14,FI15,FI16,FI17,FI18,FI19,FI21,FI23,FI24,FI25,FI26,FI27),labelc(CVD1,CVD2,FI11,FI12,FI10,FI13,FI20,FI22,FI1,FI2,FI3,FI4,FI5,FI6,FI7,FI8,FI9,FI14,FI15,FI16,FI17,FI18,FI19,FI21,FI23,FI24,FI25,FI26,FI27),groupc(CVD,CVD,Highlight,Highlight,Highlight,Highlight,Highlight,Highlight,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function,Function),stringsAsFactorsFALSE)定义节点颜色# 定义节点颜色node_colors-c(CVD#F4A6B5,# 粉红 - 心血管疾病Highlight#8FBC8F,# 绿色 - 关键指标Function#B0E0E6# 浅蓝 - 功能指标)定义一个方向数据set.seed(42)n_edges-80edges-data.frame(fromsample(nodes$id,n_edges,replaceTRUE),tosample(nodes$id,n_edges,replaceTRUE),stringsAsFactorsFALSE)# 去掉自环edges-edges[edges$from!edges$to,]# 去重edges-unique(edges)创建 igraph 对象g-graph_from_data_frame(dedges,verticesnodes,directedTRUE)#使用圆形布局节点均匀分布在圆周上layout_circle-layout_in_circle(g,orderorder(V(g)$name))绘图par(marc(2,2,4,10),familyserif)# 右边留出图例空间plot(g,# 节点样式vertex.size28,vertex.colornode_colors[V(g)$group],vertex.frame.colorgray40,vertex.frame.width1.2,vertex.labelV(g)$name,vertex.label.colorblack,vertex.label.cex0.75,vertex.label.font1,# 边样式edge.color#6495ED,# 矢车菊蓝edge.width0.8,edge.arrow.size0.4,edge.arrow.width0.8,edge.curved0.15,# 边略微弯曲避免重叠edge.alpha0.6,# 透明度igraph 不直接支持可用 rgb# 整体main交叉滞后网络分析图,cex.main1.5)legend(right,insetc(-0.3,0),# 放在图外右侧legendc(心血管疾病,亮点,功能指标),fillc(#F4A6B5,#8FBC8F,#B0E0E6),bordergray40,title节点类型,title.font2,btyn,cex0.9,xpdTRUE)也可以使用ggraph包和tidygraph包来绘图。这个图比较大时间需要久一点library(ggraph)library(tidygraph)tg-as_tbl_graph(g)p-ggraph(tg)geom_edge_link(aes(alphaafter_stat(index)),arrowarrow(lengthunit(2,mm)),colour#6495ED)geom_node_point(aes(colourgroup),size8)geom_node_text(aes(labelname),repelFALSE,size3)scale_colour_manual(valuesnode_colors)theme_void()labs(title交叉滞后网络分析图)theme(legend.positionright)还可以进一步修饰我这里就不弄了。