The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
This article illustrates how to use the two main functions of
lavaan.printer
:
parameterEstimates_table_list()
print_parameterEstimates_table_list()
These are the packages used in this article:
These two functions are not for end-users. They are for package
developers, and are intended to be used internally by
print
-methods or similar functions for the objects in other
packages which generate customized parameter tables.
parameterEstimates_table_list()
: creates a
parameterEstimates_table_list
object which is a list of
data frames, organized based on the sections for parameter estimates in
the summary()
output of lavaan
, such as factor
loadings (Latent Variables
) and covariances
(Covariances
). The data frames can be customized in a lot
of ways, such as adding columns created by user-supplied functions, or
adding header sections or footer sections.
print_parameterEstimates_table_list()
: It prints a
parameterEstimates_table_list
object, with some degree of
customization. Most of the customization should be done when calling
parameterEstimates_table_list()
. The cells are formatted as
strings across sections when being printed to ensure that the column
widths are consistent.
In the simplest case, parameterEstimates_table_list()
can be used to generate the usual parameter estimates results of
lavaan
, but as a list of data frames, each corresponding to
a section in the output (e.g., regression coefficients, factor
loadings). Arguments for to lavaan::parameterEstimates()
can be used when calling
parameterEstimates_table_list()
:
# Adapted from the example of cfa()
model_cfa <- "visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6"
fit <- cfa(model_cfa,
data = HolzingerSwineford1939,
group = "school")
est <- parameterEstimates_table_list(fit,
rsquare = TRUE)
Because it is intended to be used inside a print function, it does
not have a print method itself. Call
print_parameterEstimates_table_list()
instead:
print_parameterEstimates_table_list(est)
#>
#> Parameter Estimates Settings:
#>
#> Standard errors: Standard
#> Information: Expected
#> Information saturated (h1) model: Structured
#>
#> Group 1 [Pasteur]:
#> Latent Variables:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> visual =~
#> x1 1.000
#> x2 0.373 0.121 3.081 0.002 0.136 0.610
#> x3 0.541 0.141 3.843 0.000 0.265 0.817
#> textual =~
#> x4 1.000
#> x5 1.187 0.102 11.640 0.000 0.987 1.387
#> x6 0.870 0.076 11.372 0.000 0.720 1.020
#>
#> Group 1 [Pasteur]:
#> Covariances:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> visual ~~
#> textual 0.485 0.106 4.568 0.000 0.277 0.693
#>
#> Group 1 [Pasteur]:
#> Intercepts:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> .x1 4.941 0.095 52.249 0.000 4.756 5.127
#> .x2 5.984 0.098 60.949 0.000 5.792 6.176
#> .x3 2.487 0.093 26.778 0.000 2.305 2.669
#> .x4 2.823 0.092 30.689 0.000 2.642 3.003
#> .x5 3.995 0.105 38.183 0.000 3.790 4.200
#> .x6 1.922 0.079 24.321 0.000 1.767 2.077
#> visual 0.000
#> textual 0.000
#>
#> Group 1 [Pasteur]:
#> Variances:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> .x1 0.244 0.258 0.947 0.344 -0.262 0.750
#> .x2 1.344 0.158 8.498 0.000 1.034 1.653
#> .x3 1.009 0.138 7.317 0.000 0.739 1.279
#> .x4 0.424 0.069 6.105 0.000 0.288 0.560
#> .x5 0.445 0.086 5.161 0.000 0.276 0.614
#> .x6 0.297 0.051 5.864 0.000 0.197 0.396
#> visual 1.151 0.300 3.835 0.000 0.563 1.739
#> textual 0.896 0.150 5.967 0.000 0.602 1.190
#>
#> Group 1 [Pasteur]:
#> R-Squares:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> x1 0.825
#> x2 0.107
#> x3 0.250
#> x4 0.679
#> x5 0.740
#> x6 0.696
#>
#> Group 2 [Grant-White]:
#> Latent Variables:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> visual =~
#> x1 1.000
#> x2 0.813 0.175 4.657 0.000 0.471 1.155
#> x3 1.045 0.204 5.110 0.000 0.644 1.446
#> textual =~
#> x4 1.000
#> x5 0.981 0.086 11.351 0.000 0.812 1.151
#> x6 0.963 0.084 11.402 0.000 0.797 1.128
#>
#> Group 2 [Grant-White]:
#> Covariances:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> visual ~~
#> textual 0.377 0.096 3.941 0.000 0.189 0.564
#>
#> Group 2 [Grant-White]:
#> Intercepts:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> .x1 4.930 0.095 51.696 0.000 4.743 5.117
#> .x2 6.200 0.092 67.416 0.000 6.020 6.380
#> .x3 1.996 0.086 23.195 0.000 1.827 2.164
#> .x4 3.317 0.093 35.625 0.000 3.135 3.500
#> .x5 4.712 0.096 48.986 0.000 4.524 4.901
#> .x6 2.469 0.094 26.277 0.000 2.285 2.653
#> visual 0.000
#> textual 0.000
#>
#> Group 2 [Grant-White]:
#> Variances:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> .x1 0.792 0.132 6.017 0.000 0.534 1.050
#> .x2 0.878 0.124 7.104 0.000 0.636 1.120
#> .x3 0.498 0.114 4.386 0.000 0.276 0.721
#> .x4 0.310 0.065 4.776 0.000 0.183 0.437
#> .x5 0.429 0.073 5.900 0.000 0.287 0.572
#> .x6 0.402 0.069 5.818 0.000 0.267 0.537
#> visual 0.527 0.155 3.399 0.001 0.223 0.830
#> textual 0.947 0.153 6.196 0.000 0.648 1.247
#>
#> Group 2 [Grant-White]:
#> R-Squares:
#> Estimate S.E. Z P(>|z|) CI.Lo CI.Up
#> x1 0.399
#> x2 0.284
#> x3 0.536
#> x4 0.753
#> x5 0.680
#> x6 0.686
The output looks similar to the lavaan
output, except
for some minor changes in column names (e.g., CI.Lo
and
CI.Up
instead of ci.lower
and
ci.upper
) to shorten the width of the print, to make room
for additional columns developer may want to add. This is intentional:
mimicking the lavaan
style to minimize the need for the
users to learn anything new in reading the output.
These options are available in
print_parameterEstimates_table_list()
:
nd
: Control the number of digits after the decimal.
Default is 3.
by_group
: For multiple-group models, whether the
tables are grouped by groups first, as in lavaan
. Default
is TRUE
. Setting this to FALSE
facilitates
comparing groups on estimates, especially when a model has a lot of
parameters.
drop_cols
: A character vector of columns to be
dropped. Any columns can be dropped. Can be used to drop columns that
cannot be removed when calling summary()
or
lavaan::parameterEstimates()
, or columns to be dropped only
when being printed.
na_str
: The string to be used for blank cells, such
as the standard errors of fixed parameters. Default is
" "
.
This is an example of these arguments:
print_parameterEstimates_table_list(est,
nd = 2,
by_group = FALSE,
drop_cols = "Z",
na_str = "--")
#>
#> Parameter Estimates Settings:
#>
#> Standard errors: Standard
#> Information: Expected
#> Information saturated (h1) model: Structured
#>
#> Latent Variables:
#> Group 1 [Pasteur]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> visual =~
#> x1 1.00 -- -- -- --
#> x2 0.37 0.12 0.00 0.14 0.61
#> x3 0.54 0.14 0.00 0.27 0.82
#> textual =~
#> x4 1.00 -- -- -- --
#> x5 1.19 0.10 0.00 0.99 1.39
#> x6 0.87 0.08 0.00 0.72 1.02
#>
#> Latent Variables:
#> Group 2 [Grant-White]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> visual =~
#> x1 1.00 -- -- -- --
#> x2 0.81 0.17 0.00 0.47 1.16
#> x3 1.04 0.20 0.00 0.64 1.45
#> textual =~
#> x4 1.00 -- -- -- --
#> x5 0.98 0.09 0.00 0.81 1.15
#> x6 0.96 0.08 0.00 0.80 1.13
#>
#> Covariances:
#> Group 1 [Pasteur]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> visual ~~
#> textual 0.49 0.11 0.00 0.28 0.69
#>
#> Covariances:
#> Group 2 [Grant-White]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> visual ~~
#> textual 0.38 0.10 0.00 0.19 0.56
#>
#> Intercepts:
#> Group 1 [Pasteur]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> .x1 4.94 0.09 0.00 4.76 5.13
#> .x2 5.98 0.10 0.00 5.79 6.18
#> .x3 2.49 0.09 0.00 2.31 2.67
#> .x4 2.82 0.09 0.00 2.64 3.00
#> .x5 4.00 0.10 0.00 3.79 4.20
#> .x6 1.92 0.08 0.00 1.77 2.08
#> visual 0.00 -- -- -- --
#> textual 0.00 -- -- -- --
#>
#> Intercepts:
#> Group 2 [Grant-White]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> .x1 4.93 0.10 0.00 4.74 5.12
#> .x2 6.20 0.09 0.00 6.02 6.38
#> .x3 2.00 0.09 0.00 1.83 2.16
#> .x4 3.32 0.09 0.00 3.13 3.50
#> .x5 4.71 0.10 0.00 4.52 4.90
#> .x6 2.47 0.09 0.00 2.28 2.65
#> visual 0.00 -- -- -- --
#> textual 0.00 -- -- -- --
#>
#> Variances:
#> Group 1 [Pasteur]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> .x1 0.24 0.26 0.34 -0.26 0.75
#> .x2 1.34 0.16 0.00 1.03 1.65
#> .x3 1.01 0.14 0.00 0.74 1.28
#> .x4 0.42 0.07 0.00 0.29 0.56
#> .x5 0.44 0.09 0.00 0.28 0.61
#> .x6 0.30 0.05 0.00 0.20 0.40
#> visual 1.15 0.30 0.00 0.56 1.74
#> textual 0.90 0.15 0.00 0.60 1.19
#>
#> Variances:
#> Group 2 [Grant-White]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> .x1 0.79 0.13 0.00 0.53 1.05
#> .x2 0.88 0.12 0.00 0.64 1.12
#> .x3 0.50 0.11 0.00 0.28 0.72
#> .x4 0.31 0.06 0.00 0.18 0.44
#> .x5 0.43 0.07 0.00 0.29 0.57
#> .x6 0.40 0.07 0.00 0.27 0.54
#> visual 0.53 0.15 0.00 0.22 0.83
#> textual 0.95 0.15 0.00 0.65 1.25
#>
#> R-Squares:
#> Group 1 [Pasteur]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> x1 0.82 -- -- -- --
#> x2 0.11 -- -- -- --
#> x3 0.25 -- -- -- --
#> x4 0.68 -- -- -- --
#> x5 0.74 -- -- -- --
#> x6 0.70 -- -- -- --
#>
#> R-Squares:
#> Group 2 [Grant-White]:
#> Estimate S.E. P(>|z|) CI.Lo CI.Up
#> x1 0.40 -- -- -- --
#> x2 0.28 -- -- -- --
#> x3 0.54 -- -- -- --
#> x4 0.75 -- -- -- --
#> x5 0.68 -- -- -- --
#> x6 0.69 -- -- -- --
Suppose we would like to insert a column of symbols (e.g.,
"*"
and "**"
) into the parameter estimates
table based on the pvalue
column, to denote whether a
parameter is significant,
This is the function:
add_sig <- function(object,
breaks = c(1, .05, .01, .001, -Inf),
labels = c("***", "** ", "* ", " ")) {
tmp <- object[, "pvalue", drop = TRUE]
if (!is.null(tmp)) {
tmp[is.na(tmp)] <- 1
tmp2 <- cut(tmp,
breaks = breaks,
labels = labels)
i <- match("pvalue", colnames(object))
out <- data.frame(object[, 1:i],
Sig = tmp2,
object[, seq(i + 1, ncol(object))])
}
out
}
This can be done by the argument est_funs
:
model_cfa <- "visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6"
fit <- cfa(model_cfa,
data = HolzingerSwineford1939[1:100, ])
#> Warning: lavaan->lav_object_post_check():
#> some estimated ov variances are negative
est <- parameterEstimates_table_list(fit,
est_funs = list(add_sig))
print_parameterEstimates_table_list(est)
#>
#> Parameter Estimates Settings:
#>
#> Standard errors: Standard
#> Information: Expected
#> Information saturated (h1) model: Structured
#>
#> Latent Variables:
#> Estimate S.E. Z P(>|z|) Sig CI.Lo CI.Up
#> visual =~
#> x1 1.000
#> x2 0.163 0.118 1.379 0.168 -0.068 0.394
#> x3 0.355 0.192 1.849 0.065 -0.021 0.732
#> textual =~
#> x4 1.000
#> x5 1.202 0.129 9.322 0.000 *** 0.950 1.455
#> x6 0.707 0.081 8.694 0.000 *** 0.548 0.867
#>
#> Covariances:
#> Estimate S.E. Z P(>|z|) Sig CI.Lo CI.Up
#> visual ~~
#> textual 0.430 0.123 3.485 0.000 *** 0.188 0.672
#>
#> Variances:
#> Estimate S.E. Z P(>|z|) Sig CI.Lo CI.Up
#> .x1 -0.257 0.793 -0.324 0.746 -1.810 1.297
#> .x2 1.341 0.190 7.055 0.000 *** 0.969 1.714
#> .x3 1.022 0.175 5.828 0.000 *** 0.678 1.366
#> .x4 0.331 0.076 4.372 0.000 *** 0.183 0.479
#> .x5 0.405 0.103 3.929 0.000 *** 0.203 0.607
#> .x6 0.241 0.046 5.291 0.000 *** 0.152 0.331
#> visual 1.622 0.814 1.992 0.046 * 0.026 3.219
#> textual 0.812 0.166 4.899 0.000 *** 0.487 1.137
Note that est_funs
must be a list, even if only one
function is supplied.
There are other ways to customize the output when calling
parameterEstimates_table_list()
. For example:
Drop one or more columns.
Rename one or more columns.
Set arguments when calling functions in est_funs
,
header_funs
, and footer_funs
.
Please refer to the help page of
parameterEstimates_table_list()
for details.
If you have any suggestions and found any bugs, please feel feel to open a GitHub issue. Thanks.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.