The lavaan package is an excellent package for structural equation models, and the DiagrammeR package is an excellent package for producing nice looking graph diagrams. As of right now, the lavaan package has no built in plotting functions for models, and the available options from external packages don’t look as nice and aren’t as easy to use as DiagrammeR, in my opinion. Of course, you can use DiagrammeR to build path diagrams for your models, but it requires you to build the diagram specification manually. This package exists to streamline that process, allowing you to plot your lavaan models directly, without having to translate them into the DOT language specification that DiagrammeR uses.
The package is very straightforward to use, simply call the function with your lavaan model, adding whatever graph, node and edge attributes you want as a named list (graph attributes are specified as a standard default value that shows you what the other attribute lists should look like). For your reference, the available attributes can be found here:
http://rich-iannone.github.io/DiagrammeR/graphviz_and_mermaid.html#node-attributes http://rich-iannone.github.io/DiagrammeR/graphviz_and_mermaid.html#edge-attributes
Here’s a quick example using the data set.
First fit your lavaan model. Right now, only path analysis models are supported by this package, but latent variables are coming soon.
library(lavaan)
## This is lavaan 0.5-23.1097
## lavaan is BETA software! Please report any bugs.
model <- 'mpg ~ cyl + disp + hp
qsec ~ disp + hp + wt'
fit <- sem(model, data = mtcars)
summary(fit)
## lavaan (0.5-23.1097) converged normally after 36 iterations
##
## Number of observations 32
##
## Estimator ML
## Minimum Function Test Statistic 18.266
## Degrees of freedom 2
## P-value (Chi-square) 0.000
##
## Parameter Estimates:
##
## Information Expected
## Standard Errors Standard
##
## Regressions:
## Estimate Std.Err z-value P(>|z|)
## mpg ~
## cyl -0.987 0.738 -1.337 0.181
## disp -0.021 0.010 -2.178 0.029
## hp -0.017 0.014 -1.218 0.223
## qsec ~
## disp -0.008 0.004 -2.122 0.034
## hp -0.023 0.004 -5.229 0.000
## wt 1.695 0.398 4.256 0.000
##
## Covariances:
## Estimate Std.Err z-value P(>|z|)
## .mpg ~~
## .qsec 0.447 0.511 0.874 0.382
##
## Variances:
## Estimate Std.Err z-value P(>|z|)
## .mpg 8.194 2.049 4.000 0.000
## .qsec 0.996 0.249 4.000 0.000
Then using that model fit object, simply call the function, specifying your desired graph parameters.
library(lavaanPlot)
lavaanPlot(model = fit, node_options = list(shape = "box", fontname = "Helvetica"), edge_options = list(color = "grey"))
You can also specify different variable labels
labels <- list(mpg = "Miles Per Gallon", cyl = "Cylinders", disp = "Displacement", hp = "Horsepower", qsec = "Speed", wt = "Weight")
lavaanPlot(model = fit, labels = labels, node_options = list(shape = "box", fontname = "Helvetica"), edge_options = list(color = "grey"))
And there you have it.