R数据分析:如何给结构⽅程画路径图,tidySEM包详解
之前⼀直是⽤semPlot这个包给来进⾏结构⽅程模型的路径绘制,⾃从⽤了tidySEM这个包后就发现之前那个包不⾹了,今天就给⼤家分享⼀下tidySEM。
这个包的很⼤特点就是所有的画图原始都是存在数据框中的,这样以来我们就可以像编辑excel⼀样改变图中元素的位置,⾮常的个性化。例⼦说明
画图之前我们需要有⼀个画图的对象fit,也就是你的拟合成功的SEM模型
第⼆步是要将这个对象的图中的可以编辑的节点通过get_nodes(fit)得到,或者通过get_edges(fit)得到可以编辑的边
然后⽤get_layout()设定你想要的个性化布局
第四步就是⽤graph_sem出图了
先跑个CFA试试⼿?
library(lavaan)
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 '
fit <- del, data=HolzingerSwineford1939)
上⾯的代码运⾏后就可以得到⼀个完整的验证性因⼦分析的结果对象fit,我们可以先画出这个对象的默认路径图,代码如下:
graph_sem(model = fit)
运⾏后即可得到图:
这个图其实挺不错的啦,不过我还是想⾃⼰编辑⼀下图的布局,怎么做呢?
我先使⽤get_layout()把现在的布局提取出来,提出来后是⼀个矩阵,这个矩阵和图上⾯的元素是对应的,空⽩处就对应的是“NA”,提取布局的代码如下:
get_layout(fit)
结果如下,可以看到图中各个元素都对应在⼀个3*8的矩阵中,元素的位置就是我们画出图的位置:空⽩部分就全是NA:
我们改动图布局的原理就是改这个矩阵,⽐如我现在就想三个因⼦放在同⼀个⽔平,我就可以规定如下的矩阵:
lay <- get_layout( NA, "textual", NA, NA, "speed", NA, NA, "visual", NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA,
"x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9",rows = 3 )
这个矩阵的意思就是3个潜变量全部放在第⼀⾏,空⼀⾏之后放9个显变量,我们出图试试看是不是这个效果:
graph_sem(fit, layout = lay)
看到没,完全没有问题,⼤家也可以⾃⼰调⼀调试⼀试哈。
所以说我们就是通过编辑这个矩阵,就可以随⼼所欲地改变整个图的布局,原理就是如此。
⾃定义节点和边
这⼀部分给⼤家写写如何个性化节点和边,⾸先我们可以很容易地通过get_nodes(fit)和get_edges(fit)得到原始的节点和边的布局:
get_nodes(fit)
结果就显⽰我们是有3个椭圆的潜变量和9个⽅形的显变量,以及每个元素的标签。
get_edges(fit)
运⾏后得到所有的边的结果:
因为图中的边还是⽐较多的边所以运⾏get_edges(fit)的结果⾮常长,我们可以看到输出中有边从哪⼉开始from到哪⼉去to,什么类型的箭头arrow,边的标签label等等。
利⽤好这些信息我们就可以改变边的颜⾊或者线条类型,最常见的就是将不显著的变成虚线,将显著的路径加红加粗等
我们知道画图都是画的节点和边的标签label,所以我们通过将节点的label改变就可以⾃定义图中节点或者边标签了,我们试试:
⽐如我希望我的图中所有对象的标签是变量名+我的名字,我就可以写出如下代码:
prepare_graph(fit) %>%
edit_graph({ label = paste(p[,3]," Codewar") }) %>%
plot()
运⾏后就得到下⾯的效果:
博客为什么没人用了再⽐如我想让所有的节点变个颜⾊,蓝⾊,我可以写出如下代码:
prepare_graph(fit) %>%
edit_graph({ label_color = "blue" },element='nodes') %>%
plot()
上⾯的操作只是玩玩,并没有什么卵⽤,接下来写点实际⽤得上的
⾸先先了解下所有可以改变的路径线的视觉效果,包括:
linetype: The type of line, e.g., continuous (linetype = 1 or dashed linetype = 2)
colour or color: The color of the line (e.g., colour = "red" or colour = "blue")
size: The size of the line (e.g., size = 1 or size = 2)
alpha: The transparency of the line (e.g., alpha = 1 or alpha = .2)
就是图中线的类型,颜⾊,粗⼼,透明度都是可以改的。
再了解下所有可以改变的形状的视觉效果:
linetype: The type of line surrounding the node, e.g., continuous (linetype = 1 or dashed linetype = 2)
colour or color: The color of the line surrounding the node (e.g., colour = "red" or colour = "blue")
fill: The interior color of the node (e.g., colour = "red" or colour = "blue")
size: The size of the line (e.g., size = 1 or size = 2)
alpha: The transparency of the node (e.g., alpha = 1 or alpha = .2)
就是说节点的边的类型,颜⾊,填充,粗⼼,透明也都是可以改的。
知道了上⾯的东西我们就可以根据路径的显著性进⾏路径线条或者变量形状特征的改变了,⽐如上⾯的验证性因⼦分析模型,我就想把某⼀条路径颜⾊改成红⾊,路径线条改成虚线,透明度改成0.5,我就可以写出如下代码:
edges(graph_data) %>%
mutate(colour = "black") %>%
mutate(colour = replace(colour, from == "visual" & to == "x2", "red")) %>%
mutate(linetype = 1) %>%
mutate(linetype = replace(linetype, from == "visual" & to == "x2", 2)) %>%
mutate(alpha = 1) %>%
mutate(alpha = replace(alpha, from == "visual" & to == "x2", .5)) -> edges(graph_data)
plot(graph_data)
运⾏效果是这样的,就是我把从"visual" to"x2"这个载荷弄成了透明度⽐较⾼的红⾊虚线了:
还有,我还可以根据路径系数的正负性将路径颜⾊改变,⽐如我想要所有的正向路径成绿⾊,负向路径成红⾊,我可以写出如下代码:
prepare_graph(fit) %>%
color_pos_edges("green") %>%
color_neg_edges("red") %>%
color_var("black") %>%
alpha_var(.2) %>%
plot()
因为我这个模型⽐较特殊,全部是正向路径,所以没有红⾊显⽰,但是做法就是这样哈。
⼩结
今天给⼤家写了tidysem的基本操作,感谢⼤家耐⼼看完,⾃⼰的⽂章都写的很细,代码都在原⽂中,希望⼤家都可以⾃⼰做⼀做,请转发本⽂到朋友圈后私信回复“数据链接”获取所有数据和本⼈收集的学习资料。如果对您有⽤请先收藏,再点赞分享。
也欢迎⼤家的意见和建议,⼤家想了解什么统计⽅法都可以在⽂章下留⾔,说不定我看见了就会给你写教程哦,另欢迎私信。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论