15.5 Rotating Factors

• Find new factors that are easier to interpret
• For each $$X$$, we want some high/large (near 1) loadings and some low/small (near zero)
• Two common rotation methods: Varimax rotation, and oblique rotation.

Same(ish) goal as PCA, find a new set of axes to represent the factors.

15.5.1 Varimax Rotation

• Restricts the new axes to be orthogonal to each other. (Factors are independent)
• Maximizes the sum of the variances of the squared factor loadings within each factor $$\sum Var(l_{ij}^{2}|F_{j})$$
• Interpretations slightly less clear

Varimax rotation with principal components extraction.

pc.extract.varimax <- principal(stan.dta, nfactors=2, rotate="varimax")
print(pc.extract.varimax)
## Principal Components Analysis
## Call: principal(r = stan.dta, nfactors = 2, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
##     RC1   RC2   h2    u2 com
## X1 0.06  0.94 0.89 0.112 1.0
## X2 0.11  0.93 0.89 0.113 1.0
## X3 0.76 -0.10 0.59 0.406 1.0
## X4 0.93  0.16 0.89 0.109 1.1
## X5 0.91  0.28 0.91 0.086 1.2
##
##                        RC1  RC2
## Proportion Var        0.46 0.38
## Cumulative Var        0.46 0.83
## Proportion Explained  0.55 0.45
## Cumulative Proportion 0.55 1.00
##
## Mean item complexity =  1.1
## Test of the hypothesis that 2 components are sufficient.
##
## The root mean square of the residuals (RMSR) is  0.09
##  with the empirical chi square  16.62  with prob <  4.6e-05
##
## Fit based upon off diagonal values = 0.96

Varimax rotation with maximum likelihood extraction. Here i’m using the cutoff argument to only show the values of loadings over 0.3.

ml.extract.varimax <- factanal(stan.dta, factors=2, rotation="varimax")
print(ml.extract.varimax, digits=2, cutoff=.3)
##
## Call:
## factanal(x = stan.dta, factors = 2, rotation = "varimax")
##
## Uniquenesses:
##   X1   X2   X3   X4   X5
## 0.33 0.06 0.72 0.08 0.01
##
##    Factor1 Factor2
## X1          0.81
## X2          0.97
## X3  0.53
## X4  0.95
## X5  0.96
##
##                Factor1 Factor2
## Proportion Var    0.43    0.33
## Cumulative Var    0.43    0.76
##
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 0.4 on 1 degree of freedom.
## The p-value is 0.526

Communalities are unchanged after varimax (part of variance due to common factors). This will always be the case for orthogonal (perpendicular) rotations.

15.5.2 Oblique rotation

• Same idea as varimax, but drop the orthogonality requirement
• less restrictions allow for greater flexibility
• Factors are still correlated
• Better interpretation
• Methods:
• quartimax or quartimin minimizes the number of factors needed to explain each variable
• direct oblimin standard method, but results in diminished interpretability of factors
• promax is computationally faster than direct oblimin, so good for very large datasets
pc.extract.quartimin <- principal(stan.dta, nfactors=2, rotate="quartimin")
ml.extract.promax<- factanal(stan.dta, factors=2, rotation="promax")
par(mfrow=c(2,3))
plot(pc.extract.norotate, title="PC + norotate")
plot(pc.extract.varimax, title="PC + Varimax")
plot(pc.extract.quartimin, title="PC + quartimin")

load <- ml.extract.norotate$loadings[,1:2] plot(load, type="n", main="ML + norotate") text(load, labels=rownames(load)) load <- ml.extract.varimax$loadings[,1:2]
plot(load, type="n", main="ML + Varimax")
text(load, labels=rownames(load))