CFA and Factor scores from ordered Likert scale items using SEM and Lavaan packages.

#1
Hello!
I'm trying to do some confirmatory factor analysis with for ordered Likert scale items using sem and lavaan packages. So far I have read a lot and searched a lot but working example has so far eluded me. Can someone please take a look at the data and tell me if what I'm doing is correct (lavaan case) and where is the error (sem case)?

Original data:
Code:
> EI.data <- structure(list(Q21a_makeAnythingEntrep_likert = structure(c(3L, 
1L, 7L, 1L, 1L, 6L, 1L, 1L, 5L, 1L, 1L, 1L, 3L, 4L, 1L, 7L, 2L, 
1L, 7L, 7L, 1L, 3L, 1L, 2L, 5L, 1L, 5L, 2L, 4L, 1L, 1L, 2L), .Label = c("1", 
"2", "3", "4", "5", "6", "7"), class = c("ordered", "factor")), 
    Q21b_goalBecomingEntrep_likert = structure(c(3L, 1L, 7L, 
    1L, 1L, 6L, 1L, 1L, 7L, 1L, 1L, 7L, 3L, 2L, 2L, 7L, 2L, 3L, 
    7L, 7L, 1L, 4L, 1L, 2L, 4L, 2L, 6L, 3L, 5L, 1L, 1L, 1L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7"), class = c("ordered", "factor"
    )), Q21c_effortFirm_likert = structure(c(3L, 3L, 7L, 1L, 
    1L, 6L, 1L, 1L, 5L, 1L, 1L, 5L, 3L, 3L, 1L, 7L, 2L, 2L, 7L, 
    7L, 1L, 5L, 1L, 2L, 4L, 2L, 7L, 2L, 5L, 1L, 1L, 1L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7"), class = c("ordered", "factor"
    )), Q21d_createFirm_likert = structure(c(3L, 3L, 7L, 1L, 
    1L, 6L, 1L, 2L, 7L, 1L, 1L, 7L, 3L, 6L, 3L, 7L, 2L, 2L, 7L, 
    5L, 1L, 6L, 1L, 2L, 4L, 5L, 7L, 5L, 4L, 1L, 5L, 6L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7"), class = c("ordered", "factor"
    )), Q21e_.thoughtFirm_likert = structure(c(3L, 6L, 7L, 1L, 
    1L, 6L, 2L, 1L, 7L, 1L, 4L, 7L, 5L, 4L, 2L, 7L, 2L, 2L, 7L, 
    3L, 1L, 5L, 1L, 2L, 6L, 2L, 7L, 4L, 5L, 2L, 6L, 2L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7"), class = c("ordered", "factor"
    )), Q21f_intentionFirm_likert = structure(c(4L, 4L, 7L, 1L, 
    1L, 6L, 1L, 2L, 7L, 1L, 1L, 7L, 5L, 6L, 3L, 7L, 2L, 2L, 7L, 
    2L, 1L, 7L, 1L, 2L, 6L, 4L, 7L, 7L, 4L, 2L, 5L, 5L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7"), class = c("ordered", "factor"
    ))), .Names = c("Q21a_makeAnythingEntrep_likert", "Q21b_goalBecomingEntrep_likert", 
"Q21c_effortFirm_likert", "Q21d_createFirm_likert", "Q21e_.thoughtFirm_likert", 
"Q21f_intentionFirm_likert"), row.names = c(NA, 32L), class = "data.frame")
Lavaan case:
Code:
EI.model.lavaan <- ' EI  =~ Q21a_makeAnythingEntrep_likert + Q21b_goalBecomingEntrep_likert + Q21c_effortFirm_likert + Q21d_createFirm_likert + Q21e_.thoughtFirm_likert + Q21f_intentionFirm_likert '
EI.fit <- cfa(EI.model.lavaan, data = EI.data)
summary(EI.fit, fit.measures = TRUE)
predict(EI.fit)
Sem continuous items case:
Data:
Code:
EI.dataN <- structure(list(Q21a_makeAnythingEntrep_likert = c(3L, 1L, 7L, 
1L, 1L, 6L, 1L, 1L, 5L, 1L, 1L, 1L, 3L, 4L, 1L, 7L, 2L, 1L, 7L, 
7L, 1L, 3L, 1L, 2L, 5L, 1L, 5L, 2L, 4L, 1L, 1L, 2L), Q21b_goalBecomingEntrep_likert = c(3L, 
1L, 7L, 1L, 1L, 6L, 1L, 1L, 7L, 1L, 1L, 7L, 3L, 2L, 2L, 7L, 2L, 
3L, 7L, 7L, 1L, 4L, 1L, 2L, 4L, 2L, 6L, 3L, 5L, 1L, 1L, 1L), 
    Q21c_effortFirm_likert = c(3L, 3L, 7L, 1L, 1L, 6L, 1L, 1L, 
    5L, 1L, 1L, 5L, 3L, 3L, 1L, 7L, 2L, 2L, 7L, 7L, 1L, 5L, 1L, 
    2L, 4L, 2L, 7L, 2L, 5L, 1L, 1L, 1L), Q21d_createFirm_likert = c(3L, 
    3L, 7L, 1L, 1L, 6L, 1L, 2L, 7L, 1L, 1L, 7L, 3L, 6L, 3L, 7L, 
    2L, 2L, 7L, 5L, 1L, 6L, 1L, 2L, 4L, 5L, 7L, 5L, 4L, 1L, 5L, 
    6L), Q21e_.thoughtFirm_likert = c(3L, 6L, 7L, 1L, 1L, 6L, 
    2L, 1L, 7L, 1L, 4L, 7L, 5L, 4L, 2L, 7L, 2L, 2L, 7L, 3L, 1L, 
    5L, 1L, 2L, 6L, 2L, 7L, 4L, 5L, 2L, 6L, 2L), Q21f_intentionFirm_likert = c(4L, 
    4L, 7L, 1L, 1L, 6L, 1L, 2L, 7L, 1L, 1L, 7L, 5L, 6L, 3L, 7L, 
    2L, 2L, 7L, 2L, 1L, 7L, 1L, 2L, 6L, 4L, 7L, 7L, 4L, 2L, 5L, 
    5L)), .Names = c("Q21a_makeAnythingEntrep_likert", "Q21b_goalBecomingEntrep_likert", 
"Q21c_effortFirm_likert", "Q21d_createFirm_likert", "Q21e_.thoughtFirm_likert", 
"Q21f_intentionFirm_likert"), class = "data.frame", row.names = c(NA, 
-32L))
Code:
EI.dataN.cov <- cov(EI.dataN)
model.EI.dataN <- specifyModel()
EI -> Q21a_makeAnythingEntrep_likert, NA, 1
EI -> Q21b_goalBecomingEntrep_likert, ei1
EI -> Q21c_effortFirm_likert, ei2
EI -> Q21d_createFirm_likert, ei3
EI -> Q21e_.thoughtFirm_likert, ei4
EI -> Q21f_intentionFirm_likert, ei5
EI <-> EI, var1
Q21a_makeAnythingEntrep_likert <-> Q21a_makeAnythingEntrep_likert, error1
Q21b_goalBecomingEntrep_likert <-> Q21b_goalBecomingEntrep_likert, error2
Q21c_effortFirm_likert <-> Q21c_effortFirm_likert, error3
Q21d_createFirm_likert <-> Q21d_createFirm_likert, error4
Q21e_.thoughtFirm_likert <-> Q21e_.thoughtFirm_likert, error5
Q21f_intentionFirm_likert <-> Q21f_intentionFirm_likert, error6
        
EI.dataN.cfa <- sem( model.EI.dataN, EI.dataN.cov, nrow(EI.dataN))
summary(EI.dataN.cfa)
fscores(EI.dataN.cfa, EI.dataN)
Sem ordered items case:
Code:
hcor <- function(data) hetcor(data, std.err=FALSE)$correlations
R.EI.data <- hcor(EI.data)
EI.model.sem.o <- specifyModel()

EI -> Q21a_makeAnythingEntrep_likert, NA, 1
EI -> Q21b_goalBecomingEntrep_likert, ei1
EI -> Q21c_effortFirm_likert, ei2
EI -> Q21d_createFirm_likert, ei3
EI -> Q21e_.thoughtFirm_likert, ei4
EI -> Q21f_intentionFirm_likert, ei5
EI <-> EI, var1
Q21a_makeAnythingEntrep_likert <-> Q21a_makeAnythingEntrep_likert, error1
Q21b_goalBecomingEntrep_likert <-> Q21b_goalBecomingEntrep_likert, error2
Q21c_effortFirm_likert <-> Q21c_effortFirm_likert, error3
Q21d_createFirm_likert <-> Q21d_createFirm_likert, error4
Q21e_.thoughtFirm_likert <-> Q21e_.thoughtFirm_likert, error5
Q21f_intentionFirm_likert <-> Q21f_intentionFirm_likert, error6
        
cfaEI.sem.o <- sem(EI.model.sem.o, R.EI.data, nrow(EI.data))
summary(cfaEI.sem.o)
fscores(cfaEI.sem.o, EI.data)
Error (can't get fscrores):
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

Thank You!
Janis
 
Last edited: