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()
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)))
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 |
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
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).
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.
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
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
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 <- 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
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
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
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.
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:
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
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
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
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
The six feasible models from the EFA will be tested with a CFA.
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
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”).
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)
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)
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)
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)
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)
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)
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)
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.
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
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
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