Generate Cross-Loadings

433 views
Skip to first unread message

sandeep

unread,
Mar 19, 2019, 6:02:25 AM3/19/19
to lavaan
Hello Folks,

I am using Lavaan to do CFA. I am facing problems with getting cross loading for factors- this is required for running discriminant validity tests. Essentially, when I run 


My issue is that I would like to get values where the current values are 0.00. 
Model after performing EFA: 

model1<-'lav_f1=~f11+f12+f14
lav_f2=~f21+f22+f23
lav_f3=~f22+f23+f21
...
.
.
lav_f6=~f61+f62

fit1<- cfa(model1, data= my_data, missing = "ML", std.lv=T)

lavTech(fit1, what="std")$lambda


I get an output like this:
Partial Output:

          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
 [1,] 0.9048272 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 [2,] 0.8887490 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 [3,] 0.8725165 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
 [4,] 0.0000000 0.8745323 0.0000000 0.0000000 0.0000000 0.0000000
 [5,] 0.0000000 0.9263597 0.0000000 0.0000000 0.0000000 0.0000000
 [6,] 0.0000000 0.9428641 0.0000000 0.0000000 0.0000000 0.0000000
 [7,] 0.0000000 0.0000000 0.8963720 0.0000000 0.0000000 0.0000000
 [8,] 0.0000000 0.0000000 0.6624981 0.0000000 0.0000000 0.0000000
 [9,] 0.0000000 0.0000000 0.8820272 0.0000000 0.0000000 0.0000000
[10,] 0.0000000 0.0000000 0.0000000 0.8726296 0.0000000 0.0000000
[11,] 0.0000000 0.0000000 0.0000000 0.7293126 0.0000000 0.0000000
[12,] 0.0000000 0.0000000 0.0000000 0.8406514 0.0000000 0.0000000
[13,] 0.0000000 0.0000000 0.0000000 0.0000000 0.8589600 0.0000000
[14,] 0.0000000 0.0000000 0.0000000 0.0000000 0.9441202 0.0000000
[15,] 0.0000000 0.0000000 0.0000000 0.0000000 0.9326328 0.0000000
[16,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.9470186
[17,] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.9297788


Any help is really appreciated. I don't want to use any commercial applications to solve this problem.

Thank You.

Edward Rigdon

unread,
Mar 19, 2019, 10:55:22 AM3/19/19
to lav...@googlegroups.com
Sandeep--
     In the CFA model that you ran, cross-loadings are all constrained to 0. Only the loadings specified as free parameters are estimated. You can find information on what cross-loadings might have been, if they had been free parameters, via the modification indices. However, there are no hidden cross-loadings in your model. You can see he impact of this and other model constraints by looking at the fit indices.

--
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 post to this group, send email to lav...@googlegroups.com.
Visit this group at https://groups.google.com/group/lavaan.
For more options, visit https://groups.google.com/d/optout.

sandeep

unread,
Mar 19, 2019, 11:21:18 AM3/19/19
to lavaan
Thank You. Sorry for my ignorance, I have two doubts here:

1) I did read Lavaan documentation, but was still not clear. Can you please suggest how could I add a free parameter? Is adding all line items to group.partial going to make them free? 

2) Once I do step 1, which of these columns would I need to check? 
         lhs op rhs      mi    epc sepc.lv sepc.all sepc.nox
66  lav_sec =~ SL2   1.586 -0.081  -0.081   -0.046   -0.046

Thank You so much once again in advance.

sandeep

unread,
Mar 19, 2019, 1:14:29 PM3/19/19
to lavaan
I prefixed each line item with NA* in the model to make them free. However, two issues remain.

1)  lavTech(fit1, what="std")$lambda still returns 0 values.
2) Which column value in Modification Index should I look at? and should I look at lav_f2=~ f13: This means: factor_two =~ Factor_1_line_Item_3 as an example of a cross loading?

Thank You :)

Edward Rigdon

unread,
Mar 19, 2019, 1:52:37 PM3/19/19
to lav...@googlegroups.com
If you want a loading to be a free parameter, you need to mention it in your model syntax. However, you cannot make every loading free for every common factor--such a model would not be statistically identified, without special restrictions. EFA approaches impose such restrictions by default, hiding the restrictions from the casual user. Here, the user has the freedom to free or constrain, but cannot escape statistical limitations.
The expected parameter change (epc) statistic shows the (unstandardized) estimated value that the parameter would take on if it were free AND if every other parameter retained its current value. Of course, if you relax a constraint, it is possible that other parameter values will change as well.

Edward Rigdon

unread,
Mar 19, 2019, 1:54:53 PM3/19/19
to lav...@googlegroups.com
You'll have to share your actual syntax and output, if you want advice about interpretation.

sandeep

unread,
Mar 19, 2019, 4:08:45 PM3/19/19
to lavaan
Thank You.

#Model
model1<-'lav_ce=~C1+C2+E3+C4
lav_L=~L2+L3+L1
lav_a=~A3+A1
lav_b=~B1+B2+B3
lav_i=~I1+I2
'

#Fit
fit<- cfa(model1, data= my_data, missing = "ML", std.lv=T)

#Loadings.
lavInspect(fit1, what="std")$lambda

    lav_ce lav_l lav_a lav_b lav_i
C1  0.848  0.000  0.000  0.000  0.000
E2  0.905  0.000  0.000  0.000  0.000
E3  0.917  0.000  0.000  0.000  0.000
C4  0.830  0.000  0.000  0.000  0.000
L2  0.000  0.894  0.000  0.000  0.000
L3  0.000  0.661  0.000  0.000  0.000
L1  0.000  0.885  0.000  0.000  0.000
A3  0.000  0.000  0.718  0.000  0.000
A1  0.000  0.000  0.882  0.000  0.000
B1  0.000  0.000  0.000  0.859  0.000
B2  0.000  0.000  0.000  0.945  0.000
B3  0.000  0.000  0.000  0.932  0.000
I1  0.000  0.000  0.000  0.000  0.947
I2  0.000  0.000  0.000  0.000  0.930

Please let me know if I need to add more information. I did not want to add a lot of unnecessary information.
Reply all
Reply to author
Forward
0 new messages