Discrepancy Between MGCFA and Bayesian Approximate Measurement Invariance in blavaan

46 views
Skip to first unread message

J S

unread,
Feb 21, 2025, 11:32:31 AMFeb 21
to blavaan

Hi everyone,

I’m validating a psychological questionnaire across two dichotomous groups (age and gender). Using lavaan for Multi-Group CFA (MGCFA), I found evidence supporting scalar measurement invariance. However, when I tried Bayesian approximate measurement invariance (BAMI) in blavaan, my analysis flagged non-invariance (indicated by the ppp and the 95-CI chi-square interval.

My understanding was that BAMI is often more liberal because it allows small cross-group differences (via approximate invariance constraints; wiggle on intercepts and loadings; wiggle.sd=0.05), yet here it seems to be more conservative. I have following code to conduct the BAMI analysis: 

mod_4<-'
enhan =~ pow_res_1 + stat_5 + stat_6 + ach_adv_4
open  =~ self_act_2 + stim_var_1 + hed_pl_3 + hed_com_2
trans =~ benev_car_8 + equi_acc_3 + equi_adv_8 + sust_env_3
cons  =~ trad_soc_8 + trad_org_1 + conf_inter_5 + conf_form_7
'
bfit4_age <- bcfa(mod_4, data = valuedata, group = "age2",
                   group.equal = c("loadings", "intercepts"), wiggle = c("loadings", "intercepts"),
                   wiggle.sd = 0.05, std.lv=TRUE, )
 I referred in my approach to this tutorial: https://ecmerkle.github.io/blavaan/articles/invariance.html 
and derived the wiggle-argument (prior of .05) from previous BAMI-applications in my field.
I’m wondering if anyone could help me pinpoint what might be causing this discrepancy? Or if I am overlooking something in interpreting the results? 

Thanks in advance for your help!

Mauricio Garnier-Villarreal

unread,
Feb 23, 2025, 5:29:32 PMFeb 23
to blavaan
Hi Jannick

Could you show us the steps you took and the results? Because the ppp shouldnt be used for model comparison, or decision on the measurement invariance.

You can look at the posterior distributions of the parameters with wiggle.sd, and evaluate of it deviates for some items.
You can compare the models with LOO and WAIC, and see if the additional constraints decrease the models predictive accuracy

With more information we can provide more specific recommendations

Ed Merkle

unread,
Feb 23, 2025, 10:53:52 PMFeb 23
to Mauricio Garnier-Villarreal, blavaan
Jannick,

I agree with Mauricio that it would be helpful to see the results. It would also be worth verifying that the priors are reasonable for your model and data. The defaults in blavaan work reasonably well for many datasets, but not for all datasets (especially those where the observed variables have large variances). Some more detail on priors is here:


Ed
--
You received this message because you are subscribed to the Google Groups "blavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blavaan+u...@googlegroups.com.

J S

unread,
Feb 25, 2025, 1:28:14 PMFeb 25
to blavaan
Thank you for your input and the additional resources! 

The papers from my research subject I referred to utilizing BAMI used the ppp and the Chi-square credibility interval (CI) to decide on approximate MI between groups (e.g. https://doi.org/10.1177/0049124117701478; https://doi.org/10.1002/9781118884997.ch41; https://doi.org/10.1002/9781118884997.ch41). Here (to my understanding) the authors test one BAMI-model with loadings and intercepts approximately equal between groups and decide whether approximate MI is present when the ppp is above .05/near .5 or the CI does include 0. As I understand you, this approach does not adequately represent decisions on MI. Instead I should use a sequential approach where I compare the more restrictive models to the less restrictive models (like in an MGCFA approach). (Currently I only utilize the default priors)
If I follow this approach, I use following code to restrain the individual parameters: 

bfit4_age0 <- bcfa(workvalue_mod_4, data = valuedata, group = "age2", std.lv=TRUE)
bfit4_age1 <- bcfa(workvalue_mod_4, data = valuedata, group = "age2",
                  group.equal = "loadings", wiggle = "loadings",
                  wiggle.sd = 0.05, std.lv=TRUE)
bfit4_age2 <- bcfa(workvalue_mod_4, data = valuedata, group = "age2",

                   group.equal = c("loadings", "intercepts"), wiggle = c("loadings", "intercepts"),
                   wiggle.sd = 0.05, std.lv=TRUE) 

using the fitMeasures- & blavCompare-function I get following results, indicating worser fit with increasing restrictions based on DIC and LOO for the baseline model bfit4_age0 (see attached for better inspection)Bildschirmfoto 2025-02-25 um 19.21.57.png

Bildschirmfoto 2025-02-25 um 19.25.55.png

Additionally I have the summary of the most restrictive model with item details here: 

> blavaan::summary(bfit4_age2, fit.measures=TRUE, ci=TRUE, standardized=TRUE,estimates=TRUE, psrf = TRUE)
blavaan 0.5.6 ended normally after 1000 iterations

  Estimator                                      BAYES
  Optimization method                             MCMC
  Number of model parameters                       116
  Number of equality constraints                    32

  Number of observations per group:                  
    1                                              760
    2                                              754

  Statistic                                 MargLogLik         PPP
  Value                                     -35798.493       0.000

Parameter Estimates:



Group 1 [1]:

Latent Variables:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan =~                                                                                                  
    pw_rs_1 (.p1.)    0.982    0.052    0.884    1.085    0.982    0.609    1.000                normal(0,10)
    stat_5  (.p2.)    1.061    0.045    0.977    1.154    1.061    0.761    1.001                normal(0,10)
    stat_6  (.p3.)    1.089    0.043    1.007    1.174    1.089    0.781    1.002                normal(0,10)
    ach_d_4 (.p4.)    0.898    0.044    0.814    0.987    0.898    0.664    1.000                normal(0,10)
  open =~                                                                                                    
    slf_c_2 (.p5.)    0.621    0.037    0.549    0.695    0.621    0.616    1.000                normal(0,10)
    stm_v_1 (.p6.)    0.696    0.038    0.623    0.772    0.696    0.658    1.000                normal(0,10)
    hd_pl_3 (.p7.)    0.571    0.036    0.498    0.641    0.571    0.592    1.000                normal(0,10)
    hd_cm_2 (.p8.)    0.390    0.042    0.305    0.475    0.390    0.342    1.002                normal(0,10)
  trans =~                                                                                                  
    bnv_c_8 (.p9.)    0.730    0.037    0.658    0.802    0.730    0.662    1.000                normal(0,10)
    eq_cc_3 (.10.)    0.597    0.031    0.536    0.661    0.597    0.621    1.000                normal(0,10)
    eq_dv_8 (.11.)    0.767    0.037    0.696    0.840    0.767    0.693    0.999                normal(0,10)
    sst_n_3 (.12.)    0.788    0.043    0.705    0.874    0.788    0.593    1.000                normal(0,10)
  cons =~                                                                                                    
    trd_s_8 (.13.)    0.986    0.040    0.910    1.067    0.986    0.749    1.001                normal(0,10)
    trd_r_1 (.14.)    1.053    0.038    0.982    1.130    1.053    0.831    1.002                normal(0,10)
    cnf_n_5 (.15.)    0.695    0.038    0.619    0.766    0.695    0.594    1.001                normal(0,10)
    cnf_f_7 (.16.)    0.554    0.035    0.487    0.625    0.554    0.524    1.001                normal(0,10)

Covariances:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan ~~                                                                                                  
    open              0.526    0.038    0.450    0.600    0.526    0.526    0.999                 lkj_corr(1)
    trans             0.413    0.041    0.331    0.491    0.413    0.413    0.999                 lkj_corr(1)
    cons              0.574    0.034    0.503    0.640    0.574    0.574    0.999                 lkj_corr(1)
  open ~~                                                                                                    
    trans             0.577    0.042    0.492    0.656    0.577    0.577    1.000                 lkj_corr(1)
    cons              0.362    0.045    0.270    0.446    0.362    0.362    1.000                 lkj_corr(1)
  trans ~~                                                                                                  
    cons              0.637    0.033    0.573    0.700    0.637    0.637    0.999                 lkj_corr(1)

Intercepts:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
   .pw_rs_1 (.43.)    3.066    0.054    2.959    3.174    3.066    1.902    1.005                normal(0,32)
   .stat_5  (.44.)    3.898    0.048    3.802    3.993    3.898    2.797    1.005                normal(0,32)
   .stat_6  (.45.)    3.971    0.050    3.876    4.070    3.971    2.849    1.005                normal(0,32)
   .ach_d_4 (.46.)    4.147    0.046    4.055    4.240    4.147    3.067    1.004                normal(0,32)
   .slf_c_2 (.47.)    4.749    0.035    4.682    4.818    4.749    4.713    1.001                normal(0,32)
   .stm_v_1 (.48.)    4.636    0.038    4.564    4.708    4.636    4.380    1.000                normal(0,32)
   .hd_pl_3 (.49.)    4.935    0.034    4.869    5.004    4.935    5.118    1.001                normal(0,32)
   .hd_cm_2 (.50.)    4.738    0.039    4.662    4.813    4.738    4.156    1.000                normal(0,32)
   .bnv_c_8 (.51.)    4.404    0.038    4.330    4.479    4.404    3.994    1.000                normal(0,32)
   .eq_cc_3 (.52.)    4.604    0.032    4.539    4.668    4.604    4.789    1.000                normal(0,32)
   .eq_dv_8 (.53.)    4.465    0.039    4.388    4.540    4.465    4.032    1.001                normal(0,32)
   .sst_n_3 (.54.)    4.159    0.044    4.073    4.249    4.159    3.128    1.001                normal(0,32)
   .trd_s_8 (.55.)    4.003    0.045    3.917    4.094    4.003    3.043    1.004                normal(0,32)
   .trd_r_1 (.56.)    3.941    0.044    3.857    4.028    3.941    3.111    1.003                normal(0,32)
   .cnf_n_5 (.57.)    4.297    0.039    4.218    4.373    4.297    3.670    1.003                normal(0,32)
   .cnf_f_7 (.58.)    4.623    0.035    4.548    4.690    4.623    4.371    1.002                normal(0,32)
    enhan             0.000                               0.000    0.000                                    
    open              0.000                               0.000    0.000                                    
    trans             0.000                               0.000    0.000                                    
    cons              0.000                               0.000    0.000                                    

Variances:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
   .pow_res_1         1.634    0.099    1.448    1.842    1.634    0.629    0.999             gamma(1,.5)[sd]
   .stat_5            0.816    0.062    0.702    0.942    0.816    0.420    0.999             gamma(1,.5)[sd]
   .stat_6            0.756    0.057    0.647    0.875    0.756    0.389    1.000             gamma(1,.5)[sd]
   .ach_adv_4         1.022    0.061    0.907    1.148    1.022    0.559    1.000             gamma(1,.5)[sd]
   .self_act_2        0.629    0.043    0.550    0.714    0.629    0.620    0.999             gamma(1,.5)[sd]
   .stim_var_1        0.636    0.047    0.548    0.730    0.636    0.568    1.000             gamma(1,.5)[sd]
   .hed_pl_3          0.604    0.040    0.528    0.684    0.604    0.649    1.000             gamma(1,.5)[sd]
   .hed_com_2         1.147    0.060    1.038    1.269    1.147    0.883    1.000             gamma(1,.5)[sd]
   .benev_car_8       0.683    0.046    0.600    0.776    0.683    0.562    1.000             gamma(1,.5)[sd]
   .equi_acc_3        0.568    0.035    0.502    0.639    0.568    0.614    0.999             gamma(1,.5)[sd]
   .equi_adv_8        0.637    0.044    0.554    0.727    0.637    0.520    1.000             gamma(1,.5)[sd]
   .sust_env_3        1.146    0.072    1.009    1.292    1.146    0.648    1.000             gamma(1,.5)[sd]
   .trad_soc_8        0.759    0.053    0.658    0.866    0.759    0.438    1.000             gamma(1,.5)[sd]
   .trad_org_1        0.496    0.042    0.415    0.581    0.496    0.309    0.999             gamma(1,.5)[sd]
   .conf_inter_5      0.888    0.051    0.792    0.993    0.888    0.648    0.999             gamma(1,.5)[sd]
   .conf_form_7       0.812    0.043    0.734    0.900    0.812    0.726    0.999             gamma(1,.5)[sd]
    enhan             1.000                               1.000    1.000                                    
    open              1.000                               1.000    1.000                                    
    trans             1.000                               1.000    1.000                                    
    cons              1.000                               1.000    1.000                                    


Group 2 [2]:

Latent Variables:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan =~                                                                                                  
    pw_rs_1 (.p1.)    0.924    0.056    0.815    1.036    0.893    0.586    1.001  normal(lambda[1,1,1],0.05)
    stat_5  (.p2.)    1.047    0.054    0.944    1.157    1.012    0.713    1.000  normal(lambda[1,2,1],0.05)
    stat_6  (.p3.)    1.116    0.054    1.011    1.221    1.078    0.754    1.003  normal(lambda[1,3,1],0.05)
    ach_d_4 (.p4.)    0.943    0.051    0.840    1.046    0.911    0.620    1.001  normal(lambda[1,4,1],0.05)
  open =~                                                                                                    
    slf_c_2 (.p5.)    0.598    0.048    0.505    0.694    0.558    0.543    1.000  normal(lambda[1,5,2],0.05)
    stm_v_1 (.p6.)    0.702    0.051    0.603    0.805    0.655    0.637    1.001  normal(lambda[1,6,2],0.05)
    hd_pl_3 (.p7.)    0.582    0.047    0.494    0.676    0.543    0.533    1.000  normal(lambda[1,7,2],0.05)
    hd_cm_2 (.p8.)    0.402    0.049    0.306    0.499    0.375    0.286    1.001  normal(lambda[1,8,2],0.05)
  trans =~                                                                                                  
    bnv_c_8 (.p9.)    0.736    0.043    0.655    0.822    0.812    0.738    1.001  normal(lambda[1,9,3],0.05)
    eq_cc_3 (.10.)    0.561    0.036    0.494    0.634    0.619    0.636    1.000 normal(lambda[1,10,3],0.05)
    eq_dv_8 (.11.)    0.808    0.044    0.724    0.898    0.892    0.756    1.001 normal(lambda[1,11,3],0.05)
    sst_n_3 (.12.)    0.769    0.046    0.680    0.858    0.849    0.656    1.001 normal(lambda[1,12,3],0.05)
  cons =~                                                                                                    
    trd_s_8 (.13.)    0.998    0.048    0.909    1.096    1.053    0.809    1.002 normal(lambda[1,13,4],0.05)
    trd_r_1 (.14.)    1.013    0.048    0.924    1.116    1.069    0.847    1.001 normal(lambda[1,14,4],0.05)
    cnf_n_5 (.15.)    0.735    0.042    0.654    0.815    0.775    0.636    1.001 normal(lambda[1,15,4],0.05)
    cnf_f_7 (.16.)    0.558    0.036    0.489    0.629    0.589    0.570    1.001 normal(lambda[1,16,4],0.05)

Covariances:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan ~~                                                                                                  
    open              0.313    0.054    0.214    0.425    0.348    0.348    0.999                 lkj_corr(1)
    trans             0.217    0.053    0.117    0.324    0.203    0.203    0.999                 lkj_corr(1)
    cons              0.337    0.053    0.239    0.446    0.331    0.331    1.000                 lkj_corr(1)
  open ~~                                                                                                    
    trans             0.605    0.075    0.470    0.767    0.587    0.587    1.000                 lkj_corr(1)
    cons              0.263    0.053    0.164    0.372    0.267    0.267    1.000                 lkj_corr(1)
  trans ~~                                                                                                  
    cons              0.649    0.071    0.521    0.795    0.557    0.557    1.000                 lkj_corr(1)

Intercepts:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
   .pw_rs_1 (.43.)    2.996    0.058    2.883    3.107    2.996    1.967    1.005      normal(nu[1,1,1],0.05)
   .stat_5  (.44.)    3.959    0.058    3.842    4.074    3.959    2.790    1.005      normal(nu[1,2,1],0.05)
   .stat_6  (.45.)    4.058    0.059    3.942    4.174    4.058    2.836    1.004      normal(nu[1,3,1],0.05)
   .ach_d_4 (.46.)    4.044    0.057    3.934    4.159    4.044    2.753    1.003      normal(nu[1,4,1],0.05)
   .slf_c_2 (.47.)    4.813    0.045    4.726    4.900    4.813    4.688    1.001      normal(nu[1,5,1],0.05)
   .stm_v_1 (.48.)    4.662    0.049    4.569    4.758    4.662    4.533    1.000      normal(nu[1,6,1],0.05)
   .hd_pl_3 (.49.)    4.897    0.044    4.810    4.983    4.897    4.808    1.001      normal(nu[1,7,1],0.05)
   .hd_cm_2 (.50.)    4.653    0.044    4.570    4.739    4.653    3.551    1.000      normal(nu[1,8,1],0.05)
   .bnv_c_8 (.51.)    4.384    0.045    4.296    4.474    4.384    3.983    1.000      normal(nu[1,9,1],0.05)
   .eq_cc_3 (.52.)    4.621    0.038    4.545    4.694    4.621    4.743    1.001     normal(nu[1,10,1],0.05)
   .eq_dv_8 (.53.)    4.421    0.048    4.327    4.514    4.421    3.750    1.002     normal(nu[1,11,1],0.05)
   .sst_n_3 (.54.)    4.213    0.048    4.121    4.308    4.213    3.256    1.001     normal(nu[1,12,1],0.05)
   .trd_s_8 (.55.)    4.035    0.054    3.930    4.144    4.035    3.100    1.005     normal(nu[1,13,1],0.05)
   .trd_r_1 (.56.)    3.967    0.054    3.862    4.074    3.967    3.145    1.004     normal(nu[1,14,1],0.05)
   .cnf_n_5 (.57.)    4.183    0.044    4.094    4.268    4.183    3.430    1.002     normal(nu[1,15,1],0.05)
   .cnf_f_7 (.58.)    4.670    0.038    4.598    4.743    4.670    4.521    1.003     normal(nu[1,16,1],0.05)
    enhan            -0.515    0.066   -0.643   -0.389   -0.533   -0.533    1.003                normal(0,10)
    open              0.021    0.077   -0.129    0.169    0.023    0.023    1.001                normal(0,10)
    trans             0.027    0.070   -0.110    0.161    0.024    0.024    1.001                normal(0,10)
    cons             -0.017    0.066   -0.145    0.111   -0.016   -0.016    1.003                normal(0,10)

Variances:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
   .pow_res_1         1.522    0.093    1.348    1.715    1.522    0.656    0.999             gamma(1,.5)[sd]
   .stat_5            0.991    0.073    0.855    1.140    0.991    0.492    0.999             gamma(1,.5)[sd]
   .stat_6            0.884    0.073    0.742    1.033    0.884    0.432    1.000             gamma(1,.5)[sd]
   .ach_adv_4         1.327    0.087    1.163    1.507    1.327    0.615    0.999             gamma(1,.5)[sd]
   .self_act_2        0.743    0.046    0.651    0.838    0.743    0.705    0.999             gamma(1,.5)[sd]
   .stim_var_1        0.629    0.047    0.540    0.725    0.629    0.594    1.000             gamma(1,.5)[sd]
   .hed_pl_3          0.743    0.049    0.650    0.840    0.743    0.716    0.999             gamma(1,.5)[sd]
   .hed_com_2         1.577    0.082    1.421    1.742    1.577    0.918    0.999             gamma(1,.5)[sd]
   .benev_car_8       0.551    0.039    0.479    0.629    0.551    0.455    1.000             gamma(1,.5)[sd]
   .equi_acc_3        0.565    0.034    0.503    0.635    0.565    0.596    0.999             gamma(1,.5)[sd]
   .equi_adv_8        0.595    0.044    0.513    0.686    0.595    0.428    0.999             gamma(1,.5)[sd]
   .sust_env_3        0.954    0.057    0.848    1.067    0.954    0.570    0.999             gamma(1,.5)[sd]
   .trad_soc_8        0.586    0.044    0.501    0.678    0.586    0.346    1.000             gamma(1,.5)[sd]
   .trad_org_1        0.448    0.041    0.370    0.530    0.448    0.282    0.999             gamma(1,.5)[sd]
   .conf_inter_5      0.886    0.049    0.790    0.988    0.886    0.596    0.999             gamma(1,.5)[sd]
   .conf_form_7       0.720    0.039    0.648    0.799    0.720    0.675    0.999             gamma(1,.5)[sd]
    enhan             0.934    0.099    0.755    1.135    1.000    1.000    1.001             gamma(1,.5)[sd]
    open              0.870    0.128    0.650    1.155    1.000    1.000    1.001             gamma(1,.5)[sd]
    trans             1.218    0.142    0.965    1.522    1.000    1.000    1.000             gamma(1,.5)[sd]
    cons              1.113    0.116    0.897    1.358    1.000    1.000    1.002             gamma(1,.5)[sd]


Thank you already for the helpful insights - I am grateful for your further advice!

Kind regards,
Jannick

Mauricio Garnier-Villarreal

unread,
Feb 26, 2025, 11:59:41 AMFeb 26
to blavaan
Jannick


I disagree with the way the cited papers test for approximate measurement invariance (as it happens in academia). Several specific comments
- the ppp is equivalent to the p-value of the chi-square, and we never compare p-values between models
- the ppp is unreliable, as it is sensitive to sample size, and model overfitting. With overfitting meaning that we could add a lot meaningless parameters and the ppp will improve with "noise" parameters
- in the paper they use .05 variance for the wiggle, notice that when using the Stan backend in blavaan the wiggle parameter is in the standard deviation metric, so you would need to transform it to use the same level of wiggle
- also, they use Mplus, and in blavaan we have different types of metric. For example, in Mplus they dont have the LOO and WAIC for model comparison

What I would recommend is to:
- start with the strict invariance model
- estimate the AMI model, and compare them
     - compare them with loo and waic
     - look at the difference in posterior distributions

You will see that I recommend to use the loo and waic over the dic for model comaprison (https://ecmerkle.github.io/blavaan/articles/model_comparison.html). This is because loo and waic are consider fully Bayesian information criteria, whil dic is consider a limited information criteria.
One of the main advantage of loo and waic is that we get a SE of the difference between models. This way we can evaluate the likelihood of this being a true difference or not. While with dic we can only say lowe than.
So, in your first case we have loo difference of -1.63, and a SE of this difference of 3.925. So we can calculate the ration 1.63/3.925 = 0.415 . The current recommendation is that if this ratio shoudl be at least 2 and preferabbly 4 to consider a "meaningful" difference between model. In you second case loo dif = 8.835, and se dif = 5.537, so the ratio 8.835/5.537 = 1.59 . (the same process applies to waic)
So, in both cases the SE of the difference in loo indicates that the difference in model accuracy are not large enough to consider them meaningful. 

Now, these are measures of overall model comparison, meaning that there could be one ore 2 items that are different, but the average is not that large. So, we still want to look into difference for each parameter of interest. This way, the API is use a modification index, to see if there is a specifc parameter that differes between groups. For example, if we look at the factor loadings for the first factor, we see that the means are close between groups, and the CI between have a high level of overlap. If a parameter in groups 2 is different than in group 1 we should see that their posterior distribution is meaninfully different from group 1, with a higher/lower mean and CI that dont overlap as much. The data would be telling us that the constraint is not realistic for this group. In this case, we see that there are small differences, but nothing indicating that one parameter is meaningfully different. You could also export the portsrior distributions and plot them nwxt to each other to visualize these differences

 
Group 1 [1]:

Latent Variables:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan =~                                                                                                  
    pw_rs_1 (.p1.)    0.982    0.052    0.884    1.085    0.982    0.609    1.000                normal(0,10)
    stat_5  (.p2.)    1.061    0.045    0.977    1.154    1.061    0.761    1.001                normal(0,10)
    stat_6  (.p3.)    1.089    0.043    1.007    1.174    1.089    0.781    1.002                normal(0,10)
    ach_d_4 (.p4.)    0.898    0.044    0.814    0.987    0.898    0.664    1.000                normal(0,10)

Group 2 [2]:

Latent Variables:
                   Estimate  Post.SD pi.lower pi.upper   Std.lv  Std.all     Rhat    Prior                  
  enhan =~                                                                                                  
    pw_rs_1 (.p1.)    0.924    0.056    0.815    1.036    0.893    0.586    1.001  normal(lambda[1,1,1],0.05)
    stat_5  (.p2.)    1.047    0.054    0.944    1.157    1.012    0.713    1.000  normal(lambda[1,2,1],0.05)
    stat_6  (.p3.)    1.116    0.054    1.011    1.221    1.078    0.754    1.003  normal(lambda[1,3,1],0.05)
    ach_d_4 (.p4.)    0.943    0.051    0.840    1.046    0.911    0.620    1.001  normal(lambda[1,4,1],0.05)



If you find one or 2 items that required wider wiggle priors, you can adjust it after the first round. And continue the test process of evaluating if any and which items are far from each other in specific parameters. This way we are looking at ithe impact of the API constraints in overal model comparisons (loo and waic), and in differences in specifc parameters (posterior distributions). This is the process that I suggest in chapter 13 of Longitudinal Structural Equation Modeling Second Edition (https://www.guilford.com/books/Longitudinal-Structural-Equation-Modeling/Todd-Little/9781462553143/summary)

In a quick look, I think the default priors are fine for your case, but could always make them more informative

Hope this helps

J S

unread,
Feb 28, 2025, 7:20:35 AMFeb 28
to blavaan
Thank you for all the additional considerations and insights, especially for the reflection on the previous studies - This helps a lot!
Reply all
Reply to author
Forward
0 new messages