Tabulating results from structural equation models

library(tidySEM)
library(lavaan)
library(MplusAutomation)
#> Version:  0.7-3
#> We work hard to write this free software. Please help us get credit by citing: 
#> 
#> Hallquist, M. N. & Wiley, J. F. (2018). MplusAutomation: An R Package for Facilitating Large-Scale Latent Variable Analyses in Mplus. Structural Equation Modeling, 25, 621-638. doi: 10.1080/10705511.2017.1402334.
#> 
#> -- see citation("MplusAutomation").
library(dplyr)

tidySEM tabulates the results of different types of models in the same uniform way. This facilitates parsing the output into Tables and Figures for publication.

Output from lavaan

As an example, let’s tabulate the results from a classic lavaan tutorial example for a multiple group model. First, we run the model:

HS.model <- '  visual =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
              speed   =~ x7 + x8 + x9 '
fit <- cfa(HS.model, 
           data = HolzingerSwineford1939, 
           group = "school")

The results can be tabulated using the lavaan function summary():

summary(fit)
#> lavaan 0.6-7 ended normally after 57 iterations
#> 
#>   Estimator                                         ML
#>   Optimization method                           NLMINB
#>   Number of free parameters                         60
#>                                                       
#>   Number of observations per group:                   
#>     Pasteur                                        156
#>     Grant-White                                    145
#>                                                       
#> Model Test User Model:
#>                                                       
#>   Test statistic                               115.851
#>   Degrees of freedom                                48
#>   P-value (Chi-square)                           0.000
#>   Test statistic for each group:
#>     Pasteur                                     64.309
#>     Grant-White                                 51.542
#> 
#> Parameter Estimates:
#> 
#>   Standard errors                             Standard
#>   Information                                 Expected
#>   Information saturated (h1) model          Structured
#> 
#> 
#> Group 1 [Pasteur]:
#> 
#> Latent Variables:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   visual =~                                           
#>     x1                1.000                           
#>     x2                0.394    0.122    3.220    0.001
#>     x3                0.570    0.140    4.076    0.000
#>   textual =~                                          
#>     x4                1.000                           
#>     x5                1.183    0.102   11.613    0.000
#>     x6                0.875    0.077   11.421    0.000
#>   speed =~                                            
#>     x7                1.000                           
#>     x8                1.125    0.277    4.057    0.000
#>     x9                0.922    0.225    4.104    0.000
#> 
#> Covariances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   visual ~~                                           
#>     textual           0.479    0.106    4.531    0.000
#>     speed             0.185    0.077    2.397    0.017
#>   textual ~~                                          
#>     speed             0.182    0.069    2.628    0.009
#> 
#> Intercepts:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .x1                4.941    0.095   52.249    0.000
#>    .x2                5.984    0.098   60.949    0.000
#>    .x3                2.487    0.093   26.778    0.000
#>    .x4                2.823    0.092   30.689    0.000
#>    .x5                3.995    0.105   38.183    0.000
#>    .x6                1.922    0.079   24.321    0.000
#>    .x7                4.432    0.087   51.181    0.000
#>    .x8                5.563    0.078   71.214    0.000
#>    .x9                5.418    0.079   68.440    0.000
#>     visual            0.000                           
#>     textual           0.000                           
#>     speed             0.000                           
#> 
#> Variances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .x1                0.298    0.232    1.286    0.198
#>    .x2                1.334    0.158    8.464    0.000
#>    .x3                0.989    0.136    7.271    0.000
#>    .x4                0.425    0.069    6.138    0.000
#>    .x5                0.456    0.086    5.292    0.000
#>    .x6                0.290    0.050    5.780    0.000
#>    .x7                0.820    0.125    6.580    0.000
#>    .x8                0.510    0.116    4.406    0.000
#>    .x9                0.680    0.104    6.516    0.000
#>     visual            1.097    0.276    3.967    0.000
#>     textual           0.894    0.150    5.963    0.000
#>     speed             0.350    0.126    2.778    0.005
#> 
#> 
#> Group 2 [Grant-White]:
#> 
#> Latent Variables:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   visual =~                                           
#>     x1                1.000                           
#>     x2                0.736    0.155    4.760    0.000
#>     x3                0.925    0.166    5.583    0.000
#>   textual =~                                          
#>     x4                1.000                           
#>     x5                0.990    0.087   11.418    0.000
#>     x6                0.963    0.085   11.377    0.000
#>   speed =~                                            
#>     x7                1.000                           
#>     x8                1.226    0.187    6.569    0.000
#>     x9                1.058    0.165    6.429    0.000
#> 
#> Covariances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   visual ~~                                           
#>     textual           0.408    0.098    4.153    0.000
#>     speed             0.276    0.076    3.639    0.000
#>   textual ~~                                          
#>     speed             0.222    0.073    3.022    0.003
#> 
#> Intercepts:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .x1                4.930    0.095   51.696    0.000
#>    .x2                6.200    0.092   67.416    0.000
#>    .x3                1.996    0.086   23.195    0.000
#>    .x4                3.317    0.093   35.625    0.000
#>    .x5                4.712    0.096   48.986    0.000
#>    .x6                2.469    0.094   26.277    0.000
#>    .x7                3.921    0.086   45.819    0.000
#>    .x8                5.488    0.087   63.174    0.000
#>    .x9                5.327    0.085   62.571    0.000
#>     visual            0.000                           
#>     textual           0.000                           
#>     speed             0.000                           
#> 
#> Variances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .x1                0.715    0.126    5.676    0.000
#>    .x2                0.899    0.123    7.339    0.000
#>    .x3                0.557    0.103    5.409    0.000
#>    .x4                0.315    0.065    4.870    0.000
#>    .x5                0.419    0.072    5.812    0.000
#>    .x6                0.406    0.069    5.880    0.000
#>    .x7                0.600    0.091    6.584    0.000
#>    .x8                0.401    0.094    4.249    0.000
#>    .x9                0.535    0.089    6.010    0.000
#>     visual            0.604    0.160    3.762    0.000
#>     textual           0.942    0.152    6.177    0.000
#>     speed             0.461    0.118    3.910    0.000

Alternatively, we can use the tidySEM function table_results():

table_results(fit)
#>                              label est_sig   se       confint       group
#> 1             visual.BY.x1.Pasteur    1.00       [1.00, 1.00]     Pasteur
#> 2             visual.BY.x2.Pasteur  0.39** 0.12  [0.15, 0.63]     Pasteur
#> 3             visual.BY.x3.Pasteur 0.57*** 0.14  [0.30, 0.84]     Pasteur
#> 4            textual.BY.x4.Pasteur    1.00       [1.00, 1.00]     Pasteur
#> 5            textual.BY.x5.Pasteur 1.18*** 0.10  [0.98, 1.38]     Pasteur
#> 6            textual.BY.x6.Pasteur 0.87*** 0.08  [0.72, 1.03]     Pasteur
#> 7              speed.BY.x7.Pasteur    1.00       [1.00, 1.00]     Pasteur
#> 8              speed.BY.x8.Pasteur 1.12*** 0.28  [0.58, 1.67]     Pasteur
#> 9              speed.BY.x9.Pasteur 0.92*** 0.22  [0.48, 1.36]     Pasteur
#> 10            Variances.x1.Pasteur    0.30 0.23 [-0.16, 0.75]     Pasteur
#> 11            Variances.x2.Pasteur 1.33*** 0.16  [1.02, 1.64]     Pasteur
#> 12            Variances.x3.Pasteur 0.99*** 0.14  [0.72, 1.26]     Pasteur
#> 13            Variances.x4.Pasteur 0.43*** 0.07  [0.29, 0.56]     Pasteur
#> 14            Variances.x5.Pasteur 0.46*** 0.09  [0.29, 0.62]     Pasteur
#> 15            Variances.x6.Pasteur 0.29*** 0.05  [0.19, 0.39]     Pasteur
#> 16            Variances.x7.Pasteur 0.82*** 0.12  [0.58, 1.06]     Pasteur
#> 17            Variances.x8.Pasteur 0.51*** 0.12  [0.28, 0.74]     Pasteur
#> 18            Variances.x9.Pasteur 0.68*** 0.10  [0.48, 0.88]     Pasteur
#> 19        Variances.visual.Pasteur 1.10*** 0.28  [0.55, 1.64]     Pasteur
#> 20       Variances.textual.Pasteur 0.89*** 0.15  [0.60, 1.19]     Pasteur
#> 21         Variances.speed.Pasteur  0.35** 0.13  [0.10, 0.60]     Pasteur
#> 22     visual.WITH.textual.Pasteur 0.48*** 0.11  [0.27, 0.69]     Pasteur
#> 23       visual.WITH.speed.Pasteur   0.19* 0.08  [0.03, 0.34]     Pasteur
#> 24      textual.WITH.speed.Pasteur  0.18** 0.07  [0.05, 0.32]     Pasteur
#> 25                Means.x1.Pasteur 4.94*** 0.09  [4.76, 5.13]     Pasteur
#> 26                Means.x2.Pasteur 5.98*** 0.10  [5.79, 6.18]     Pasteur
#> 27                Means.x3.Pasteur 2.49*** 0.09  [2.31, 2.67]     Pasteur
#> 28                Means.x4.Pasteur 2.82*** 0.09  [2.64, 3.00]     Pasteur
#> 29                Means.x5.Pasteur 4.00*** 0.10  [3.79, 4.20]     Pasteur
#> 30                Means.x6.Pasteur 1.92*** 0.08  [1.77, 2.08]     Pasteur
#> 31                Means.x7.Pasteur 4.43*** 0.09  [4.26, 4.60]     Pasteur
#> 32                Means.x8.Pasteur 5.56*** 0.08  [5.41, 5.72]     Pasteur
#> 33                Means.x9.Pasteur 5.42*** 0.08  [5.26, 5.57]     Pasteur
#> 34            Means.visual.Pasteur    0.00       [0.00, 0.00]     Pasteur
#> 35           Means.textual.Pasteur    0.00       [0.00, 0.00]     Pasteur
#> 36             Means.speed.Pasteur    0.00       [0.00, 0.00]     Pasteur
#> 37        visual.BY.x1.Grant-White    1.00       [1.00, 1.00] Grant-White
#> 38        visual.BY.x2.Grant-White 0.74*** 0.15  [0.43, 1.04] Grant-White
#> 39        visual.BY.x3.Grant-White 0.92*** 0.17  [0.60, 1.25] Grant-White
#> 40       textual.BY.x4.Grant-White    1.00       [1.00, 1.00] Grant-White
#> 41       textual.BY.x5.Grant-White 0.99*** 0.09  [0.82, 1.16] Grant-White
#> 42       textual.BY.x6.Grant-White 0.96*** 0.08  [0.80, 1.13] Grant-White
#> 43         speed.BY.x7.Grant-White    1.00       [1.00, 1.00] Grant-White
#> 44         speed.BY.x8.Grant-White 1.23*** 0.19  [0.86, 1.59] Grant-White
#> 45         speed.BY.x9.Grant-White 1.06*** 0.16  [0.74, 1.38] Grant-White
#> 46        Variances.x1.Grant-White 0.71*** 0.13  [0.47, 0.96] Grant-White
#> 47        Variances.x2.Grant-White 0.90*** 0.12  [0.66, 1.14] Grant-White
#> 48        Variances.x3.Grant-White 0.56*** 0.10  [0.36, 0.76] Grant-White
#> 49        Variances.x4.Grant-White 0.32*** 0.06  [0.19, 0.44] Grant-White
#> 50        Variances.x5.Grant-White 0.42*** 0.07  [0.28, 0.56] Grant-White
#> 51        Variances.x6.Grant-White 0.41*** 0.07  [0.27, 0.54] Grant-White
#> 52        Variances.x7.Grant-White 0.60*** 0.09  [0.42, 0.78] Grant-White
#> 53        Variances.x8.Grant-White 0.40*** 0.09  [0.22, 0.59] Grant-White
#> 54        Variances.x9.Grant-White 0.53*** 0.09  [0.36, 0.71] Grant-White
#> 55    Variances.visual.Grant-White 0.60*** 0.16  [0.29, 0.92] Grant-White
#> 56   Variances.textual.Grant-White 0.94*** 0.15  [0.64, 1.24] Grant-White
#> 57     Variances.speed.Grant-White 0.46*** 0.12  [0.23, 0.69] Grant-White
#> 58 visual.WITH.textual.Grant-White 0.41*** 0.10  [0.22, 0.60] Grant-White
#> 59   visual.WITH.speed.Grant-White 0.28*** 0.08  [0.13, 0.42] Grant-White
#> 60  textual.WITH.speed.Grant-White  0.22** 0.07  [0.08, 0.37] Grant-White
#> 61            Means.x1.Grant-White 4.93*** 0.10  [4.74, 5.12] Grant-White
#> 62            Means.x2.Grant-White 6.20*** 0.09  [6.02, 6.38] Grant-White
#> 63            Means.x3.Grant-White 2.00*** 0.09  [1.83, 2.16] Grant-White
#> 64            Means.x4.Grant-White 3.32*** 0.09  [3.13, 3.50] Grant-White
#> 65            Means.x5.Grant-White 4.71*** 0.10  [4.52, 4.90] Grant-White
#> 66            Means.x6.Grant-White 2.47*** 0.09  [2.28, 2.65] Grant-White
#> 67            Means.x7.Grant-White 3.92*** 0.09  [3.75, 4.09] Grant-White
#> 68            Means.x8.Grant-White 5.49*** 0.09  [5.32, 5.66] Grant-White
#> 69            Means.x9.Grant-White 5.33*** 0.09  [5.16, 5.49] Grant-White
#> 70        Means.visual.Grant-White    0.00       [0.00, 0.00] Grant-White
#> 71       Means.textual.Grant-White    0.00       [0.00, 0.00] Grant-White
#> 72         Means.speed.Grant-White    0.00       [0.00, 0.00] Grant-White

Output from Mplus

Now, we’ll reproduce the same analysis in ‘Mplus’. The tidySEM package has a function measurement() to generate measurement models automatically. However, to illustrate the fact that tidySEM is compatible with existing solutions, we will specify the syntax for this example manually, using the package MplusAutomation. This code will only work on your machine if you have Mplus installed and R can find it. First, we run the model:

fit <- mplusModeler(mplusObject(VARIABLE = "grouping IS school (1 = GW 2 = Pas);",
                                MODEL = c("visual BY x1 x2 x3;",
                                          "textual BY x4 x5 x6;",
                                          "speed BY x7 x8 x9;"),
                                usevariables = c(paste0("x", 1:9), "school"),
                                rdata = HolzingerSwineford1939),
                    modelout = "example.inp",
                    run = 1L)
fit$results$parameters
#> $unstandardized
#>           paramHeader   param    est    se  est_se    pval Group
#> 1           VISUAL.BY      X1  1.000 0.000 999.000 999.000    GW
#> 2           VISUAL.BY      X2  0.576 0.109   5.262   0.000    GW
#> 3           VISUAL.BY      X3  0.798 0.130   6.139   0.000    GW
#> 4          TEXTUAL.BY      X4  1.000 0.000 999.000 999.000    GW
#> 5          TEXTUAL.BY      X5  1.120 0.066  16.962   0.000    GW
#> 6          TEXTUAL.BY      X6  0.932 0.057  16.315   0.000    GW
#> 7            SPEED.BY      X7  1.000 0.000 999.000 999.000    GW
#> 8            SPEED.BY      X8  1.130 0.137   8.258   0.000    GW
#> 9            SPEED.BY      X9  1.009 0.160   6.326   0.000    GW
#> 10       TEXTUAL.WITH  VISUAL  0.427 0.098   4.366   0.000    GW
#> 11         SPEED.WITH  VISUAL  0.329 0.084   3.932   0.000    GW
#> 12         SPEED.WITH TEXTUAL  0.236 0.075   3.154   0.002    GW
#> 13              Means  VISUAL  0.000 0.000 999.000 999.000    GW
#> 14              Means TEXTUAL  0.000 0.000 999.000 999.000    GW
#> 15              Means   SPEED  0.000 0.000 999.000 999.000    GW
#> 16         Intercepts      X1  4.854 0.094  51.772   0.000    GW
#> 17         Intercepts      X2  6.066 0.077  78.581   0.000    GW
#> 18         Intercepts      X3  2.153 0.084  25.726   0.000    GW
#> 19         Intercepts      X4  3.354 0.088  38.162   0.000    GW
#> 20         Intercepts      X5  4.680 0.098  47.941   0.000    GW
#> 21         Intercepts      X6  2.463 0.084  29.285   0.000    GW
#> 22         Intercepts      X7  4.065 0.083  49.067   0.000    GW
#> 23         Intercepts      X8  5.430 0.083  65.788   0.000    GW
#> 24         Intercepts      X9  5.286 0.078  67.679   0.000    GW
#> 25          Variances  VISUAL  0.708 0.162   4.382   0.000    GW
#> 26          Variances TEXTUAL  0.870 0.133   6.550   0.000    GW
#> 27          Variances   SPEED  0.505 0.119   4.249   0.000    GW
#> 28 Residual.Variances      X1  0.654 0.131   4.973   0.000    GW
#> 29 Residual.Variances      X2  0.964 0.127   7.573   0.000    GW
#> 30 Residual.Variances      X3  0.641 0.113   5.685   0.000    GW
#> 31 Residual.Variances      X4  0.343 0.064   5.397   0.000    GW
#> 32 Residual.Variances      X5  0.376 0.074   5.101   0.000    GW
#> 33 Residual.Variances      X6  0.437 0.068   6.389   0.000    GW
#> 34 Residual.Variances      X7  0.625 0.103   6.078   0.000    GW
#> 35 Residual.Variances      X8  0.434 0.101   4.308   0.000    GW
#> 36 Residual.Variances      X9  0.522 0.101   5.192   0.000    GW
#> 37          VISUAL.BY      X1  1.000 0.000 999.000 999.000   PAS
#> 38          VISUAL.BY      X2  0.576 0.109   5.262   0.000   PAS
#> 39          VISUAL.BY      X3  0.798 0.130   6.139   0.000   PAS
#> 40         TEXTUAL.BY      X4  1.000 0.000 999.000 999.000   PAS
#> 41         TEXTUAL.BY      X5  1.120 0.066  16.962   0.000   PAS
#> 42         TEXTUAL.BY      X6  0.932 0.057  16.315   0.000   PAS
#> 43           SPEED.BY      X7  1.000 0.000 999.000 999.000   PAS
#> 44           SPEED.BY      X8  1.130 0.137   8.258   0.000   PAS
#> 45           SPEED.BY      X9  1.009 0.160   6.326   0.000   PAS
#> 46       TEXTUAL.WITH  VISUAL  0.410 0.107   3.844   0.000   PAS
#> 47         SPEED.WITH  VISUAL  0.178 0.067   2.657   0.008   PAS
#> 48         SPEED.WITH TEXTUAL  0.180 0.063   2.867   0.004   PAS
#> 49              Means  VISUAL  0.148 0.127   1.164   0.244   PAS
#> 50              Means TEXTUAL -0.576 0.117  -4.935   0.000   PAS
#> 51              Means   SPEED  0.177 0.094   1.884   0.060   PAS
#> 52         Intercepts      X1  4.854 0.094  51.772   0.000   PAS
#> 53         Intercepts      X2  6.066 0.077  78.581   0.000   PAS
#> 54         Intercepts      X3  2.153 0.084  25.726   0.000   PAS
#> 55         Intercepts      X4  3.354 0.088  38.162   0.000   PAS
#> 56         Intercepts      X5  4.680 0.098  47.941   0.000   PAS
#> 57         Intercepts      X6  2.463 0.084  29.285   0.000   PAS
#> 58         Intercepts      X7  4.065 0.083  49.067   0.000   PAS
#> 59         Intercepts      X8  5.430 0.083  65.788   0.000   PAS
#> 60         Intercepts      X9  5.286 0.078  67.679   0.000   PAS
#> 61          Variances  VISUAL  0.796 0.192   4.146   0.000   PAS
#> 62          Variances TEXTUAL  0.879 0.132   6.654   0.000   PAS
#> 63          Variances   SPEED  0.322 0.085   3.786   0.000   PAS
#> 64 Residual.Variances      X1  0.555 0.157   3.539   0.000   PAS
#> 65 Residual.Variances      X2  1.296 0.161   8.071   0.000   PAS
#> 66 Residual.Variances      X3  0.944 0.148   6.399   0.000   PAS
#> 67 Residual.Variances      X4  0.445 0.072   6.209   0.000   PAS
#> 68 Residual.Variances      X5  0.502 0.086   5.859   0.000   PAS
#> 69 Residual.Variances      X6  0.263 0.051   5.124   0.000   PAS
#> 70 Residual.Variances      X7  0.888 0.127   7.006   0.000   PAS
#> 71 Residual.Variances      X8  0.541 0.099   5.483   0.000   PAS
#> 72 Residual.Variances      X9  0.654 0.101   6.476   0.000   PAS

The results can be tabulated using the MplusAutomation function coef.mplus.model():

coef(fit)
#> $GW
#>                 Label   est    se    pval
#> 1          X1<-VISUAL 1.000 0.000 999.000
#> 2          X2<-VISUAL 0.576 0.109   0.000
#> 3          X3<-VISUAL 0.798 0.130   0.000
#> 4         X4<-TEXTUAL 1.000 0.000 999.000
#> 5         X5<-TEXTUAL 1.120 0.066   0.000
#> 6         X6<-TEXTUAL 0.932 0.057   0.000
#> 7           X7<-SPEED 1.000 0.000 999.000
#> 8           X8<-SPEED 1.130 0.137   0.000
#> 9           X9<-SPEED 1.009 0.160   0.000
#> 10   TEXTUAL<->VISUAL 0.427 0.098   0.000
#> 11     SPEED<->VISUAL 0.329 0.084   0.000
#> 12    SPEED<->TEXTUAL 0.236 0.075   0.002
#> 13      VISUAL<-Means 0.000 0.000 999.000
#> 14     TEXTUAL<-Means 0.000 0.000 999.000
#> 15       SPEED<-Means 0.000 0.000 999.000
#> 16     X1<-Intercepts 4.854 0.094   0.000
#> 17     X2<-Intercepts 6.066 0.077   0.000
#> 18     X3<-Intercepts 2.153 0.084   0.000
#> 19     X4<-Intercepts 3.354 0.088   0.000
#> 20     X5<-Intercepts 4.680 0.098   0.000
#> 21     X6<-Intercepts 2.463 0.084   0.000
#> 22     X7<-Intercepts 4.065 0.083   0.000
#> 23     X8<-Intercepts 5.430 0.083   0.000
#> 24     X9<-Intercepts 5.286 0.078   0.000
#> 25    VISUAL<->VISUAL 0.708 0.162   0.000
#> 26  TEXTUAL<->TEXTUAL 0.870 0.133   0.000
#> 27      SPEED<->SPEED 0.505 0.119   0.000
#> 28            X1<->X1 0.654 0.131   0.000
#> 29            X2<->X2 0.964 0.127   0.000
#> 30            X3<->X3 0.641 0.113   0.000
#> 31            X4<->X4 0.343 0.064   0.000
#> 32            X5<->X5 0.376 0.074   0.000
#> 33            X6<->X6 0.437 0.068   0.000
#> 34            X7<->X7 0.625 0.103   0.000
#> 35            X8<->X8 0.434 0.101   0.000
#> 36            X9<->X9 0.522 0.101   0.000
#> 
#> $PAS
#>                 Label    est    se    pval
#> 37         X1<-VISUAL  1.000 0.000 999.000
#> 38         X2<-VISUAL  0.576 0.109   0.000
#> 39         X3<-VISUAL  0.798 0.130   0.000
#> 40        X4<-TEXTUAL  1.000 0.000 999.000
#> 41        X5<-TEXTUAL  1.120 0.066   0.000
#> 42        X6<-TEXTUAL  0.932 0.057   0.000
#> 43          X7<-SPEED  1.000 0.000 999.000
#> 44          X8<-SPEED  1.130 0.137   0.000
#> 45          X9<-SPEED  1.009 0.160   0.000
#> 46   TEXTUAL<->VISUAL  0.410 0.107   0.000
#> 47     SPEED<->VISUAL  0.178 0.067   0.008
#> 48    SPEED<->TEXTUAL  0.180 0.063   0.004
#> 49      VISUAL<-Means  0.148 0.127   0.244
#> 50     TEXTUAL<-Means -0.576 0.117   0.000
#> 51       SPEED<-Means  0.177 0.094   0.060
#> 52     X1<-Intercepts  4.854 0.094   0.000
#> 53     X2<-Intercepts  6.066 0.077   0.000
#> 54     X3<-Intercepts  2.153 0.084   0.000
#> 55     X4<-Intercepts  3.354 0.088   0.000
#> 56     X5<-Intercepts  4.680 0.098   0.000
#> 57     X6<-Intercepts  2.463 0.084   0.000
#> 58     X7<-Intercepts  4.065 0.083   0.000
#> 59     X8<-Intercepts  5.430 0.083   0.000
#> 60     X9<-Intercepts  5.286 0.078   0.000
#> 61    VISUAL<->VISUAL  0.796 0.192   0.000
#> 62  TEXTUAL<->TEXTUAL  0.879 0.132   0.000
#> 63      SPEED<->SPEED  0.322 0.085   0.000
#> 64            X1<->X1  0.555 0.157   0.000
#> 65            X2<->X2  1.296 0.161   0.000
#> 66            X3<->X3  0.944 0.148   0.000
#> 67            X4<->X4  0.445 0.072   0.000
#> 68            X5<->X5  0.502 0.086   0.000
#> 69            X6<->X6  0.263 0.051   0.000
#> 70            X7<->X7  0.888 0.127   0.000
#> 71            X8<->X8  0.541 0.099   0.000
#> 72            X9<->X9  0.654 0.101   0.000
#> 
#> attr(,"class")
#> [1] "mplus.model.coefs.list" "list"

Alternatively, we can use the tidySEM function table_results():

table_results(fit)
#> Calculated confidence intervals from est and se.
#>                        label  est_sig   se pval        confint group
#> 1            VISUAL.BY.X1.GW     1.00                             GW
#> 2            VISUAL.BY.X2.GW  0.58*** 0.11 0.00 [ 0.36,  0.79]    GW
#> 3            VISUAL.BY.X3.GW  0.80*** 0.13 0.00 [ 0.54,  1.05]    GW
#> 4           TEXTUAL.BY.X4.GW     1.00                             GW
#> 5           TEXTUAL.BY.X5.GW  1.12*** 0.07 0.00 [ 0.99,  1.25]    GW
#> 6           TEXTUAL.BY.X6.GW  0.93*** 0.06 0.00 [ 0.82,  1.04]    GW
#> 7             SPEED.BY.X7.GW     1.00                             GW
#> 8             SPEED.BY.X8.GW  1.13*** 0.14 0.00 [ 0.86,  1.40]    GW
#> 9             SPEED.BY.X9.GW  1.01*** 0.16 0.00 [ 0.70,  1.32]    GW
#> 10    TEXTUAL.WITH.VISUAL.GW  0.43*** 0.10 0.00 [ 0.23,  0.62]    GW
#> 11      SPEED.WITH.VISUAL.GW  0.33*** 0.08 0.00 [ 0.16,  0.49]    GW
#> 12     SPEED.WITH.TEXTUAL.GW   0.24** 0.07 0.00 [ 0.09,  0.38]    GW
#> 13           Means.VISUAL.GW     0.00                             GW
#> 14          Means.TEXTUAL.GW     0.00                             GW
#> 15            Means.SPEED.GW     0.00                             GW
#> 16          Intercepts.X1.GW  4.85*** 0.09 0.00 [ 4.67,  5.04]    GW
#> 17          Intercepts.X2.GW  6.07*** 0.08 0.00 [ 5.92,  6.22]    GW
#> 18          Intercepts.X3.GW  2.15*** 0.08 0.00 [ 1.99,  2.32]    GW
#> 19          Intercepts.X4.GW  3.35*** 0.09 0.00 [ 3.18,  3.53]    GW
#> 20          Intercepts.X5.GW  4.68*** 0.10 0.00 [ 4.49,  4.87]    GW
#> 21          Intercepts.X6.GW  2.46*** 0.08 0.00 [ 2.30,  2.63]    GW
#> 22          Intercepts.X7.GW  4.07*** 0.08 0.00 [ 3.90,  4.23]    GW
#> 23          Intercepts.X8.GW  5.43*** 0.08 0.00 [ 5.27,  5.59]    GW
#> 24          Intercepts.X9.GW  5.29*** 0.08 0.00 [ 5.13,  5.44]    GW
#> 25       Variances.VISUAL.GW  0.71*** 0.16 0.00 [ 0.39,  1.03]    GW
#> 26      Variances.TEXTUAL.GW  0.87*** 0.13 0.00 [ 0.61,  1.13]    GW
#> 27        Variances.SPEED.GW  0.50*** 0.12 0.00 [ 0.27,  0.74]    GW
#> 28  Residual.Variances.X1.GW  0.65*** 0.13 0.00 [ 0.40,  0.91]    GW
#> 29  Residual.Variances.X2.GW  0.96*** 0.13 0.00 [ 0.72,  1.21]    GW
#> 30  Residual.Variances.X3.GW  0.64*** 0.11 0.00 [ 0.42,  0.86]    GW
#> 31  Residual.Variances.X4.GW  0.34*** 0.06 0.00 [ 0.22,  0.47]    GW
#> 32  Residual.Variances.X5.GW  0.38*** 0.07 0.00 [ 0.23,  0.52]    GW
#> 33  Residual.Variances.X6.GW  0.44*** 0.07 0.00 [ 0.30,  0.57]    GW
#> 34  Residual.Variances.X7.GW  0.62*** 0.10 0.00 [ 0.42,  0.83]    GW
#> 35  Residual.Variances.X8.GW  0.43*** 0.10 0.00 [ 0.24,  0.63]    GW
#> 36  Residual.Variances.X9.GW  0.52*** 0.10 0.00 [ 0.32,  0.72]    GW
#> 37          VISUAL.BY.X1.PAS     1.00                            PAS
#> 38          VISUAL.BY.X2.PAS  0.58*** 0.11 0.00 [ 0.36,  0.79]   PAS
#> 39          VISUAL.BY.X3.PAS  0.80*** 0.13 0.00 [ 0.54,  1.05]   PAS
#> 40         TEXTUAL.BY.X4.PAS     1.00                            PAS
#> 41         TEXTUAL.BY.X5.PAS  1.12*** 0.07 0.00 [ 0.99,  1.25]   PAS
#> 42         TEXTUAL.BY.X6.PAS  0.93*** 0.06 0.00 [ 0.82,  1.04]   PAS
#> 43           SPEED.BY.X7.PAS     1.00                            PAS
#> 44           SPEED.BY.X8.PAS  1.13*** 0.14 0.00 [ 0.86,  1.40]   PAS
#> 45           SPEED.BY.X9.PAS  1.01*** 0.16 0.00 [ 0.70,  1.32]   PAS
#> 46   TEXTUAL.WITH.VISUAL.PAS  0.41*** 0.11 0.00 [ 0.20,  0.62]   PAS
#> 47     SPEED.WITH.VISUAL.PAS   0.18** 0.07 0.01 [ 0.05,  0.31]   PAS
#> 48    SPEED.WITH.TEXTUAL.PAS   0.18** 0.06 0.00 [ 0.06,  0.30]   PAS
#> 49          Means.VISUAL.PAS     0.15 0.13 0.24 [-0.10,  0.40]   PAS
#> 50         Means.TEXTUAL.PAS -0.58*** 0.12 0.00 [-0.81, -0.35]   PAS
#> 51           Means.SPEED.PAS     0.18 0.09 0.06 [-0.01,  0.36]   PAS
#> 52         Intercepts.X1.PAS  4.85*** 0.09 0.00 [ 4.67,  5.04]   PAS
#> 53         Intercepts.X2.PAS  6.07*** 0.08 0.00 [ 5.92,  6.22]   PAS
#> 54         Intercepts.X3.PAS  2.15*** 0.08 0.00 [ 1.99,  2.32]   PAS
#> 55         Intercepts.X4.PAS  3.35*** 0.09 0.00 [ 3.18,  3.53]   PAS
#> 56         Intercepts.X5.PAS  4.68*** 0.10 0.00 [ 4.49,  4.87]   PAS
#> 57         Intercepts.X6.PAS  2.46*** 0.08 0.00 [ 2.30,  2.63]   PAS
#> 58         Intercepts.X7.PAS  4.07*** 0.08 0.00 [ 3.90,  4.23]   PAS
#> 59         Intercepts.X8.PAS  5.43*** 0.08 0.00 [ 5.27,  5.59]   PAS
#> 60         Intercepts.X9.PAS  5.29*** 0.08 0.00 [ 5.13,  5.44]   PAS
#> 61      Variances.VISUAL.PAS  0.80*** 0.19 0.00 [ 0.42,  1.17]   PAS
#> 62     Variances.TEXTUAL.PAS  0.88*** 0.13 0.00 [ 0.62,  1.14]   PAS
#> 63       Variances.SPEED.PAS  0.32*** 0.08 0.00 [ 0.16,  0.49]   PAS
#> 64 Residual.Variances.X1.PAS  0.56*** 0.16 0.00 [ 0.25,  0.86]   PAS
#> 65 Residual.Variances.X2.PAS  1.30*** 0.16 0.00 [ 0.98,  1.61]   PAS
#> 66 Residual.Variances.X3.PAS  0.94*** 0.15 0.00 [ 0.65,  1.23]   PAS
#> 67 Residual.Variances.X4.PAS  0.44*** 0.07 0.00 [ 0.30,  0.59]   PAS
#> 68 Residual.Variances.X5.PAS  0.50*** 0.09 0.00 [ 0.33,  0.67]   PAS
#> 69 Residual.Variances.X6.PAS  0.26*** 0.05 0.00 [ 0.16,  0.36]   PAS
#> 70 Residual.Variances.X7.PAS  0.89*** 0.13 0.00 [ 0.64,  1.14]   PAS
#> 71 Residual.Variances.X8.PAS  0.54*** 0.10 0.00 [ 0.35,  0.74]   PAS
#> 72 Residual.Variances.X9.PAS  0.65*** 0.10 0.00 [ 0.46,  0.85]   PAS