Hi all,
I am trying to run an RI-CLPM in blavaan and have a handful of questions. I'll start with the "simplest", regarding the fit indices. Based on the 2020 paper, I know that gammahat and BCFI are the best to use, but I don't know if I should be concerned about the considerably "outside the cutoff" values for BRMSEA, adj gammahat, and BTLI. For model evaluation, how should I incorporate those other indices with the good-to-acceptable BCFI and gammahat values? For context, the sample size is ~8,000 with all variables having between 3 and 6 waves of data. Below is also the structure of my current model, which includes a mix of latent and observed variables in the cross-lagged paths, though other models I run with only observed variables have similar issues. Thanks so much.
Posterior summary statistics and highest posterior density (HPD)
 90% credible intervals for devm-based fit indices:
        EAP Median  MAP   SD lower upper
BRMSEA Â Â Â 0.097 Â 0.097 0.097 0.000 0.096 0.097
BGammaHat   0.975  0.975 0.975 0.000 0.975 0.976
adjBGammaHat 0.754 Â 0.754 0.754 0.002 0.751 0.757
BMc      0.859  0.859 0.859 0.001 0.857 0.860
BCFI Â Â Â Â 0.941 Â 0.941 0.941 0.000 0.940 0.942
BTLI Â Â Â Â 0.683 Â 0.683 0.684 0.002 0.680 0.687
BNFI Â Â Â Â 0.940 Â 0.940 0.940 0.000 0.940 0.941
ri_clpm_model = '
########################################
# Mediator Measurement Model
########################################
# measurement model
MED_W2 =~ c1*indicator1_W2 + c2*indicator2_W2 + c3*indicator3_W2
MED_W4 =~ c1*indicator1_W4 + c2*indicator2_W4 + c3*indicator3_W4
MED_W6 =~ c1*indicator1_W6 + c2*indicator2_W6 + c3*indicator3_W6
# equal intercepts across time
indicator3_W2 ~ Â i1*1
indicator2_W2 ~ Â 1
indicator1_W2 ~ Â i2*1
indicator3_W4 ~ Â i1*1
indicator2_W4 ~ Â 1
indicator1_W4 ~ Â i3*1
indicator3_W6 ~ Â i1*1
indicator2_W6 ~ Â 1
indicator1_W6 ~ Â i3*1
# latent means: fix baseline to 0, estimate later waves
MED_W2 ~ 0*1
MED_W4 ~ m4*1
MED_W6 ~ m6*1
# Correlated within-task residuals across time
indicator1_W6 ~~ indicator1_W4 + indicator1_W2
indicator1_W4 ~~ indicator1_W2
indicator3_W6 ~~ indicator3_W4 + indicator3_W2
indicator3_W4 ~~ indicator3_W2
indicator2_W6 ~~ indicator2_W4 + indicator2_W2
indicator2_W4 ~~ indicator2_W2
########################################
# Create between components (RIs)
########################################
RI_predictor =~ 1*predictor_W1 + 1*predictor_W2 + 1*predictor_W3 +
        1*predictor_W4 + 1*predictor_W5 + 1*predictor_W6
RI_outcome =~ 1*outcome_W1 + 1*outcome_W2 + 1*outcome_W3 +
       1*outcome_W4 + 1*outcome_W5 + 1*outcome_W6
RI_med2 =~ 1*mediator2_W2 + 1*mediator2_W4 + 1*mediator2_W6
RI_med1 =~ 1*MED_W2 + 1*MED_W4 + 1*MED_W6
########################################
# Set residual variances of all lvs to 0
########################################
MED_W2 ~~ 0*MED_W2
MED_W4 ~~ 0*MED_W4
MED_W6 ~~ 0*MED_W6
########################################
# Set residual variances of all ovs to 0
########################################
# Predictor observed variables (waves 1-6)
predictor_W1 ~~ 0*predictor_W1
predictor_W2 ~~ 0*predictor_W2
predictor_W3 ~~ 0*predictor_W3
predictor_W4 ~~ 0*predictor_W4
predictor_W5 ~~ 0*predictor_W5
predictor_W6 ~~ 0*predictor_W6
# Outcome observed variables (waves 1-6)
outcome_W1 ~~ 0*outcome_W1
outcome_W2 ~~ 0*outcome_W2
outcome_W3 ~~ 0*outcome_W3
outcome_W4 ~~ 0*outcome_W4
outcome_W5 ~~ 0*outcome_W5
outcome_W6 ~~ 0*outcome_W6
# Mediator2 observed variables (waves 2, 4, 6)
mediator2_W2 ~~ 0*mediator2_W2
mediator2_W4 ~~ 0*mediator2_W4
mediator2_W6 ~~ 0*mediator2_W6
########################################
# Create within components
########################################
# Predictor within-person
wp_predictor_W1 =~ 1*predictor_W1
wp_predictor_W2 =~ 1*predictor_W2
wp_predictor_W3 =~ 1*predictor_W3
wp_predictor_W4 =~ 1*predictor_W4
wp_predictor_W5 =~ 1*predictor_W5
wp_predictor_W6 =~ 1*predictor_W6
# Outcome within-person
wp_outcome_W1 =~ 1*outcome_W1
wp_outcome_W2 =~ 1*outcome_W2
wp_outcome_W3 =~ 1*outcome_W3
wp_outcome_W4 =~ 1*outcome_W4
wp_outcome_W5 =~ 1*outcome_W5
wp_outcome_W6 =~ 1*outcome_W6
# Mediator2 within-person
wp_med2_W2 =~ 1*mediator2_W2
wp_med2_W4 =~ 1*mediator2_W4
wp_med2_W6 =~ 1*mediator2_W6
# Mediator1 within-person
wp_med1_W2 =~ 1*MED_W2
wp_med1_W4 =~ 1*MED_W4
wp_med1_W6 =~ 1*MED_W6
########################################
# Estimate lagged effects between within-person centered variables
########################################
# Predictor → Outcome
wp_outcome_W3 ~ c1p*wp_predictor_W1
wp_outcome_W4 ~ wp_predictor_W2
wp_outcome_W5 ~ c2p*wp_predictor_W3
wp_outcome_W6 ~ wp_predictor_W4
# Outcome → Predictor
wp_predictor_W3 ~ c3p*wp_outcome_W1
wp_predictor_W4 ~ wp_outcome_W2
wp_predictor_W5 ~ c4p*wp_outcome_W3
wp_predictor_W6 ~ wp_outcome_W4
# Predictor/Outcome → Mediators at wave 2
wp_med2_W2 ~ a1*wp_predictor_W1 + a3*wp_outcome_W1
wp_med1_W2 ~ a2*wp_predictor_W1 + a4*wp_outcome_W1
# Wave 2 → Wave 3 (bidirectional)
wp_outcome_W3 ~ b1*wp_med2_W2 + b2*wp_med1_W2
wp_predictor_W3 ~ b3*wp_med2_W2 + b4*wp_med1_W2
# Mediation effects (wave 1→2→3)
ind_dir1 := a1*b1
ind_dir2 := a2*b2
tot_dir1 := c1p + (a1*b1) + (a2*b2)
ind_revdir1 := a3*b3
ind_revdir2 := a4*b4
tot_revdir1 := c3p + (a3*b3) + (a4*b4)
# Wave 3 → Wave 4
wp_med2_W4 ~ a5*wp_predictor_W3 + a7*wp_outcome_W3
wp_med1_W4 ~ a6*wp_predictor_W3 + a8*wp_outcome_W3
# Wave 4 → Wave 5 (bidirectional)
wp_outcome_W5 ~ b5*wp_med2_W4 + b6*wp_med1_W4
wp_predictor_W5 ~ b7*wp_med2_W4 + b8*wp_med1_W4
# Mediation effects (wave 3→4→5)
ind_dir3 := a5*b5
ind_dir4 := a6*b6
tot_dir2 := c2p + (a5*b5) + (a6*b6)
ind_revdir3 := a7*b7
ind_revdir4 := a8*b8
tot_revdir2 := c4p + (a7*b7) + (a8*b8)
# Wave 5 → Wave 6
wp_med2_W6 ~ wp_predictor_W5 + wp_outcome_W5
wp_med1_W6 ~ wp_predictor_W5 + wp_outcome_W5
########################################
# Estimate covariance between within-person variables at first wave
########################################
wp_predictor_W1 ~~ wp_outcome_W1
wp_med2_W2 ~~ wp_med1_W2 + wp_predictor_W2 + wp_outcome_W2
wp_med1_W2 ~~ wp_predictor_W2 + wp_outcome_W2
########################################
# Estimate covariances between residuals of within-person variables
########################################
wp_predictor_W2 ~~ wp_outcome_W2
wp_predictor_W3 ~~ wp_outcome_W3
wp_predictor_W4 ~~ wp_outcome_W4 + wp_med2_W4 + wp_med1_W4
wp_outcome_W4 ~~ wp_med2_W4 + wp_med1_W4
wp_med2_W4 ~~ wp_med1_W4
wp_predictor_W5 ~~ wp_outcome_W5
wp_predictor_W6 ~~ wp_outcome_W6 + wp_med2_W6 + wp_med1_W6
wp_outcome_W6 ~~ wp_med2_W6 + wp_med1_W6
wp_med2_W6 ~~ wp_med1_W6
########################################
# Estimate variance and covariance of random intercepts
########################################
RI_predictor ~~ RI_outcome + RI_med2 + RI_med1 + RI_predictor
RI_outcome ~~ RI_med2 + RI_med1 + RI_outcome
RI_med2 ~~ RI_med1 + RI_med2
RI_med1 ~~ RI_med1
########################################
# Estimate (residual) variance of within-person centered variables
########################################
wp_predictor_W1 ~~ wp_predictor_W1 # Variances
wp_outcome_W1 ~~ wp_outcome_W1
wp_predictor_W2 ~~ wp_predictor_W2
wp_outcome_W2 ~~ wp_outcome_W2
wp_med1_W2 ~~ wp_med1_W2
wp_med2_W2 ~~ wp_med2_W2
wp_predictor_W3 ~~ wp_predictor_W3 # Residual variances
wp_outcome_W3 ~~ wp_outcome_W3
wp_predictor_W4 ~~ wp_predictor_W4
wp_outcome_W4 ~~ wp_outcome_W4
wp_med1_W4 ~~ wp_med1_W4
wp_med2_W4 ~~ wp_med2_W4
wp_predictor_W5 ~~ wp_predictor_W5
wp_outcome_W5 ~~ wp_outcome_W5
wp_predictor_W6 ~~ wp_predictor_W6
wp_outcome_W6 ~~ wp_outcome_W6
wp_med1_W6 ~~ wp_med1_W6
wp_med2_W6 ~~ wp_med2_W6
########################################
# Within-person autoregressions
########################################
# Mediator2
wp_med2_W6 ~ wp_med2_W4
wp_med2_W4 ~ wp_med2_W2
# Mediator1
wp_med1_W6 ~ wp_med1_W4
wp_med1_W4 ~ wp_med1_W2
# Predictor
wp_predictor_W6 ~ wp_predictor_W5
wp_predictor_W5 ~ wp_predictor_W4
wp_predictor_W4 ~ wp_predictor_W3
wp_predictor_W3 ~ wp_predictor_W2
wp_predictor_W2 ~ wp_predictor_W1
# Outcome
wp_outcome_W6 ~ wp_outcome_W5
wp_outcome_W5 ~ wp_outcome_W4
wp_outcome_W4 ~ wp_outcome_W3
wp_outcome_W3 ~ wp_outcome_W2
wp_outcome_W2 ~ wp_outcome_W1
########################################
# Additional constraints
########################################
# Set correlations between RIs and within-person factors at exogenous wave at 0
RI_predictor ~~ 0*wp_predictor_W1
RI_outcome ~~ 0*wp_outcome_W1
RI_med2 ~~ 0*wp_med2_W2
RI_med1 ~~ 0*wp_med1_W2
'
cat("Model fit began at:", format(Sys.time()), "\n")
model_bayes = blavaan::bcfa(
 model   = ri_clpm_model,
 data   = my_data,
 n.chains = 3,
 burnin  = 1000,
 sample  = 5000,
 meanstructure = T,
 int.ov.free = F,
 bcontrol = list(cores = 3),
 control  = list(
  adapt_delta  = 0.9,
  max_treedepth = 10
 )
)