@@ -28,7 +28,9 @@ data_files <- paste0("experiments/brsem/", c(
2828 " simu_res_twofac_mp1.RData" ,
2929 " simu_res_twofac_mp2.RData" ,
3030 " simu_res_twofac_mp3.RData" ,
31- " simu_res_growth.RData"
31+ " simu_res_growth.RData" ,
32+ " simu_res_serobust_twofac.RData" ,
33+ " simu_res_serobust_growth.RData"
3234))
3335if (any(! file.exists(here :: here(data_files )))) {
3436 cat(" Downloading data files...\n " )
@@ -57,6 +59,40 @@ simu_res_twofac[20:30] <- simu_res_twofac1[20:30]
5759load(here :: here(" experiments/brsem/simu_res_growth.RData" ))
5860simu_res <- c(simu_res_twofac , simu_res_growth )
5961
62+ # simu_res is a list of length 60
63+ # 2 models x 2 reliability x 3 distributions x 5 sample sizes = 60 simulations
64+ #
65+ # > glimpse(simu_res[[1]])
66+ # Rows: 13,979
67+ # Columns: 13
68+ # $ seed <dbl> 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1236, 1236, 1236, 1236, …
69+ # $ sim <int> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, …
70+ # $ dist <chr> "Normal", "Normal", "Normal", "Normal", "Normal", "Normal", "Norma…
71+ # $ model <chr> "twofac", "twofac", "twofac", "twofac", "twofac", "twofac", "twofa…
72+ # $ rel <chr> "0.8", "0.8", "0.8", "0.8", "0.8", "0.8", "0.8", "0.8", "0.8", "0.…
73+ # $ n <dbl> 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15…
74+ # $ method <chr> "ML", "eRBM", "iRBM", "lav", "Ozenne", "JB", "BB", "ML", "eRBM", "…
75+ # $ est <named list> <0.74697154, 0.50594263, 1.40644613, 0.55439543, 0.23777413…
76+ # $ se <named list> <0.14227840, 0.10401636, 0.33865785, 0.16550320, 0.15639856…
77+ # $ truth <list> <0.7000, 0.6000, 0.7000, 0.6000, 0.2500, 0.2500, 0.1225, 0.0900, …
78+ # $ timing <dbl> 0.042, 1.211, 16.191, 0.068, 0.225, 0.889, 275.691, 0.057, 2.293, …
79+ # $ converged <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, …
80+ # $ Sigma_OK <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE,…
81+
82+ # Add new simulations about robust standard errors
83+ load(here :: here(" experiments/brsem/simu_res_serobust_twofac.RData" ))
84+ load(here :: here(" experiments/brsem/simu_res_serobust_growth.RData" ))
85+ simu_res_serobust <- c(simu_res_serobust_twofac , simu_res_serobust_growth )
86+
87+ simu_res <-
88+ map2(simu_res , simu_res_serobust , function (X , Y ) {
89+ left_join(
90+ X ,
91+ select(Y , seed , sim , dist , model , rel , n , method , serob = se )
92+ ) | >
93+ select(seed : se , serob , everything())
94+ })
95+
6096# # ----- Convergence statistics ------------------------------------------------
6197res_ours_nested <-
6298 simu_res | >
@@ -73,7 +109,7 @@ res_ours_nested <-
73109 } else {
74110 return (TRUE )
75111 }
76- }, se , model )
112+ }, serob , model )
77113 )
78114
79115res_conv <-
@@ -118,7 +154,7 @@ res <-
118154 grepl(" [xy][0-9]~1" , param ) ~ " nu" ,
119155 TRUE ~ NA
120156 ),
121- across(c(est , truth , se ), ~ if_else(model == " growth" & type != " alpha" , .x * 100 , .x )), # rescale back
157+ across(c(est , truth , se , serob ), ~ if_else(model == " growth" & type != " alpha" , .x * 100 , .x )), # rescale back
122158 dist = factor (dist , levels = c(" Normal" , " Kurtosis" , " Non-normal" )),
123159 rel = factor (rel , levels = c(" 0.8" , " 0.5" ), labels = c(" Rel = 0.8" , " Rel = 0.5" )),
124160 method = factor (
@@ -128,7 +164,8 @@ res <-
128164 ),
129165 bias = est - truth ,
130166 relbias = bias / truth ,
131- covered = truth < = est + qnorm(0.975 ) * se & truth > = est - qnorm(0.975 ) * se
167+ covered = truth < = est + qnorm(0.975 ) * serob & truth > = est - qnorm(0.975 ) * serob ,
168+ covrdse = truth < = est + qnorm(0.975 ) * se & truth > = est - qnorm(0.975 ) * se
132169 )
133170
134171# Load D&R two factor sims
@@ -139,7 +176,9 @@ if (!file.exists(dr_data_file)) {
139176 load(dr_data_file )
140177}
141178
142- # For two-factor model BB & JB, get from res_dr
179+ # For two-factor model BB & JB, get from res_dr (more stable and "nicer" results
180+ # compared to ours -- but the BB & JB for growth models were rerun by us, and
181+ # results similar to D&R 2022)
143182res <-
144183 res | >
145184 filter(! (method %in% c(" Bootstrap" , " Jackknife" ) & model == " twofac" )) | >
@@ -153,7 +192,8 @@ res <-
153192plot_df <-
154193 res | >
155194 filter(method %in% c(" ML" , " eRBM" , " iRBM" )) | >
156- filter( converged , ! is.na(se )) | >
195+ filter(converged , ! is.na(se )) | >
196+ filter(param %in% c(twofacpars , growthpars )) | >
157197 # for each kind of model, filter bad standard errors
158198 filter(! (model == " twofac" & abs(se ) > 5 )) | >
159199 filter(! (model == " growth" & abs(se ) > 500 )) | >
@@ -167,7 +207,8 @@ plot_df <-
167207plot_df50 <-
168208 res | >
169209 filter(method %in% c(" ML" , " eRBM" , " iRBM" )) | >
170- filter( converged , ! is.na(se )) | >
210+ filter(converged , ! is.na(se )) | >
211+ filter(param %in% c(twofacpars , growthpars )) | >
171212 # for each kind of model, filter bad standard errors
172213 filter(! (model == " twofac" & abs(se ) > 5 )) | >
173214 filter(! (model == " growth" & abs(se ) > 500 )) | >
@@ -244,12 +285,18 @@ create_summdf <- function(model, rel) {
244285
245286create_covrdf <- function (model ) {
246287 i <- res $ model == model
247- if (model == " growth " ) i <- i & res $ method != " REML"
288+ if (model == " twofac " ) i <- i & res $ method != " REML"
248289
249290 res | >
250- filter(dist != " Kurtosis" , param %in% c(twofacpars , growthpars ), i ) | >
291+ filter(i ) | >
292+ filter(dist != " Kurtosis" , param %in% c(twofacpars , growthpars )) | >
251293 filter(! (model == " twofac" & abs(se ) > 5 )) | >
252294 filter(! (model == " growth" & abs(se ) > 500 )) | >
295+ filter(method != " lav" ) | >
296+ mutate(covered = case_when(
297+ is.na(covered ) ~ covrdse , # plug in the JB and BB standard errors
298+ TRUE ~ covered
299+ )) | >
253300 summarise(
254301 covr = mean(covered , na.rm = TRUE ),
255302 .by = c(dist : method , param )
@@ -412,3 +459,5 @@ save(twofacpars, growthpars, mycols, simu_id,
412459 bias_growth_80_df , bias_growth_50_df , covr_growth_df ,
413460 tab_bias , tab_covr ,
414461 file = here :: here(" experiments/brsem/results.RData" ))
462+
463+ save(twofacpars , growthpars , mycols , simu_id , res , file = here :: here(" experiments/brsem/full_res.RData" ))
0 commit comments