Libraries used

library(kableExtra) # for tables
library(psych)
library(ggplot2)
library(MVN) # for mvn()
library(parameters) # efa_to_cfa()
library(lavaan) # for cfa()
library(car) # for qqPlot()
library(semTools) # for AVE and compRelSEM()

EFA and CFA datasets

Randomly split the original dataset into two, one for the EFA, and one for the CFA.

love <- read.csv("love.csv")
set.seed(243)
n <- floor(nrow(love)/2)
w_efa <- sample(1:nrow(love), n)
w_cfa <- setdiff(1:nrow(love), w_efa) 
# leave only item variables (block 1)
w1 <- which(names(love) == "Q1")
w2 <- which(names(love) == "Q206")
vars <- names(love)[w1:w2]
vars <- setdiff(vars,"Q139")
aux_efa <- love[w_efa,vars]
aux_cfa <- love[w_cfa,vars]
f <- function(x){
  1*(x == "Not at all") + 2*(x == "A little bit") + 3*(x == "Somewhat") + 4*(x == "Quite a bit") + 5*(x == "Very much")
}
b1 <- as.data.frame(f(as.matrix(aux_efa)))
b2 <- as.data.frame(f(as.matrix(aux_cfa)))

EFA

First 6 rows of the EFA dataset (64 items)

table <- kable_styling(kbl(head(b1), format = "html", booktabs = TRUE))
scroll_box(table, width = "100%", height = "100%")
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q100 Q101 Q102 Q103 Q104 Q105 Q106 Q107 Q122 Q145 Q146 Q147 Q148 Q149 Q150 Q151 Q152 Q161 Q162 Q163 Q164 Q165 Q166 Q167 Q168 Q169 Q179 Q180 Q181 Q182 Q183 Q184 Q185 Q186 Q187 Q198 Q199 Q200 Q201 Q202 Q203 Q204 Q205 Q206
16 5 3 5 4 5 5 5 4 5 5 5 5 5 5 5 4 5 2 5 5 5 5 5 5 5 5 5 3 5 4 3 3 5 4 5 3 4 5 5 5 5 5 5 5 5 5 3 2 5 5 5 5 5 5 4 5 4 5 4 5 5 5 4 4
43 3 3 5 3 5 5 5 3 4 4 3 3 3 5 5 5 5 4 3 5 3 4 4 5 4 5 5 4 3 3 3 4 5 4 4 4 4 5 5 5 5 5 4 3 4 4 4 3 5 5 3 4 5 5 5 4 5 5 3 5 5 5 4 4
290 5 4 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5 5 4 3 5 5 5 5 5 5 5 4 5 3 2 5 4 5 5 4 4 4 4 5 5 4 5 5 5 4 4 5 5 3 5
166 5 5 5 4 5 5 5 5 5 5 5 5 5 4 5 5 4 5 3 3 5 5 5 5 5 5 3 5 5 5 5 4 4 5 5 4 4 4 4 5 4 5 4 4 5 5 3 4 5 5 3 5 5 5 5 5 5 5 5 3 4 5 4 5
562 5 4 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 3 4 2 3 5 5 5 5 5 5 5 5 3 5 4 4 3 5 4 3 4 5 5 4 5 5 1 5 4 4 4 5 5 5 5 4 5 5 5 5 5 5 4 5 3 4 4
98 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 5 5 5 4 4 1 5 5 5 5 5 1 5 5 5 5 5 3 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5

Checking multivariate normality on the EFA dataset

Descriptive stats

mvn1 <- mvn(b1)
mvn1_df <- data.frame(mvn1$Descriptives)
write.csv(mvn1_df, "mvn1.csv")
mvn1_df
##        n     Mean   Std.Dev Median Min Max X25th X75th        Skew     Kurtosis
## Q1   282 3.822695 1.1018179    4.0   1   5     3     5 -0.68125508 -0.239915743
## Q2   282 4.000000 1.1032143    4.0   1   5     3     5 -0.96661226  0.203077397
## Q3   282 4.492908 0.7462500    5.0   2   5     4     5 -1.43498545  1.525817374
## Q4   282 4.014184 0.9837528    4.0   1   5     3     5 -0.78804836 -0.108548084
## Q5   282 4.485816 0.7696264    5.0   2   5     4     5 -1.35285682  0.957541553
## Q6   282 4.354610 0.8696934    5.0   1   5     4     5 -1.26511135  0.917833582
## Q7   282 4.248227 0.9020027    4.5   1   5     4     5 -1.05610783  0.500364817
## Q8   282 4.163121 0.9479261    4.0   1   5     4     5 -0.90252415  0.008184474
## Q9   282 4.258865 0.8438659    4.0   1   5     4     5 -0.97539217  0.415547502
## Q10  282 4.492908 0.7834721    5.0   1   5     4     5 -1.54720496  1.993909129
## Q11  282 4.315603 0.8068024    4.0   2   5     4     5 -1.03341289  0.448907503
## Q12  282 4.421986 0.7657799    5.0   2   5     4     5 -1.20659513  0.835117732
## Q13  282 4.691489 0.5970258    5.0   2   5     5     5 -2.06660917  4.318395104
## Q14  282 4.631206 0.6014377    5.0   2   5     4     5 -1.48972976  1.580353068
## Q15  282 4.599291 0.6635391    5.0   2   5     4     5 -1.53096548  1.543485151
## Q16  282 4.500000 0.7557608    5.0   2   5     4     5 -1.45402235  1.463328427
## Q17  282 4.436170 0.8590135    5.0   1   5     4     5 -1.63199518  2.594732338
## Q18  282 3.379433 1.1756738    3.0   1   5     3     4 -0.22808220 -0.783281354
## Q19  282 4.042553 1.1184149    4.0   1   5     3     5 -1.04152700  0.204979515
## Q20  282 3.960993 1.0976697    4.0   1   5     3     5 -0.82411505 -0.186167516
## Q100 282 4.333333 0.8062626    5.0   1   5     4     5 -1.03592455  0.565498829
## Q101 282 4.460993 0.8646290    5.0   1   5     4     5 -1.82220135  3.255419339
## Q102 282 4.453901 0.7352360    5.0   2   5     4     5 -1.25994321  1.109523588
## Q103 282 4.528369 0.7552263    5.0   2   5     4     5 -1.65177785  2.238943999
## Q104 282 4.464539 0.7917398    5.0   1   5     4     5 -1.44864247  1.878050719
## Q105 282 4.251773 0.8910870    5.0   1   5     4     5 -0.99248254  0.343320789
## Q106 282 4.478723 0.7411935    5.0   1   5     4     5 -1.33804581  1.489884936
## Q107 282 3.808511 1.1925922    4.0   1   5     3     5 -0.83296195 -0.152220978
## Q122 282 4.195035 0.9697801    4.0   1   5     4     5 -1.18865244  1.028368851
## Q145 282 3.432624 1.3004514    4.0   1   5     3     5 -0.37989167 -0.951522186
## Q146 282 4.439716 0.9231602    5.0   1   5     4     5 -1.89253380  3.445647127
## Q147 282 4.177305 0.9640048    4.0   1   5     4     5 -1.18937628  1.194701771
## Q148 282 3.989362 1.0687540    4.0   1   5     3     5 -0.90268685  0.151609858
## Q149 282 4.134752 0.9064408    4.0   1   5     4     5 -0.83811766  0.118242769
## Q150 282 4.187943 1.3192241    5.0   1   5     4     5 -1.53310674  1.005505297
## Q151 282 3.319149 1.2784507    3.0   1   5     3     4 -0.29342275 -0.890542371
## Q152 282 3.503546 1.2967197    4.0   1   5     3     5 -0.51030880 -0.838964979
## Q161 282 4.102837 1.0771283    4.0   1   5     3     5 -1.00418260  0.060779004
## Q162 282 4.308511 1.0266200    5.0   1   5     4     5 -1.68254027  2.378669781
## Q163 282 4.673759 0.7108358    5.0   2   5     5     5 -2.22379530  4.169529721
## Q164 282 4.177305 1.0248422    5.0   1   5     4     5 -1.16806673  0.727332588
## Q165 282 4.684397 0.6877457    5.0   1   5     5     5 -2.44502924  6.123783396
## Q166 282 3.031915 1.2887589    3.0   1   5     2     4 -0.09889394 -1.036089977
## Q167 282 3.265957 1.4746411    3.5   1   5     2     5 -0.29619611 -1.311815211
## Q168 282 4.351064 0.9169124    5.0   1   5     4     5 -1.46288816  1.628584006
## Q169 282 4.078014 1.0874301    4.0   1   5     3     5 -0.99801789  0.141543080
## Q179 282 3.836879 1.1231889    4.0   1   5     3     5 -0.62389731 -0.516660429
## Q180 282 3.553191 1.2162923    4.0   1   5     3     5 -0.44860330 -0.763971904
## Q181 282 4.592199 0.7161156    5.0   2   5     4     5 -1.71472225  2.201383604
## Q182 282 4.322695 0.8678413    5.0   1   5     4     5 -1.19009148  0.781299333
## Q183 282 4.010638 0.9999432    4.0   1   5     3     5 -0.70213169 -0.271602427
## Q184 282 4.329787 0.9662080    5.0   1   5     4     5 -1.40212161  1.251745772
## Q185 282 4.453901 0.7866789    5.0   2   5     4     5 -1.37789406  1.226919466
## Q186 282 4.556738 0.7048187    5.0   2   5     4     5 -1.50714923  1.593907090
## Q187 282 4.230496 0.8808313    4.0   1   5     4     5 -0.96103187  0.378225526
## Q198 282 4.450355 0.7350042    5.0   2   5     4     5 -1.19541870  0.812768088
## Q199 282 4.560284 0.7045232    5.0   2   5     4     5 -1.70399125  2.730086615
## Q200 282 4.609929 0.6777926    5.0   1   5     4     5 -1.93826764  4.225951932
## Q201 282 4.411348 0.7965309    5.0   2   5     4     5 -1.12015538  0.273452084
## Q202 282 3.996454 1.0721257    4.0   1   5     3     5 -0.89076673  0.045123619
## Q203 282 4.269504 0.9232423    5.0   1   5     4     5 -1.06873129  0.347268497
## Q204 282 4.322695 0.9273134    5.0   1   5     4     5 -1.31809906  1.237201149
## Q205 282 3.790780 1.0615506    4.0   1   5     3     5 -0.80530937  0.166497660
## Q206 282 3.748227 1.1977501    4.0   1   5     3     5 -0.62327020 -0.583678944

Range and median skewness and kurtosis

median(mvn1_df$Skew)
## [1] -1.17836
min(mvn1_df$Skew)
## [1] -2.445029
max(mvn1_df$Skew)
## [1] -0.09889394
median(mvn1_df$Kurtosis)
## [1] 0.754316
min(mvn1_df$Kurtosis)
## [1] -1.311815
max(mvn1_df$Kurtosis)
## [1] 6.123783

Number of potential outliers:

cutoff <- qchisq(1-0.001, ncol(b1))
mahal <- mahalanobis(b1, colMeans(b1), cov(b1))
s <- summary(mahal < cutoff); s
##    Mode   FALSE    TRUE 
## logical      31     251

Henze-Zirkler test for multivariate normality:

mvn1$multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 1.013629       0  NO

The data is not multivariate normal (do principal axis factoring).

Correlations among the 64 items

Range

cor1 <- cor(b1)
cor1_mat <- as.matrix(cor1)
diag(cor1_mat) <- NA
cor_min <- min(apply(cor1_mat, 2, min, na.rm = T)); cor_min
## [1] -0.01617779
cor_max <- max(apply(cor1_mat, 2, max, na.rm = T)); cor_max
## [1] 0.7255241

Correlations between two items varied from -0.0161778 to 0.7255241.

Factorability of the data

Kaiser-Meyer-Olkin (KMO) test (need KMO > 0.6)

X <- b1
# Kaiser-Meyer-Olkin (KMO) measure
KMO(r = cor1)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor1)
## Overall MSA =  0.94
## MSA for each item = 
##   Q1   Q2   Q3   Q4   Q5   Q6   Q7   Q8   Q9  Q10  Q11  Q12  Q13  Q14  Q15  Q16 
## 0.93 0.95 0.97 0.95 0.88 0.92 0.92 0.89 0.93 0.96 0.95 0.93 0.95 0.95 0.94 0.95 
##  Q17  Q18  Q19  Q20 Q100 Q101 Q102 Q103 Q104 Q105 Q106 Q107 Q122 Q145 Q146 Q147 
## 0.96 0.96 0.95 0.95 0.95 0.93 0.93 0.95 0.95 0.89 0.93 0.93 0.94 0.89 0.93 0.95 
## Q148 Q149 Q150 Q151 Q152 Q161 Q162 Q163 Q164 Q165 Q166 Q167 Q168 Q169 Q179 Q180 
## 0.93 0.96 0.94 0.94 0.95 0.95 0.96 0.96 0.95 0.92 0.93 0.91 0.93 0.93 0.93 0.91 
## Q181 Q182 Q183 Q184 Q185 Q186 Q187 Q198 Q199 Q200 Q201 Q202 Q203 Q204 Q205 Q206 
## 0.95 0.92 0.89 0.93 0.96 0.96 0.95 0.95 0.96 0.95 0.95 0.93 0.96 0.97 0.91 0.92

Bartlett’s Test of Sphericity

Do Bartlett’s Test of Sphericity only if participants per item is low (between 3:1 and 5:1). Small p-values (< 0.05) indicate that a factor analysis may be appropriate.

cortest.bartlett(cor1, n = nrow(X))
## $chisq
## [1] 11396.56
## 
## $p.value
## [1] 0
## 
## $df
## [1] 2016

A positive determinant means the factor analysis will probably run.

det(cor1)
## [1] 7.547555e-20

Number of factors to extract

fafit <- fa(cor1, nfactors = 20, n.obs = nrow(X), rotate = "oblimin", fm = "pa")
n_factors <- length(fafit$e.values)
scree <- data.frame(
  Factor_n =  as.factor(1:n_factors), 
  Eigenvalue = fafit$e.values)
ggplot(scree, aes(x = Factor_n, y = Eigenvalue, group = 1)) + 
  geom_point() + geom_line() +
  xlab("Number of factors") +
  ylab("Initial eigenvalue") +
  labs( title = "Scree Plot", 
        subtitle = "(Based on the unreduced correlation matrix)")

scree
##    Factor_n Eigenvalue
## 1         1 22.2783239
## 2         2  4.2822910
## 3         3  2.7933081
## 4         4  2.0215468
## 5         5  1.7646996
## 6         6  1.6167092
## 7         7  1.4179778
## 8         8  1.3065914
## 9         9  1.2023902
## 10       10  1.1509061
## 11       11  1.0320375
## 12       12  0.9599658
## 13       13  0.9513622
## 14       14  0.9174091
## 15       15  0.8779768
## 16       16  0.8496754
## 17       17  0.7960852
## 18       18  0.7668492
## 19       19  0.7364594
## 20       20  0.7197073
## 21       21  0.7003496
## 22       22  0.6884300
## 23       23  0.6703536
## 24       24  0.6342408
## 25       25  0.6025550
## 26       26  0.5792309
## 27       27  0.5437043
## 28       28  0.5385490
## 29       29  0.5176420
## 30       30  0.4849804
## 31       31  0.4797085
## 32       32  0.4695222
## 33       33  0.4554005
## 34       34  0.4408881
## 35       35  0.4259647
## 36       36  0.4078086
## 37       37  0.3915755
## 38       38  0.3713660
## 39       39  0.3539911
## 40       40  0.3377496
## 41       41  0.3282583
## 42       42  0.3209200
## 43       43  0.3175570
## 44       44  0.3048974
## 45       45  0.2986948
## 46       46  0.2876466
## 47       47  0.2824835
## 48       48  0.2702172
## 49       49  0.2566594
## 50       50  0.2548891
## 51       51  0.2375928
## 52       52  0.2353350
## 53       53  0.2276311
## 54       54  0.2084914
## 55       55  0.2043615
## 56       56  0.1987451
## 57       57  0.1970916
## 58       58  0.1909991
## 59       59  0.1648787
## 60       60  0.1566157
## 61       61  0.1454854
## 62       62  0.1390203
## 63       63  0.1252794
## 64       64  0.1099672

Eigenvalues less than 1 reflect potentially unstable factors. No more than 11 factors should be retained.

Parallel analysis

parallel <- fa.parallel(cor1, n.obs = nrow(X), fa = "fa", fm = "pa")

## Parallel analysis suggests that the number of factors =  7  and the number of components =  NA

2 factors

After an initial elimination of items with loadings less than 0.32 and/or with cross loadings, approximate simple structure was achieved with 45 items in the first factor and 12 items in the second one. To further reduce the length of the scale, we excluded items with loadings that were less than 0.5 (12 items). This led to the following 2-factor solution:

nfactors <- 2
remove <- c("Q9", "Q11", "Q12", "Q102", "Q103", "Q122", "Q200", "Q14", "Q15", "Q16", "Q104", "Q106", "Q146", "Q167", "Q181", "Q183", "Q184", "Q205", "Q206")
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA2   
## Q1    0.525       
## Q2    0.752       
## Q3    0.587       
## Q4    0.620       
## Q5           0.603
## Q6           0.669
## Q7           0.543
## Q8           0.852
## Q10   0.562       
## Q13   0.575       
## Q17   0.579       
## Q18   0.605       
## Q19   0.773       
## Q20   0.621       
## Q100  0.670       
## Q101  0.749       
## Q105         0.619
## Q107         0.521
## Q145         0.540
## Q147  0.643       
## Q148  0.552       
## Q149  0.689       
## Q150  0.741       
## Q151  0.628       
## Q152  0.704       
## Q161  0.583       
## Q162  0.742       
## Q163  0.607       
## Q164  0.511       
## Q165  0.544       
## Q166  0.609       
## Q168         0.604
## Q169         0.644
## Q179         0.557
## Q180         0.749
## Q182  0.496       
## Q185  0.525       
## Q186  0.573       
## Q187  0.508       
## Q198  0.552       
## Q199  0.580       
## Q201  0.580       
## Q202  0.593       
## Q203  0.767       
## Q204  0.613       
## 
##                   PA1   PA2
## SS loadings    13.293 4.920
## Proportion Var  0.295 0.109
## Cumulative Var  0.295 0.405
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.07480263 0.07127710 0.07877782 0.90000000
fa1$TLI
## [1] 0.7616145
fa1$Vaccounted
##                              PA1       PA2
## SS loadings           13.7284689 5.3553984
## Proportion Var         0.3050771 0.1190089
## Cumulative Var         0.3050771 0.4240859
## Proportion Explained   0.7193756 0.2806244
## Cumulative Proportion  0.7193756 1.0000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q1 + Q2 + Q3 + Q4 + Q10 + Q13 + Q17 + Q18 + Q19 + Q20 + Q100 + Q101 + Q147 + Q148 + Q149 + Q150 + Q151 + Q152 + Q161 + Q162 + Q163 + Q164 + Q165 + Q166 + Q182 + Q185 + Q186 + Q187 + Q198 + Q199 + Q201 + Q202 + Q203 + Q204
## PA2 =~ Q5 + Q6 + Q7 + Q8 + Q105 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F1 <- c("Q1", "Q2", "Q3", "Q4", "Q100", "Q147", "Q148", "Q149", "Q150", "Q151", "Q152", "Q203", "Q204", "Q17", "Q18", "Q19", "Q20", "Q101", "Q165", "Q166", "Q201", "Q202", "Q10", "Q182", "Q185", "Q186", "Q187", "Q198", "Q199", "Q13", "Q161", "Q162", "Q163", "Q164")
F2 <- c("Q5", "Q6", "Q7", "Q8", "Q105", "Q107", "Q145", "Q168", "Q169", "Q179", "Q180")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##   0.955343
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8914519
# Correlation between factors
cor(apply(X[,F1], 1, mean), apply(X[,F2], 1, mean))
## [1] 0.4830013

3 factors

After an initial elimination of items with loadings less than 0.32 and/or with cross loadings, approximate simple structure was achieved with 25 items in the first factor, 20 items in the second one, and 8 items in the third one. To further reduce the length of the scale, we excluded items in F1 and F2 with loadings that were less than 0.52 (16 items, 7 in F1 and 9 in F2). This led to the following 3-factor solution:

nfactors <- 3
remove <- c("Q5", "Q6", "Q7", "Q16", "Q17",  "Q106",  "Q146", "Q149", "Q181", "Q205", "Q206", "Q1", "Q4", "Q100", "Q122", "Q147", "Q148", "Q161", "Q164", "Q165", "Q167", "Q182", "Q183", "Q187", "Q201", "Q202", "Q204")
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA3    PA2   
## Q2           0.663       
## Q3    0.637              
## Q8                  0.690
## Q9    0.579              
## Q10   0.638              
## Q11   0.633              
## Q12   0.671              
## Q13   0.630              
## Q14   0.526              
## Q15   0.639              
## Q18          0.585       
## Q19          0.606       
## Q20          0.613       
## Q101         0.579       
## Q102  0.673              
## Q103  0.782              
## Q104  0.662              
## Q105                0.406
## Q107                0.619
## Q145                0.658
## Q150         0.758       
## Q151         0.691       
## Q152         0.731       
## Q162         0.696       
## Q163  0.522              
## Q166         0.595       
## Q168                0.644
## Q169                0.714
## Q179                0.602
## Q180                0.844
## Q184  0.521              
## Q185  0.587              
## Q186  0.538              
## Q198  0.679              
## Q199  0.745              
## Q200  0.722              
## Q203         0.556       
## 
##                  PA1   PA3   PA2
## SS loadings    7.617 4.983 3.595
## Proportion Var 0.206 0.135 0.097
## Cumulative Var 0.206 0.341 0.438
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.05982051 0.05494566 0.06510313 0.90000000
fa1$TLI
## [1] 0.8699982
fa1$Vaccounted
##                             PA1       PA3       PA2
## SS loadings           8.3067281 5.5797898 3.8469962
## Proportion Var        0.2245062 0.1508051 0.1039729
## Cumulative Var        0.2245062 0.3753113 0.4792842
## Proportion Explained  0.4684197 0.3146466 0.2169337
## Cumulative Proportion 0.4684197 0.7830663 1.0000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q3 + Q9 + Q10 + Q11 + Q12 + Q13 + Q14 + Q15 + Q102 + Q103 + Q104 + Q163 + Q184 + Q185 + Q186 + Q198 + Q199 + Q200
## PA3 =~ Q2 + Q18 + Q19 + Q20 + Q101 + Q150 + Q151 + Q152 + Q162 + Q166 + Q203
## PA2 =~ Q8 + Q105 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F1 <- c("Q2", "Q150", "Q151", "Q152", "Q203", "Q18", "Q19", "Q20", "Q101", "Q166", "Q162")
F2 <- c("Q9", "Q10", "Q11", "Q12", "Q102", "Q103", "Q104", "Q184", "Q185", "Q186", "Q198", "Q199", "Q200", "Q13", "Q14", "Q15", "Q163", "Q3")
F3 <- c("Q8", "Q105", "Q107", "Q145", "Q168", "Q169", "Q179", "Q180")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.9085575
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.9336166
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8725093
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
factors <- data.frame(F1m, F2m, F3m)
cor(factors)
##           F1m       F2m       F3m
## F1m 1.0000000 0.6386738 0.3507002
## F2m 0.6386738 1.0000000 0.4870481
## F3m 0.3507002 0.4870481 1.0000000

Items Q162 and Q3 may not conceptually consistent with the other items in their factors. The following model is obtained after removing Q162 and Q3.

nfactors <- 3
remove <- c("Q5", "Q6", "Q7", "Q16", "Q17",  "Q106",  "Q146", "Q149", "Q181", "Q205", "Q206", "Q1", "Q4", "Q100", "Q122", "Q147", "Q148", "Q161", "Q164", "Q165", "Q167", "Q182", "Q183", "Q187", "Q201", "Q202", "Q204", "Q162", "Q3")
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA3    PA2   
## Q2           0.671       
## Q8                  0.692
## Q9    0.573              
## Q10   0.654              
## Q11   0.615              
## Q12   0.676              
## Q13   0.636              
## Q14   0.528              
## Q15   0.641              
## Q18          0.608       
## Q19          0.625       
## Q20          0.636       
## Q101         0.587       
## Q102  0.659              
## Q103  0.773              
## Q104  0.657              
## Q105                0.409
## Q107                0.616
## Q145                0.660
## Q150         0.726       
## Q151         0.691       
## Q152         0.716       
## Q163  0.542              
## Q166         0.604       
## Q168                0.637
## Q169                0.712
## Q179                0.606
## Q180                0.846
## Q184  0.513              
## Q185  0.580              
## Q186  0.535              
## Q198  0.674              
## Q199  0.740              
## Q200  0.725              
## Q203         0.567       
## 
##                  PA1   PA3   PA2
## SS loadings    7.148 4.512 3.597
## Proportion Var 0.204 0.129 0.103
## Cumulative Var 0.204 0.333 0.436
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.06251099 0.05739300 0.06804762 0.90000000
fa1$TLI
## [1] 0.8638359
fa1$Vaccounted
##                             PA1       PA3       PA2
## SS loadings           7.7892161 5.0573899 3.8460067
## Proportion Var        0.2225490 0.1444969 0.1098859
## Cumulative Var        0.2225490 0.3670459 0.4769318
## Proportion Explained  0.4666265 0.3029717 0.2304017
## Cumulative Proportion 0.4666265 0.7695983 1.0000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q13 + Q14 + Q15 + Q102 + Q103 + Q104 + Q163 + Q184 + Q185 + Q186 + Q198 + Q199 + Q200
## PA3 =~ Q2 + Q18 + Q19 + Q20 + Q101 + Q150 + Q151 + Q152 + Q166 + Q203
## PA2 =~ Q8 + Q105 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F1 <- c("Q2", "Q150", "Q151", "Q152", "Q203", "Q18", "Q19", "Q20", "Q101", "Q166")
F2 <- c("Q9", "Q10", "Q11", "Q12", "Q102", "Q103", "Q104", "Q184", "Q185", "Q186", "Q198", "Q199", "Q200", "Q13", "Q14", "Q15", "Q163")
F3 <- c("Q8", "Q105", "Q107", "Q145", "Q168", "Q169", "Q179", "Q180")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.8990179
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.9291136
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8725093
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
factors <- data.frame(F1m, F2m, F3m)
cor(factors)
##           F1m       F2m       F3m
## F1m 1.0000000 0.6297613 0.3482127
## F2m 0.6297613 1.0000000 0.4868160
## F3m 0.3482127 0.4868160 1.0000000

4, 5, and 6 factors

Setting the number of factors to 4, after an initial elimination of items with loadings less than 0.32 and/or with cross loadings, one of the factors had no appropriate loadings (either less than 0.32 or was cross loaded), which suggested a 3-factor solution.

Setting the number of factors to 5, after an initial elimination of items with loadings less than 0.32 and/or with cross loadings, one factor had no appropriate loadings, which suggested a 4-factor solution. Using the same items and asking for 4 factors instead of 5, led to the elimination of a few more items, which left a factor with only one item, suggesting a 3-factor solution.

Setting the number of factors to 6, after an initial elimination of items with loadings less than 0.32 and/or with cross loadings, one of the factors had no appropriate loadings, which suggested a 5-factor solution. Using the same items and asking for 5 factors instead of 6, led to the elimination of a few more items, which left a factor with only one item, suggesting a 4-factor solution, which led to the same case described above. That is, we could not arrive at a satisfactory solution with 4, 5, or 6 factors using the first steps of factor analysis. However, solutions with 5 and 6 factors were obtained by reducing a 7-factor solution.

7 factors

Number of factors set to 7. After an initial elimination of items with loadings less than 0.32 and/or with cross loadings, approximate simple structure was achieved with 13 items in the first factor, 6 items in the second one, 9 items in the third one, 11 items in the fourth one, and 4 items in the next three factors. To further reduce the length of factors 1, 3, and 4, we excluded items in the following way:

  • In F1, excluded items with loadings less than 0.41 (one at a time). We also considered excluding items with loadings less than 0.5 (Q11 and Q104), but their exclusion impacted the approximate simple structure in a negative way, so they were left in the factor.
  • In F3, 7 of the 9 items had loadings less than 0.52, and two were above 0.7. Three of the 9 items were “acts of service” and the other 6 were “gifts”. Since the 3 acts of service items had low loadings (0.4, 0.41, and 0.51), they were the ones selected to be excluded.
  • In F4, 3 items had initial loadings above 0.65 and 8 were below 0.55. Seven of the 11 items were “acts of service”, 2 were “quality time”, 1 was “gift”, and 1 was “physical touch”. Of the 8 items with loadings below 0.55, 4 were not “acts of service” and were prioritized to be excluded. Their exclusion did not change TLI, and the variance explained increased by 0.01. Trying to exclude the next two lowest loadings impacted the approximate simple structure in a negative way, so they were left in the factor.
nfactors <- 7
remove <- c("Q1", "Q3", "Q8", "Q16", "Q100", "Q102", "Q106", "Q146", "Q148", "Q149", "Q161", "Q162", "Q164", "Q165", "Q166", "Q167", "Q181", "Q186", "Q187", "Q201",  "Q203", "Q204", "Q205") # 7 factors 
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA2    PA4    PA3    PA5    PA6    PA7   
## Q2                         0.523                     
## Q4                         0.465                     
## Q5                                       0.634       
## Q6                                       0.609       
## Q7                                       0.611       
## Q9    0.672                                          
## Q10   0.602                                          
## Q11   0.427                                          
## Q12   0.650                                          
## Q13                                             0.549
## Q14                                             0.331
## Q15                                             0.381
## Q17                 0.494                            
## Q18                 0.438                            
## Q19                 0.763                            
## Q20                 0.572                            
## Q101                0.535                            
## Q103  0.527                                          
## Q104  0.487                                          
## Q105                                     0.701       
## Q107         0.599                                   
## Q122  0.557                                          
## Q145         0.619                                   
## Q147                       0.365                     
## Q150                       0.574                     
## Q151                       0.711                     
## Q152                       0.581                     
## Q163                                            0.384
## Q168         0.679                                   
## Q169         0.732                                   
## Q179         0.609                                   
## Q180         0.764                                   
## Q182                              0.630              
## Q183                              0.734              
## Q184                              0.571              
## Q185                              0.432              
## Q198  0.593                                          
## Q199  0.562                                          
## Q200  0.630                                          
## Q202                0.742                            
## Q206                       0.405                     
## 
##                  PA1   PA2   PA4   PA3   PA5   PA6   PA7
## SS loadings    3.820 3.006 2.579 2.358 1.922 2.078 1.359
## Proportion Var 0.093 0.073 0.063 0.058 0.047 0.051 0.033
## Cumulative Var 0.093 0.166 0.229 0.287 0.334 0.384 0.418
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.04814408 0.04276601 0.05384566 0.90000000
fa1$TLI
## [1] 0.903942
fa1$Vaccounted
##                             PA1        PA2        PA4        PA3        PA5
## SS loadings           5.1395602 3.55161604 3.45161158 3.12804350 2.66640807
## Proportion Var        0.1253551 0.08662478 0.08418565 0.07629374 0.06503434
## Cumulative Var        0.1253551 0.21197991 0.29616556 0.37245930 0.43749364
## Proportion Explained  0.2297505 0.15876563 0.15429519 0.13983094 0.11919474
## Cumulative Proportion 0.2297505 0.38851612 0.54281131 0.68264225 0.80183699
##                              PA6        PA7
## SS loadings           2.65049808 1.78244458
## Proportion Var        0.06464629 0.04347426
## Cumulative Var        0.50213994 0.54561420
## Proportion Explained  0.11848353 0.07967948
## Cumulative Proportion 0.92032052 1.00000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
## PA2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
## PA4 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
## PA3 =~ Q2 + Q4 + Q147 + Q150 + Q151 + Q152 + Q206
## PA5 =~ Q182 + Q183 + Q184 + Q185
## PA6 =~ Q5 + Q6 + Q7 + Q105
## PA7 =~ Q13 + Q14 + Q15 + Q163
F1 <- c("Q9", "Q10", "Q11", "Q12", "Q103", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q17", "Q18", "Q19", "Q20", "Q101", "Q202")
F4 <- c("Q2", "Q4", "Q147", "Q150", "Q151", "Q152", "Q206")
F5 <- c("Q5", "Q6", "Q7", "Q105")
F6 <- c("Q182", "Q183", "Q184", "Q185")
F7 <- c("Q13", "Q14", "Q15", "Q163")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.9044201
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8582172
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8533501
alpha_F4 <- psych::alpha(X[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8630549
alpha_F5 <- psych::alpha(X[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.8283267
alpha_F6 <- psych::alpha(X[,F6])$total[1]; alpha_F6
##  raw_alpha
##  0.7802436
alpha_F7 <- psych::alpha(X[,F7])$total[1]; alpha_F7
##  raw_alpha
##  0.7874542
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
F4m <- apply(X[,F4], 1, mean)
F5m <- apply(X[,F5], 1, mean)
F6m <- apply(X[,F6], 1, mean)
F7m <- apply(X[,F7], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m, F6m, F7m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m  F6m  F7m
## F1m 1.00 0.48 0.58 0.58 0.57 0.58 0.67
## F2m 0.48 1.00 0.35 0.41 0.53 0.32 0.36
## F3m 0.58 0.35 1.00 0.67 0.34 0.45 0.52
## F4m 0.58 0.41 0.67 1.00 0.30 0.52 0.55
## F5m 0.57 0.53 0.34 0.30 1.00 0.36 0.40
## F6m 0.58 0.32 0.45 0.52 0.36 1.00 0.60
## F7m 0.67 0.36 0.52 0.55 0.40 0.60 1.00

8 factors

Number of factors set to 8. After an initial elimination of items with loadings less than 0.32 and/or with cross loadings, approximate simple structure was achieved with 11 items in the first factor, 6 items in the second one, 8 items in the third one, 7 items in the fourth one, 4 items in the next three factors, and 3 items in the eigth one. To further reduce the length of factors 1, 2, 3, and 4, we excluded items that had loadings less than 0.45. This led to the following 8-factor solution.

nfactors <- 8
remove <- c("Q3", "Q8", "Q16", "Q100", "Q102", "Q103", "Q106", "Q146", "Q147", "Q148", "Q149", "Q164", "Q165", "Q166", "Q181", "Q186", "Q187", "Q201", "Q203", "Q204", "Q205", "Q206") 
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA3    PA2    PA4    PA5    PA6    PA7    PA8   
## Q1                                                     0.416
## Q2                                                     0.497
## Q4                                                     0.600
## Q5                                0.734                     
## Q6                                0.641                     
## Q7                                0.678                     
## Q9    0.698                                                 
## Q10   0.547                                                 
## Q11   0.488                                                 
## Q12   0.704                                                 
## Q13                                             0.575       
## Q14                                             0.329       
## Q15                                             0.404       
## Q17                        0.442                            
## Q18                        0.392                            
## Q19                        0.717                            
## Q20                        0.492                            
## Q101                       0.538                            
## Q104  0.453                                                 
## Q105                              0.744                     
## Q107                0.595                                   
## Q122  0.510                                                 
## Q145                0.661                                   
## Q150         0.704                                          
## Q151         0.646                                          
## Q152         0.645                                          
## Q161         0.576                                          
## Q162         0.581                                          
## Q163                                            0.407       
## Q167         0.509                                          
## Q168                0.619                                   
## Q169                0.690                                   
## Q179                0.610                                   
## Q180                0.774                                   
## Q182                                     0.616              
## Q183                                     0.751              
## Q184                                     0.571              
## Q185                                     0.399              
## Q198  0.542                                                 
## Q199  0.507                                                 
## Q200  0.534                                                 
## Q202                       0.754                            
## 
##                  PA1   PA3   PA2   PA4   PA5   PA6   PA7   PA8
## SS loadings    3.185 2.730 2.825 2.405 2.244 1.835 1.393 1.205
## Proportion Var 0.076 0.065 0.067 0.057 0.053 0.044 0.033 0.029
## Cumulative Var 0.076 0.141 0.208 0.265 0.319 0.362 0.396 0.424
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.03977307 0.03377359 0.04594848 0.90000000
fa1$TLI
## [1] 0.9318522
fa1$Vaccounted
##                             PA1        PA3        PA2        PA4        PA5
## SS loadings           4.3537968 3.61783258 3.32789858 3.28315588 2.84718120
## Proportion Var        0.1036618 0.08613887 0.07923568 0.07817038 0.06779003
## Cumulative Var        0.1036618 0.18980070 0.26903638 0.34720676 0.41499679
## Proportion Explained  0.1852175 0.15390840 0.14157414 0.13967072 0.12112365
## Cumulative Proportion 0.1852175 0.33912590 0.48070004 0.62037075 0.74149441
##                              PA6        PA7        PA8
## SS loadings           2.55984889 1.81487916 1.70180813
## Proportion Var        0.06094878 0.04321141 0.04051924
## Cumulative Var        0.47594557 0.51915698 0.55967622
## Proportion Explained  0.10890008 0.07720787 0.07239765
## Cumulative Proportion 0.85039448 0.92760235 1.00000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q104 + Q122 + Q198 + Q199 + Q200
## PA3 =~ Q150 + Q151 + Q152 + Q161 + Q162 + Q167
## PA2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
## PA4 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
## PA5 =~ Q5 + Q6 + Q7 + Q105
## PA6 =~ Q182 + Q183 + Q184 + Q185
## PA7 =~ Q13 + Q14 + Q15 + Q163
## PA8 =~ Q1 + Q2 + Q4
F1 <- c("Q9", "Q10", "Q11", "Q12", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q150", "Q151", "Q152", "Q161", "Q162", "Q167")
F4 <- c("Q17", "Q18", "Q19", "Q20", "Q101", "Q202")
F5 <- c("Q5", "Q6", "Q7", "Q105")
F6 <- c("Q182", "Q183", "Q184", "Q185")
F7 <- c("Q13", "Q14", "Q15", "Q163")
F8 <- c("Q1", "Q2", "Q4")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.8945381
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8582172
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8603383
alpha_F4 <- psych::alpha(X[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8533501
alpha_F5 <- psych::alpha(X[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.8283267
alpha_F6 <- psych::alpha(X[,F6])$total[1]; alpha_F6
##  raw_alpha
##  0.7802436
alpha_F7 <- psych::alpha(X[,F7])$total[1]; alpha_F7
##  raw_alpha
##  0.7874542
alpha_F8 <- psych::alpha(X[,F8])$total[1]; alpha_F8
##  raw_alpha
##  0.7937542
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
F4m <- apply(X[,F4], 1, mean)
F5m <- apply(X[,F5], 1, mean)
F6m <- apply(X[,F6], 1, mean)
F7m <- apply(X[,F7], 1, mean)
F8m <- apply(X[,F8], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m, F6m, F7m, F8m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m  F6m  F7m  F8m
## F1m 1.00 0.48 0.53 0.58 0.54 0.58 0.67 0.53
## F2m 0.48 1.00 0.40 0.35 0.53 0.32 0.36 0.36
## F3m 0.53 0.40 1.00 0.64 0.25 0.48 0.52 0.63
## F4m 0.58 0.35 0.64 1.00 0.34 0.45 0.52 0.64
## F5m 0.54 0.53 0.25 0.34 1.00 0.36 0.40 0.33
## F6m 0.58 0.32 0.48 0.45 0.36 1.00 0.60 0.52
## F7m 0.67 0.36 0.52 0.52 0.40 0.60 1.00 0.52
## F8m 0.53 0.36 0.63 0.64 0.33 0.52 0.52 1.00

Items Q161, Q162, and Q167 may not be conceptually consistent with the other 3 items in F3. Since they are the items with lowest loadings in F3, we consider a model that excludes them. The following model is obtained after removing Q161, Q162, and Q167.

nfactors <- 8
remove <- c("Q3", "Q8", "Q16", "Q100", "Q102", "Q103", "Q106", "Q146", "Q147", "Q148", "Q149", "Q161", "Q162", "Q164", "Q165", "Q166", "Q167", "Q181", "Q186", "Q187", "Q201", "Q203", "Q204", "Q205", "Q206") 
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.319)
## 
## Loadings:
##      PA1    PA7    PA2    PA5    PA6    PA3    PA4    PA8   
## Q1                                                     0.378
## Q2                                                     0.450
## Q4                                                     0.550
## Q5                         0.732                            
## Q6                         0.640                            
## Q7                         0.680                            
## Q9    0.714                                                 
## Q10   0.541                                                 
## Q11   0.491                                                 
## Q12   0.720                                                 
## Q13                                             0.585       
## Q14                                             0.339       
## Q15                                             0.406       
## Q17          0.451                                          
## Q18          0.410                                          
## Q19          0.741                                          
## Q20          0.520                                          
## Q101         0.561                                          
## Q104  0.454                                                 
## Q105                       0.742                            
## Q107                0.613                                   
## Q122  0.496                                                 
## Q145                0.647                                   
## Q150                                     0.728              
## Q151                                     0.713              
## Q152                                     0.564              
## Q163                                            0.409       
## Q168                0.651                                   
## Q169                0.729                                   
## Q179                0.601                                   
## Q180                0.762                                   
## Q182                              0.633                     
## Q183                              0.770                     
## Q184                              0.567                     
## Q185                              0.419                     
## Q198  0.527                                                 
## Q199  0.490                                                 
## Q200  0.526                                                 
## Q202         0.764                                          
## 
##                  PA1   PA7   PA2   PA5   PA6   PA3   PA4   PA8
## SS loadings    3.142 2.542 2.856 2.218 1.896 1.785 1.401 1.028
## Proportion Var 0.081 0.065 0.073 0.057 0.049 0.046 0.036 0.026
## Cumulative Var 0.081 0.146 0.219 0.276 0.324 0.370 0.406 0.433
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.04437795 0.03816102 0.05083079 0.90000000
fa1$TLI
## [1] 0.9214692
fa1$Vaccounted
##                             PA1        PA7       PA2        PA5        PA6
## SS loadings           4.2695752 3.40073683 3.3405956 2.79804383 2.63936612
## Proportion Var        0.1094763 0.08719838 0.0856563 0.07174471 0.06767605
## Cumulative Var        0.1094763 0.19667467 0.2823310 0.35407568 0.42175173
## Proportion Explained  0.1936298 0.15422708 0.1514996 0.12689430 0.11969810
## Cumulative Proportion 0.1936298 0.34785691 0.4993565 0.62625082 0.74594891
##                              PA3        PA4        PA8
## SS loadings           2.43707594 1.79750956 1.36729004
## Proportion Var        0.06248913 0.04608999 0.03505872
## Cumulative Var        0.48424086 0.53033085 0.56538957
## Proportion Explained  0.11052402 0.08151899 0.06200808
## Cumulative Proportion 0.85647293 0.93799192 1.00000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q104 + Q122 + Q198 + Q199 + Q200
## PA7 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
## PA2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
## PA5 =~ Q5 + Q6 + Q7 + Q105
## PA6 =~ Q182 + Q183 + Q184 + Q185
## PA3 =~ Q150 + Q151 + Q152
## PA4 =~ Q13 + Q14 + Q15 + Q163
## PA8 =~ Q1 + Q2 + Q4
F1 <- c("Q9", "Q10", "Q11", "Q12", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q150", "Q151", "Q152")
F4 <- c("Q17", "Q18", "Q19", "Q20", "Q101", "Q202")
F5 <- c("Q5", "Q6", "Q7", "Q105")
F6 <- c("Q182", "Q183", "Q184", "Q185")
F7 <- c("Q13", "Q14", "Q15", "Q163")
F8 <- c("Q1", "Q2", "Q4")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.8945381
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8582172
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8162528
alpha_F4 <- psych::alpha(X[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8533501
alpha_F5 <- psych::alpha(X[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.8283267
alpha_F6 <- psych::alpha(X[,F6])$total[1]; alpha_F6
##  raw_alpha
##  0.7802436
alpha_F7 <- psych::alpha(X[,F7])$total[1]; alpha_F7
##  raw_alpha
##  0.7874542
alpha_F8 <- psych::alpha(X[,F8])$total[1]; alpha_F8
##  raw_alpha
##  0.7937542
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
F4m <- apply(X[,F4], 1, mean)
F5m <- apply(X[,F5], 1, mean)
F6m <- apply(X[,F6], 1, mean)
F7m <- apply(X[,F7], 1, mean)
F8m <- apply(X[,F8], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m, F6m, F7m, F8m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m  F6m  F7m  F8m
## F1m 1.00 0.48 0.48 0.58 0.54 0.58 0.67 0.53
## F2m 0.48 1.00 0.33 0.35 0.53 0.32 0.36 0.36
## F3m 0.48 0.33 1.00 0.61 0.22 0.46 0.45 0.62
## F4m 0.58 0.35 0.61 1.00 0.34 0.45 0.52 0.64
## F5m 0.54 0.53 0.22 0.34 1.00 0.36 0.40 0.33
## F6m 0.58 0.32 0.46 0.45 0.36 1.00 0.60 0.52
## F7m 0.67 0.36 0.45 0.52 0.40 0.60 1.00 0.52
## F8m 0.53 0.36 0.62 0.64 0.33 0.52 0.52 1.00

6 factors (reduced from 7 factors)

A feasible 6-factor solution was obtained by starting with a 7-factor solution and further reducing it.

nfactors <- 6
remove <- c("Q1", "Q3", "Q8", "Q16", "Q106", "Q146", "Q148", "Q149", "Q164", "Q165", "Q181", "Q186", "Q204", "Q102", "Q187", "Q201", "Q166", "Q161", "Q162", "Q100", "Q205", "Q203",  "Q167", "Q182", "Q183", "Q184", "Q185", "Q206")
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.29)
## 
## Loadings:
##      PA1    PA3    PA2    PA4    PA5    PA6   
## Q2           0.621                            
## Q4           0.505                            
## Q5                                0.680       
## Q6                                0.627       
## Q7                                0.629       
## Q9    0.634                                   
## Q10   0.619                                   
## Q11   0.464                                   
## Q12   0.666                                   
## Q13                                      0.576
## Q14                                      0.309
## Q15   0.328                              0.399
## Q17                        0.481              
## Q18          0.318         0.408              
## Q19                        0.738              
## Q20          0.335         0.524              
## Q101                       0.532              
## Q103  0.534                       0.305       
## Q104  0.548                                   
## Q105                              0.709       
## Q107                0.618                     
## Q122  0.536                                   
## Q145                0.626                     
## Q147         0.357                            
## Q150         0.650                            
## Q151         0.789                            
## Q152         0.643                            
## Q163  0.301                              0.423
## Q168                0.669                     
## Q169                0.738                     
## Q179                0.618                     
## Q180                0.767                     
## Q198  0.662                                   
## Q199  0.643                                   
## Q200  0.686                                   
## Q202                       0.759              
## 
##                  PA1   PA3   PA2   PA4   PA5   PA6
## SS loadings    4.167 2.666 2.917 2.377 2.162 1.363
## Proportion Var 0.116 0.074 0.081 0.066 0.060 0.038
## Cumulative Var 0.116 0.190 0.271 0.337 0.397 0.435
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.05113013 0.04515592 0.05743456 0.90000000
fa1$TLI
## [1] 0.9067438
fa1$Vaccounted
##                             PA1       PA3        PA2        PA4        PA5
## SS loadings           5.2794926 3.4332407 3.38773598 3.13079010 2.73440072
## Proportion Var        0.1466526 0.0953678 0.09410378 0.08696639 0.07595558
## Cumulative Var        0.1466526 0.2420204 0.33612415 0.42309054 0.49904611
## Proportion Explained  0.2684349 0.1745625 0.17224886 0.15918449 0.13903014
## Cumulative Proportion 0.2684349 0.4429974 0.61524631 0.77443080 0.91346094
##                              PA6
## SS loadings           1.70202276
## Proportion Var        0.04727841
## Cumulative Var        0.54632452
## Proportion Explained  0.08653906
## Cumulative Proportion 1.00000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
## PA3 =~ Q2 + Q4 + Q147 + Q150 + Q151 + Q152
## PA2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
## PA4 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
## PA5 =~ Q5 + Q6 + Q7 + Q105
## PA6 =~ Q13 + Q14 + Q15 + Q163
F1 <- c("Q9", "Q10", "Q11", "Q12", "Q103", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q2", "Q4", "Q147", "Q150", "Q151", "Q152")
F4 <- c("Q17", "Q18", "Q19", "Q20", "Q101", "Q202")
F5 <- c("Q5", "Q6", "Q7", "Q105")
F6 <- c("Q13", "Q14", "Q15", "Q163")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.9044201
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8582172
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8610181
alpha_F4 <- psych::alpha(X[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8533501
alpha_F5 <- psych::alpha(X[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.8283267
alpha_F6 <- psych::alpha(X[,F6])$total[1]; alpha_F6
##  raw_alpha
##  0.7874542
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
F4m <- apply(X[,F4], 1, mean)
F5m <- apply(X[,F5], 1, mean)
F6m <- apply(X[,F6], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m, F6m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m  F6m
## F1m 1.00 0.48 0.55 0.58 0.57 0.67
## F2m 0.48 1.00 0.36 0.35 0.53 0.36
## F3m 0.55 0.36 1.00 0.68 0.27 0.53
## F4m 0.58 0.35 0.68 1.00 0.34 0.52
## F5m 0.57 0.53 0.27 0.34 1.00 0.40
## F6m 0.67 0.36 0.53 0.52 0.40 1.00

5 factors (reduced from 7 factors)

A feasible 5-factor solution was obtained by starting with a 7-factor solution and further reducing it.

nfactors <- 5
remove <- c("Q1", "Q3",  "Q16", "Q146", "Q148", "Q149", "Q164", "Q165", "Q181", "Q186", "Q204", "Q102", "Q187", "Q201", "Q166", "Q161", "Q162", "Q100", "Q205", "Q203", "Q147", "Q167", "Q182", "Q183", "Q184", "Q185", "Q206", "Q18", "Q5", "Q6", "Q7", "Q105") # 
cols <- setdiff(names(X), remove)
cor2 <- cor(X[,cols])
fa1 <- fa(r = cor2, n.obs = nrow(X[,cols]), nfactors = nfactors,
 fm = "pa", max.iter = 100, rotate =  "oblimin") 
print(fa1$loadings, cutoff = 0.29)
## 
## Loadings:
##      PA1    PA2    PA3    PA4    PA5   
## Q2                  0.586              
## Q4                  0.422              
## Q8           0.687                     
## Q9    0.744                            
## Q10   0.642                            
## Q11   0.551                            
## Q12   0.747                            
## Q13                               0.568
## Q14   0.300                       0.351
## Q15   0.340                       0.459
## Q17                        0.522       
## Q19                        0.753       
## Q20                        0.530       
## Q101                       0.511       
## Q103  0.665                            
## Q104  0.547                            
## Q106                              0.337
## Q107         0.669                     
## Q122  0.580                            
## Q145         0.665                     
## Q150                0.702              
## Q151                0.795              
## Q152                0.659              
## Q163                              0.373
## Q168         0.679                     
## Q169         0.754                     
## Q179         0.585                     
## Q180         0.814                     
## Q198  0.636                            
## Q199  0.637                            
## Q200  0.696                            
## Q202                       0.755       
## 
##                  PA1   PA2   PA3   PA4   PA5
## SS loadings    4.675 3.518 2.394 2.316 1.429
## Proportion Var 0.146 0.110 0.075 0.072 0.045
## Cumulative Var 0.146 0.256 0.331 0.403 0.448
fa1$RMSEA
##      RMSEA      lower      upper confidence 
## 0.05539788 0.04894942 0.06220497 0.90000000
fa1$TLI
## [1] 0.9022417
fa1$Vaccounted
##                             PA1       PA2        PA3        PA4        PA5
## SS loadings           5.5137699 3.8298787 2.99179456 2.97011569 1.80520238
## Proportion Var        0.1723053 0.1196837 0.09349358 0.09281612 0.05641257
## Cumulative Var        0.1723053 0.2919890 0.38548260 0.47829871 0.53471129
## Proportion Explained  0.3222399 0.2238287 0.17484871 0.17358174 0.10550100
## Cumulative Proportion 0.3222399 0.5460686 0.72091726 0.89449900 1.00000000
# Factors
efa_to_cfa(fa1)
## # Latent variables
## PA1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
## PA2 =~ Q8 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
## PA3 =~ Q2 + Q4 + Q150 + Q151 + Q152
## PA4 =~ Q17 + Q19 + Q20 + Q101 + Q202
## PA5 =~ Q13 + Q14 + Q15 + Q106 + Q163
F1 <- c("Q9", "Q10", "Q11", "Q12", "Q103", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q8", "Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q2", "Q4", "Q150", "Q151", "Q152")
F4 <- c("Q17", "Q19", "Q20", "Q101", "Q202")
F5 <- c("Q13", "Q14", "Q15", "Q106", "Q163")

# Alphas
alpha_F1 <- psych::alpha(X[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.9044201
alpha_F2 <- psych::alpha(X[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8743039
alpha_F3 <- psych::alpha(X[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8492573
alpha_F4 <- psych::alpha(X[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8378075
alpha_F5 <- psych::alpha(X[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.7854745
# Correlation between factors
F1m <- apply(X[,F1], 1, mean)
F2m <- apply(X[,F2], 1, mean)
F3m <- apply(X[,F3], 1, mean)
F4m <- apply(X[,F4], 1, mean)
F5m <- apply(X[,F5], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m
## F1m 1.00 0.49 0.52 0.57 0.67
## F2m 0.49 1.00 0.33 0.31 0.38
## F3m 0.52 0.33 1.00 0.64 0.54
## F4m 0.57 0.31 0.64 1.00 0.55
## F5m 0.67 0.38 0.54 0.55 1.00

CFA

The six feasible models from the EFA will be tested with a CFA.

Checking multivariate normality on the CFA dataset

Descriptive stats

mvn2 <- mvn(b2)
mvn2_df <- data.frame(mvn2$Descriptives)
write.csv(mvn2_df, "mvn2.csv")
mvn2_df
##        n     Mean   Std.Dev Median Min Max X25th X75th        Skew    Kurtosis
## Q1   283 3.752650 1.0926666      4   1   5   3.0     5 -0.55765379 -0.40791793
## Q2   283 3.996466 1.1060704      4   1   5   3.0     5 -1.02715608  0.35113356
## Q3   283 4.466431 0.7542576      5   1   5   4.0     5 -1.44280572  2.00118016
## Q4   283 4.010601 0.9282184      4   1   5   3.0     5 -0.81619517  0.36379126
## Q5   283 4.466431 0.7819577      5   1   5   4.0     5 -1.46328041  1.80997441
## Q6   283 4.413428 0.8135139      5   1   5   4.0     5 -1.47325556  2.11938294
## Q7   283 4.240283 0.8785481      4   1   5   4.0     5 -1.07776207  0.75122222
## Q8   283 4.183746 0.9039810      4   1   5   4.0     5 -0.97000193  0.39732918
## Q9   283 4.176678 0.9014686      4   2   5   4.0     5 -0.75741820 -0.46496151
## Q10  283 4.477032 0.7686239      5   1   5   4.0     5 -1.51074618  2.09571937
## Q11  283 4.159011 0.9145098      4   1   5   4.0     5 -1.09330779  0.98880324
## Q12  283 4.250883 0.8488358      4   1   5   4.0     5 -1.01914449  0.73104354
## Q13  283 4.681979 0.6284567      5   1   5   5.0     5 -2.20139377  5.53557432
## Q14  283 4.572438 0.6874380      5   1   5   4.0     5 -1.82673211  3.93263388
## Q15  283 4.554770 0.6992931      5   2   5   4.0     5 -1.55856165  1.99816384
## Q16  283 4.501767 0.7164459      5   2   5   4.0     5 -1.30334156  1.01869125
## Q17  283 4.307420 0.9306720      5   1   5   4.0     5 -1.27336425  0.99026313
## Q18  283 3.183746 1.2833429      3   1   5   2.0     4 -0.09324477 -1.02956146
## Q19  283 4.042403 1.1036547      4   1   5   3.0     5 -1.04541216  0.34326369
## Q20  283 3.802120 1.1863866      4   1   5   3.0     5 -0.79603324 -0.25218616
## Q100 283 4.226148 0.9138930      4   1   5   4.0     5 -1.06969928  0.65740659
## Q101 283 4.378092 0.9612052      5   1   5   4.0     5 -1.71819673  2.58345766
## Q102 283 4.385159 0.8011908      5   1   5   4.0     5 -1.33520907  1.79420752
## Q103 283 4.484099 0.7915297      5   1   5   4.0     5 -1.59393125  2.43900202
## Q104 283 4.445230 0.8119259      5   1   5   4.0     5 -1.48727987  1.80533371
## Q105 283 4.144876 0.9435486      4   1   5   4.0     5 -1.04732788  0.68040757
## Q106 283 4.409894 0.7820057      5   1   5   4.0     5 -1.38580823  2.08030326
## Q107 283 3.862191 1.1038704      4   1   5   3.0     5 -0.83064299  0.12097958
## Q122 283 3.996466 1.0296947      4   1   5   3.0     5 -0.75034079 -0.14686442
## Q145 283 3.473498 1.2890032      4   1   5   3.0     5 -0.48113291 -0.85503791
## Q146 283 4.395760 0.9923018      5   1   5   4.0     5 -1.78370362  2.71056426
## Q147 283 4.091873 0.9631717      4   1   5   4.0     5 -0.98993240  0.57502192
## Q148 283 3.961131 1.0761312      4   1   5   3.0     5 -0.85885685  0.10104988
## Q149 283 4.063604 0.9580845      4   1   5   3.5     5 -0.87376126  0.25867569
## Q150 283 4.303887 1.2055806      5   1   5   4.0     5 -1.84238798  2.27417017
## Q151 283 3.247350 1.2358210      3   1   5   3.0     4 -0.29556557 -0.76239643
## Q152 283 3.522968 1.3270250      4   1   5   3.0     5 -0.50745046 -0.91257828
## Q161 283 3.936396 1.1374588      4   1   5   3.0     5 -0.86993077 -0.03424393
## Q162 283 4.395760 0.8866122      5   1   5   4.0     5 -1.52472730  1.93392929
## Q163 283 4.625442 0.7492238      5   1   5   4.0     5 -2.54792390  7.50583519
## Q164 283 4.113074 1.0524905      4   1   5   4.0     5 -1.18921808  0.87446363
## Q165 283 4.575972 0.7698130      5   1   5   4.0     5 -2.22948827  5.53597575
## Q166 283 3.031802 1.3666672      3   1   5   2.0     4 -0.01558835 -1.14313304
## Q167 283 3.204947 1.4416710      3   1   5   2.0     5 -0.20378172 -1.25976317
## Q168 283 4.307420 0.8593549      5   1   5   4.0     5 -1.23211750  1.21471092
## Q169 283 4.007067 1.0947746      4   1   5   3.0     5 -0.85413374 -0.31659931
## Q179 283 3.710247 1.1793740      4   1   5   3.0     5 -0.56470463 -0.61726143
## Q180 283 3.554770 1.1758520      4   1   5   3.0     5 -0.32653602 -0.86398927
## Q181 283 4.551237 0.7485377      5   1   5   4.0     5 -1.79201114  3.10927722
## Q182 283 4.296820 0.9547699      5   1   5   4.0     5 -1.20298817  0.74076869
## Q183 283 3.904594 0.9828747      4   1   5   3.0     5 -0.74720941  0.14825713
## Q184 283 4.268551 0.8784054      5   1   5   4.0     5 -1.07806299  0.65903797
## Q185 283 4.321555 0.8541482      5   1   5   4.0     5 -1.34319212  1.94589698
## Q186 283 4.441696 0.8289701      5   1   5   4.0     5 -1.67586531  2.90177526
## Q187 283 4.130742 0.9605010      4   1   5   4.0     5 -0.95574674  0.35278957
## Q198 283 4.342756 0.9065417      5   1   5   4.0     5 -1.26494804  0.74285121
## Q199 283 4.424028 0.8145760      5   1   5   4.0     5 -1.57951293  2.72059618
## Q200 283 4.519435 0.8135447      5   1   5   4.0     5 -1.87365331  3.52954625
## Q201 283 4.388693 0.7927952      5   1   5   4.0     5 -1.31402567  1.76727903
## Q202 283 3.862191 1.1134660      4   1   5   3.0     5 -0.78764534 -0.04501078
## Q203 283 4.201413 0.9518914      4   1   5   4.0     5 -1.24424757  1.30831927
## Q204 283 4.349823 0.8839938      5   1   5   4.0     5 -1.26031471  0.96792062
## Q205 283 3.826855 1.0760380      4   1   5   3.0     5 -0.72585092  0.01203149
## Q206 283 3.625442 1.2003203      4   1   5   3.0     5 -0.40575588 -0.92852448

Range and median skewness and kurtosis

median(mvn2_df$Skew)
## [1] -1.085685
min(mvn2_df$Skew)
## [1] -2.547924
max(mvn2_df$Skew)
## [1] -0.01558835
median(mvn2_df$Kurtosis)
## [1] 0.7418099
min(mvn2_df$Kurtosis)
## [1] -1.259763
max(mvn2_df$Kurtosis)
## [1] 7.505835

Number of potential outliers:

cutoff <- qchisq(1-0.001, ncol(b2))
mahal <- mahalanobis(b2, colMeans(b2), cov(b2))
s <- summary(mahal < cutoff); s
##    Mode   FALSE    TRUE 
## logical      32     251

Henze-Zirkler test for multivariate normality:

mvn2$multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 1.042516       0  NO

The data is not multivariate normal (use a robust method, “MLR”).

Create table to store measures of model fit

models <- data.frame(model = NA, chisq = NA, df = NA, p = NA, CFI = NA, TLI = NA, ecvi = NA, srmr = NA, RMSEA = NA, RMSEA_lower = NA, RMSEA_upper = NA, RMSEA_p = NA)

Two-factor model

model <- '
F1 =~ Q1 + Q2 + Q3 + Q4 + Q10 + Q13 + Q17 + Q18 + Q19 + Q20 + Q100 + Q101 + Q147 + Q148 + Q149 + Q150 + Q151 + Q152 + Q161 + Q162 + Q163 + Q164  + Q165 + Q166 + Q182 + Q185 + Q186 + Q187 + Q198 + Q199 + Q201 + Q202 + Q203 + Q204
F2 =~ Q5 + Q6 + Q7 + Q8 + Q105 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr", "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[1,1] <- "2 factors"
models[1,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 45 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        91
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              2670.995    2201.561
##   Degrees of freedom                               944         944
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.213
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q1                1.000                               0.621    0.569
##     Q2                1.222    0.137    8.912    0.000    0.759    0.687
##     Q3                0.708    0.089    7.993    0.000    0.439    0.583
##     Q4                0.866    0.113    7.655    0.000    0.537    0.580
##     Q10               0.846    0.107    7.927    0.000    0.525    0.684
##     Q13               0.614    0.102    6.018    0.000    0.381    0.608
##     Q17               0.990    0.113    8.751    0.000    0.614    0.661
##     Q18               1.352    0.143    9.476    0.000    0.839    0.655
##     Q19               1.200    0.145    8.253    0.000    0.745    0.676
##     Q20               1.310    0.144    9.072    0.000    0.813    0.686
##     Q100              0.968    0.103    9.369    0.000    0.601    0.658
##     Q101              1.160    0.137    8.482    0.000    0.720    0.750
##     Q147              0.948    0.145    6.548    0.000    0.588    0.612
##     Q148              1.041    0.117    8.863    0.000    0.646    0.601
##     Q149              1.104    0.133    8.280    0.000    0.685    0.716
##     Q150              1.004    0.169    5.928    0.000    0.623    0.518
##     Q151              1.238    0.139    8.896    0.000    0.768    0.623
##     Q152              1.457    0.172    8.449    0.000    0.904    0.683
##     Q161              1.017    0.147    6.929    0.000    0.631    0.556
##     Q162              0.871    0.111    7.835    0.000    0.540    0.611
##     Q163              0.788    0.140    5.643    0.000    0.489    0.654
##     Q164              0.990    0.161    6.156    0.000    0.615    0.585
##     Q165              0.664    0.122    5.430    0.000    0.412    0.536
##     Q166              1.321    0.158    8.384    0.000    0.820    0.601
##     Q182              0.751    0.130    5.768    0.000    0.466    0.489
##     Q185              0.771    0.128    6.039    0.000    0.479    0.561
##     Q186              0.828    0.132    6.263    0.000    0.514    0.621
##     Q187              1.021    0.132    7.756    0.000    0.634    0.661
##     Q198              0.940    0.147    6.391    0.000    0.583    0.645
##     Q199              0.844    0.148    5.695    0.000    0.524    0.644
##     Q201              0.763    0.114    6.670    0.000    0.473    0.598
##     Q202              1.221    0.125    9.751    0.000    0.758    0.682
##     Q203              1.236    0.136    9.116    0.000    0.767    0.807
##     Q204              0.799    0.114    6.999    0.000    0.496    0.562
##   F2 =~                                                                 
##     Q5                1.000                               0.489    0.626
##     Q6                1.148    0.131    8.750    0.000    0.561    0.691
##     Q7                1.070    0.111    9.678    0.000    0.523    0.596
##     Q8                1.368    0.168    8.124    0.000    0.668    0.741
##     Q105              1.213    0.147    8.263    0.000    0.593    0.629
##     Q107              1.137    0.212    5.352    0.000    0.556    0.504
##     Q145              1.542    0.252    6.120    0.000    0.753    0.585
##     Q168              1.283    0.141    9.091    0.000    0.627    0.731
##     Q169              1.726    0.205    8.420    0.000    0.844    0.772
##     Q179              1.442    0.212    6.789    0.000    0.705    0.599
##     Q180              1.834    0.231    7.951    0.000    0.896    0.763
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.155    0.029    5.258    0.000    0.510    0.510
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q1                0.805    0.066   12.175    0.000    0.805    0.676
##    .Q2                0.644    0.076    8.488    0.000    0.644    0.528
##    .Q3                0.374    0.040    9.407    0.000    0.374    0.660
##    .Q4                0.570    0.052   10.926    0.000    0.570    0.664
##    .Q10               0.313    0.037    8.391    0.000    0.313    0.532
##    .Q13               0.248    0.035    7.165    0.000    0.248    0.631
##    .Q17               0.486    0.054    8.973    0.000    0.486    0.563
##    .Q18               0.937    0.079   11.898    0.000    0.937    0.571
##    .Q19               0.659    0.069    9.575    0.000    0.659    0.543
##    .Q20               0.742    0.076    9.823    0.000    0.742    0.529
##    .Q100              0.471    0.049    9.581    0.000    0.471    0.566
##    .Q101              0.403    0.046    8.706    0.000    0.403    0.437
##    .Q147              0.578    0.067    8.695    0.000    0.578    0.626
##    .Q148              0.737    0.067   10.950    0.000    0.737    0.638
##    .Q149              0.446    0.051    8.667    0.000    0.446    0.487
##    .Q150              1.060    0.147    7.204    0.000    1.060    0.732
##    .Q151              0.932    0.089   10.504    0.000    0.932    0.612
##    .Q152              0.937    0.112    8.395    0.000    0.937    0.534
##    .Q161              0.891    0.090    9.885    0.000    0.891    0.691
##    .Q162              0.491    0.050    9.739    0.000    0.491    0.627
##    .Q163              0.320    0.054    5.939    0.000    0.320    0.572
##    .Q164              0.726    0.085    8.590    0.000    0.726    0.658
##    .Q165              0.421    0.078    5.362    0.000    0.421    0.712
##    .Q166              1.189    0.095   12.549    0.000    1.189    0.639
##    .Q182              0.691    0.077    9.004    0.000    0.691    0.761
##    .Q185              0.498    0.056    8.864    0.000    0.498    0.685
##    .Q186              0.420    0.051    8.194    0.000    0.420    0.614
##    .Q187              0.517    0.058    8.990    0.000    0.517    0.563
##    .Q198              0.479    0.058    8.211    0.000    0.479    0.585
##    .Q199              0.387    0.050    7.673    0.000    0.387    0.585
##    .Q201              0.402    0.047    8.610    0.000    0.402    0.642
##    .Q202              0.661    0.075    8.839    0.000    0.661    0.535
##    .Q203              0.314    0.037    8.568    0.000    0.314    0.348
##    .Q204              0.533    0.072    7.392    0.000    0.533    0.685
##    .Q5                0.371    0.043    8.673    0.000    0.371    0.608
##    .Q6                0.345    0.054    6.339    0.000    0.345    0.523
##    .Q7                0.496    0.059    8.468    0.000    0.496    0.645
##    .Q8                0.368    0.040    9.206    0.000    0.368    0.451
##    .Q105              0.536    0.054    9.982    0.000    0.536    0.604
##    .Q107              0.905    0.097    9.302    0.000    0.905    0.746
##    .Q145              1.088    0.094   11.521    0.000    1.088    0.657
##    .Q168              0.343    0.051    6.669    0.000    0.343    0.466
##    .Q169              0.483    0.064    7.557    0.000    0.483    0.404
##    .Q179              0.889    0.100    8.890    0.000    0.889    0.642
##    .Q180              0.575    0.065    8.841    0.000    0.575    0.417
##     F1                0.385    0.082    4.672    0.000    1.000    1.000
##     F2                0.239    0.056    4.290    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##              2201.561               944.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.776                 0.765                10.081 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.071                 0.076                 0.071 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.080                 0.000
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Three-factor model

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q13 + Q14 + Q15 + Q102 + Q103 + Q104 + Q163 + Q184 + Q185 + Q186 + Q198 + Q199 + Q200
F2 =~ Q2 + Q18 + Q19 + Q20 + Q101 + Q150 + Q151 + Q152 + Q166 + Q203
F3 =~ Q8 + Q105 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr", "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[2,1] <- "3 factors"
models[2,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 51 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        73
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              1653.231    1351.485
##   Degrees of freedom                               557         557
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.223
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q9                1.000                               0.566    0.629
##     Q10               0.991    0.120    8.237    0.000    0.561    0.731
##     Q11               1.007    0.113    8.902    0.000    0.570    0.625
##     Q12               1.150    0.105   10.973    0.000    0.651    0.768
##     Q13               0.687    0.112    6.145    0.000    0.389    0.620
##     Q14               0.589    0.121    4.875    0.000    0.333    0.486
##     Q15               0.672    0.098    6.841    0.000    0.380    0.545
##     Q102              0.904    0.128    7.073    0.000    0.512    0.640
##     Q103              0.715    0.108    6.625    0.000    0.405    0.512
##     Q104              1.000    0.133    7.516    0.000    0.566    0.699
##     Q163              0.855    0.141    6.055    0.000    0.484    0.647
##     Q184              0.747    0.106    7.044    0.000    0.423    0.482
##     Q185              0.863    0.113    7.614    0.000    0.489    0.573
##     Q186              0.986    0.129    7.637    0.000    0.558    0.675
##     Q198              1.233    0.163    7.581    0.000    0.698    0.772
##     Q199              1.064    0.149    7.135    0.000    0.603    0.741
##     Q200              1.043    0.140    7.474    0.000    0.591    0.727
##   F2 =~                                                                 
##     Q2                1.000                               0.744    0.674
##     Q18               1.211    0.105   11.512    0.000    0.900    0.703
##     Q19               1.125    0.113    9.979    0.000    0.837    0.759
##     Q20               1.174    0.113   10.409    0.000    0.873    0.737
##     Q101              1.035    0.089   11.619    0.000    0.770    0.802
##     Q150              0.814    0.110    7.377    0.000    0.606    0.503
##     Q151              1.030    0.108    9.530    0.000    0.766    0.621
##     Q152              1.224    0.123    9.935    0.000    0.911    0.687
##     Q166              1.110    0.114    9.718    0.000    0.826    0.605
##     Q203              1.041    0.087   12.011    0.000    0.774    0.815
##   F3 =~                                                                 
##     Q8                1.000                               0.632    0.700
##     Q105              0.804    0.093    8.639    0.000    0.508    0.539
##     Q107              0.951    0.119    7.989    0.000    0.601    0.545
##     Q145              1.258    0.139    9.027    0.000    0.795    0.618
##     Q168              1.041    0.123    8.487    0.000    0.657    0.766
##     Q169              1.434    0.128   11.209    0.000    0.906    0.829
##     Q179              1.122    0.122    9.232    0.000    0.709    0.602
##     Q180              1.432    0.114   12.543    0.000    0.905    0.771
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.341    0.053    6.461    0.000    0.810    0.810
##     F3                0.180    0.032    5.701    0.000    0.502    0.502
##   F2 ~~                                                                 
##     F3                0.192    0.042    4.545    0.000    0.409    0.409
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q9                0.489    0.055    8.949    0.000    0.489    0.604
##    .Q10               0.274    0.036    7.687    0.000    0.274    0.466
##    .Q11               0.508    0.064    7.997    0.000    0.508    0.610
##    .Q12               0.294    0.032    9.327    0.000    0.294    0.409
##    .Q13               0.242    0.038    6.307    0.000    0.242    0.615
##    .Q14               0.360    0.048    7.477    0.000    0.360    0.764
##    .Q15               0.343    0.049    6.924    0.000    0.343    0.703
##    .Q102              0.378    0.060    6.272    0.000    0.378    0.591
##    .Q103              0.460    0.062    7.456    0.000    0.460    0.737
##    .Q104              0.336    0.042    8.053    0.000    0.336    0.512
##    .Q163              0.325    0.057    5.744    0.000    0.325    0.581
##    .Q184              0.590    0.071    8.258    0.000    0.590    0.767
##    .Q185              0.488    0.062    7.904    0.000    0.488    0.672
##    .Q186              0.373    0.052    7.194    0.000    0.373    0.545
##    .Q198              0.331    0.053    6.237    0.000    0.331    0.405
##    .Q199              0.298    0.044    6.850    0.000    0.298    0.451
##    .Q200              0.311    0.044    7.070    0.000    0.311    0.471
##    .Q2                0.666    0.079    8.444    0.000    0.666    0.546
##    .Q18               0.830    0.074   11.235    0.000    0.830    0.506
##    .Q19               0.514    0.066    7.820    0.000    0.514    0.423
##    .Q20               0.640    0.072    8.914    0.000    0.640    0.456
##    .Q101              0.328    0.042    7.833    0.000    0.328    0.356
##    .Q150              1.081    0.144    7.518    0.000    1.081    0.747
##    .Q151              0.935    0.096    9.793    0.000    0.935    0.615
##    .Q152              0.926    0.115    8.058    0.000    0.926    0.527
##    .Q166              1.180    0.103   11.443    0.000    1.180    0.634
##    .Q203              0.304    0.037    8.258    0.000    0.304    0.336
##    .Q8                0.415    0.043    9.641    0.000    0.415    0.510
##    .Q105              0.629    0.060   10.433    0.000    0.629    0.709
##    .Q107              0.853    0.092    9.311    0.000    0.853    0.703
##    .Q145              1.024    0.091   11.247    0.000    1.024    0.619
##    .Q168              0.304    0.047    6.402    0.000    0.304    0.413
##    .Q169              0.373    0.058    6.431    0.000    0.373    0.313
##    .Q179              0.884    0.103    8.606    0.000    0.884    0.638
##    .Q180              0.560    0.068    8.201    0.000    0.560    0.406
##     F1                0.321    0.058    5.526    0.000    1.000    1.000
##     F2                0.553    0.099    5.608    0.000    1.000    1.000
##     F3                0.399    0.072    5.570    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##              1351.485               557.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.816                 0.803                 6.358 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.068                 0.079                 0.073 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.084                 0.000
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Five-factor model

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
F2 =~ Q8 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F3 =~ Q2 + Q4 + Q150 + Q151 + Q152
F4 =~ Q17 + Q19 + Q20 + Q101 + Q202
F5 =~ Q13 + Q14 + Q15 + Q106 + Q163'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr",  "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[3,1] <- "5 factors"
models[3,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 65 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        74
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              1203.997     963.639
##   Degrees of freedom                               454         454
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.249
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q9                1.000                               0.582    0.647
##     Q10               0.974    0.124    7.844    0.000    0.567    0.739
##     Q11               0.965    0.113    8.545    0.000    0.562    0.615
##     Q12               1.101    0.097   11.367    0.000    0.641    0.756
##     Q103              0.774    0.117    6.589    0.000    0.451    0.570
##     Q104              0.991    0.131    7.559    0.000    0.577    0.712
##     Q122              1.197    0.148    8.071    0.000    0.697    0.678
##     Q198              1.235    0.163    7.562    0.000    0.719    0.794
##     Q199              1.042    0.146    7.127    0.000    0.607    0.746
##     Q200              1.067    0.139    7.687    0.000    0.621    0.765
##   F2 =~                                                                 
##     Q8                1.000                               0.611    0.677
##     Q107              1.007    0.126    7.976    0.000    0.615    0.558
##     Q145              1.300    0.147    8.823    0.000    0.794    0.617
##     Q168              1.095    0.133    8.242    0.000    0.669    0.780
##     Q169              1.524    0.144   10.556    0.000    0.931    0.852
##     Q179              1.141    0.126    9.050    0.000    0.697    0.592
##     Q180              1.444    0.118   12.278    0.000    0.882    0.751
##   F3 =~                                                                 
##     Q2                1.000                               0.797    0.722
##     Q4                0.732    0.081    9.051    0.000    0.584    0.630
##     Q150              0.890    0.113    7.900    0.000    0.710    0.590
##     Q151              1.124    0.128    8.783    0.000    0.896    0.726
##     Q152              1.275    0.139    9.176    0.000    1.017    0.767
##   F4 =~                                                                 
##     Q17               1.000                               0.744    0.801
##     Q19               1.187    0.087   13.590    0.000    0.883    0.801
##     Q20               1.236    0.090   13.795    0.000    0.919    0.776
##     Q101              1.095    0.075   14.507    0.000    0.814    0.849
##     Q202              1.112    0.090   12.370    0.000    0.827    0.744
##   F5 =~                                                                 
##     Q13               1.000                               0.461    0.735
##     Q14               0.917    0.165    5.567    0.000    0.423    0.616
##     Q15               1.048    0.161    6.499    0.000    0.483    0.693
##     Q106              0.864    0.160    5.412    0.000    0.398    0.510
##     Q163              1.192    0.182    6.567    0.000    0.550    0.735
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.181    0.034    5.249    0.000    0.508    0.508
##     F3                0.315    0.054    5.833    0.000    0.679    0.679
##     F4                0.327    0.051    6.425    0.000    0.755    0.755
##     F5                0.194    0.036    5.353    0.000    0.721    0.721
##   F2 ~~                                                                 
##     F3                0.209    0.041    5.092    0.000    0.430    0.430
##     F4                0.143    0.033    4.325    0.000    0.314    0.314
##     F5                0.116    0.028    4.098    0.000    0.412    0.412
##   F3 ~~                                                                 
##     F4                0.417    0.072    5.820    0.000    0.703    0.703
##     F5                0.266    0.051    5.184    0.000    0.723    0.723
##   F4 ~~                                                                 
##     F5                0.226    0.046    4.938    0.000    0.660    0.660
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q9                0.471    0.055    8.603    0.000    0.471    0.581
##    .Q10               0.267    0.035    7.686    0.000    0.267    0.454
##    .Q11               0.518    0.063    8.287    0.000    0.518    0.622
##    .Q12               0.307    0.038    8.082    0.000    0.307    0.428
##    .Q103              0.421    0.059    7.124    0.000    0.421    0.675
##    .Q104              0.324    0.038    8.563    0.000    0.324    0.494
##    .Q122              0.571    0.064    8.960    0.000    0.571    0.540
##    .Q198              0.302    0.047    6.370    0.000    0.302    0.369
##    .Q199              0.293    0.042    6.925    0.000    0.293    0.443
##    .Q200              0.273    0.038    7.278    0.000    0.273    0.415
##    .Q8                0.441    0.045    9.833    0.000    0.441    0.542
##    .Q107              0.836    0.089    9.397    0.000    0.836    0.689
##    .Q145              1.025    0.096   10.718    0.000    1.025    0.619
##    .Q168              0.289    0.045    6.466    0.000    0.289    0.392
##    .Q169              0.328    0.057    5.750    0.000    0.328    0.275
##    .Q179              0.900    0.103    8.759    0.000    0.900    0.650
##    .Q180              0.600    0.075    8.003    0.000    0.600    0.435
##    .Q2                0.583    0.087    6.726    0.000    0.583    0.479
##    .Q4                0.518    0.051   10.109    0.000    0.518    0.603
##    .Q150              0.945    0.123    7.699    0.000    0.945    0.652
##    .Q151              0.719    0.094    7.661    0.000    0.719    0.472
##    .Q152              0.721    0.107    6.752    0.000    0.721    0.411
##    .Q17               0.310    0.038    8.117    0.000    0.310    0.359
##    .Q19               0.435    0.066    6.572    0.000    0.435    0.358
##    .Q20               0.557    0.060    9.222    0.000    0.557    0.397
##    .Q101              0.257    0.033    7.773    0.000    0.257    0.280
##    .Q202              0.552    0.077    7.204    0.000    0.552    0.447
##    .Q13               0.181    0.032    5.612    0.000    0.181    0.460
##    .Q14               0.292    0.042    6.990    0.000    0.292    0.620
##    .Q15               0.254    0.044    5.822    0.000    0.254    0.520
##    .Q106              0.451    0.060    7.545    0.000    0.451    0.740
##    .Q163              0.257    0.045    5.750    0.000    0.257    0.460
##     F1                0.339    0.062    5.474    0.000    1.000    1.000
##     F2                0.373    0.071    5.218    0.000    1.000    1.000
##     F3                0.636    0.108    5.870    0.000    1.000    1.000
##     F4                0.553    0.086    6.462    0.000    1.000    1.000
##     F5                0.213    0.050    4.257    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##               963.639               454.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.869                 0.856                 4.777 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.061                 0.070                 0.064 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.077                 0.000
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Six-factor model

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
F2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F3 =~ Q2 + Q4 + Q147 + Q150 + Q151 + Q152
F4 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
F5 =~ Q5 + Q6 + Q7 + Q105
F6 =~ Q13 + Q14 + Q15 + Q163'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr", "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[4,1] <- "6 factors"
models[4,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 82 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        87
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              1453.050    1177.309
##   Degrees of freedom                               579         579
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.234
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q9                1.000                               0.582    0.647
##     Q10               0.973    0.123    7.898    0.000    0.567    0.739
##     Q11               0.960    0.112    8.533    0.000    0.559    0.612
##     Q12               1.100    0.096   11.455    0.000    0.641    0.756
##     Q103              0.785    0.117    6.686    0.000    0.457    0.579
##     Q104              0.985    0.130    7.562    0.000    0.573    0.707
##     Q122              1.209    0.148    8.156    0.000    0.704    0.685
##     Q198              1.231    0.161    7.637    0.000    0.717    0.792
##     Q199              1.039    0.144    7.202    0.000    0.605    0.744
##     Q200              1.066    0.137    7.767    0.000    0.621    0.765
##   F2 =~                                                                 
##     Q107              1.000                               0.596    0.541
##     Q145              1.307    0.136    9.589    0.000    0.779    0.605
##     Q168              1.134    0.152    7.467    0.000    0.676    0.788
##     Q169              1.587    0.184    8.632    0.000    0.946    0.866
##     Q179              1.164    0.153    7.592    0.000    0.694    0.589
##     Q180              1.459    0.164    8.920    0.000    0.870    0.741
##   F3 =~                                                                 
##     Q2                1.000                               0.805    0.729
##     Q4                0.726    0.080    9.018    0.000    0.584    0.631
##     Q147              0.793    0.076   10.484    0.000    0.639    0.664
##     Q150              0.885    0.107    8.304    0.000    0.712    0.592
##     Q151              1.083    0.108    9.986    0.000    0.872    0.707
##     Q152              1.238    0.118   10.511    0.000    0.997    0.752
##   F4 =~                                                                 
##     Q17               1.000                               0.730    0.786
##     Q18               1.225    0.115   10.694    0.000    0.894    0.698
##     Q19               1.205    0.088   13.763    0.000    0.880    0.799
##     Q20               1.262    0.091   13.918    0.000    0.922    0.779
##     Q101              1.109    0.075   14.889    0.000    0.810    0.844
##     Q202              1.141    0.092   12.352    0.000    0.834    0.750
##   F5 =~                                                                 
##     Q5                1.000                               0.577    0.739
##     Q6                1.014    0.136    7.440    0.000    0.585    0.720
##     Q7                1.092    0.106   10.318    0.000    0.630    0.719
##     Q105              1.200    0.148    8.107    0.000    0.692    0.735
##   F6 =~                                                                 
##     Q13               1.000                               0.472    0.752
##     Q14               0.890    0.164    5.416    0.000    0.420    0.613
##     Q15               1.034    0.163    6.353    0.000    0.488    0.699
##     Q163              1.158    0.186    6.232    0.000    0.547    0.731
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.175    0.033    5.305    0.000    0.505    0.505
##     F3                0.326    0.052    6.280    0.000    0.695    0.695
##     F4                0.324    0.050    6.437    0.000    0.763    0.763
##     F5                0.205    0.039    5.220    0.000    0.610    0.610
##     F6                0.196    0.037    5.315    0.000    0.712    0.712
##   F2 ~~                                                                 
##     F3                0.227    0.041    5.597    0.000    0.474    0.474
##     F4                0.141    0.029    4.814    0.000    0.324    0.324
##     F5                0.239    0.040    5.987    0.000    0.696    0.696
##     F6                0.113    0.024    4.659    0.000    0.403    0.403
##   F3 ~~                                                                 
##     F4                0.438    0.068    6.451    0.000    0.746    0.746
##     F5                0.199    0.040    4.998    0.000    0.428    0.428
##     F6                0.276    0.051    5.438    0.000    0.725    0.725
##   F4 ~~                                                                 
##     F5                0.181    0.039    4.675    0.000    0.429    0.429
##     F6                0.224    0.046    4.884    0.000    0.649    0.649
##   F5 ~~                                                                 
##     F6                0.138    0.040    3.497    0.000    0.508    0.508
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q9                0.471    0.054    8.666    0.000    0.471    0.581
##    .Q10               0.268    0.035    7.737    0.000    0.268    0.454
##    .Q11               0.521    0.063    8.265    0.000    0.521    0.625
##    .Q12               0.308    0.038    8.132    0.000    0.308    0.429
##    .Q103              0.415    0.059    7.071    0.000    0.415    0.665
##    .Q104              0.328    0.038    8.603    0.000    0.328    0.500
##    .Q122              0.560    0.063    8.842    0.000    0.560    0.530
##    .Q198              0.305    0.047    6.510    0.000    0.305    0.373
##    .Q199              0.295    0.042    6.968    0.000    0.295    0.447
##    .Q200              0.274    0.037    7.354    0.000    0.274    0.415
##    .Q107              0.859    0.091    9.480    0.000    0.859    0.707
##    .Q145              1.049    0.100   10.453    0.000    1.049    0.633
##    .Q168              0.279    0.041    6.827    0.000    0.279    0.380
##    .Q169              0.299    0.053    5.603    0.000    0.299    0.251
##    .Q179              0.905    0.103    8.770    0.000    0.905    0.653
##    .Q180              0.621    0.078    7.989    0.000    0.621    0.451
##    .Q2                0.571    0.077    7.370    0.000    0.571    0.468
##    .Q4                0.517    0.051   10.167    0.000    0.517    0.602
##    .Q147              0.516    0.062    8.378    0.000    0.516    0.559
##    .Q150              0.941    0.128    7.355    0.000    0.941    0.650
##    .Q151              0.761    0.088    8.687    0.000    0.761    0.500
##    .Q152              0.761    0.102    7.457    0.000    0.761    0.434
##    .Q17               0.330    0.038    8.618    0.000    0.330    0.382
##    .Q18               0.841    0.078   10.741    0.000    0.841    0.513
##    .Q19               0.439    0.067    6.532    0.000    0.439    0.362
##    .Q20               0.552    0.059    9.422    0.000    0.552    0.394
##    .Q101              0.264    0.031    8.438    0.000    0.264    0.287
##    .Q202              0.541    0.076    7.073    0.000    0.541    0.438
##    .Q5                0.276    0.037    7.484    0.000    0.276    0.454
##    .Q6                0.317    0.061    5.234    0.000    0.317    0.481
##    .Q7                0.372    0.051    7.284    0.000    0.372    0.484
##    .Q105              0.408    0.053    7.704    0.000    0.408    0.460
##    .Q13               0.171    0.031    5.584    0.000    0.171    0.434
##    .Q14               0.294    0.041    7.140    0.000    0.294    0.625
##    .Q15               0.249    0.046    5.387    0.000    0.249    0.512
##    .Q163              0.260    0.046    5.617    0.000    0.260    0.465
##     F1                0.339    0.061    5.549    0.000    1.000    1.000
##     F2                0.355    0.078    4.528    0.000    1.000    1.000
##     F3                0.648    0.102    6.340    0.000    1.000    1.000
##     F4                0.533    0.085    6.306    0.000    1.000    1.000
##     F5                0.333    0.070    4.786    0.000    1.000    1.000
##     F6                0.223    0.052    4.313    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##              1177.309               579.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.867                 0.855                 5.749 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.061                 0.067                 0.062 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.073                 0.000
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Seven-factor model

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
F2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F3 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
F4 =~ Q2 + Q4 + Q147 + Q150 + Q151 + Q152 + Q206
F5 =~ Q5 + Q6 + Q7 + Q105
F6 =~ Q182 + Q183 + Q184 + Q185
F7 =~ Q13 + Q14 + Q15 + Q163'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr", "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[5,1] <- "7 factors"
models[5,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 95 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       103
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              1807.579    1483.824
##   Degrees of freedom                               758         758
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.218
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q9                1.000                               0.583    0.648
##     Q10               0.964    0.122    7.932    0.000    0.563    0.733
##     Q11               0.969    0.112    8.677    0.000    0.565    0.619
##     Q12               1.098    0.096   11.447    0.000    0.640    0.756
##     Q103              0.780    0.115    6.798    0.000    0.455    0.576
##     Q104              0.980    0.129    7.586    0.000    0.572    0.705
##     Q122              1.206    0.146    8.268    0.000    0.704    0.685
##     Q198              1.231    0.159    7.758    0.000    0.718    0.794
##     Q199              1.042    0.142    7.315    0.000    0.608    0.748
##     Q200              1.062    0.135    7.848    0.000    0.619    0.763
##   F2 =~                                                                 
##     Q107              1.000                               0.595    0.540
##     Q145              1.311    0.137    9.599    0.000    0.780    0.606
##     Q168              1.137    0.152    7.489    0.000    0.677    0.789
##     Q169              1.589    0.184    8.637    0.000    0.945    0.865
##     Q179              1.166    0.154    7.580    0.000    0.694    0.589
##     Q180              1.460    0.164    8.916    0.000    0.869    0.740
##   F3 =~                                                                 
##     Q17               1.000                               0.730    0.786
##     Q18               1.224    0.114   10.731    0.000    0.894    0.698
##     Q19               1.204    0.088   13.728    0.000    0.879    0.798
##     Q20               1.261    0.091   13.880    0.000    0.921    0.778
##     Q101              1.111    0.075   14.879    0.000    0.811    0.846
##     Q202              1.143    0.093   12.307    0.000    0.835    0.751
##   F4 =~                                                                 
##     Q2                1.000                               0.786    0.712
##     Q4                0.740    0.081    9.146    0.000    0.582    0.628
##     Q147              0.805    0.076   10.618    0.000    0.633    0.658
##     Q150              0.886    0.103    8.637    0.000    0.696    0.579
##     Q151              1.123    0.110   10.221    0.000    0.883    0.716
##     Q152              1.283    0.121   10.617    0.000    1.009    0.762
##     Q206              0.811    0.115    7.061    0.000    0.637    0.532
##   F5 =~                                                                 
##     Q5                1.000                               0.576    0.737
##     Q6                1.020    0.139    7.341    0.000    0.587    0.723
##     Q7                1.097    0.107   10.289    0.000    0.632    0.720
##     Q105              1.198    0.148    8.097    0.000    0.690    0.732
##   F6 =~                                                                 
##     Q182              1.000                               0.631    0.663
##     Q183              1.091    0.120    9.060    0.000    0.689    0.702
##     Q184              0.881    0.159    5.535    0.000    0.557    0.635
##     Q185              0.931    0.153    6.087    0.000    0.588    0.689
##   F7 =~                                                                 
##     Q13               1.000                               0.470    0.749
##     Q14               0.885    0.160    5.515    0.000    0.416    0.606
##     Q15               1.049    0.164    6.417    0.000    0.493    0.706
##     Q163              1.169    0.180    6.493    0.000    0.549    0.734
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.175    0.033    5.321    0.000    0.505    0.505
##     F3                0.325    0.051    6.423    0.000    0.762    0.762
##     F4                0.324    0.052    6.238    0.000    0.707    0.707
##     F5                0.205    0.039    5.219    0.000    0.610    0.610
##     F6                0.242    0.040    6.095    0.000    0.656    0.656
##     F7                0.195    0.037    5.248    0.000    0.711    0.711
##   F2 ~~                                                                 
##     F3                0.141    0.029    4.818    0.000    0.324    0.324
##     F4                0.239    0.041    5.788    0.000    0.511    0.511
##     F5                0.239    0.040    5.984    0.000    0.697    0.697
##     F6                0.148    0.035    4.199    0.000    0.395    0.395
##     F7                0.113    0.024    4.634    0.000    0.403    0.403
##   F3 ~~                                                                 
##     F4                0.429    0.066    6.473    0.000    0.747    0.747
##     F5                0.180    0.039    4.652    0.000    0.429    0.429
##     F6                0.232    0.045    5.201    0.000    0.503    0.503
##     F7                0.223    0.046    4.840    0.000    0.650    0.650
##   F4 ~~                                                                 
##     F5                0.204    0.039    5.153    0.000    0.450    0.450
##     F6                0.343    0.059    5.805    0.000    0.692    0.692
##     F7                0.266    0.050    5.276    0.000    0.720    0.720
##   F5 ~~                                                                 
##     F6                0.135    0.039    3.497    0.000    0.371    0.371
##     F7                0.137    0.039    3.480    0.001    0.506    0.506
##   F6 ~~                                                                 
##     F7                0.210    0.044    4.752    0.000    0.710    0.710
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q9                0.469    0.054    8.733    0.000    0.469    0.580
##    .Q10               0.272    0.035    7.702    0.000    0.272    0.462
##    .Q11               0.514    0.062    8.263    0.000    0.514    0.617
##    .Q12               0.308    0.037    8.297    0.000    0.308    0.429
##    .Q103              0.417    0.059    7.039    0.000    0.417    0.668
##    .Q104              0.330    0.038    8.632    0.000    0.330    0.503
##    .Q122              0.561    0.063    8.884    0.000    0.561    0.531
##    .Q198              0.303    0.046    6.513    0.000    0.303    0.370
##    .Q199              0.292    0.041    7.057    0.000    0.292    0.441
##    .Q200              0.276    0.037    7.430    0.000    0.276    0.418
##    .Q107              0.860    0.091    9.476    0.000    0.860    0.708
##    .Q145              1.047    0.100   10.484    0.000    1.047    0.632
##    .Q168              0.278    0.040    6.893    0.000    0.278    0.378
##    .Q169              0.300    0.053    5.665    0.000    0.300    0.252
##    .Q179              0.905    0.103    8.823    0.000    0.905    0.653
##    .Q180              0.623    0.078    8.032    0.000    0.623    0.452
##    .Q17               0.330    0.038    8.600    0.000    0.330    0.382
##    .Q18               0.843    0.078   10.787    0.000    0.843    0.513
##    .Q19               0.441    0.067    6.546    0.000    0.441    0.363
##    .Q20               0.555    0.059    9.444    0.000    0.555    0.395
##    .Q101              0.262    0.031    8.411    0.000    0.262    0.285
##    .Q202              0.538    0.077    7.035    0.000    0.538    0.436
##    .Q2                0.601    0.080    7.548    0.000    0.601    0.493
##    .Q4                0.520    0.050   10.501    0.000    0.520    0.606
##    .Q147              0.524    0.064    8.142    0.000    0.524    0.567
##    .Q150              0.963    0.126    7.650    0.000    0.963    0.665
##    .Q151              0.742    0.086    8.616    0.000    0.742    0.488
##    .Q152              0.737    0.099    7.428    0.000    0.737    0.420
##    .Q206              1.029    0.102   10.069    0.000    1.029    0.717
##    .Q5                0.278    0.037    7.508    0.000    0.278    0.456
##    .Q6                0.315    0.061    5.197    0.000    0.315    0.477
##    .Q7                0.370    0.051    7.266    0.000    0.370    0.481
##    .Q105              0.411    0.054    7.656    0.000    0.411    0.464
##    .Q182              0.510    0.080    6.388    0.000    0.510    0.561
##    .Q183              0.488    0.078    6.268    0.000    0.488    0.507
##    .Q184              0.459    0.064    7.143    0.000    0.459    0.597
##    .Q185              0.382    0.066    5.778    0.000    0.382    0.525
##    .Q13               0.173    0.029    5.983    0.000    0.173    0.439
##    .Q14               0.298    0.042    7.141    0.000    0.298    0.633
##    .Q15               0.244    0.046    5.294    0.000    0.244    0.502
##    .Q163              0.258    0.046    5.573    0.000    0.258    0.461
##     F1                0.340    0.061    5.594    0.000    1.000    1.000
##     F2                0.354    0.078    4.518    0.000    1.000    1.000
##     F3                0.533    0.085    6.306    0.000    1.000    1.000
##     F4                0.618    0.100    6.174    0.000    1.000    1.000
##     F5                0.331    0.069    4.769    0.000    1.000    1.000
##     F6                0.399    0.084    4.763    0.000    1.000    1.000
##     F7                0.221    0.051    4.312    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##              1483.824               758.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.857                 0.846                 7.115 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.063                 0.064                 0.059 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.069                 0.000
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Eight-factor model

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q104 + Q122 + Q198 + Q199 + Q200
F2 =~ Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F3 =~ Q17 + Q18 + Q19 + Q20 + Q101 + Q202
F4 =~ Q5 + Q6 + Q7 + Q105
F5 =~ Q182 + Q183 + Q184 + Q185
F6 =~ Q150 + Q151 + Q152
F7 =~ Q13 + Q14 + Q15 + Q163
F8 =~ Q1 + Q2 + Q4'

fit <- cfa(model, estimator = "MLR", data = b2)
fm <- fitMeasures(fit, fit.measures = c("chisq.scaled", "df.scaled", "pvalue.scaled", "cfi.robust", "tli.robust", "ecvi", "srmr", "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust", "rmsea.pvalue.scaled"))
models[6,1] <- "8 factors"
models[6,2:ncol(models)] <- fm
summary(fit, standardized = TRUE)
## lavaan 0.6-12 ended normally after 94 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       106
## 
##   Number of observations                           283
## 
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              1588.909    1305.706
##   Degrees of freedom                               674         674
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.217
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 =~                                                                 
##     Q9                1.000                               0.580    0.645
##     Q10               0.965    0.119    8.133    0.000    0.560    0.730
##     Q11               0.988    0.112    8.817    0.000    0.573    0.628
##     Q12               1.114    0.097   11.478    0.000    0.646    0.763
##     Q104              0.994    0.128    7.772    0.000    0.577    0.711
##     Q122              1.185    0.144    8.243    0.000    0.687    0.669
##     Q198              1.244    0.158    7.880    0.000    0.722    0.797
##     Q199              1.058    0.143    7.381    0.000    0.614    0.755
##     Q200              1.060    0.136    7.791    0.000    0.615    0.757
##   F2 =~                                                                 
##     Q107              1.000                               0.595    0.540
##     Q145              1.310    0.137    9.546    0.000    0.779    0.606
##     Q168              1.138    0.153    7.444    0.000    0.677    0.789
##     Q169              1.590    0.185    8.582    0.000    0.946    0.865
##     Q179              1.165    0.154    7.550    0.000    0.693    0.589
##     Q180              1.461    0.165    8.841    0.000    0.869    0.740
##   F3 =~                                                                 
##     Q17               1.000                               0.729    0.785
##     Q18               1.228    0.114   10.762    0.000    0.896    0.699
##     Q19               1.206    0.087   13.815    0.000    0.879    0.798
##     Q20               1.265    0.091   13.906    0.000    0.922    0.779
##     Q101              1.112    0.074   14.951    0.000    0.811    0.846
##     Q202              1.142    0.093   12.324    0.000    0.833    0.750
##   F4 =~                                                                 
##     Q5                1.000                               0.576    0.738
##     Q6                1.017    0.138    7.356    0.000    0.586    0.722
##     Q7                1.096    0.107   10.231    0.000    0.631    0.720
##     Q105              1.199    0.149    8.043    0.000    0.691    0.734
##   F5 =~                                                                 
##     Q182              1.000                               0.634    0.665
##     Q183              1.082    0.120    8.986    0.000    0.686    0.700
##     Q184              0.880    0.159    5.537    0.000    0.558    0.637
##     Q185              0.925    0.155    5.977    0.000    0.586    0.688
##   F6 =~                                                                 
##     Q150              1.000                               0.730    0.606
##     Q151              1.367    0.154    8.887    0.000    0.997    0.808
##     Q152              1.445    0.178    8.134    0.000    1.055    0.796
##   F7 =~                                                                 
##     Q13               1.000                               0.470    0.749
##     Q14               0.880    0.160    5.494    0.000    0.413    0.602
##     Q15               1.051    0.166    6.339    0.000    0.494    0.707
##     Q163              1.170    0.179    6.526    0.000    0.550    0.735
##   F8 =~                                                                 
##     Q1                1.000                               0.736    0.675
##     Q2                1.195    0.150    7.956    0.000    0.879    0.797
##     Q4                0.874    0.114    7.703    0.000    0.644    0.695
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   F1 ~~                                                                 
##     F2                0.173    0.033    5.315    0.000    0.501    0.501
##     F3                0.320    0.050    6.369    0.000    0.757    0.757
##     F4                0.198    0.038    5.157    0.000    0.592    0.592
##     F5                0.245    0.039    6.232    0.000    0.665    0.665
##     F6                0.258    0.053    4.862    0.000    0.609    0.609
##     F7                0.196    0.037    5.256    0.000    0.717    0.717
##     F8                0.283    0.049    5.728    0.000    0.663    0.663
##   F2 ~~                                                                 
##     F3                0.141    0.029    4.819    0.000    0.324    0.324
##     F4                0.239    0.040    5.985    0.000    0.696    0.696
##     F5                0.149    0.036    4.185    0.000    0.395    0.395
##     F6                0.185    0.041    4.463    0.000    0.426    0.426
##     F7                0.113    0.024    4.636    0.000    0.403    0.403
##     F8                0.169    0.033    5.065    0.000    0.387    0.387
##   F3 ~~                                                                 
##     F4                0.180    0.039    4.667    0.000    0.429    0.429
##     F5                0.233    0.045    5.210    0.000    0.504    0.504
##     F6                0.348    0.067    5.223    0.000    0.654    0.654
##     F7                0.223    0.046    4.827    0.000    0.650    0.650
##     F8                0.391    0.067    5.873    0.000    0.729    0.729
##   F4 ~~                                                                 
##     F5                0.136    0.039    3.495    0.000    0.372    0.372
##     F6                0.152    0.040    3.813    0.000    0.362    0.362
##     F7                0.137    0.039    3.477    0.001    0.506    0.506
##     F8                0.157    0.034    4.637    0.000    0.371    0.371
##   F5 ~~                                                                 
##     F6                0.309    0.071    4.385    0.000    0.669    0.669
##     F7                0.211    0.045    4.711    0.000    0.710    0.710
##     F8                0.262    0.052    5.003    0.000    0.562    0.562
##   F6 ~~                                                                 
##     F7                0.211    0.053    3.987    0.000    0.615    0.615
##     F8                0.417    0.079    5.294    0.000    0.776    0.776
##   F7 ~~                                                                 
##     F8                0.221    0.041    5.448    0.000    0.639    0.639
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Q9                0.473    0.054    8.717    0.000    0.473    0.584
##    .Q10               0.275    0.036    7.558    0.000    0.275    0.467
##    .Q11               0.505    0.062    8.148    0.000    0.505    0.606
##    .Q12               0.300    0.037    8.219    0.000    0.300    0.418
##    .Q104              0.324    0.037    8.668    0.000    0.324    0.494
##    .Q122              0.584    0.065    9.055    0.000    0.584    0.553
##    .Q198              0.298    0.046    6.516    0.000    0.298    0.364
##    .Q199              0.284    0.040    7.030    0.000    0.284    0.430
##    .Q200              0.281    0.039    7.264    0.000    0.281    0.426
##    .Q107              0.860    0.091    9.481    0.000    0.860    0.709
##    .Q145              1.048    0.101   10.397    0.000    1.048    0.633
##    .Q168              0.278    0.040    6.886    0.000    0.278    0.377
##    .Q169              0.300    0.053    5.607    0.000    0.300    0.251
##    .Q179              0.906    0.103    8.790    0.000    0.906    0.654
##    .Q180              0.623    0.078    7.958    0.000    0.623    0.452
##    .Q17               0.331    0.039    8.600    0.000    0.331    0.384
##    .Q18               0.839    0.078   10.748    0.000    0.839    0.511
##    .Q19               0.441    0.066    6.643    0.000    0.441    0.363
##    .Q20               0.552    0.059    9.419    0.000    0.552    0.394
##    .Q101              0.262    0.031    8.361    0.000    0.262    0.285
##    .Q202              0.541    0.076    7.088    0.000    0.541    0.438
##    .Q5                0.277    0.037    7.478    0.000    0.277    0.455
##    .Q6                0.316    0.061    5.170    0.000    0.316    0.479
##    .Q7                0.370    0.051    7.208    0.000    0.370    0.482
##    .Q105              0.410    0.054    7.591    0.000    0.410    0.462
##    .Q182              0.506    0.079    6.432    0.000    0.506    0.557
##    .Q183              0.492    0.077    6.406    0.000    0.492    0.511
##    .Q184              0.457    0.064    7.112    0.000    0.457    0.595
##    .Q185              0.383    0.065    5.864    0.000    0.383    0.527
##    .Q150              0.916    0.112    8.141    0.000    0.916    0.632
##    .Q151              0.527    0.083    6.331    0.000    0.527    0.346
##    .Q152              0.642    0.093    6.913    0.000    0.642    0.366
##    .Q13               0.173    0.029    5.900    0.000    0.173    0.439
##    .Q14               0.300    0.042    7.073    0.000    0.300    0.637
##    .Q15               0.244    0.046    5.251    0.000    0.244    0.500
##    .Q163              0.257    0.046    5.585    0.000    0.257    0.460
##    .Q1                0.648    0.083    7.830    0.000    0.648    0.544
##    .Q2                0.446    0.076    5.878    0.000    0.446    0.366
##    .Q4                0.444    0.050    8.924    0.000    0.444    0.517
##     F1                0.337    0.060    5.617    0.000    1.000    1.000
##     F2                0.354    0.079    4.506    0.000    1.000    1.000
##     F3                0.532    0.084    6.306    0.000    1.000    1.000
##     F4                0.332    0.069    4.780    0.000    1.000    1.000
##     F5                0.402    0.085    4.715    0.000    1.000    1.000
##     F6                0.533    0.136    3.903    0.000    1.000    1.000
##     F7                0.221    0.051    4.302    0.000    1.000    1.000
##     F8                0.542    0.106    5.123    0.000    1.000    1.000
fm
##          chisq.scaled             df.scaled         pvalue.scaled 
##              1305.706               674.000                 0.000 
##            cfi.robust            tli.robust                  ecvi 
##                 0.870                 0.858                 6.364 
##                  srmr          rmsea.robust rmsea.ci.lower.robust 
##                 0.060                 0.063                 0.058 
## rmsea.ci.upper.robust   rmsea.pvalue.scaled 
##                 0.069                 0.002
res1 <- residuals(fit, type = "cor")$cov
res1[upper.tri(res1, diag = T)] <- NA
v1 <- as.vector(res1)
v2 <- v1[!is.na(v1)]
qqPlot(v2, id = F)

Comparative measures of model fit

models$chisq <- round(models$chisq, 2)
models$CFI <- round(models$CFI, 4)
models$TLI <- round(models$TLI, 4)
models$ecvi <- round(models$ecvi, 2)
models$srmr <- round(models$srmr, 3)
models$RMSEA <- round(models$RMSEA, 4)
models$RMSEA_lower <- round(models$RMSEA_lower, 4)
models$RMSEA_upper <- round(models$RMSEA_upper, 4)
write.csv(models, "models_CFA_Study2.csv", row.names = F)
models
##       model   chisq  df p    CFI    TLI  ecvi  srmr  RMSEA RMSEA_lower
## 1 2 factors 2201.56 944 0 0.7763 0.7654 10.08 0.071 0.0756      0.0715
## 2 3 factors 1351.48 557 0 0.8159 0.8033  6.36 0.068 0.0785      0.0732
## 3 5 factors  963.64 454 0 0.8686 0.8565  4.78 0.061 0.0704      0.0642
## 4 6 factors 1177.31 579 0 0.8672 0.8555  5.75 0.061 0.0671      0.0616
## 5 7 factors 1483.82 758 0 0.8573 0.8456  7.12 0.063 0.0642      0.0594
## 6 8 factors 1305.71 674 0 0.8704 0.8575  6.36 0.060 0.0635      0.0583
##   RMSEA_upper      RMSEA_p
## 1      0.0797 1.626477e-13
## 2      0.0839 0.000000e+00
## 3      0.0766 1.221018e-05
## 4      0.0726 8.184195e-05
## 5      0.0690 4.383668e-04
## 6      0.0686 1.907196e-03

Models with 5 to 8 factors have a better CFI and TLI compared to models with 2 or 3 factors. RMSEA values are also better for these models. The model with 5 factors has the best ECVI, which indicates that this model is the most likely to best predict new data.

Five-factor model - alphas and correlations

F1 <- c("Q9", "Q10", "Q11", "Q12", "Q103", "Q104", "Q122", "Q198", "Q199", "Q200")
F2 <- c("Q8", "Q107", "Q145", "Q168", "Q169", "Q179", "Q180")
F3 <- c("Q2", "Q4", "Q150", "Q151", "Q152")
F4 <- c("Q17", "Q19", "Q20", "Q101", "Q202")
F5 <- c("Q13", "Q14", "Q15", "Q106", "Q163")

# Alphas
alpha_F1 <- psych::alpha(b2[,F1])$total[1]; alpha_F1
##  raw_alpha
##  0.9041887
alpha_F2 <- psych::alpha(b2[,F2])$total[1]; alpha_F2
##  raw_alpha
##  0.8603772
alpha_F3 <- psych::alpha(b2[,F3])$total[1]; alpha_F3
##  raw_alpha
##  0.8147786
alpha_F4 <- psych::alpha(b2[,F4])$total[1]; alpha_F4
##  raw_alpha
##  0.8916724
alpha_F5 <- psych::alpha(b2[,F5])$total[1]; alpha_F5
##  raw_alpha
##  0.7858965
# Correlation between factors
F1m <- apply(b2[,F1], 1, mean)
F2m <- apply(b2[,F2], 1, mean)
F3m <- apply(b2[,F3], 1, mean)
F4m <- apply(b2[,F4], 1, mean)
F5m <- apply(b2[,F5], 1, mean)
factors <- data.frame(F1m, F2m, F3m, F4m, F5m)
round(cor(factors),2)
##      F1m  F2m  F3m  F4m  F5m
## F1m 1.00 0.46 0.59 0.70 0.61
## F2m 0.46 1.00 0.32 0.28 0.32
## F3m 0.59 0.32 1.00 0.59 0.60
## F4m 0.70 0.28 0.59 1.00 0.55
## F5m 0.61 0.32 0.60 0.55 1.00

Five-factor model - AVE and composite reliability

model <- '
F1 =~ Q9 + Q10 + Q11 + Q12 + Q103 + Q104 + Q122 + Q198 + Q199 + Q200
F2 =~ Q8 + Q107 + Q145 + Q168 + Q169 + Q179 + Q180
F3 =~ Q2 + Q4 + Q150 + Q151 + Q152
F4 =~ Q17 + Q19 + Q20 + Q101 + Q202
F5 =~ Q13 + Q14 + Q15 + Q106 + Q163'
fit <- cfa(model, estimator = "MLR", data = b2)
AVE(fit)
##    F1    F2    F3    F4    F5 
## 0.495 0.472 0.488 0.625 0.431
compRelSEM(fit)
##    F1    F2    F3    F4    F5 
## 0.910 0.847 0.820 0.892 0.790

Five-factor model - are factors distinct enough?

discriminantValidity(fit, merge = TRUE, level = 0.95)
##    lhs op rhs       est  ci.lower  ci.upper  Df      AIC      BIC    Chisq
## 1   F1 ~~  F2 0.5080551 0.3989147 0.6171955 458 21060.20 21315.38 1741.718
## 2   F1 ~~  F3 0.6790708 0.5773166 0.7808250 458 20720.14 20975.32 1401.653
## 3   F1 ~~  F4 0.7551035 0.6685629 0.8416441 458 20775.01 21030.19 1456.530
## 4   F1 ~~  F5 0.7213353 0.6153390 0.8273316 458 20667.91 20923.09 1349.428
## 5   F2 ~~  F3 0.4297272 0.3066870 0.5527674 458 20966.65 21221.83 1648.169
## 6   F2 ~~  F4 0.3141021 0.1872631 0.4409411 458 21198.83 21454.01 1880.344
## 7   F2 ~~  F5 0.4119777 0.2880387 0.5359166 458 20919.61 21174.79 1601.130
## 8   F3 ~~  F4 0.7030482 0.5967166 0.8093797 458 20703.07 20958.25 1384.585
## 9   F3 ~~  F5 0.7228293 0.6219341 0.8237244 458 20616.74 20871.92 1298.258
## 10  F4 ~~  F5 0.6599997 0.5364640 0.7835354 458 20705.22 20960.40 1386.739
##    Chisq diff Df diff    Pr(>Chisq)
## 1   367.72829       4  2.604167e-78
## 2   161.87249       4  5.798451e-34
## 3   176.23445       4  4.798857e-37
## 4    96.51126       4  5.436273e-20
## 5   579.64775       4 3.932973e-124
## 6  1039.55520       4 9.552332e-224
## 7   405.48368       4  1.817264e-86
## 8   160.23414       4  1.302300e-33
## 9    55.21004       4  2.935852e-11
## 10   97.79477       4  2.898774e-20