Generate an 'igraph' object from a 'model_set' object.
model_graph(
object,
node_size_by_x = TRUE,
x = NULL,
node_size = 5,
min_size = 5,
max_size = 35,
color_original = "lightblue",
color_add = "burlywood1",
color_drop = "lightgreen",
color_others = "lightgrey",
color_label = "black",
node_label_size = 1,
original = "original",
drop_redundant_direct_paths = TRUE,
label_arrow_by_df = NULL,
arrow_label_size = 1,
weight_arrows_by_df = c("inverse", "normal", "none"),
arrow_min_width = 0.5,
arrow_max_width = 2,
progress = TRUE,
short_names = FALSE,
min_bpp_labelled = NULL,
...
)A model_graph-class object that
can be used as as an igraph-object,
with a plot method (plot.model_graph())
with settings
suitable for plotting a network
of models with BIC posterior probabilities
computed.
Must be a
model_set-class object for now.
Logical. Whether
node (vertex) sizes are determined
by a variable. Default is TRUE.
See x below on how size is
determined.
If not NULL, it should be
a numeric vector of length equal to
the number of models. The node sizes
will be proportional to the values
of x, offset by min_size. If
NULL, the default, the BIC
posterior probabilities
stored in object will be retrieved.
If node_size_by_x
is FALSE, this is the size for
all nodes.
The minimum size of a node. Default is 5.
The maximum size of a node. Default is 35.
The color
of node of the original model.
Default is "lightblue".
The color of
the nodes of models formed by
adding one or more free parameters to
the original model.
Default is "burlywood1".
The color of
the nodes of models formed by
dropping one or more free parameters
from the original model.
Default is "lightgreen".
The color
of other models not specified above.
Default is "grey50".
The color of the
text labels of the nodes. Default
is "black".
The size of the labels of the nodes. Default is 1.
String. The name
of the original model (target model).
Default is "original".
Logical. Whether the redundant direct
path between two models. A direct path
is redundant if two models are also
connected through at least one
another model. Default is TRUE.
If TRUE,
then an arrow (edge) is always labelled
by the difference in model dfs.
If FALSE, then no arrows are
labelled. If NULL, then arrows are
labelled when not all differences
in model dfs are equal to one.
Default is NULL.
The size of the labels of the arrows (edges), if labelled. Default is 1.
String.
Use if model df
differences are stored.
If "inverse", larger the
difference in model df, narrower
an arrow. That is, more similar two
models are, thicker the arrow. If
"normal", larger the difference
in model df, wider an arrow.
If "none", then arrow width is
constant, set to arrow_max_width.
Default is "inverse".
If
weight_arrows_by_df is not "none",
this is the minimum width of an
arrow.
If
weight_arrows_by_df is not "none",
this is the maximum width of an
arrow. If weight_arrows_by_df is
"none", this is the width of all
arrows.
Whether a progress
bar will be displayed for some
steps (e.g., checking for nested
relations). Default
is TRUE.
If TRUE and
short model names are stored,
they will be used as model labels.
Please print the object with
short_names = TRUE to find the
corresponding full model names.
If not NULL,
this is the minimum BPP for a model
to be labelled. Models with BPP less
than this value will not be labelled.
Useful when the number of models
is large.
Optional arguments. Not used for now.
Shu Fai Cheung https://orcid.org/0000-0002-9871-9448
The internal function for nesting
inspired by the net function
from the semTools package,
which was developed by
Terrence D. Jorgensen.
It extracts the model list stored
in object, creates an adjacency
matrix, and then creates an igraph
object customized for visualizing
model relations.
This is the default way to construct
the graph when the model set is
automatically by model_set().
Each model is connected by an arrow, pointing from one model to another model that
a. can be formed by adding one or more free parameter, or
b. can be formed by releasing one or more equality constraint between two parameters.
c. has nested relation with this model as determined by the method proposed by Bentler and Satorra (2010), if the models are not generated internally.
That is, it points to a model with more degrees of freedom (more complicated), and is nested within that model in either parameter sense or covariance sense.
By default, the size of the node for each model is scaled by its BIC posterior probability, if available. See The Size of a Node below.
If a model is designated as the original (target) model, than he original model, the models with more degrees of freedom than the original model, and the models with fewer degrees of freedom than the original models, are colored differently.
The default layout is the Sugiyama layout, with simpler models (models with fewer degrees of freedom) on the top. The lower a model is in the network, the more the degrees of freedom it has. This layout is suitable for showing the nested relations of the models. Models on the same level (layer) horizontally have the same model df.
The output is an igraph object.
Users can customize it in any way
they want using functions from
the igraph package.
If a model has no nested relation with all other model, it will not be connected to other models.
If no model is named original
(default is "original"), then no
model is colored as the original model.
If object contained one or more
user-provided models which are not
generated automatically by
model_set() or similar functions
(e.g., gen_models()), then the
method by Bentler and Satorra (2010)
will be used to determine model
relations. Models connected by an
arrow has a nested relation based on
the NET method by Bentler and Satorra
(2010). An internal function inspired
by the net function from the
semTools package is used to
implement the NET method.
When a model is scaled by x,
which usually is the BIC posterior
probability, its size is determined
by:
max_size * (x - min(x))/(max(x) - min(x)) + min_size
Bentler, P. M., & Satorra, A. (2010). Testing model nesting and equivalence. Psychological Methods, 15(2), 111--123. tools:::Rd_expr_doi("10.1037/a0019625") Asparouhov, T., & Muthén, B. (2019). Nesting and Equivalence Testing for Structural Equation Models. Structural Equation Modeling: A Multidisciplinary Journal, 26(2), 302--309. tools:::Rd_expr_doi("10.1080/10705511.2018.1513795")
library(lavaan)
mod <-
"
m1 ~ x
y ~ m1
"
fit <- sem(mod, dat_serial_4, fixed.x = TRUE)
out <- model_set(fit)
out
g <- model_graph(out)
plot(g)
Run the code above in your browser using DataLab