The lavaan.pl package allows the estimation of confirmatory factor models for ordinal data using stochastic and numeric pairwise likelihood optimisation.
Installation
You can install the development version of lavaan.pl from GitHub with:
# install.packages("devtools")
devtools::install_github("giuseppealfonzetti/lavaan.pl")
When the package is installed, you can load it with:
library(lavaan.pl)
#> ℹ Loading required package: lavaan
#> This is lavaan 0.6-19
#> lavaan is FREE software! Please report any bugs.
#>
#> ── Conflicts ──────────────────────────────────────────────── lavaan.pl 0.1.0.9002 ──
#> ✖ lavaan.pl::cfa() masks lavaan::cfa()
The startup message indicates that the lavaan.pl package provides its own version of the cfa()
function, which can be used to estimate lavaan.pl models using the lavaan
syntax. An example is given below.
Fitting an ordinal CFA model
Consider the data containing 25 personality items measured on 6-point scale from the International Personality Item Pool (IPIP) dataset. The data set is available in the lavaan.pl package and can be loaded with the following code:
data("bfi")
head(bfi)
#> # A tibble: 6 × 28
#> A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3
#> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord> <ord>
#> 1 6 6 5 6 5 6 6 6 1 3 2 1 6
#> 2 4 3 1 5 1 3 2 4 2 4 3 6 4
#> 3 4 4 5 6 5 4 3 5 3 2 1 3 2
#> 4 4 5 2 2 1 5 5 5 2 2 3 4 3
#> 5 1 5 6 5 6 4 3 2 4 5 2 1 2
#> 6 2 6 5 6 5 3 5 6 3 6 2 2 4
#> # ℹ 15 more variables: E4 <ord>, E5 <ord>, N1 <ord>, N2 <ord>, N3 <ord>,
#> # N4 <ord>, N5 <ord>, O1 <ord>, O2 <ord>, O3 <ord>, O4 <ord>, O5 <ord>,
#> # gender <int>, education <int>, age <int>
The lavaan model syntax to fit a confirmatory factor analysis model with 5 latent factors, where the first 5 items load on the first factor and so on, is:
mod <- "
opn =~ O1 + O2 + O3 + O4 + O5 # Openness
con =~ C1 + C2 + C3 + C4 + C5 # Conscientiousness
ext =~ E1 + E2 + E3 + E4 + E5 # Extraversion
agr =~ A1 + A2 + A3 + A4 + A5 # Agreeableness
neu =~ N1 + N2 + N3 + N4 + N5 # Neuroticism
"
Users of lavaan will be familiar with this syntax. The call to the cfa()
function is made as usual:
# Fit the model (note, this cfa() function is from the lavaan.pl package)
fit <- cfa(model = mod, data = bfi, std.lv = TRUE, test = "mean.var.adjusted")
summary(fit)
#> lavaan.pl 0.1.0.9002
#> ⨉
#> lavaan 0.6-19 ended normally after 98 iterations
#>
#> Estimator PML
#> Optimization method UCMINF
#> Number of model parameters 160
#>
#> Number of observations 2236
#>
#> Model Test User Model:
#> Standard Scaled
#> Test Statistic 4584.031 7205.822
#> Degrees of freedom 265 333.065
#> P-value (Unknown) NA 0.000
#> Scaling correction factor 0.636
#> mean+var adjusted correction (PML)
#>
#> Parameter Estimates:
#>
#> Parameterization Delta
#> Standard errors Sandwich
#> Information bread Observed
#> Observed information based on Hessian
#>
#> Latent Variables:
#> Estimate Std.Err z-value P(>|z|)
#> opn =~
#> O1 0.647 0.059 10.909 0.000
#> O2 -0.444 0.093 -4.757 0.000
#> O3 0.808 0.056 14.370 0.000
#> O4 0.136 0.056 2.409 0.016
#> O5 -0.486 0.055 -8.781 0.000
#> con =~
#> C1 0.564 0.077 7.302 0.000
#> C2 0.571 0.069 8.317 0.000
#> C3 0.543 0.075 7.267 0.000
#> C4 -0.760 0.072 -10.522 0.000
#> C5 -0.706 0.073 -9.611 0.000
#> ext =~
#> E1 0.540 0.075 7.242 0.000
#> E2 0.727 0.071 10.213 0.000
#> E3 -0.690 0.068 -10.223 0.000
#> E4 -0.742 0.071 -10.511 0.000
#> E5 -0.620 0.095 -6.535 0.000
#> agr =~
#> A1 0.335 0.072 4.662 0.000
#> A2 -0.663 0.090 -7.368 0.000
#> A3 -0.771 0.094 -8.183 0.000
#> A4 -0.545 0.076 -7.217 0.000
#> A5 -0.774 0.093 -8.336 0.000
#> neu =~
#> N1 0.837 0.063 13.230 0.000
#> N2 0.801 0.063 12.808 0.000
#> N3 0.755 0.059 12.914 0.000
#> N4 0.666 0.067 10.009 0.000
#> N5 0.570 0.070 8.122 0.000
#>
#> Covariances:
#> Estimate Std.Err z-value P(>|z|)
#> opn ~~
#> con 0.322 0.083 3.871 0.000
#> ext -0.466 0.054 -8.631 0.000
#> agr -0.269 0.060 -4.487 0.000
#> neu -0.146 0.120 -1.218 0.223
#> con ~~
#> ext -0.390 0.091 -4.283 0.000
#> agr -0.370 0.098 -3.781 0.000
#> neu -0.301 0.085 -3.532 0.000
#> ext ~~
#> agr 0.702 0.083 8.468 0.000
#> neu 0.267 0.066 4.030 0.000
#> agr ~~
#> neu 0.232 0.044 5.303 0.000
#>
#> Thresholds:
#> Estimate Std.Err z-value P(>|z|)
#> O1|t1 -2.447 0.126 -19.379 0.000
#> O1|t2 -1.695 0.255 -6.642 0.000
#> O1|t3 -1.190 0.390 -3.055 0.002
#> O1|t4 -0.430 0.481 -0.894 0.371
#> O1|t5 0.455 0.408 1.116 0.265
#> O2|t1 -0.565 0.344 -1.642 0.101
#> O2|t2 0.131 0.158 0.828 0.408
#> O2|t3 0.495 0.198 2.494 0.013
#> O2|t4 1.011 0.270 3.748 0.000
#> O2|t5 1.557 0.274 5.676 0.000
#> O3|t1 -1.990 0.210 -9.454 0.000
#> O3|t2 -1.451 0.195 -7.447 0.000
#> O3|t3 -0.956 0.161 -5.936 0.000
#> O3|t4 -0.122 0.143 -0.852 0.394
#> O3|t5 0.839 0.228 3.678 0.000
#> O4|t1 -2.187 0.175 -12.521 0.000
#> O4|t2 -1.567 0.302 -5.183 0.000
#> O4|t3 -1.246 0.264 -4.717 0.000
#> O4|t4 -0.607 0.264 -2.296 0.022
#> O4|t5 0.255 0.353 0.722 0.470
#> O5|t1 -0.584 0.277 -2.108 0.035
#> O5|t2 0.261 0.166 1.576 0.115
#> O5|t3 0.771 0.153 5.039 0.000
#> O5|t4 1.341 0.273 4.919 0.000
#> O5|t5 1.931 0.221 8.758 0.000
#> C1|t1 -2.011 0.227 -8.853 0.000
#> C1|t2 -1.432 0.243 -5.897 0.000
#> C1|t3 -0.960 0.165 -5.815 0.000
#> C1|t4 -0.269 0.174 -1.545 0.122
#> C1|t5 0.736 0.293 2.513 0.012
#> C2|t1 -1.880 0.221 -8.490 0.000
#> C2|t2 -1.203 0.307 -3.921 0.000
#> C2|t3 -0.785 0.208 -3.776 0.000
#> C2|t4 -0.146 0.318 -0.459 0.646
#> C2|t5 0.828 0.351 2.358 0.018
#> C3|t1 -1.887 0.221 -8.540 0.000
#> C3|t2 -1.191 0.234 -5.081 0.000
#> C3|t3 -0.778 0.183 -4.249 0.000
#> C3|t4 -0.022 0.246 -0.091 0.927
#> C3|t5 0.921 0.286 3.219 0.001
#> C4|t1 -0.550 0.283 -1.948 0.051
#> C4|t2 0.208 0.183 1.141 0.254
#> C4|t3 0.664 0.153 4.345 0.000
#> C4|t4 1.289 0.300 4.301 0.000
#> C4|t5 2.033 0.188 10.818 0.000
#> C5|t1 -0.886 0.177 -4.999 0.000
#> C5|t2 -0.254 0.116 -2.185 0.029
#> C5|t3 0.047 0.121 0.393 0.695
#> C5|t4 0.630 0.127 4.949 0.000
#> C5|t5 1.303 0.188 6.929 0.000
#> E1|t1 -0.728 0.363 -2.004 0.045
#> E1|t2 -0.063 0.157 -0.401 0.689
#> E1|t3 0.311 0.228 1.367 0.172
#> E1|t4 0.789 0.237 3.329 0.001
#> E1|t5 1.373 0.307 4.470 0.000
#> E2|t1 -0.867 0.339 -2.557 0.011
#> E2|t2 -0.153 0.251 -0.609 0.543
#> E2|t3 0.169 0.239 0.704 0.481
#> E2|t4 0.754 0.376 2.003 0.045
#> E2|t5 1.320 0.277 4.758 0.000
#> E3|t1 -1.625 0.174 -9.340 0.000
#> E3|t2 -1.010 0.186 -5.445 0.000
#> E3|t3 -0.518 0.114 -4.535 0.000
#> E3|t4 0.267 0.218 1.224 0.221
#> E3|t5 1.148 0.148 7.737 0.000
#> E4|t1 -1.628 0.248 -6.553 0.000
#> E4|t2 -1.061 0.367 -2.890 0.004
#> E4|t3 -0.716 0.157 -4.566 0.000
#> E4|t4 -0.263 0.412 -0.638 0.523
#> E4|t5 0.640 0.251 2.549 0.011
#> E5|t1 -1.813 0.229 -7.919 0.000
#> E5|t2 -1.199 0.206 -5.822 0.000
#> E5|t3 -0.798 0.176 -4.537 0.000
#> E5|t4 -0.168 0.135 -1.241 0.215
#> E5|t5 0.790 0.284 2.778 0.005
#> A1|t1 -0.403 0.107 -3.780 0.000
#> A1|t2 0.363 0.133 2.737 0.006
#> A1|t3 0.780 0.134 5.800 0.000
#> A1|t4 1.270 0.104 12.172 0.000
#> A1|t5 1.888 0.190 9.963 0.000
#> A2|t1 -2.156 0.185 -11.659 0.000
#> A2|t2 -1.558 0.311 -5.017 0.000
#> A2|t3 -1.223 0.392 -3.116 0.002
#> A2|t4 -0.513 0.368 -1.393 0.164
#> A2|t5 0.456 0.311 1.463 0.144
#> A3|t1 -1.849 0.212 -8.718 0.000
#> A3|t2 -1.332 0.124 -10.757 0.000
#> A3|t3 -0.995 0.138 -7.187 0.000
#> A3|t4 -0.350 0.128 -2.733 0.006
#> A3|t5 0.593 0.119 4.967 0.000
#> A4|t1 -1.716 0.266 -6.442 0.000
#> A4|t2 -1.206 0.253 -4.769 0.000
#> A4|t3 -0.927 0.199 -4.671 0.000
#> A4|t4 -0.423 0.188 -2.247 0.025
#> A4|t5 0.202 0.310 0.651 0.515
#> A5|t1 -2.015 0.174 -11.584 0.000
#> A5|t2 -1.364 0.346 -3.942 0.000
#> A5|t3 -0.946 0.256 -3.701 0.000
#> A5|t4 -0.277 0.322 -0.861 0.389
#> A5|t5 0.652 0.369 1.766 0.077
#> N1|t1 -0.711 0.177 -4.009 0.000
#> N1|t2 -0.060 0.141 -0.428 0.669
#> N1|t3 0.335 0.141 2.377 0.017
#> N1|t4 0.892 0.158 5.647 0.000
#> N1|t5 1.489 0.201 7.427 0.000
#> N2|t1 -1.163 0.141 -8.225 0.000
#> N2|t2 -0.473 0.106 -4.452 0.000
#> N2|t3 -0.094 0.101 -0.934 0.350
#> N2|t4 0.570 0.114 5.003 0.000
#> N2|t5 1.259 0.171 7.382 0.000
#> N3|t1 -0.924 0.199 -4.631 0.000
#> N3|t2 -0.210 0.133 -1.580 0.114
#> N3|t3 0.106 0.138 0.764 0.445
#> N3|t4 0.685 0.137 5.003 0.000
#> N3|t5 1.351 0.226 5.969 0.000
#> N4|t1 -0.961 0.266 -3.606 0.000
#> N4|t2 -0.235 0.138 -1.699 0.089
#> N4|t3 0.155 0.196 0.791 0.429
#> N4|t4 0.768 0.169 4.539 0.000
#> N4|t5 1.341 0.221 6.082 0.000
#> N5|t1 -0.714 0.206 -3.467 0.001
#> N5|t2 -0.035 0.153 -0.231 0.817
#> N5|t3 0.297 0.134 2.218 0.027
#> N5|t4 0.825 0.125 6.605 0.000
#> N5|t5 1.358 0.240 5.653 0.000
#>
#> Variances:
#> Estimate Std.Err z-value P(>|z|)
#> .O1 0.581
#> .O2 0.803
#> .O3 0.347
#> .O4 0.982
#> .O5 0.764
#> .C1 0.681
#> .C2 0.674
#> .C3 0.705
#> .C4 0.422
#> .C5 0.502
#> .E1 0.708
#> .E2 0.471
#> .E3 0.524
#> .E4 0.450
#> .E5 0.615
#> .A1 0.888
#> .A2 0.561
#> .A3 0.406
#> .A4 0.703
#> .A5 0.401
#> .N1 0.300
#> .N2 0.359
#> .N3 0.429
#> .N4 0.556
#> .N5 0.675
#> opn 1.000
#> con 1.000
#> ext 1.000
#> agr 1.000
#> neu 1.000
All1 lavaan
methods should carry over, such as:
head(coef(fit), 10)
#> opn=~O1 opn=~O2 opn=~O3 opn=~O4 opn=~O5 con=~C1 con=~C2
#> 0.6474239 -0.4443222 0.8077954 0.1355670 -0.4862491 0.5644095 0.5707375
#> con=~C3 con=~C4 con=~C5
#> 0.5430038 -0.7602739 -0.7055655
head(parameterestimates(fit, se = TRUE))
#> lhs op rhs est se z pvalue ci.lower ci.upper
#> 1 opn =~ O1 0.647 0.059 10.909 0.000 0.531 0.764
#> 2 opn =~ O2 -0.444 0.093 -4.757 0.000 -0.627 -0.261
#> 3 opn =~ O3 0.808 0.056 14.370 0.000 0.698 0.918
#> 4 opn =~ O4 0.136 0.056 2.409 0.016 0.025 0.246
#> 5 opn =~ O5 -0.486 0.055 -8.781 0.000 -0.595 -0.378
#> 6 con =~ C1 0.564 0.077 7.302 0.000 0.413 0.716
head(fitted(fit)$cov) # model-implied covariance matrix for the UVs
#> O1 O2 O3 O4 O5 C1
#> O1 1.00000000 -0.28766483 0.5229860 0.08776931 -0.31480927 0.11770363
#> O2 -0.28766483 1.00000000 -0.3589215 -0.06023543 0.21605128 -0.08077913
#> O3 0.52298603 -0.35892145 1.0000000 0.10951038 -0.39278976 0.14685965
#> O4 0.08776931 -0.06023543 0.1095104 1.00000000 -0.06591932 0.02464649
#> O5 -0.31480927 0.21605128 -0.3927898 -0.06591932 1.00000000 -0.08840156
#> C1 0.11770363 -0.08077913 0.1468597 0.02464649 -0.08840156 1.00000000
#> C2 C3 C4 C5 E1 E2
#> O1 0.11902330 0.11323963 -0.15854979 -0.14714072 -0.16296125 -0.21935390
#> O2 -0.08168481 -0.07771552 0.10881155 0.10098159 0.11183910 0.15054096
#> O3 0.14850622 0.14128989 -0.19782369 -0.18358852 -0.20332791 -0.27368941
#> O4 0.02492282 0.02371175 -0.03319945 -0.03081045 -0.03412319 -0.04593149
#> O5 -0.08939270 -0.08504886 0.11907915 0.11051035 0.12239239 0.16474621
#> C1 0.32212966 0.30647649 -0.42910580 -0.39822782 -0.11896000 -0.16012604
#> E3 E4 E5 A1 A2 A3
#> O1 0.20823012 0.22383136 0.18712824 -0.05848422 0.11559794 0.13439674
#> O2 -0.14290679 -0.15361381 -0.12842473 0.04013729 -0.07933401 -0.09223549
#> O3 0.25981019 0.27927598 0.23348123 -0.07297118 0.14423237 0.16768776
#> O4 0.04360224 0.04686905 0.03918362 -0.01224627 0.02420557 0.02814193
#> O5 -0.15639167 -0.16810902 -0.14054306 0.04392470 -0.08682008 -0.10093895
#> C1 0.15200580 0.16339454 0.13660165 -0.06997621 0.13831261 0.16080532
#> A4 A5 N1 N2 N3 N4
#> O1 0.09506875 0.13494469 -0.07927439 -0.07588719 -0.07159271 -0.06315260
#> O2 -0.06524498 -0.09261154 0.05440543 0.05208082 0.04913355 0.04334116
#> O3 0.11861795 0.16837144 -0.09891122 -0.09468498 -0.08932674 -0.07879594
#> O4 0.01990687 0.02825667 -0.01659962 -0.01589036 -0.01499112 -0.01322380
#> O5 -0.07140158 -0.10135049 0.05953920 0.05699523 0.05376986 0.04743089
#> C1 0.11374949 0.16146094 -0.14224875 -0.13617081 -0.12846487 -0.11332005
#> N5
#> O1 -0.05398303
#> O2 0.03704816
#> O3 -0.06735501
#> O4 -0.01130375
#> O5 0.04054407
#> C1 -0.09686632
And also plot from the semPlot package:
library(semPlot)
grouplist <- list(
lat = c("opn", "con", "ext", "agr", "neu"),
man = rep(c("opn", "con", "ext", "agr", "neu"), each = 5)
)
# Define a named vector of colors for each group (latent factor)
groupcols <- RColorBrewer::brewer.pal(5, "Set2") |>
rep(each = 5) |>
adjustcolor(alpha.f = 0.5)
# Now call semPaths
semPaths(fit, whatLabels = "est", layout = "circle", residuals = FALSE,
intercept = FALSE, groups = grouplist, color = groupcols,
legend = FALSE)
Session information
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.1 (2024-06-14)
#> os macOS 15.3
#> system aarch64, darwin20
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Asia/Brunei
#> date 2025-02-08
#> pandoc 3.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [1] CRAN (R 4.4.1)
#> arm 1.14-4 2024-04-01 [1] CRAN (R 4.4.0)
#> backports 1.5.0 2024-05-23 [1] CRAN (R 4.4.0)
#> base64enc 0.1-3 2015-07-28 [1] CRAN (R 4.4.0)
#> boot 1.3-31 2024-08-28 [1] CRAN (R 4.4.1)
#> carData 3.0-5 2022-01-06 [1] CRAN (R 4.4.0)
#> checkmate 2.3.2 2024-07-29 [1] CRAN (R 4.4.0)
#> cli 3.6.3 2024-06-21 [1] CRAN (R 4.4.0)
#> cluster 2.1.8 2024-12-11 [1] CRAN (R 4.4.1)
#> coda 0.19-4.1 2024-01-31 [1] CRAN (R 4.4.0)
#> colorspace 2.1-1 2024-07-26 [1] CRAN (R 4.4.0)
#> corpcor 1.6.10 2021-09-16 [1] CRAN (R 4.4.0)
#> data.table 1.16.4 2024-12-06 [1] CRAN (R 4.4.1)
#> digest 0.6.37 2024-08-19 [1] CRAN (R 4.4.1)
#> dplyr 1.1.4 2023-11-17 [1] CRAN (R 4.4.0)
#> evaluate 1.0.3 2025-01-10 [1] CRAN (R 4.4.1)
#> fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.0)
#> fdrtool 1.2.18 2024-08-20 [1] CRAN (R 4.4.1)
#> foreign 0.8-87 2024-06-26 [1] CRAN (R 4.4.0)
#> Formula 1.2-5 2023-02-24 [1] CRAN (R 4.4.0)
#> generics 0.1.3 2022-07-05 [1] CRAN (R 4.4.0)
#> ggplot2 3.5.1 2024-04-23 [1] CRAN (R 4.4.0)
#> glasso 1.11 2019-10-01 [1] CRAN (R 4.4.0)
#> glue 1.8.0 2024-09-30 [1] CRAN (R 4.4.1)
#> gridExtra 2.3 2017-09-09 [1] CRAN (R 4.4.0)
#> gtable 0.3.6 2024-10-25 [1] CRAN (R 4.4.1)
#> gtools 3.9.5 2023-11-20 [1] CRAN (R 4.4.0)
#> Hmisc 5.2-1 2024-12-02 [1] CRAN (R 4.4.1)
#> htmlTable 2.4.3 2024-07-21 [1] CRAN (R 4.4.0)
#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.0)
#> htmlwidgets 1.6.4 2023-12-06 [1] CRAN (R 4.4.0)
#> igraph 2.1.2 2024-12-07 [1] CRAN (R 4.4.1)
#> jpeg 0.1-10 2022-11-29 [1] CRAN (R 4.4.0)
#> knitr 1.49 2024-11-08 [1] CRAN (R 4.4.1)
#> kutils 1.73 2023-09-17 [1] CRAN (R 4.4.0)
#> lattice 0.22-6 2024-03-20 [1] CRAN (R 4.4.1)
#> lavaan * 0.6-19 2024-09-26 [1] CRAN (R 4.4.1)
#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.0)
#> lisrelToR 0.3 2024-02-07 [1] CRAN (R 4.4.0)
#> lme4 1.1-35.5 2024-07-03 [1] CRAN (R 4.4.0)
#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.4.0)
#> MASS 7.3-61 2024-06-13 [1] CRAN (R 4.4.0)
#> Matrix 1.7-1 2024-10-18 [1] CRAN (R 4.4.1)
#> mi 1.1 2022-06-06 [1] CRAN (R 4.4.0)
#> minqa 1.2.8 2024-08-17 [1] CRAN (R 4.4.0)
#> mnormt 2.1.1 2022-09-26 [1] CRAN (R 4.4.0)
#> munsell 0.5.1 2024-04-01 [1] CRAN (R 4.4.0)
#> nlme 3.1-166 2024-08-14 [1] CRAN (R 4.4.0)
#> nloptr 2.1.1 2024-06-25 [1] CRAN (R 4.4.0)
#> nnet 7.3-19 2023-05-03 [1] CRAN (R 4.4.1)
#> numDeriv 2016.8-1.1 2019-06-06 [1] CRAN (R 4.4.0)
#> OpenMx 2.21.13 2024-10-19 [1] CRAN (R 4.4.1)
#> openxlsx 4.2.7.1 2024-09-20 [1] CRAN (R 4.4.1)
#> pbapply 1.7-2 2023-06-27 [1] CRAN (R 4.4.0)
#> pbivnorm 0.6.0 2015-01-23 [1] CRAN (R 4.4.0)
#> pillar 1.10.1 2025-01-07 [1] CRAN (R 4.4.1)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.4.0)
#> lavaan.pl * 0.1.0.9002 2025-02-08 [1] local
#> plyr 1.8.9 2023-10-02 [1] CRAN (R 4.4.0)
#> png 0.1-8 2022-11-29 [1] CRAN (R 4.4.0)
#> psych 2.4.6.26 2024-06-27 [1] CRAN (R 4.4.0)
#> qgraph 1.9.8 2023-11-03 [1] CRAN (R 4.4.0)
#> quadprog 1.5-8 2019-11-20 [1] CRAN (R 4.4.0)
#> R6 2.5.1 2021-08-19 [1] CRAN (R 4.4.0)
#> RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.4.0)
#> Rcpp 1.0.14 2025-01-12 [1] CRAN (R 4.4.1)
#> RcppClock 1.1 2021-11-06 [1] CRAN (R 4.4.0)
#> RcppEigen 0.3.4.0.2 2024-08-24 [1] CRAN (R 4.4.1)
#> RcppParallel 5.1.10 2025-01-24 [1] CRAN (R 4.4.1)
#> reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.4.0)
#> rlang 1.1.5 2025-01-17 [1] CRAN (R 4.4.1)
#> rmarkdown 2.29 2024-11-04 [1] CRAN (R 4.4.1)
#> rockchalk 1.8.157 2022-08-06 [1] CRAN (R 4.4.0)
#> rpart 4.1.23 2023-12-05 [1] CRAN (R 4.4.1)
#> rstudioapi 0.17.1 2024-10-22 [1] CRAN (R 4.4.1)
#> scales 1.3.0 2023-11-28 [1] CRAN (R 4.4.0)
#> sem 3.1-16 2024-08-28 [1] CRAN (R 4.4.1)
#> semPlot * 1.1.6 2022-08-10 [1] CRAN (R 4.4.0)
#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.4.0)
#> stringi 1.8.4 2024-05-06 [1] CRAN (R 4.4.0)
#> stringr 1.5.1 2023-11-14 [1] CRAN (R 4.4.0)
#> tibble 3.2.1 2023-03-20 [1] CRAN (R 4.4.0)
#> tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.4.0)
#> ucminf 1.2.2 2025-01-23 [1] Github (hdakpo/ucminf@a3a411f)
#> utf8 1.2.4 2023-10-22 [1] CRAN (R 4.4.0)
#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.0)
#> xfun 0.50 2025-01-07 [1] CRAN (R 4.4.1)
#> XML 3.99-0.17 2024-06-25 [1] CRAN (R 4.4.0)
#> xtable 1.8-4 2019-04-21 [1] CRAN (R 4.4.0)
#> yaml 2.3.10 2024-07-26 [1] CRAN (R 4.4.0)
#> zip 2.3.1 2024-01-27 [1] CRAN (R 4.4.0)
#>
#> [1] /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library
#>
#> ──────────────────────────────────────────────────────────────────────────────