Attempts to extract nodes from a SEM model object, where nodes are defined as observed or latent variables.
get_nodes(x, label = paste2(name, est_sig, sep = "\n"), ...)A model object of class mplusObject or lavaan.
Either a character, indicating which column to use for node
labels, or an expression. See Details.
Defaults to paste(name, est_sig, sep = "\n",
which gives the node name followed by the estimated value with
significance asterisks.
Additional parameters passed to table_results. For
example, users can pass the digits argument to control the number of
digits in the node label, or pass the columns argument to retain
auxiliary columns in the tidy_nodes data.frame for further processing
(see Examples).
An object of class 'tidy_nodes'
The function get_nodes identifies all dependent and
independent variables in the model as nodes. If a mean structure / intercepts
are included in the model, the output of table_results for those
means / intercepts is used to label the nodes.
One way to create custom node labels is by passing an expression to
label, as in the default value of the argument. When an expression is
passed to label, it is evaluated in the context of a data.frame
containing the results
of a call to table_results on the x argument, with an
additional column labeled name, which contains the node names.
Another way to create custom labels is by requesting auxiliary variables
using the columns argument (which is passed to
table_results), and then using these columns to construct a new
label. See examples.
# Standard use extracts node names and shape
# (rect for observed, oval for latent)
library(lavaan)
res <- sem("dist ~ speed", cars)
get_nodes(res)
#> name shape label
#> 1 dist rect dist
#> 2 speed rect speed
# To label nodes with mean values, include meanstructure in the model
# Note that it is possible to pass the argument 'digits' to table_results
# through '...'
res <- sem("dist ~ speed", cars, meanstructure = TRUE)
get_nodes(res, digits = 3)
#> name shape label lhs op rhs est se pval
#> 1 dist rect dist\n-17.579** dist ~1 -17.579 6.622 0.008
#> 2 speed rect speed\n15.400 speed ~1 15.400 0.000 <NA>
#> confint est_sig est_std se_std pval_std confint_std
#> 1 [-30.558, -4.600] -17.579** -0.689 0.217 0.002 [-1.115, -0.263]
#> 2 [15.400, 15.400] 15.400 2.942 0.000 <NA> [2.942, 2.942]
#> est_sig_std label_results
#> 1 -0.689** Means.dist
#> 2 2.942 Means.speed
# Pass an expression to the 'label' argument for custom labels
get_nodes(res, label = paste0(name, " ", est_sig, "\n", confint))
#> name shape label lhs op rhs est se pval
#> 1 dist rect dist -17.58**\n[-30.56, -4.60] dist ~1 -17.58 6.62 0.01
#> 2 speed rect speed 15.40\n[15.40, 15.40] speed ~1 15.40 0.00 <NA>
#> confint est_sig est_std se_std pval_std confint_std est_sig_std
#> 1 [-30.56, -4.60] -17.58** -0.69 0.22 0.00 [-1.12, -0.26] -0.69**
#> 2 [15.40, 15.40] 15.40 2.94 0.00 <NA> [2.94, 2.94] 2.94
#> label_results
#> 1 Means.dist
#> 2 Means.speed
# Pass the argument 'columns' to table_results through '...' to retain
# auxiliary columns for further processing
nod <- get_nodes(res, columns = c("est_sig", "confint"))
nod
#> name shape label est_sig confint
#> 1 dist rect dist\n-17.58** -17.58** [-30.56, -4.60]
#> 2 speed rect speed\n15.40 15.40 [15.40, 15.40]
nod <- within(nod, {label <- paste0(name, " ", est_sig, "\n", confint)})
nod
#> name shape label est_sig confint
#> 1 dist rect dist -17.58**\n[-30.56, -4.60] -17.58** [-30.56, -4.60]
#> 2 speed rect speed 15.40\n[15.40, 15.40] 15.40 [15.40, 15.40]