Exploratory Factor Analysis (EFA)
According to Wikipedia, exploratory factor analysis (EFA) is a statistical method to uncover the underlying structure of a relatively large set of variables. The goal of EFA is to identify the underlying relationships between measured variables. It is commonly used when developing a new scale and identifies a set of latent constructs underlying a battery of manifest variables.
The vignette conducts an EFA on a new scale created by Bovey Management. The scale measures an individual’s behavioural intentions towards organisational change. The goal is to create a new refined scale and improve model fit.
The original scale for behavioural intentions was conceptualised on two latent factors, support and resistance to organisational change, across four dimensions illustrated in Figure 1.
Figure 1 Conceptual framework for behavioural intentions
The survey instrument consisted of 20 items, with data recorded using a seven-point Likert scale. Each item incorporated one of the keywords (or variables) in Figure 1. The scale was implemented across 10 public and private sector organisations implementing major organisational change projects, gathering 599 usable responses for analysis.
The raw data set was tidied before processing. This involved recoding reverse-scored items, removing missing values, relabelling and reshaping data as required. Conducted a brief exploratory analysis consisting of a statistical summary, distribution and correlation analysis to understand the manifest variables.
The EFA process commenced with measuring sampling adequacy. Statistical methods guided the decision on the number of factors to extract from the data. Based on factor loadings, created a new scale with a reduced number of measures.
Implemented a post hoc factor analysis on the revised scale to test the model, generating absolute and relative fit statistics to compare the models.
Chart 1 illustrates the distribution of responses, after recoding, for each of the 20 manifest variables.
Table 1 is a statistical summary for each of the 20 manifest variables.
n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
undermine | 599 | 5.98 | 1.30 | 6 | 6.19 | 1.48 | 1 | 7 | 6 | -1.38 | 1.63 | 0.05 |
dismantle | 599 | 5.90 | 1.44 | 6 | 6.15 | 1.48 | 1 | 7 | 6 | -1.40 | 1.43 | 0.06 |
obstruct | 599 | 5.88 | 1.38 | 6 | 6.10 | 1.48 | 1 | 7 | 6 | -1.31 | 1.27 | 0.06 |
stall | 599 | 5.87 | 1.46 | 6 | 6.10 | 1.48 | 1 | 7 | 6 | -1.26 | 0.84 | 0.06 |
ignore | 599 | 5.79 | 1.40 | 6 | 6.02 | 1.48 | 1 | 7 | 6 | -1.28 | 1.15 | 0.06 |
refrain | 599 | 5.75 | 1.44 | 6 | 5.99 | 1.48 | 1 | 7 | 6 | -1.34 | 1.33 | 0.06 |
comply | 599 | 5.73 | 1.19 | 6 | 5.88 | 1.48 | 1 | 7 | 6 | -1.32 | 2.22 | 0.05 |
avoid | 599 | 5.71 | 1.43 | 6 | 5.94 | 1.48 | 1 | 7 | 6 | -1.25 | 1.02 | 0.06 |
accept | 599 | 5.64 | 1.34 | 6 | 5.84 | 1.48 | 1 | 7 | 6 | -1.43 | 2.15 | 0.05 |
withdraw | 599 | 5.60 | 1.43 | 6 | 5.79 | 1.48 | 1 | 7 | 6 | -1.03 | 0.51 | 0.06 |
cooperate | 599 | 5.60 | 1.34 | 6 | 5.79 | 1.48 | 1 | 7 | 6 | -1.31 | 1.80 | 0.05 |
agree | 599 | 4.98 | 1.61 | 5 | 5.16 | 1.48 | 1 | 7 | 6 | -0.83 | 0.10 | 0.07 |
oppose | 599 | 4.86 | 1.87 | 5 | 4.99 | 2.97 | 1 | 7 | 6 | -0.39 | -1.18 | 0.08 |
give_in | 599 | 4.72 | 1.67 | 5 | 4.86 | 1.48 | 1 | 7 | 6 | -0.71 | -0.21 | 0.07 |
argue | 599 | 4.71 | 1.79 | 5 | 4.80 | 2.97 | 1 | 7 | 6 | -0.28 | -1.14 | 0.07 |
embrace | 599 | 4.31 | 1.75 | 4 | 4.39 | 1.48 | 1 | 7 | 6 | -0.37 | -0.83 | 0.07 |
support | 599 | 4.23 | 1.84 | 4 | 4.28 | 2.97 | 1 | 7 | 6 | -0.22 | -1.08 | 0.08 |
initiate | 599 | 4.11 | 1.84 | 4 | 4.16 | 2.97 | 1 | 7 | 6 | -0.26 | -1.00 | 0.08 |
observe | 599 | 4.00 | 1.75 | 4 | 3.96 | 1.48 | 1 | 7 | 6 | 0.10 | -1.03 | 0.07 |
wait | 599 | 3.65 | 1.74 | 4 | 3.59 | 2.97 | 1 | 7 | 6 | 0.32 | -0.87 | 0.07 |
Chart 2 is a box plot of the 20 manifest variables measuring behavioural intentions towards organisational change. After recoding, the scale’s median ranges from “4” to “6”.
Chart 3 presents a correlation heatmap of behavioural intentions. The correlation coefficients range from -0.27 to 0.72.
The Kaiser-Meyer-Olkin (KMO) test determines if data is suitable for factor analysis. Total KMO above 0.60 is regarded as adequate. However, a result above 0.80 is preferred. Output 1 shows an overall Measure of Sampling Adequacy (MSA) for the behavioural intentions scale was 0.94, confirming the sample was suitable for factor analysis.
Output 1 Sampling adequacy
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = cor(bi_scale_df))
Overall MSA = 0.94
MSA for each item =
oppose support stall initiate observe ignore give_in argue
0.96 0.94 0.97 0.90 0.79 0.93 0.80 0.94
dismantle refrain agree withdraw embrace obstruct cooperate undermine
0.93 0.94 0.95 0.96 0.94 0.95 0.94 0.93
comply wait accept avoid
0.94 0.70 0.94 0.95
First, eigenvalues were calculated. Chart 4 reveals three (3) eigenvalues greater than “1” suggesting three factors.
The scree test results in Chart 5 provide further guidance on the number of factors to extract from the behavioural intentions data set.
Based on the above assessment, conducted an EFA with three factors.
The EFA was conducted using the factoring method maximum likelihood (ML), with rotation method promax, an oblique transformation.
Output 2 presents a three-factor model with extracted loadings.
Output 2 EFA factors and loadings (Model 1)
Loadings:
ML3 ML1 ML2
stall 0.665
ignore 0.595 0.347
dismantle 0.855
refrain 0.709
withdraw 0.583
obstruct 0.751
undermine 0.903
avoid 0.582
oppose 0.590
support 0.778
initiate 0.679 0.365
agree 0.697
embrace 0.921
accept 0.349 0.530
observe 0.615
wait 0.607
give_in -0.404
argue 0.473
cooperate 0.418 0.466
comply 0.481 0.305 -0.312
ML3 ML1 ML2
SS loadings 4.771 3.706 1.531
Proportion Var 0.239 0.185 0.077
Cumulative Var 0.239 0.424 0.500
Chart 6 illustrates loadings shown in Output 2. Variables with the highest loadings for ML3 mainly describe opposition or resistance to change. Variables with the highest loadings for ML1 mostly describe support for change. Variables with the highest loadings for ML2 could be described as passive about change.
Based on the initial EFA and mindful of the original conceptual framework (Figure 1), prepared a new refined three-factor scale shown in Figure 2. In terms of dimensionality reduction, the refined three-factor scale consists of 10 items, reduced from the 20 original items.
Figure 2 Refined framework for behavioural intentions
Output 3 presents factors and loadings for the refined scale with a cutoff of 0.30.
Output 3 Factors and loadings for refined scale (Model 2)
Loadings:
ML1 ML3 ML2
undermine 0.895
dismantle 0.817
obstruct 0.742
refrain 0.561
embrace 0.890
support 0.784
agree 0.722
initiate 0.630
observe 0.568
wait 0.841
ML1 ML3 ML2
SS loadings 2.382 2.380 1.149
Proportion Var 0.238 0.238 0.115
Cumulative Var 0.238 0.476 0.591
Chart 7 illustrates factors and loadings for the revised scale.
The revised scale was compared to the original scale in two ways. First, comparing internal reliability of the scale and second, comparing absolute and relative fit.
Table 2 summarises internal reliability. The internal reliability of the original scale was 0.9160. Being above 0.90 may indicate multicollinearity. That is, some items in the original scale may be too similar. The standardised alpha for the revised scale (Model 2) was 0.8395. Internal reliability above 0.80 is regarded as very good.
scale version | std.alpha |
---|---|
original_scale (Model 1) | 0.9160 |
revised_3factor_scale (Model 2) | 0.8395 |
Table 3 summarises and compares model fit statistics. This EFA process examined and refined an original scale based on field performance. Regarding relative fit, the original scale is preferred with the lowest BIC. Both models performed well in absolute fit (Targets: TLI > 0.90 and RMSEA < 0.05). However, the revised scale is the preferred model in terms of absolute fit, internal reliability and dimensionality reduction.
fit_statistics | original_scale.Model1 | revised_3factor_scale.Model2 |
---|---|---|
BIC | -295.5728 | -64.0069 |
TLI | 0.9052 | 0.9672 |
RMSEA | 0.0728 | 0.0554 |
Look at the vignette on principal component analysis (PCA) to compare the results of this EFA on the behavioural intentions scale with another dimensionality reduction method.
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.4.0 (2024-04-24 ucrt)
## os Windows 11 x64 (build 22631)
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate English_Australia.utf8
## ctype English_Australia.utf8
## tz Australia/Brisbane
## date 2024-07-29
## pandoc 3.1.11 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date (UTC) lib source
## abind 1.4-5 2016-07-21 [1] CRAN (R 4.4.0)
## backports 1.5.0 2024-05-23 [1] CRAN (R 4.4.0)
## broom 1.0.6 2024-05-17 [1] CRAN (R 4.4.0)
## bslib 0.7.0 2024-03-29 [1] CRAN (R 4.4.0)
## cachem 1.1.0 2024-05-16 [1] CRAN (R 4.4.0)
## car 3.1-2 2023-03-30 [1] CRAN (R 4.4.0)
## carData 3.0-5 2022-01-06 [1] CRAN (R 4.4.0)
## cli 3.6.3 2024-06-21 [1] CRAN (R 4.4.1)
## cluster 2.1.6 2023-12-01 [2] CRAN (R 4.4.0)
## coda 0.19-4.1 2024-01-31 [1] CRAN (R 4.4.0)
## codetools 0.2-20 2024-03-31 [2] CRAN (R 4.4.0)
## colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.4.1)
## data.table * 1.15.4 2024-03-30 [1] CRAN (R 4.4.0)
## devtools 2.4.5 2022-10-11 [1] CRAN (R 4.4.0)
## digest 0.6.36 2024-06-23 [1] CRAN (R 4.4.1)
## dplyr * 1.1.4 2023-11-17 [1] CRAN (R 4.4.0)
## DT 0.33 2024-04-04 [1] CRAN (R 4.4.0)
## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.4.0)
## emmeans 1.10.3 2024-07-01 [1] CRAN (R 4.4.1)
## estimability 1.5.1 2024-05-12 [1] CRAN (R 4.4.0)
## evaluate 0.24.0 2024-06-10 [1] CRAN (R 4.4.0)
## factoextra * 1.0.7 2020-04-01 [1] CRAN (R 4.4.0)
## FactoMineR * 2.11 2024-04-20 [1] CRAN (R 4.4.0)
## fansi 1.0.6 2023-12-08 [1] CRAN (R 4.4.0)
## farver 2.1.2 2024-05-13 [1] CRAN (R 4.4.0)
## fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.0)
## flashClust 1.01-2 2012-08-21 [1] CRAN (R 4.4.0)
## forcats * 1.0.0 2023-01-29 [1] CRAN (R 4.4.0)
## fs 1.6.4 2024-04-25 [1] CRAN (R 4.4.0)
## generics 0.1.3 2022-07-05 [1] CRAN (R 4.4.0)
## GGally * 2.2.1 2024-02-14 [1] CRAN (R 4.4.0)
## ggplot2 * 3.5.1 2024-04-23 [1] CRAN (R 4.4.0)
## ggpubr 0.6.0 2023-02-10 [1] CRAN (R 4.4.0)
## ggrepel 0.9.5 2024-01-10 [1] CRAN (R 4.4.0)
## ggsignif 0.6.4 2022-10-13 [1] CRAN (R 4.4.0)
## ggstats 0.6.0 2024-04-05 [1] CRAN (R 4.4.0)
## glue 1.7.0 2024-01-09 [1] CRAN (R 4.4.0)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.4.0)
## gtable 0.3.5 2024-04-22 [1] CRAN (R 4.4.0)
## here * 1.0.1 2020-12-13 [1] CRAN (R 4.4.0)
## highr 0.11 2024-05-26 [1] CRAN (R 4.4.0)
## hms 1.1.3 2023-03-21 [1] CRAN (R 4.4.0)
## htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.0)
## htmlwidgets 1.6.4 2023-12-06 [1] CRAN (R 4.4.0)
## httpuv 1.6.15 2024-03-26 [1] CRAN (R 4.4.0)
## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.4.0)
## jsonlite 1.8.8 2023-12-04 [1] CRAN (R 4.4.0)
## kableExtra * 1.4.0 2024-01-24 [1] CRAN (R 4.4.0)
## knitr 1.48 2024-07-07 [1] CRAN (R 4.4.1)
## labeling 0.4.3 2023-08-29 [1] CRAN (R 4.4.0)
## later 1.3.2 2023-12-06 [1] CRAN (R 4.4.0)
## lattice * 0.22-6 2024-03-20 [2] CRAN (R 4.4.0)
## leaps 3.2 2024-06-10 [1] CRAN (R 4.4.1)
## lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.0)
## likert 1.3.5 2016-12-31 [1] CRAN (R 4.4.0)
## lubridate * 1.9.3 2023-09-27 [1] CRAN (R 4.4.0)
## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.4.0)
## MASS 7.3-60.2 2024-04-24 [2] local
## Matrix 1.7-0 2024-03-22 [2] CRAN (R 4.4.0)
## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.4.0)
## mime 0.12 2021-09-28 [1] CRAN (R 4.4.0)
## miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.4.0)
## mnormt 2.1.1 2022-09-26 [1] CRAN (R 4.4.0)
## multcomp 1.4-26 2024-07-18 [1] CRAN (R 4.4.1)
## multcompView 0.1-10 2024-03-08 [1] CRAN (R 4.4.0)
## munsell 0.5.1 2024-04-01 [1] CRAN (R 4.4.0)
## mvtnorm 1.2-5 2024-05-21 [1] CRAN (R 4.4.0)
## nFactors * 2.4.1.1 2022-10-10 [1] CRAN (R 4.4.0)
## nlme 3.1-164 2023-11-27 [2] CRAN (R 4.4.0)
## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.4.0)
## pkgbuild 1.4.4 2024-03-17 [1] CRAN (R 4.4.0)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.4.0)
## pkgload 1.4.0 2024-06-28 [1] CRAN (R 4.4.1)
## plyr 1.8.9 2023-10-02 [1] CRAN (R 4.4.0)
## profvis 0.3.8 2023-05-02 [1] CRAN (R 4.4.0)
## promises 1.3.0 2024-04-05 [1] CRAN (R 4.4.0)
## psych * 2.4.6.26 2024-06-27 [1] CRAN (R 4.4.1)
## purrr * 1.0.2 2023-08-10 [1] CRAN (R 4.4.0)
## R6 2.5.1 2021-08-19 [1] CRAN (R 4.4.0)
## RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.4.0)
## Rcpp 1.0.13 2024-07-17 [1] CRAN (R 4.4.1)
## readr * 2.1.5 2024-01-10 [1] CRAN (R 4.4.0)
## remotes 2.5.0 2024-03-17 [1] CRAN (R 4.4.0)
## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.4.0)
## rlang 1.1.4 2024-06-04 [1] CRAN (R 4.4.0)
## rmarkdown 2.27 2024-05-17 [1] CRAN (R 4.4.0)
## rprojroot 2.0.4 2023-11-05 [1] CRAN (R 4.4.0)
## rstatix 0.7.2 2023-02-01 [1] CRAN (R 4.4.0)
## rstudioapi 0.16.0 2024-03-24 [1] CRAN (R 4.4.0)
## sandwich 3.1-0 2023-12-11 [1] CRAN (R 4.4.0)
## sass 0.4.9 2024-03-15 [1] CRAN (R 4.4.0)
## scales 1.3.0 2023-11-28 [1] CRAN (R 4.4.0)
## scatterplot3d 0.3-44 2023-05-05 [1] CRAN (R 4.4.0)
## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.4.0)
## shiny 1.8.1.1 2024-04-02 [1] CRAN (R 4.4.0)
## stringi 1.8.4 2024-05-06 [1] CRAN (R 4.4.0)
## stringr * 1.5.1 2023-11-14 [1] CRAN (R 4.4.0)
## survival 3.5-8 2024-02-14 [2] CRAN (R 4.4.0)
## svglite 2.1.3 2023-12-08 [1] CRAN (R 4.4.0)
## systemfonts 1.1.0 2024-05-15 [1] CRAN (R 4.4.0)
## TH.data 1.1-2 2023-04-17 [1] CRAN (R 4.4.0)
## tibble * 3.2.1 2023-03-20 [1] CRAN (R 4.4.0)
## tidyr * 1.3.1 2024-01-24 [1] CRAN (R 4.4.0)
## tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.4.0)
## tidyverse * 2.0.0 2023-02-22 [1] CRAN (R 4.4.0)
## timechange 0.3.0 2024-01-18 [1] CRAN (R 4.4.0)
## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.4.0)
## urlchecker 1.0.1 2021-11-30 [1] CRAN (R 4.4.0)
## usethis 2.2.3 2024-02-19 [1] CRAN (R 4.4.0)
## utf8 1.2.4 2023-10-22 [1] CRAN (R 4.4.0)
## vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.0)
## viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.4.0)
## withr 3.0.0 2024-01-16 [1] CRAN (R 4.4.0)
## xfun 0.46 2024-07-18 [1] CRAN (R 4.4.1)
## xml2 1.3.6 2023-12-04 [1] CRAN (R 4.4.0)
## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.4.0)
## yaml 2.3.9 2024-07-05 [1] CRAN (R 4.4.1)
## zoo 1.8-12 2023-04-13 [1] CRAN (R 4.4.0)
##
## [1] C:/Users/wayne/AppData/Local/R/win-library/4.4
## [2] C:/Program Files/R/R-4.4.0/library
##
## ──────────────────────────────────────────────────────────────────────────────