之前一直是用semPlot这个包给来进行结构方程模型的路径绘制,自从用了tidySEM这个包后就发现之前那个包不香了,今天就给大家分享一下tidySEM。

这个包的很大特点就是所有的画图原始都是存在数据框中的,这样以来我们就可以像编辑excel一样改变图中元素的位置,非常的个性化。

例子说明

  • 画图之前我们需要有一个画图的对象fit,也就是你的拟合成功的SEM模型
  • 第二步是要将这个对象的图中的可以编辑的节点通过get_nodes(fit)得到,或者通过get_edges(fit)得到可以编辑的边
  • 然后用get_layout()设定你想要的个性化布局
  • 第四步就是用graph_sem出图了

先跑个CFA试试手?

library(lavaan)
HS.model <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 '
fit <- cfa(HS.model, 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的基本操作,感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞分享。

也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,另欢迎私信。

R数据分析:如何给结构方程画路径图,tidySEM包详解的更多相关文章

  1. php中相对路径和绝对路径如何使用(详解)

    目录 一.总结 一句话总结: 1.php中用用“/”表示根目录么? 2.什么符号表示当前目录(asp,jsp,php都一样)? 3.php中如何使用$_SERVER['DOCUMENT_ROOT']做 ...

  2. Quartz-2D绘图之路径(Paths)详解

    在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...

  3. vue-cli打包后dist文件运行空白和背景图显示问题详解

    1.文件引用路径.我们直接运行打包后的文件夹中的index.html文件,会看到网页一片空白,f12调试,全是css,js路径引用错误的问题. 解决:到config文件夹中打开index.js文件. ...

  4. 第52讲:Scala中路径依赖代码实战详解

    今天学习了scala中的路径依赖,来看一下实战代码 class Outer{  private val x = 10  class Inner{    private val y = x +10  } ...

  5. iOS沙盒路径变化的说明详解

    最近用沙盒存储文件的时候发现了一个奇怪的现象,由于业务需要,我会将保存的文件绝对路径保存以便下次读取. 于是发现一个找不到的现象,即上一次保存下的绝对路径,再第二次打开app去查找的时候,发现找不到. ...

  6. Scala 深入浅出实战经典 第52讲:Scala中路径依赖代码实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. 【一步一图】:详解IIS日志配置

    打开网站配置:右键点击属性 弹出设置界面     如上图,日志可选4种格式: [Microsoft IIS 日志文件格式]   存放地址如上图 以in开头 年份后两位+月份+日 命名: 示例: //, ...

  8. 路径问题以及cookie详解

    1.路径问题: 注意 .代表执行程序的文件夹路径,在tomcat中也就是bin目录,所以要用this.getServletContext().getRealPath("/WEB-INF/cl ...

  9. [Swift实际操作]七、常见概念-(11)路径URL的使用详解

    本文将为你演示网址对象(URL)的使用 首先导入需要使用的界面工具框架 import UIKit 接着初始化一个指定网址的网址对象 let url = URL(string: "https: ...

随机推荐

  1. Mybatis逆向工程和新版本MybatisPlus3.4逆向工程的使用

    Mybatis和MybatisPlus3.4的使用 目录 Mybatis和MybatisPlus3.4的使用 1 RESTFUL 2 逆向工程 2.1 tkMybatis逆向工程 2.1.1 导入依赖 ...

  2. Java实现完数

    完数 找出1-1000以下的完数 public static void main(String[] args) { for(int i=2;i<1000;i++) { int sum=0; fo ...

  3. 11.4.5 LVS负载均衡常见工作模式总结以及ipvsadm

      NAT TUN DR RS any Tunneling Non-arp device RS network private LAN/WAN LAN RS number low(10-20) Hig ...

  4. 使用CEF(三)— 从CEF官方Demo源码入手解析CEF架构与CefApp、CefClient对象

    在上文<使用CEF(2)- 基于VS2019编写一个简单CEF样例>中,我们介绍了如何编写一个CEF的样例,在文章中提供了一些代码清单,在这些代码清单中提到了一些CEF的定义的类,例如Ce ...

  5. 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容

    作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...

  6. Ysoserial Commons Collections3分析

    Ysoserial Commons Collections3分析 写在前面 CommonsCollections Gadget Chains CommonsCollection Version JDK ...

  7. CentOS 压缩解压

    目录 命令 tar gzip.gunzip bzip2.bunzip2 zip.unzip 命令组合 打包:将多个文件合成一个总的文件,这个总的文件通常称为"归档". 压缩:将一个 ...

  8. Coursera Deep Learning笔记 卷积神经网络基础

    参考1 参考2 1. 计算机视觉 使用传统神经网络处理机器视觉的一个主要问题是输入层维度很大.例如一张64x64x3的图片,神经网络输入层的维度为12288. 如果图片尺寸较大,例如一张1000x10 ...

  9. Asp.net Core使用EFCore+Linq进行操作

    注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考写的比较细致耐性一点看完会有收获的 首先加上必要的引用 using Microsoft.EntityFramework ...

  10. 热身训练1 Blood Cousins Return

    点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到 ...