Last updated: 2020-03-31

Checks: 7 0

Knit directory: mcfa-para-est/

This reproducible R Markdown analysis was created with workflowr (version 1.5.0). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20190614) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility. The version displayed above was the version of the Git repository at the time these results were generated.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
    Ignored:    data/compiled_para_results.txt
    Ignored:    data/results_bias_est.csv
    Ignored:    manuscript/
    Ignored:    output/fact-cov-converge-largeN.pdf
    Ignored:    output/fact-cov-converge-medN.pdf
    Ignored:    output/fact-cov-converge-smallN.pdf
    Ignored:    output/loading-converge-largeN.pdf
    Ignored:    output/loading-converge-medN.pdf
    Ignored:    output/loading-converge-smallN.pdf
    Ignored:    sera-presentation/

Untracked files:
    Untracked:  analysis/ml-cfa-parameter-bias-factor-loadings.Rmd
    Untracked:  analysis/ml-cfa-parameter-bias-level1-factor-covariances.Rmd
    Untracked:  analysis/ml-cfa-parameter-bias-level2-factor-covariances.Rmd
    Untracked:  analysis/ml-cfa-parameter-bias-level2-factor-variances.Rmd
    Untracked:  analysis/ml-cfa-parameter-bias-overview.Rmd

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


There are no past versions. Publish this analysis with wflow_publish() to start tracking its development.


rm(list=ls())
source(paste0(getwd(),"/code/load_packages.R"))
source(paste0(getwd(),"/code/get_data.R"))
sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] xtable_1.8-4          kableExtra_1.1.0      MplusAutomation_0.7-3
 [4] data.table_1.12.6     patchwork_1.0.0       forcats_0.4.0        
 [7] stringr_1.4.0         dplyr_0.8.3           purrr_0.3.3          
[10] readr_1.3.1           tidyr_1.0.0           tibble_2.1.3         
[13] ggplot2_3.2.1         tidyverse_1.3.0      

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.3        lubridate_1.7.4   lattice_0.20-38   assertthat_0.2.1 
 [5] zeallot_0.1.0     rprojroot_1.3-2   digest_0.6.23     R6_2.4.1         
 [9] cellranger_1.1.0  plyr_1.8.4        backports_1.1.5   reprex_0.3.0     
[13] evaluate_0.14     coda_0.19-3       httr_1.4.1        pillar_1.4.2     
[17] rlang_0.4.2       lazyeval_0.2.2    readxl_1.3.1      rstudioapi_0.10  
[21] texreg_1.36.23    rmarkdown_1.18    gsubfn_0.7        proto_1.0.0      
[25] webshot_0.5.2     pander_0.6.3      munsell_0.5.0     broom_0.5.2      
[29] compiler_3.6.1    httpuv_1.5.2      modelr_0.1.5      xfun_0.11        
[33] pkgconfig_2.0.3   htmltools_0.4.0   tidyselect_0.2.5  workflowr_1.5.0  
[37] viridisLite_0.3.0 crayon_1.3.4      dbplyr_1.4.2      withr_2.1.2      
[41] later_1.0.0       grid_3.6.1        nlme_3.1-140      jsonlite_1.6     
[45] gtable_0.3.0      lifecycle_0.1.0   DBI_1.0.0         git2r_0.26.1     
[49] magrittr_1.5      scales_1.1.0      cli_1.1.0         stringi_1.4.3    
[53] fs_1.3.1          promises_1.1.0    xml2_1.2.2        generics_0.0.2   
[57] vctrs_0.2.0       boot_1.3-22       tools_3.6.1       glue_1.3.1       
[61] hms_0.5.2         parallel_3.6.1    yaml_2.2.0        colorspace_1.4-1 
[65] rvest_0.3.5       knitr_1.26        haven_2.2.0      

Convergence

Model converge is when …

Single Condition Breakdown

Estimation Method

c <- sim_results %>%
  group_by(Estimator) %>%
  summarise(Converge=mean(Converge))
colnames(c)<- c("Estimation Method", "Convergence")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Estimation Method Convergence
MLR 0.9998
ULSMV 0.9990
WLSMV 0.9998

Level-2 Sample Size

c <- sim_results %>%
  group_by(ss_l2) %>%
  summarise(Converge=mean(Converge))
colnames(c)<- c("Level-2 N", "Convergence")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Level-2 N Convergence
30 0.9984
50 0.9999
100 0.9999
200 0.9999

Level-1 Sample Size

c <- sim_results %>%
  group_by(ss_l1) %>%
  summarise(Converge=mean(Converge))
colnames(c)<- c("Level-1 N", "Convergence")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Level-1 N Convergence
5 0.9989
10 0.9998
30 0.9998

ICC Observed Variables

c <- sim_results %>%
  group_by(icc_ov) %>%
  summarise(Converge=mean(Converge))
colnames(c)<- c("ICC Observed Variable", "Convergence")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
ICC Observed Variable Convergence
0.1 0.9998
0.3 0.9998
0.5 0.9989

ICC Latent Variables

c <- sim_results %>%
  group_by(icc_lv) %>%
  summarise(Converge=mean(Converge))
colnames(c)<- c("ICC Latent Variable", "Convergence")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
ICC Latent Variable Convergence
0.1 0.9995
0.5 0.9995

Convergence by Estimation Method and Sample Sizes

Estimation Method & Level-2 Sample Size

c <- sim_results %>%
  group_by(Estimator, ss_l2) %>%
  summarise(Converge=mean(Converge))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l2', 'Converge')], 
           c[ c$Estimator == 'ULSMV', 'Converge'], 
           c[ c$Estimator == 'WLSMV', 'Converge'])
colnames(c1) <- c('Level-2 N', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 1, 'Estimation Method'=3))
Estimation Method
Level-2 N MLR ULSMV WLSMV
30 1.0000 0.9961 0.9992
50 0.9999 0.9998 0.9999
100 0.9998 1.0000 1.0000
200 0.9996 1.0000 1.0000

Estimation Method & Level-1 Sample Size

c <- sim_results %>%
  group_by(Estimator, ss_l1) %>%
  summarise(Converge=mean(Converge))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l1', 'Converge')], 
           c[ c$Estimator == 'ULSMV', 'Converge'], 
           c[ c$Estimator == 'WLSMV', 'Converge'])
colnames(c1) <- c('Level-1 N', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 1, 'Estimation Method'=3))
Estimation Method
Level-1 N MLR ULSMV WLSMV
5 0.9999 0.9973 0.9994
10 0.9999 0.9997 0.9999
30 0.9996 0.9999 1.0000

Estimation Method, Level-2 Sample Size & Level-1 Sample Size

c <- sim_results %>%
  group_by(Estimator, ss_l1, ss_l2) %>%
  summarise(Converge=mean(Converge))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l1', 'ss_l2', 'Converge')], 
           c[ c$Estimator == 'ULSMV', 'Converge'], 
           c[ c$Estimator == 'WLSMV', 'Converge'])
colnames(c1) <- c('Level-1 N', 'Level-2 N', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 2, 'Estimation Method'=3))
Estimation Method
Level-1 N Level-2 N MLR ULSMV WLSMV
5 30 1.0000 0.9897 0.9977
5 50 1.0000 0.9997 1.0000
5 100 1.0000 1.0000 1.0000
5 200 0.9997 1.0000 1.0000
10 30 1.0000 0.9990 1.0000
10 50 1.0000 0.9997 0.9997
10 100 1.0000 1.0000 1.0000
10 200 0.9997 1.0000 1.0000
30 30 1.0000 0.9997 1.0000
30 50 0.9997 1.0000 1.0000
30 100 0.9993 1.0000 1.0000
30 200 0.9993 1.0000 1.0000

Across all conditions

c <- sim_results %>%
  group_by(Estimator, ss_l1, ss_l2, icc_ov, icc_lv) %>%
  summarise(Converge=mean(Converge))

c1 <- cbind(c[ c$Estimator == 'MLR', c('ss_l2', 'ss_l1', 'icc_ov', 'icc_lv', 'Converge')],
            c[ c$Estimator == 'ULSMV', 'Converge'],
            c[ c$Estimator == 'WLSMV', 'Converge'])
colnames(c1) <- c('Level-2 N', 'Level-1 N', 'ICC-OV', 'ICC-LV', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 4, 'Estimation Method'=3))
Estimation Method
Level-2 N Level-1 N ICC-OV ICC-LV MLR ULSMV WLSMV
30 5 0.1 0.1 1.000 0.998 0.992
30 5 0.1 0.5 1.000 1.000 1.000
30 5 0.3 0.1 1.000 0.998 1.000
30 5 0.3 0.5 1.000 1.000 1.000
30 5 0.5 0.1 1.000 0.966 0.998
30 5 0.5 0.5 1.000 0.976 0.996
50 5 0.1 0.1 1.000 1.000 1.000
50 5 0.1 0.5 1.000 1.000 1.000
50 5 0.3 0.1 1.000 1.000 1.000
50 5 0.3 0.5 1.000 1.000 1.000
50 5 0.5 0.1 1.000 0.998 1.000
50 5 0.5 0.5 1.000 1.000 1.000
100 5 0.1 0.1 1.000 1.000 1.000
100 5 0.1 0.5 1.000 1.000 1.000
100 5 0.3 0.1 1.000 1.000 1.000
100 5 0.3 0.5 1.000 1.000 1.000
100 5 0.5 0.1 1.000 1.000 1.000
100 5 0.5 0.5 1.000 1.000 1.000
200 5 0.1 0.1 1.000 1.000 1.000
200 5 0.1 0.5 1.000 1.000 1.000
200 5 0.3 0.1 1.000 1.000 1.000
200 5 0.3 0.5 1.000 1.000 1.000
200 5 0.5 0.1 1.000 1.000 1.000
200 5 0.5 0.5 0.998 1.000 1.000
30 10 0.1 0.1 1.000 1.000 1.000
30 10 0.1 0.5 1.000 1.000 1.000
30 10 0.3 0.1 1.000 1.000 1.000
30 10 0.3 0.5 1.000 1.000 1.000
30 10 0.5 0.1 1.000 0.998 1.000
30 10 0.5 0.5 1.000 0.996 1.000
50 10 0.1 0.1 1.000 1.000 1.000
50 10 0.1 0.5 1.000 0.998 0.998
50 10 0.3 0.1 1.000 1.000 1.000
50 10 0.3 0.5 1.000 1.000 1.000
50 10 0.5 0.1 1.000 1.000 1.000
50 10 0.5 0.5 1.000 1.000 1.000
100 10 0.1 0.1 1.000 1.000 1.000
100 10 0.1 0.5 1.000 1.000 1.000
100 10 0.3 0.1 1.000 1.000 1.000
100 10 0.3 0.5 1.000 1.000 1.000
100 10 0.5 0.1 1.000 1.000 1.000
100 10 0.5 0.5 1.000 1.000 1.000
200 10 0.1 0.1 1.000 1.000 1.000
200 10 0.1 0.5 1.000 1.000 1.000
200 10 0.3 0.1 0.998 1.000 1.000
200 10 0.3 0.5 1.000 1.000 1.000
200 10 0.5 0.1 1.000 1.000 1.000
200 10 0.5 0.5 1.000 1.000 1.000
30 30 0.1 0.1 1.000 1.000 1.000
30 30 0.1 0.5 1.000 1.000 1.000
30 30 0.3 0.1 1.000 1.000 1.000
30 30 0.3 0.5 1.000 1.000 1.000
30 30 0.5 0.1 1.000 1.000 1.000
30 30 0.5 0.5 1.000 0.998 1.000
50 30 0.1 0.1 1.000 1.000 1.000
50 30 0.1 0.5 1.000 1.000 1.000
50 30 0.3 0.1 1.000 1.000 1.000
50 30 0.3 0.5 0.998 1.000 1.000
50 30 0.5 0.1 1.000 1.000 1.000
50 30 0.5 0.5 1.000 1.000 1.000
100 30 0.1 0.1 1.000 1.000 1.000
100 30 0.1 0.5 1.000 1.000 1.000
100 30 0.3 0.1 1.000 1.000 1.000
100 30 0.3 0.5 0.996 1.000 1.000
100 30 0.5 0.1 1.000 1.000 1.000
100 30 0.5 0.5 1.000 1.000 1.000
200 30 0.1 0.1 1.000 1.000 1.000
200 30 0.1 0.5 1.000 1.000 1.000
200 30 0.3 0.1 1.000 1.000 1.000
200 30 0.3 0.5 0.996 1.000 1.000
200 30 0.5 0.1 1.000 1.000 1.000
200 30 0.5 0.5 1.000 1.000 1.000

Admissibility Summary

Admissibility rates are first subsetted to the converged models. So, the rates may seem misleading and not directly relatable across all conditions and models due to differences in convergence rates.

c.sim_results <- filter(sim_results, Converge == 1)

Single Condition Breakdown

Estimation Method

c <- c.sim_results %>%
  group_by(Estimator) %>%
  summarise(Admissible=mean(Admissible))
colnames(c)<- c("Estimation Method", "Admissible")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Estimation Method Admissible
MLR 0.8340
ULSMV 0.7651
WLSMV 0.7217

Level-2 Sample Size

c <- c.sim_results %>%
  group_by(ss_l2) %>%
  summarise(Admissible=mean(Admissible))
colnames(c)<- c("Level-2 N", "Admissible")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Level-2 N Admissible
30 0.5993
50 0.7160
100 0.8424
200 0.9364

Level-1 Sample Size

c <- c.sim_results %>%
  group_by(ss_l1) %>%
  summarise(Admissible=mean(Admissible))
colnames(c)<- c("Level-1 N", "Admissible")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
Level-1 N Admissible
5 0.6524
10 0.7837
30 0.8846

ICC Observed Variables

c <- c.sim_results %>%
  group_by(icc_ov) %>%
  summarise(Admissible=mean(Admissible))
colnames(c)<- c("ICC Observed Variable", "Admissible")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
ICC Observed Variable Admissible
0.1 0.6774
0.3 0.8554
0.5 0.7881

ICC Latent Variables

c <- c.sim_results %>%
  group_by(icc_lv) %>%
  summarise(Admissible=mean(Admissible))
colnames(c)<- c("ICC Latent Variable", "Admissible")

kable(c, format='html', digits=4) %>%
    kable_styling(full_width = T)
ICC Latent Variable Admissible
0.1 0.6953
0.5 0.8520

Admissible Replications by Estimation Method and Sample Sizes

Estimation Method & Level-2 Sample Size

c <- c.sim_results %>%
  group_by(Estimator, ss_l2) %>%
  summarise(Admissible=mean(Admissible))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l2', 'Admissible')], 
           c[ c$Estimator == 'ULSMV', 'Admissible'], 
           c[ c$Estimator == 'WLSMV', 'Admissible'])
colnames(c1) <- c('Level-2 N', 'MLR', 'ULSMV', 'WLSMV')

kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 1, 'Estimation Method'=3))
Estimation Method
Level-2 N MLR ULSMV WLSMV
30 0.6994 0.5809 0.5175
50 0.7916 0.7064 0.6501
100 0.8906 0.8366 0.8000
200 0.9543 0.9358 0.9192

Estimation Method & Level-1 Sample Size

c <- c.sim_results %>%
  group_by(Estimator, ss_l1) %>%
  summarise(Admissible=mean(Admissible))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l1', 'Admissible')], 
           c[ c$Estimator == 'ULSMV', 'Admissible'], 
           c[ c$Estimator == 'WLSMV', 'Admissible'])
colnames(c1) <- c('Level-1 N', 'MLR', 'ULSMV', 'WLSMV')

kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 1, 'Estimation Method'=3))
Estimation Method
Level-1 N MLR ULSMV WLSMV
5 0.7455 0.6267 0.5849
10 0.8409 0.7780 0.7321
30 0.9156 0.8902 0.8481

Estimation Method, Level-2 Sample Size & Level-1 Sample Size

c <- c.sim_results %>%
  group_by(Estimator, ss_l1, ss_l2) %>%
  summarise(Admissible=mean(Admissible))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l1', 'ss_l2', 'Admissible')], 
           c[ c$Estimator == 'ULSMV', 'Admissible'], 
           c[ c$Estimator == 'WLSMV', 'Admissible'])
colnames(c1) <- c('Level-1 N', 'Level-2 N', 'MLR', 'ULSMV', 'WLSMV')

kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 2, 'Estimation Method'=3))
Estimation Method
Level-1 N Level-2 N MLR ULSMV WLSMV
5 30 0.5753 0.4052 0.3558
5 50 0.6773 0.5318 0.4700
5 100 0.8057 0.6920 0.6647
5 200 0.9236 0.8753 0.8487
10 30 0.6847 0.5736 0.5080
10 50 0.7957 0.7076 0.6606
10 100 0.9200 0.8730 0.8243
10 200 0.9633 0.9577 0.9357
30 30 0.8383 0.7623 0.6883
30 50 0.9020 0.8797 0.8197
30 100 0.9463 0.9447 0.9110
30 200 0.9760 0.9743 0.9733

Admissible Replications for individual conditions

c <- c.sim_results %>%
  group_by(Estimator, ss_l1, ss_l2, icc_ov, icc_lv) %>%
  summarise(Admissible=mean(Admissible))

c1 <- cbind(c[ c$Estimator == 'MLR', c('ss_l2', 'ss_l1', 'icc_ov', 'icc_lv', 'Admissible')],
            c[ c$Estimator == 'ULSMV', 'Admissible'],
            c[ c$Estimator == 'WLSMV', 'Admissible'])
colnames(c1) <- c('Level-2 N', 'Level-1 N', 'ICC-OV', 'ICC-LV', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=4) %>%
  kable_styling(full_width = T) %>%
  add_header_above(c(' '= 4, 'Estimation Method'=3))
Estimation Method
Level-2 N Level-1 N ICC-OV ICC-LV MLR ULSMV WLSMV
30 5 0.1 0.1 0.522 0.0301 0.0484
30 5 0.1 0.5 0.372 0.0360 0.0240
30 5 0.3 0.1 0.468 0.3567 0.2500
30 5 0.3 0.5 0.792 0.7300 0.6740
30 5 0.5 0.1 0.360 0.3354 0.2244
30 5 0.5 0.5 0.938 0.9529 0.9137
50 5 0.1 0.1 0.560 0.1380 0.1460
50 5 0.1 0.5 0.500 0.0920 0.0520
50 5 0.3 0.1 0.548 0.5420 0.4040
50 5 0.3 0.5 0.972 0.9380 0.8680
50 5 0.5 0.1 0.488 0.4830 0.3580
50 5 0.5 0.5 0.996 0.9980 0.9920
100 5 0.1 0.1 0.752 0.4940 0.5560
100 5 0.1 0.5 0.726 0.3140 0.2380
100 5 0.3 0.1 0.760 0.7580 0.6820
100 5 0.3 0.5 0.996 0.9900 0.9820
100 5 0.5 0.1 0.600 0.5960 0.5320
100 5 0.5 0.5 1.000 1.0000 0.9980
200 5 0.1 0.1 0.952 0.8900 0.9000
200 5 0.1 0.5 0.956 0.7280 0.6140
200 5 0.3 0.1 0.890 0.8800 0.8620
200 5 0.3 0.5 1.000 1.0000 1.0000
200 5 0.5 0.1 0.744 0.7540 0.7160
200 5 0.5 0.5 1.000 1.0000 1.0000
30 10 0.1 0.1 0.608 0.3520 0.3640
30 10 0.1 0.5 0.494 0.1340 0.0800
30 10 0.3 0.1 0.584 0.5740 0.4180
30 10 0.3 0.5 0.988 0.9520 0.8540
30 10 0.5 0.1 0.446 0.4489 0.3580
30 10 0.5 0.5 0.988 0.9819 0.9740
50 10 0.1 0.1 0.832 0.6680 0.7260
50 10 0.1 0.5 0.762 0.3868 0.2184
50 10 0.3 0.1 0.698 0.6980 0.6180
50 10 0.3 0.5 1.000 0.9940 0.9760
50 10 0.5 0.1 0.482 0.4980 0.4240
50 10 0.5 0.5 1.000 1.0000 1.0000
100 10 0.1 0.1 0.970 0.9320 0.9460
100 10 0.1 0.5 0.988 0.7540 0.5180
100 10 0.3 0.1 0.890 0.8840 0.8460
100 10 0.3 0.5 1.000 1.0000 0.9980
100 10 0.5 0.1 0.672 0.6680 0.6380
100 10 0.5 0.5 1.000 1.0000 1.0000
200 10 0.1 0.1 1.000 0.9980 1.0000
200 10 0.1 0.5 1.000 0.9780 0.8560
200 10 0.3 0.1 0.984 0.9800 0.9800
200 10 0.3 0.5 1.000 1.0000 1.0000
200 10 0.5 0.1 0.796 0.7900 0.7780
200 10 0.5 0.5 1.000 1.0000 1.0000
30 30 0.1 0.1 0.950 0.9020 0.8900
30 30 0.1 0.5 0.938 0.5180 0.2340
30 30 0.3 0.1 0.688 0.6900 0.6360
30 30 0.3 0.5 1.000 0.9900 0.9500
30 30 0.5 0.1 0.460 0.4820 0.4320
30 30 0.5 0.5 0.994 0.9920 0.9880
50 30 0.1 0.1 0.996 0.9880 0.9900
50 30 0.1 0.5 0.994 0.8440 0.5520
50 30 0.3 0.1 0.830 0.8480 0.8160
50 30 0.3 0.5 1.000 1.0000 1.0000
50 30 0.5 0.1 0.592 0.5980 0.5600
50 30 0.5 0.5 1.000 1.0000 1.0000
100 30 0.1 0.1 1.000 1.0000 1.0000
100 30 0.1 0.5 1.000 0.9700 0.8120
100 30 0.3 0.1 0.962 0.9600 0.9620
100 30 0.3 0.5 1.000 1.0000 1.0000
100 30 0.5 0.1 0.716 0.7380 0.6920
100 30 0.5 0.5 1.000 1.0000 1.0000
200 30 0.1 0.1 1.000 1.0000 1.0000
200 30 0.1 0.5 1.000 1.0000 0.9820
200 30 0.3 0.1 0.998 1.0000 0.9980
200 30 0.3 0.5 1.000 1.0000 1.0000
200 30 0.5 0.1 0.858 0.8460 0.8600
200 30 0.5 0.5 1.000 1.0000 1.0000

Manuscript Table

c <- sim_results %>%
  group_by(Estimator, ss_l2) %>%
  mutate(A = ifelse(is.na(Admissible), 0, Admissible)) %>%
  summarise(Admissible=mean(A, na.rm = T))

c1 <- cbind(c[ c$Estimator == 'MLR', c( 'ss_l2','Admissible')], 
           c[ c$Estimator == 'ULSMV', 'Admissible'], 
           c[ c$Estimator == 'WLSMV', 'Admissible'])
colnames(c1) <- c('Level-2 N_2', 'MLR', 'ULSMV', 'WLSMV')


kable(c1, format='html', digits=3) %>%
  kable_styling(full_width = T)
Level-2 N_2 MLR ULSMV WLSMV
30 0.699 0.579 0.517
50 0.792 0.706 0.650
100 0.890 0.837 0.800
200 0.954 0.936 0.919
print(xtable(c1, digits = 3,align=c("l", "l", "r", "r", "r"),
             display=c("s", "d", "f", "f", "f"),
             caption="Rates of admissible replications",
             label="tb:admiss"),
      booktabs = T, include.rownames = F,
      caption.placement = "top")
% latex table generated in R 3.6.1 by xtable 1.8-4 package
% Tue Mar 31 15:55:49 2020
\begin{table}[ht]
\centering
\caption{Rates of admissible replications} 
\label{tb:admiss}
\begin{tabular}{lrrr}
  \toprule
Level-2 N\_2 & MLR & ULSMV & WLSMV \\ 
  \midrule
  30 & 0.699 & 0.579 & 0.517 \\ 
    50 & 0.792 & 0.706 & 0.650 \\ 
   100 & 0.890 & 0.837 & 0.800 \\ 
   200 & 0.954 & 0.936 & 0.919 \\ 
   \bottomrule
\end{tabular}
\end{table}

sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] xtable_1.8-4          kableExtra_1.1.0      MplusAutomation_0.7-3
 [4] data.table_1.12.6     patchwork_1.0.0       forcats_0.4.0        
 [7] stringr_1.4.0         dplyr_0.8.3           purrr_0.3.3          
[10] readr_1.3.1           tidyr_1.0.0           tibble_2.1.3         
[13] ggplot2_3.2.1         tidyverse_1.3.0      

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.3        lubridate_1.7.4   lattice_0.20-38   assertthat_0.2.1 
 [5] zeallot_0.1.0     rprojroot_1.3-2   digest_0.6.23     R6_2.4.1         
 [9] cellranger_1.1.0  plyr_1.8.4        backports_1.1.5   reprex_0.3.0     
[13] evaluate_0.14     coda_0.19-3       highr_0.8         httr_1.4.1       
[17] pillar_1.4.2      rlang_0.4.2       lazyeval_0.2.2    readxl_1.3.1     
[21] rstudioapi_0.10   texreg_1.36.23    rmarkdown_1.18    gsubfn_0.7       
[25] proto_1.0.0       webshot_0.5.2     pander_0.6.3      munsell_0.5.0    
[29] broom_0.5.2       compiler_3.6.1    httpuv_1.5.2      modelr_0.1.5     
[33] xfun_0.11         pkgconfig_2.0.3   htmltools_0.4.0   tidyselect_0.2.5 
[37] workflowr_1.5.0   viridisLite_0.3.0 crayon_1.3.4      dbplyr_1.4.2     
[41] withr_2.1.2       later_1.0.0       grid_3.6.1        nlme_3.1-140     
[45] jsonlite_1.6      gtable_0.3.0      lifecycle_0.1.0   DBI_1.0.0        
[49] git2r_0.26.1      magrittr_1.5      scales_1.1.0      cli_1.1.0        
[53] stringi_1.4.3     fs_1.3.1          promises_1.1.0    xml2_1.2.2       
[57] generics_0.0.2    vctrs_0.2.0       boot_1.3-22       tools_3.6.1      
[61] glue_1.3.1        hms_0.5.2         parallel_3.6.1    yaml_2.2.0       
[65] colorspace_1.4-1  rvest_0.3.5       knitr_1.26        haven_2.2.0