Question about identified model

88 views
Skip to first unread message

Dingzhi Hu

unread,
Feb 10, 2022, 3:52:17 AM2/10/22
to lavaan

Hi, 

I am using SEM to work with fMRI data and encountered some problem:

Here are my codes:

model.SPE <- '
  # latent variables
  F =~ F1 + F2 + F3 + F4 + F5
  E =~ E1
  P =~ P1 + P2
 
  F ~ E + P
  P ~ F + E
  E ~ F + P'

model.EST <- sem(model.SPE, data = response_scale,
                 group = "tasktype")


And this is the warning message:

Could not compute standard errors! The information matrix could
    not be inverted. This may be a symptom that the model is not
    identified.


The I changed the estimating method:

model.EST <- sem(model.SPE, data = response_scale,
                 group = "tasktype", estimator = "MLR")


The warning message changed to:

The variance-covariance matrix of the estimated parameters (vcov)
    does not appear to be positive definite! The smallest eigenvalue
    (= -2.717168e-05) is smaller than zero. This may be a symptom that
    the model is not identified.


And the se of my parameters is large. I suspected that my model was not identified. However, I was in lack of the knowledge to design an identified model to answer my research question: what is the reciprocal relationship between the three brain areas.

It's also helpful to tell me what is an identified model~

Thanks for helping!

Edward Rigdon

unread,
Feb 10, 2022, 10:24:39 AM2/10/22
to lav...@googlegroups.com
Yes, the structural model that you describe is fundamentally not identified. Each structural variable (your F, E and P) needs its own predictor not shared with the other structural variables. The observed variable indicators (F1, F2 and so forth) do not count. There is no way to resolve this without the additional predictors.
You can see the problem by looking at the covariance matrix of the structural variables:
     F   P   E
F   x
P   x    x
E   x    x   x
Currently, you are trying to estimate 6 structural paths from the 6 unique elements of this covariance matrix, but you also have to estimate 3 residual variances for the 3 structural variables. That is estimating 9 unknowns from the 6 knowns--if we treat this covariance matrix itself as known. The algebra for obtaining unique solutions for model parameters will not work without additional predictors for F, P and E.
--Ed Rigdon

--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/lavaan/e71e7686-7fd5-4f4e-892b-5c9bb475cf71n%40googlegroups.com.

Tovah Siegel

unread,
Feb 10, 2022, 11:40:07 AM2/10/22
to lavaan
Hi - Jumping on this because I have a similar question/the same warning message about model identification. Is the only way to resolve a non-identified model adding additional predictors not shared with the other structural variables? I've encountered some advice online that mentioned scaling the error terms to 1, but I am very new to structural equation modeling and it sounds like this isn't actually an option?

Thank you!

Tovah

----------- I've included my code below in case it adds some additional insight  ----------

#model specification
Model1 <- '
Annonaceae ~ A1*habitat.type + A2*time.point
Arecaceae ~ A3*habitat.type + A4*time.point
Burseraceae ~ A5*habitat.type + A6*time.point
Celastraceae ~ A7*habitat.type + A8*time.point
Clusiaceae ~ A9*habitat.type + A10*time.point
Euphorbiaceae ~ A11*habitat.type + A12*time.point
Fabaceae ~ A13*habitat.type + A14*time.point
Lauraceae ~ A15*habitat.type + A16*time.point
Melastomataceae ~ A17*habitat.type + A18*time.point
Meliaceae ~ A19*habitat.type + A20*time.point
Moraceae ~ A21*habitat.type + A22*time.point
Myristicaceae ~ A23*habitat.type + A24*time.point
Myrsinaceae ~ A25*habitat.type + A26*time.point
Myrtaceae ~ A27*habitat.type + A28*time.point
Rubiaceae ~ A29*habitat.type + A30*time.point
CORAPIPO ~ B1*Melastomataceae + B2*Rubiaceae + C1*habitat.type + D1*time.point + F1*effort
LIPAUGUS ~ B3*Annonaceae + B4*Celastraceae + B5*Moraceae + B6*Myristicaceae + C2*habitat.type + D2*time.point +F2*effort
PIPRA ~ B7*Euphorbiaceae + B8*Melastomataceae + B9*Moraceae + C3*habitat.type + D3*time.point + F3*effort
DIXIPHIA ~ B10*Burseraceae + B11*Arecaceae + B12*Clusiaceae + B13*Fabaceae + B14*Melastomataceae + B15*Meliaceae + B16*Moraceae + B17*Myrsinaceae + B18*Myrtaceae + B19*Rubiaceae + C4*habitat.type + D4*time.point + F4*effort
LEPIDOTHRIX ~ B20*Melastomataceae + B21*Moraceae + B22*Rubiaceae + C5*habitat.type + D5*time.point + F5*effort
SCHIFFORNIS ~ B23*Annonaceae + B24*Burseraceae + B25*Lauraceae + B26*Melastomataceae + B27*Meliaceae + B28*Moraceae + B29*Myristicaceae + B30*Rubiaceae + C6*habitat.type + D6*time.point + F6*effort
TACHYPHONUS ~ B31*Clusiaceae + B32*Melastomataceae + C7*habitat.type + D7*time.point + F7*effort

#indirect effects
i_1:= A1*B3
i_2:= A1*B23
i_3:= A3*B11
i_4:= A5*B10
i_5:= A5*B24
i_6:= A7*B4
i_7:= A9*B12
i_8:= A9*B31
i_9:= A11*B7
i_10:= A13*B13
i_11:= A15*B25
i_12:= A17*B1
i_13:= A17*B8
i_14:= A17*B14
i_15:= A17*B20
i_16:= A17*B26
i_17:= A17*B32
i_18:= A19*B15
i_19:= A19*B27
i_20:= A21*B5
i_21:= A21*B9
i_22:= A21*B16
i_23:= A21*B21
i_24:= A21*B28
i_25:= A23*B6
i_26:= A23*B29
i_27:= A25*B17
i_28:= A27*B18
i_29:= A29*B2
i_30:= A29*B19
i_31:= A29*B22
i_32:= A29*B30
i_33:= A2*B3
i_34:= A2*B23
i_35:= A4*B11
i_36:= A6*B10
i_37:= A6*B24
i_38:= A8*B4
i_39:= A10*B12
i_40:= A10*B31
i_41:= A12*B7
i_42:= A14*B13
i_43:= A16*B25
i_44:= A18*B1
i_45:= A18*B8
i_46:= A18*B14
i_47:= A18*B20
i_48:= A18*B26
i_49:= A18*B32
i_50:= A20*B15
i_51:= A20*B27
i_52:= A22*B5
i_53:= A22*B9
i_54:= A22*B16
i_55:= A22*B21
i_56:= A22*B28
i_57:= A24*B6
i_58:= A24*B29
i_59:= A26*B17
i_60:= A28*B18
i_61:= A30*B2
i_62:= A30*B19
i_63:= A30*B22
i_64:= A30*B30

#total effect = sum of all indirect effects and direct effects between the variables

total:= C1 * C2 * C3 * C4 * C5 * C6 * C7 * D1 * D2 * D3 * D4 * D5 * D6 * D7 * F1 * F2 * F3 * F4 * F5 * F6 * F7 * (A1*B3) * (A1*B23) * (A3*B11) * (A5*B10) * (A5*B24) * (A7*B4)
* (A9*B12) * (A9*B31) * (A11*B7) * (A13*B13) * (A15*B25) * (A17*B1) * (A17*B8) * (A17*B14) * (A17*B20) * (A17*B26) * (A17*B32) * (A19*B15)
* (A19*B27) * (A21*B5) * (A21*B9) * (A21*B16) * (A21*B21) * (A21*B28) * (A23*B6) * (A23*B29) * (A25*B17) * (A27*B18) * (A29*B2) * (A29*B19)
* (A29*B22) * (A29*B30) * (A2*B3) * (A2*B23) * (A4*B11) * (A6*B10) * (A6*B24) * (A8*B4) * (A10*B12) * (A10*B31) * (A12*B7) * (A14*B13) *
(A16*B25) * (A18*B1) * (A18*B8) * (A18*B14) * (A18*B20) * (A18*B26) * (A18*B32) * (A20*B15) * (A20*B27) * (A22*B5) * (A22*B9) * (A22*B16)
* (A22*B21) * (A22*B28) * (A24*B6) * (A24*B29) * (A26*B17) * (A28*B18) * (A30*B2) * (A30*B19) * (A30*B22) * (A30*B30)'

#model fit
fit <- sem(model = Model1, data = dat2, se = "bootstrap")

#summary
summary(fit, standardized = TRUE, fit.measures = TRUE, rsq = TRUE)

Dingzhi Hu

unread,
Feb 11, 2022, 1:57:02 AM2/11/22
to lavaan
Hi Ed Rigdon,

The explanation is very clear and helpful! I will consider about adding predictors or remove some path estimators.

Thanks a lot!

Dingzhi

Reply all
Reply to author
Forward
0 new messages