
How do we measure something we can’t directly observe? For instance, how do we measure…
Psychology: depression, negative emotion, stress, extraversion
Economics: quality of life, socioeconomic status
Sports: offensive ability, overall athletic ability
Education: mathematical knowledge, intelligence
These are known as latent variables: a hidden or unobserved variable that influences observed data.
Any of the items will be useful as an indicator of an individual’s current perceived state of stress.
Thus, each item can be considered as an imperfect measure of perceived stress.

Dimension reduction: used to simplify the data structure by identifying a smaller number of underlying factors from the items

In creating the factors, factor analysis helps to identify items for improvement or removal because they are:
redundant (measuring the same thing as another item)
irrelevant (poorly correlated with the intended underlying constructs, causing low factor loadings)
ambiguous (cross-loading significantly on multiple factors)
Factor analysis informs the calculation of factor scores: (composite scores that combine a respondent’s scores for several related items)
These factor scores can be used for downstream analyses!
PCA: finds linear combinations that explain the most total variance in variables.
PCA: components are mathematical summaries of the data.
PCA: uses all variation in each variable.
PCA example research question: “How can we summarize 10 decathlon events with a few components that retain as much variation as possible?”
Decathlon is a two-day track and field competition in which athletes compete in ten specific disciplines testing speed, strength, and endurance.
Research Question: Can we use these 10 events to measure some underlying latent trait(s) about the athletes?
Let’s start by assuming these events reflect one factor (overall athletic ability).
Every event depends partly on both overall athletic ability and event-specific influences.
For example: \(X_{100m} = F + \varepsilon_{100m}\)
Similarly, \(X_{110h} = F + \varepsilon_{110h}\)
Overall athletic ability may be a better predictor of performance in some events than others. The loading tells us how strongly athletic ability influences performance in a particular event.
\[X_{100m} = \lambda_{100m}F+ \varepsilon_{100m}\] \[X_{110h} = \lambda_{110h}F+ \varepsilon_{110h}\]
When all observed variables and common factors are standardized to have unit variance, the loading behaves like a correlation.
\[\begin{bmatrix} x_{100mi} \\ x_{110hi} \\ \vdots \\ x_{jvi} \end{bmatrix} = \begin{bmatrix} \lambda_{100m} \\ \lambda_{110h} \\ \vdots \\ \lambda_{jv} \end{bmatrix} \begin{bmatrix} F_{1i} \end{bmatrix} + \begin{bmatrix} \varepsilon_{100mi} \\ \varepsilon_{110hi} \\ \vdots \\ \varepsilon_{jvi} \end{bmatrix}\]
Observed variables (\(\mathbf{x}_i\))
Factor loadings (\(\boldsymbol{\lambda}\))
\[\begin{bmatrix} x_{100mi} \\ x_{110hi} \\ \vdots \\ x_{jvi} \end{bmatrix} = \begin{bmatrix} \lambda_{100m} \\ \lambda_{110h} \\ \vdots \\ \lambda_{jv} \end{bmatrix} \begin{bmatrix} F_{1i} \end{bmatrix} + \begin{bmatrix} \varepsilon_{100mi} \\ \varepsilon_{110hi} \\ \vdots \\ \varepsilon_{jvi} \end{bmatrix}\]
Latent factor (\(F_{1i}\))
Residuals (\(\boldsymbol{\varepsilon}_i\))
\[\begin{bmatrix} x_{100mi} \\ x_{110hi} \\ \vdots \\ x_{jvi} \end{bmatrix} = \begin{bmatrix} \lambda_{100m1}& \lambda_{100m2} \\ \lambda_{110h1} & \lambda_{110h2} \\ \vdots & \vdots \\ \lambda_{jv1} & \lambda_{jv2} \end{bmatrix} \begin{bmatrix} F_{1i} \\ F_{2i} \end{bmatrix} + \begin{bmatrix} \varepsilon_{100mi} \\ \varepsilon_{110hi} \\ \vdots \\ \varepsilon_{jvi} \end{bmatrix}\]
\[\begin{bmatrix} x_{100mi} \\ x_{110hi} \\ \vdots \\ x_{jvi} \end{bmatrix} = \begin{bmatrix} \mu_{100m} \\ \mu_{110h} \\ \vdots \\ \mu_{jv} \end{bmatrix} + \begin{bmatrix} \lambda_{100m1}& \lambda_{100m2} \\ \lambda_{110h1} & \lambda_{110h2} \\ \vdots & \vdots \\ \lambda_{jv1} & \lambda_{jv2} \end{bmatrix} \begin{bmatrix} F_{1i} \\ F_{2i} \end{bmatrix} + \begin{bmatrix} \varepsilon_{100mi} \\ \varepsilon_{110hi} \\ \vdots \\ \varepsilon_{jvi} \end{bmatrix}\]
By not including population mean vector \(\boldsymbol{\mu}\) on previous slides, we have assumed the observed variables have been mean-centered.
In practice, factor analysis is often performed with a standardized variable and latent factor so that
Factor analysis focuses on modeling a covariance among the observed variables instead of each event independently
Covariance represents how pairs of variables change together; on the diagonal are the variances of each variable
\[\begin{bmatrix} \text{Var}(100m) & \text{Cov}(100m, 110h) & \dots & \text{Cov}(100m, jv) \\ \text{Cov}(110h, 100m) & \text{Var}(110h) & \dots & \text{Cov}(110h, jv) \\ \vdots & \vdots & \ddots & \vdots\\ \text{Cov}(\text{jv}, 100m) & \text{Cov}(jv, 110h) & \dots & \text{Var}(jv) \end{bmatrix}\]
Factor analysis assumes two events should be correlated if they both depend on the latent factor (overall athletic ability)
Take the 100m and 110h:
\[X_{100m} = \lambda_{100m}F + \varepsilon_{100m}\] \[X_{110h} = \lambda_{110h}F + \varepsilon_{110h}\]
We can simplify this using two assumptions!
Knowing an athlete’s overall athletic ability tells us nothing about the remaining event-specific deviation.
After accounting for overall athletic ability, any remaining variation in one event doesn’t explain remaining variation in another event.
Therefore…
\[\begin{aligned} \text{Cov}(100m, 110h) &= \text{Cov}(\lambda_{100m}F, \lambda_{110h}F) + \text{Cov}(\lambda_{100m}F, \varepsilon_{110h}) + \\[3pt] & \quad \space \text{Cov}(\lambda_{110h}F, \varepsilon_{100m}) + \text{Cov}(\varepsilon_{100m}, \varepsilon_{110h}) \\[3pt] &= \text{Cov}(\lambda_{100m}F, \lambda_{110h}F) \\[3pt] &= \lambda_{100m}\lambda_{110h}\text{Cov}(F, F) \\[3pt] &= \lambda_{100m}\lambda_{110h}\text{Var}(F) \end{aligned}\]We saw \(\text{Cov}({100m}, {110h}) = \lambda_{100m}\lambda_{110h}\text{Var}(F)\).
According to our one-factor model, this means that the only reason that two items are correlated is because they share the same latent factor (overall athletic ability).
If we observe correlations in the data that the factor cannot explain, that suggests our one-factor model is missing something.
For example, suppose 100m time and 110m high hurdles time are more highly correlated than our one-factor model predicts.
In addition to overall athletic ability, these events may share another underlying trait (e.g. speed).
The one-factor model cannot explain this extra correlation, so we may need to add another factor.
In matrix notation, our one factor model can be written \(\mathbf{x} = \boldsymbol{\Lambda}F + \varepsilon\)
Making the following assumptions:
where \(\boldsymbol{\Lambda}\boldsymbol\Lambda^T\) represents the covariance explained by the common factor, and \(\Psi\) the unique (residual) variances for each observed variable. So \(\boldsymbol\Sigma\) = shared covariance + unique variance
Can we use men’s decathalon scores to give each individual a measure of overall athletic ability?
library(tidyverse)
ggplot2::theme_set(ggplot2::theme_light(base_size = 20))
dec_performances <- read_csv("https://raw.githubusercontent.com/36-SURE/2026/main/data/dec_performances.csv")
decathlon <- dec_performances |>
dplyr::select(men_100, men_lj, men_sp, men_hj, men_400, men_110h, men_dt, men_pv, men_jt, men_1500) |>
separate(men_1500, into = c("min", "sec", "remove"), sep = ":", convert = TRUE) %>%
mutate(men_1500 = min * 60 + sec) %>%
select(-min, -sec, -remove) Why are certain variables positively correlated and others negatively correlated?
Model parameters are estimated by finding the loadings and residual variances that make the model-implied covariance matrix match the sample covariance matrix as closely as possible
Check out fit and the following columns:
MR1: Factor loading; larger absolute values indicate the variable is a stronger indicator of the factor.
h2: Communality; proportion of the variable’s variance explained by the common factor(s).
u2: Uniqueness; proportion of the variable’s variance not explained by the common factor(s); includes specific variance and measurement error.
Scree plot: uses a visual representation of the factors’ eigenvalues, which measure the amount of variance in observed variables accounted for by a given factor
Standardizing the variables means the total variance is equal to the number of predictors
For example, and eigenvalue of 3.8 means the factor explains the equivalent variance of 3.8 standardized variables.
Very simple structure (VSS): identifies a “simple” factor solution where each variable loads highly on only one factor
MAP: measures how much systematic correlation remains after extracting factors
Scree, VSS, and MAP collectively tell us we could use either 1, 2, or 3 factors. This makes leveraging domain knowledge especially important!
Note: with only one factor, rotation has no effect!
Orthogonal rotation: rotated axes remain perpendicular, forcing factors to be uncorrelated.
Varimax is most popular orthogonal rotation: maximizes variance of squared loadings within each factor, causing each factor to have a few large loadings and many near zero.
Pros: Factors are easy interpret, better for use in downstream regression
Cons: often unrealistic
Oblique rotation: allows factors to correlate freely (e.g. depression and anxiety are correlated)
Promax/oblimin are most common oblique rotations
Pros: realistic
Cons: loading matrix can sometimes be harder to interpret, correlation in downstream regression
Check out the following aspects of the output:
Do \(h2\) (communalities) and \(u2\) (uniqueness) differ between the two rotations?
What latent trait might each factor represent?
What is the correlation of the factors with oblimin? Varimax?
Factor scores estimate each individual’s level of the latent trait given their item responses
The most common method to extract scores is the regression estimator
Assume \(f \sim N(0,1)\), \(\varepsilon \sim \mathcal N (\textbf{0}, \boldsymbol\Psi)\)
The latent factor and items take a joint multivariate normal distribution distribution:
\[\begin{bmatrix} \mathbf{f} \\ \mathbf{x} \end{bmatrix} \sim \mathcal N \left(0, \begin{bmatrix} 1 & \boldsymbol\Lambda^T \\ \boldsymbol\Lambda & \Lambda\Lambda^T + \boldsymbol\Psi\end{bmatrix}\right)\]
Using properties of the MVN distribution, \(\hat f = \mathbb{E}[\mathbf f |\mathbf{x}] = \boldsymbol\Lambda^T(\boldsymbol\Lambda \boldsymbol\Lambda^T + \boldsymbol\Psi)^{-1}\mathbf{x}\)
Feel free to do some exploration! How do the scores correlate with overall decathlon score? What about with the score on each event?
This offers several advantages
combine multiple correlated variables into a single latent construct
reduces dimensionality and multicollinearity
often easier to interpret than analyzing many individual variables
Because factor scores are estimates (not directly observed), they contain measurement error!
Ignoring this uncertainty can lead to biased SEs and attenuated regression coefficients.
Amount of bias will depend on the reliability of the latent factor (proportion of variance explained by the factor)

To prevent downstream attenuation, structural equation modeling (SEM) skips estimating the factor scores first and instead of estimates everything simultaneously.
In psychology, people of various backgrounds (e.g. age, sex, education) often endorse items at different rates for a given level of the latent trait. This is known as differential item functioning (DIF).
Example: With age, maybe people are more willing to say (admit) they are nervous and stressed, for a constant level of perceived stress.
Example: For a given level of underlying depression, females are significantly more likely to endorse “I cry a lot” than males.
Our research: demonstrates that uses traditional standardization methods in psychology in the presence of DIF and impact (true differences in underlying latent trait among groups) results in
biased regression coefficient when using scores in downstream analyses
artificially inflated or deflated corresponding confidence intervals
A solution to this is moderated nonlinear factor analysis (MNLFA)
Generalizes traditional latent variable models to allow for simultaneous correction of DIF over multiple background variables
Nonlinear: background variables are allowed to correct DIF in a nonlinear fashion
In short, this allows intercepts and loadings to vary by group
Intercept moderation: for a given level of depression, females cry more than males
Loading moderation: crying is a better indicator of depression in males than females
… and much more that I am happy to talk about if anyone is interested in learning more!