Andrew
Andrew

Reputation: 25

Trouble Converging Bifactor model using lavaan

Title basically explains it but I'm trying to build a bifactor model with psychopathy as one factor and subtypes as the other. I believe that I have everything constrained properly but that might be the issue.

Current code:

BifactorModel <- 'psychopathyBi =~ YPIS_1 + YPIS_2 + YPIS_3 + YPIS_4 + YPIS_5 + YPIS_6 + YPIS_7 + YPIS_8 + YPIS_9 +YPIS_10 + YPIS_11 + YPIS_12 + YPIS_13 + YPIS_14 + YPIS_15 + YPIS_16 + YPIS_17 + YPIS_18

GMbi =~ YPIS_4 + YPIS_5 + YPIS_8 + YPIS_9 + YPIS_14 + YPIS_16

CUbi =~ YPIS_3 + YPIS_6 + YPIS_10 + YPIS_15 + YPIS_17 + YPIS_18

DIbi =~ YPIS_1 + YPIS_2 + YPIS_7 + YPIS_11 + YPIS_12 + YPIS_13

psychopathyBi ~~ 0*GMbi

psychopathyBi ~~ 0*CUbi

psychopathyBi ~~ 0*DIbi

GMbi ~~ 0*CUbi

GMbi ~~ 0*DIbi

CUbi ~~ 0*DIbi
'

#fit bifactor model

bifactorFit <- cfa(BifactorModel, data = YPIS_Data)

#get summary of bifactor model

summary(bifactorFit, fit.measures = TRUE, standardized = TRUE)

This produces the following:

lavaan 0.6-9 did NOT end normally after 862 iterations

this is what the model should ultimately look like once converged What the model should ultimately look like

Any suggestions or comments would be greatly appreciated. Thanks in advance.

Upvotes: 1

Views: 1477

Answers (1)

Brenton M. Wiernik
Brenton M. Wiernik

Reputation: 1306

The variances of several of your latent variables are very small. For example, Dlbi appears to be effectively zero. That's the source of the issue here.

There are two things you can to try to remedy this.

First, it may work better to identify the model by fixing the latent variable variances to 1, rather than fixing the first indicator factor loadings to 1. Do this by specifying std.lv = TRUE.

Even then, it will likely be the case that loadings onto one or more of the group factors will have very small loadings. This indicates that there really isn't much of a distinct group factor in your data for this items that is distinct from the general factor. You should consider estimating a model that drops that group factor (as well as comparing with models dropping the other group factors one at a time). We discuss this issue some here: https://psyarxiv.com/q356f/

Additionally, you should constrain item loadings so that they are in the theoretically expected direction (e.g., all positive with a lower bound of 0). It is common for bifactor models to overextract variance in items and produce uninterpretable group factors that have a mix of positive and negative loadings. This can also cause convergence issues.

In general, this sort of unconstrained bifactor model tends to be overly flexible and tends to overfit to a similar degree as exploratory factor analysis. You should be sure to evaluate the bifactor model based not only on global model fit statistics, but also on whether the factor loadings actually resemble a true bifactor model--do the items each show substantial loadings on both the general factor and their group factor in the expected directions, or do items tend to load on only one or the other? See some examples in the paper linked above about this issue.

Another option would be to switch to exploratory bifactor modeling. This is implemented in R in the fungible package in the fungible::BiFAD() function. This approach is discussed here: https://www.sciencedirect.com/science/article/pii/S0001879120300555

Exploratory bifactor models are useful because they rely on targeted EFA rotation to estimate loadings. This makes convergence much more likely and can help to diagnose when a group factor is too weak to identify in the data.

Upvotes: 3

Related Questions