## 5.12 Rotated factor solution

In this illustration, we assume there exist correlation between the factors. So, we will use the oblique rotation with rotate = "oblimin", and common factor analysis as maximum likelihood, i.e., fm = "ml".

We use the codes below to examine the rotated factor solutions.

# three factor solution
rotated_three_factors <- fa(data.us.only, nfactors = 3, rotate = "oblimin", fm = "ml")
print(rotated_three_factors, sort = T, cut = .30)
## Factor Analysis using method =  ml
## Call: fa(r = data.us.only, nfactors = 3, rotate = "oblimin", fm = "ml")
##          item   ML1   ML3   ML2   h2   u2 com
## AUICT4     15  0.85             0.68 0.32 1.0
## AUICT1     12  0.72             0.51 0.49 1.1
## AUICT2     13  0.65             0.53 0.47 1.3
## AUICT5     16  0.62             0.48 0.52 1.2
## AUICT3     14  0.62             0.49 0.51 1.2
## COMPICT5   11  0.51             0.47 0.53 1.5
## COMPICT4   10  0.49             0.46 0.54 1.6
## COMPICT2    8  0.38  0.35       0.46 0.54 2.2
## INTICT3     3        0.73       0.49 0.51 1.0
## INTICT6     6        0.73       0.56 0.44 1.0
## INTICT2     2        0.62       0.37 0.63 1.0
## COMPICT3    9        0.59       0.48 0.52 1.3
## INTICT4     4        0.56       0.48 0.52 1.4
## INTICT1     1        0.51       0.24 0.76 1.1
## INTICT5     5        0.44       0.23 0.77 1.4
## COMPICT1    7        0.40       0.30 0.70 1.5
## SOIAICT4   20              0.85 0.73 0.27 1.0
## SOIAICT5   21              0.77 0.60 0.40 1.0
## SOIAICT2   18              0.74 0.58 0.42 1.0
## SOIAICT1   17              0.64 0.43 0.57 1.0
## SOIAICT3   19              0.61 0.43 0.57 1.0
##
##                        ML1  ML3  ML2
## Proportion Var        0.17 0.16 0.15
## Cumulative Var        0.17 0.33 0.48
## Proportion Explained  0.35 0.34 0.30
## Cumulative Proportion 0.35 0.70 1.00
##
##  With factor correlations of
##      ML1  ML3  ML2
## ML1 1.00 0.44 0.47
## ML3 0.44 1.00 0.28
## ML2 0.47 0.28 1.00
##
## Mean item complexity =  1.2
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model =  210  with the objective function =  9.5 with Chi Square =  51537.58
## df of  the model are 150  and the objective function was  1.03
##
## The root mean square of the residuals (RMSR) is  0.04
## The df corrected root mean square of the residuals is  0.05
##
## The harmonic n.obs is  5433 with the empirical chi square  3918.91  with prob <  0
## The total n.obs was  5433  with Likelihood Chi Square =  5603.36  with prob <  0
##
## Tucker Lewis Index of factoring reliability =  0.851
## RMSEA index =  0.082  and the 90 % confidence intervals are  0.08 0.084
## BIC =  4313.32
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy
##                                                    ML1  ML3  ML2
## Correlation of (regression) scores with factors   0.94 0.92 0.94
## Multiple R square of scores with factors          0.88 0.86 0.88
## Minimum correlation of possible factor scores     0.77 0.71 0.76

The three factor solution produces fine solution. We noticed that AUICT1-5 and COMPICT2, COMPICT4, COMPICT5 load on the first factor; INTICT1-6, COMPICT3, COMPICT1 load on the second factor; and SOIAICT1-5 load on the third factor. The model fit result shows that the three factor solution has poor model data fit.

# Extract model fit indices
RMSEA_three_fac <- rotated_three_factors$RMSEA[1] TLI_three_fac <- rotated_three_factors$TLI
RMSR_three_fac <- rotated_three_factors$rms # Combined the fit indices fit.indices_three_fac <- round(rbind(RMSEA_three_fac, TLI_three_fac, RMSR_three_fac), digits = 3) colnames(fit.indices_three_fac) <- "Model fit indices" fit.indices_three_fac ## Model fit indices ## RMSEA_three_fac 0.082 ## TLI_three_fac 0.851 ## RMSR_three_fac 0.041 Let’s explore the rotated six factor solution. # six factor solution rotated_six_factors <- fa(data.us.only, nfactors = 6, rotate = "oblimin", fm = "ml") print(rotated_six_factors, sort = T, cut = .30) ## Factor Analysis using method = ml ## Call: fa(r = data.us.only, nfactors = 6, rotate = "oblimin", fm = "ml") ## Standardized loadings (pattern matrix) based upon correlation matrix ## item ML2 ML1 ML4 ML3 ML5 ML6 h2 u2 com ## SOIAICT4 20 0.85 0.73 0.27 1.0 ## SOIAICT5 21 0.79 0.61 0.39 1.0 ## SOIAICT2 18 0.72 0.58 0.42 1.0 ## SOIAICT1 17 0.69 0.46 0.54 1.1 ## SOIAICT3 19 0.58 0.44 0.56 1.1 ## COMPICT5 11 0.84 0.70 0.30 1.0 ## COMPICT4 10 0.80 0.65 0.35 1.0 ## COMPICT2 8 0.64 0.57 0.43 1.1 ## COMPICT3 9 0.44 0.52 0.48 2.9 ## COMPICT1 7 0.41 0.34 0.66 1.7 ## AUICT3 14 0.81 0.68 0.32 1.0 ## AUICT5 16 0.73 0.61 0.39 1.0 ## AUICT4 15 0.44 0.36 0.65 0.35 2.5 ## INTICT2 2 0.81 0.61 0.39 1.0 ## INTICT3 3 0.60 0.56 0.44 1.3 ## AUICT1 12 0.73 0.64 0.36 1.0 ## AUICT2 13 0.68 0.64 0.36 1.1 ## INTICT5 5 0.64 0.41 0.59 1.0 ## INTICT6 6 0.32 0.42 0.58 0.42 2.3 ## INTICT1 1 0.35 0.27 0.73 1.7 ## INTICT4 4 0.34 0.35 0.52 0.48 3.1 ## ## ML2 ML1 ML4 ML3 ML5 ML6 ## SS loadings 2.92 2.56 1.86 1.62 1.47 1.32 ## Proportion Var 0.14 0.12 0.09 0.08 0.07 0.06 ## Cumulative Var 0.14 0.26 0.35 0.43 0.50 0.56 ## Proportion Explained 0.25 0.22 0.16 0.14 0.13 0.11 ## Cumulative Proportion 0.25 0.47 0.62 0.76 0.89 1.00 ## ## With factor correlations of ## ML2 ML1 ML4 ML3 ML5 ML6 ## ML2 1.00 0.42 0.34 0.17 0.47 0.31 ## ML1 0.42 1.00 0.58 0.41 0.46 0.36 ## ML4 0.34 0.58 1.00 0.43 0.53 0.28 ## ML3 0.17 0.41 0.43 1.00 0.07 0.47 ## ML5 0.47 0.46 0.53 0.07 1.00 0.07 ## ML6 0.31 0.36 0.28 0.47 0.07 1.00 ## ## Mean item complexity = 1.4 ## Test of the hypothesis that 6 factors are sufficient. ## ## df null model = 210 with the objective function = 9.5 with Chi Square = 51537.58 ## df of the model are 99 and the objective function was 0.2 ## ## The root mean square of the residuals (RMSR) is 0.01 ## The df corrected root mean square of the residuals is 0.02 ## ## The harmonic n.obs is 5433 with the empirical chi square 504.69 with prob < 1.1e-55 ## The total n.obs was 5433 with Likelihood Chi Square = 1087.12 with prob < 5e-166 ## ## Tucker Lewis Index of factoring reliability = 0.959 ## RMSEA index = 0.043 and the 90 % confidence intervals are 0.041 0.045 ## BIC = 235.69 ## Fit based upon off diagonal values = 1 ## Measures of factor score adequacy ## ML2 ML1 ML4 ML3 ML5 ML6 ## Correlation of (regression) scores with factors 0.94 0.93 0.91 0.89 0.90 0.83 ## Multiple R square of scores with factors 0.88 0.87 0.84 0.79 0.80 0.69 ## Minimum correlation of possible factor scores 0.76 0.74 0.67 0.57 0.61 0.39 The six factor solution is quite messy but produces good model data fit. # Extract model fit indices RMSEA_six_fac <- rotated_six_factors$RMSEA[1]
TLI_six_fac <- rotated_six_factors$TLI RMSR_six_fac <- rotated_six_factors$rms

# Combined the fit indices
fit.indices_six_fac <- round(rbind(RMSEA_six_fac, TLI_six_fac, RMSR_six_fac),
digits = 3)
colnames(fit.indices_six_fac) <- "Model fit indices"
fit.indices_six_fac
##               Model fit indices
## RMSEA_six_fac             0.043
## TLI_six_fac               0.959
## RMSR_six_fac              0.015

Let’s explore the rotated four factor solution.

# four factor solution
rotated_four_factors <- fa(data.us.only, nfactors = 4, rotate = "oblimin", fm = "pa")
print(rotated_four_factors, sort = T, cut = .30)
## Factor Analysis using method =  pa
## Call: fa(r = data.us.only, nfactors = 4, rotate = "oblimin", fm = "pa")
##          item   PA2   PA4   PA3   PA1   h2   u2 com
## SOIAICT4   20  0.85                   0.72 0.28 1.0
## SOIAICT5   21  0.76                   0.59 0.41 1.0
## SOIAICT2   18  0.75                   0.59 0.41 1.0
## SOIAICT1   17  0.63                   0.43 0.57 1.0
## SOIAICT3   19  0.60                   0.43 0.57 1.0
## AUICT4     15        0.77             0.68 0.32 1.1
## AUICT3     14        0.70             0.56 0.44 1.2
## AUICT5     16        0.67             0.54 0.46 1.2
## AUICT1     12        0.66             0.51 0.49 1.1
## AUICT2     13        0.61             0.54 0.46 1.4
## INTICT3     3              0.73       0.54 0.46 1.0
## INTICT6     6              0.66       0.57 0.43 1.1
## INTICT2     2              0.60       0.40 0.60 1.1
## INTICT4     4              0.53       0.49 0.51 1.5
## INTICT1     1              0.49       0.26 0.74 1.1
## INTICT5     5              0.41       0.23 0.77 1.5
## COMPICT5   11                    0.81 0.67 0.33 1.0
## COMPICT4   10                    0.77 0.62 0.38 1.0
## COMPICT2    8                    0.69 0.59 0.41 1.1
## COMPICT1    7                    0.46 0.34 0.66 1.5
## COMPICT3    9              0.40  0.45 0.50 0.50 2.1
##
##                        PA2  PA4  PA3  PA1
## Proportion Var        0.14 0.13 0.13 0.12
## Cumulative Var        0.14 0.27 0.39 0.51
## Proportion Explained  0.28 0.24 0.24 0.23
## Cumulative Proportion 0.28 0.52 0.77 1.00
##
##  With factor correlations of
##      PA2  PA4  PA3  PA1
## PA2 1.00 0.44 0.20 0.43
## PA4 0.44 1.00 0.32 0.62
## PA3 0.20 0.32 1.00 0.45
## PA1 0.43 0.62 0.45 1.00
##
## Mean item complexity =  1.2
## Test of the hypothesis that 4 factors are sufficient.
##
## df null model =  210  with the objective function =  9.5 with Chi Square =  51537.58
## df of  the model are 132  and the objective function was  0.52
##
## The root mean square of the residuals (RMSR) is  0.03
## The df corrected root mean square of the residuals is  0.03
##
## The harmonic n.obs is  5433 with the empirical chi square  1598.07  with prob <  5.9e-250
## The total n.obs was  5433  with Likelihood Chi Square =  2830.5  with prob <  0
##
## Tucker Lewis Index of factoring reliability =  0.916
## RMSEA index =  0.061  and the 90 % confidence intervals are  0.059 0.063
## BIC =  1695.27
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
##                                                    PA2  PA4  PA3  PA1
## Correlation of (regression) scores with factors   0.94 0.93 0.91 0.93
## Multiple R square of scores with factors          0.88 0.87 0.83 0.86
## Minimum correlation of possible factor scores     0.76 0.73 0.65 0.73
# Extract model fit indices
RMSEA_four_fac <- rotated_four_factors$RMSEA[1] TLI_four_fac <- rotated_four_factors$TLI
RMSR_four_fac <- rotated_four_factors$rms # Combined the fit indices fit.indices_four_fac <- round(rbind(RMSEA_four_fac, TLI_four_fac, RMSR_four_fac), digits = 3) colnames(fit.indices_four_fac) <- "Model fit indices" fit.indices_four_fac ## Model fit indices ## RMSEA_four_fac 0.061 ## TLI_four_fac 0.916 ## RMSR_four_fac 0.026 The four factor solution produces finer solution with good model data fit. One observation worth considering is COMPICT3 loading on the same factor with INTICT1-6. Let’s compare the question COMPICT3 which is IC014Q06NA with those of INTICT1-6. This results shows that students of Chile perceived COMPICT3 as an item measuring ICT Interest. Also, COMPICT3 has cross loading, i.e., load strongly on both the second and third factor. By changing fm = "ml" to fm = "pa", the problem is solved and all the items load on their respective factors. COMPICT3 still has cross loading, but it is evident that this item loads well on the third factor. Additionally, the least communality for the rotated four factor solution are acceptable. From these results, it is evident that the four factor solution produces the best factor structure with a good model data fit. This answers the research question. Thus, the ICT engagement questionnaire has four factor structure, which confirms prior study findings. We can export the factor loading and model data fit as follows. # Extract and export factor loadings f.loadings <- round(rotated_four_factors$loadings[c(1:21),], digits=3)
write.csv(fit.indices_four_fac, file = "Model fit indices for factor loadings.csv")