R语言使用lavaan做SEM如何绘制类似AMOS风格的路径图?
报错原因
semPlotModel_AMOS()的设计用途是读取AMOS软件导出的.amw格式模型文件,你传入lavaan拟合生成的model.fit对象属于参数类型错误,自然会触发文件名无效的报错,后续的残差不支持警告也属于传参错误引发的连带问题。
实现AMOS风格路径图的解决方案
不需要调用AMOS相关的读取函数,直接调整semPlot或lavaanPlot的参数即可实现规整的、和AMOS结构一致的路径图:
方案1:用semPlot的semPaths函数实现
默认参数调整后即可关闭杂乱排布和弯曲箭头,完全匹配AMOS的默认样式:
library(semPlot) # 基础AMOS风格绘图代码 semPaths( model.fit, # 布局设置:tree2为上下分层结构,和AMOS默认布局一致,无需手动调整也能保证结构规整 layout = "tree2", # 箭头设置:关闭弯曲效果,用纯直箭头 curve = 0, edge.color = "black", arrow.width = 1, arrow.length = 0.2, edge.label.cex = 0.8, edge.label.position = 0.5, # 节点样式:观测变量用矩形、潜变量用椭圆,和AMOS一致 shapeMan = "rectangle", shapeLat = "ellipse", color = list(man = "white", lat = "white"), border.width = 1.5, node.label.cex = 0.9, # 内容显示:可按需切换显示原始估计值/标准化估计值 what = "est", # 显示残差小圆圈 residuals = TRUE, residScale = 8 )
如果默认布局不符合你的需求,可以手动指定所有节点的坐标,完全复刻你在AMOS里手动拖拽的排布:
# 自定义节点坐标,每一行对应一个变量,依次为水平位置x、垂直位置y,按你的模型变量顺序调整即可 node_coords <- matrix( c( 1,1, # 第一个观测变量的坐标 2,1, # 第二个观测变量的坐标 3,3 # 第一个潜变量的坐标 ), ncol = 2, byrow = TRUE, dimnames = list(c("你的变量名1","你的变量名2","你的变量名3"), c("x","y")) ) # 画图时传入自定义坐标 semPaths( model.fit, layout = node_coords, # 其余样式参数和上面的配置保持一致即可 curve = 0, shapeMan = "rectangle", shapeLat = "ellipse" )
方案2:用lavaanPlot关闭手绘效果
lavaanPlot的手绘风格是可以手动关闭的,不需要额外换工具:
library(lavaanPlot) lavaanPlot( model = model.fit, # 关闭手绘效果和弯曲箭头 handwriting = FALSE, curved = FALSE, # 节点和路径样式匹配AMOS node_options = list(shape = c("ellipse", "rectangle"), fontsize = 10), edge_options = list(color = "black", width = 1), # 显示路径系数和显著性标记 coefs = TRUE, stars = "latent" )
内容的提问来源于stack exchange,提问作者Ishan Kashyap Hazarika
相关产品推荐
相关产品推荐

