Stats for

Factor Analysis

Exploratory Factor Analysis (EFA)

Exploratory factor analysis finds the underlying factors that explain how items correlate.

Exploratory factor analysis takes a set of items and finds how many common factors best account for their correlations, which items go with which factor, and how strongly.

Example

How many distinct parts of wellbeing do these twelve questionnaire items measure, and which items go together? Three hundred adults rated twelve statements about their wellbeing from 1 to 5, such as “I get absorbed in what I'm doing” and “I feel loved.”

One Sample + Many Items + Item Scores + Structure Unknown → Exploratory Factor Analysis (EFA)
Estimates
The factors behind a set of items
Observations
Independent
Parametric
Yes
Headline Statistic
\lambda
Key Estimate
Pattern Loading
Groups
1

The Basics

When to Use It

Use it when you have a set of items (or other measures) answered by the same people, you suspect they reflect a few underlying traits, and you don't yet know how many traits there are or which items belong to which. It's the usual first step with a new questionnaire, or with an existing one used in a very different population where the structure is really in doubt. For example:

  • How many distinct parts of wellbeing do these twelve questionnaire items measure, and which items go together?
  • Do the 20 items of a new social-media anxiety scale reflect one worry or several, such as fear of missing out and fear of judgment?
  • Do the 18 items of a new study-habits checklist group into a few distinct habits, and which items belong to each?

Vocabulary You Need

Definition Factor Loading (\lambda)

How strongly one observed variable, such as a questionnaire item, reflects a factor: an unobserved trait that a set of variables is assumed to share. A standardized loading puts everything in standard deviations; when each item reflects only one factor, it is the item's correlation with that factor, and its square is the share of the item's variance the factor accounts for. An unstandardized loading is in the item's own units: how much the item's score rises, on average, for each one-unit rise in the factor: one standard deviation when the factor's variance is fixed at 1, or one point of the marker item when that item's loading is fixed at 1. Loadings come from a factor analysis, so they depend on the model, the estimation method and which items are analyzed together. Glossary →

Definition Eigenvalue (e)

A correlation matrix of p variables can be split into p uncorrelated dimensions (its principal components), each capturing part of the variables' total variation. A dimension's eigenvalue is how much it captures, in units of one variable's variance: the eigenvalues add up to p, so an eigenvalue of 3 means that one dimension carries as much variation as three whole variables, and one below 1 carries less than a single variable. Listed from largest to smallest they are the scree, and they are used to decide how many factors to keep. They describe the correlation matrix, not the rotated factors, so they aren't read as the size of any one factor. Glossary →

Definition Communality (h^2)

The part of an item's variance that it shares with the other items through the common factors: 1 minus its uniqueness. With uncorrelated factors it's the sum of the item's squared loadings; with correlated factors the correlations between factors enter it too. Rotating the factors doesn't change it. An item with a low communality has little in common with the rest, so the factors say little about it, and a set of low communalities makes the whole solution less stable in a modest sample. Glossary →

Definition Factor Rotation

The factors that come out of extraction are just one of endlessly many equally good ways to describe the same shared variance. Rotation turns them, without changing how well the model fits or any item's communality, toward simple structure: each item loading strongly on one factor and near zero on the others. Orthogonal rotations, such as varimax, keep the factors uncorrelated. Oblique rotations, such as direct oblimin and promax, let them correlate, and then report a pattern matrix, a structure matrix and the correlations between factors. If the factors really are uncorrelated, an oblique rotation finds correlations near zero anyway. Glossary →

Assumptions

1. Enough Shared Variance to Factor Your items correlate enough with one another for common factors to show up.
What It Means
Factor analysis looks for a few common factors that reproduce the items' correlations. That needs correlations to reproduce: a good number of item pairs correlating at a moderate level, and correlations that run through the whole set rather than being confined to isolated pairs. If items barely correlate, or only in pairs, the factors that come out are unstable and describe little.
Applies To
Relationship
How to Check
Look at the correlation matrix (a heat map helps): many correlations of about .30 or more is a good sign. Then look at the KMO measure, overall and per item. Bartlett's test of sphericity asks only whether the correlations are all zero; with any real sample it's almost always significant, so it rules out hopeless data rather than showing good data.
How Much It Matters
A lot. Without enough shared variance the factors are unstable and hard to reproduce. With a KMO in the .80s and most items correlating .30 or more with their neighbors, there's no concern.

If It's Violated

  • Design Change Items with a low per-item KMO and weak correlations with everything else don't belong in the set; drop them, or rewrite them to target the construct.
  • Design Change Weak correlations and low communalities need larger samples for a stable solution.
2. Linear Relationship The relationship between your variables follows a straight line, not a curve.
What It Means
As one variable goes up, the other tends to change by about the same amount across its whole range. A curved relationship, one that levels off or a U shape, breaks this.
Applies To
Relationship
How to Check
Plot a sample of item pairs as scatterplots, jittered so 1-to-5 answers don't stack on top of each other, and look at each item's distribution. A roughly oval cloud is fine; a clear bend is not. With rating scales, answers bunched at one end are a more common problem than a curve.
How Much It Matters
Some. The analysis works from correlations, so it sees only straight-line relationships between items. Short rating scales with answers piled up at one end also shrink correlations and can produce extra factors of items that are just skewed the same way. Maximum likelihood's fit test also assumes roughly normal items.

If It's Violated

  • Alternative Test Factor the polychoric correlations instead (psych's fa with cor = "poly"), which treat 1-to-5 answers as cut points on a continuous scale.
  • Correction If the problem is skew rather than a curve, extract with principal axis factoring, which doesn't assume normality, and drop the chi-square fit test. It still works from straight-line correlations, so it won't fix a curved relationship.
  • Design Change If an item's relationships with the others are clearly curved, drop or rewrite it; a model built on correlations can't represent a curve.
3. Independent Observations The people (or other units) in your study don't influence each other.
What It Means
Each person's data comes from a separate, unconnected source, so knowing one person's scores tells you nothing about anyone else's. In designs that measure people more than once, their own scores are meant to be related; it's different people who must be independent. Methods built for clustered data, such as multilevel models and GEE, also allow members of the same group to be related, as long as the analysis names the grouping; then it's the groups that must be independent.
Applies To
Observations
How to Check
By design, not by a test. Did each person contribute their own data, with no clusters such as roommates, couples, therapy groups or classrooms whose members influence each other? If there are clusters, does the analysis model every one of them?
How Much It Matters
Some. Clustered respondents, such as students from a few classrooms, can create correlations that belong to the clusters rather than the items, and the fit test's p-value comes out too small.

If It's Violated

  • Alternative Test Multilevel SEM. Model the factors within and between clusters.
  • Proceed with Caveat Say how respondents were grouped, and treat the structure as describing the pooled sample.
4. No Extreme Outliers No single case is far enough from the rest to drive the result.
What It Means
A few points far from the rest can pull a statistic around on their own, so it describes those few points more than everyone else. In a test, that can create an effect that isn't there or hide one that is.
Applies To
Observations
How to Check
Plot the data and look for points far from the rest. With two or more variables, flag cases with large squared Mahalanobis distances across them: points can be ordinary on each variable but unusual in combination. Check each against the raw records, and compare the result with and without it.
How Much It Matters
Some. A few people answering at random or with one extreme answer everywhere can create or blur correlations, and with them a factor. With 300 people a handful of cases matters little unless they're extreme on many items.

If It's Violated

  • Robust Estimation Flag people with large squared Mahalanobis distances across the items (psych's outlier function), and look for straight-lining and impossible response patterns. Check flagged cases against the raw records and compare the solution with and without them.
  • Proceed with Caveat If dropping cases changes the structure, report both solutions and say which you trust.

Limitations

This Is Not Your Test If…

What It Doesn't Tell You

  • What the factors are. The analysis finds that four items go together; calling them “engagement” is our reading of their content. The name is a hypothesis, not a finding.
  • That the factors are real traits. EFA assumes a few shared causes and finds the factors that best reproduce the correlations. Items that share wording, a response style or the same skew can form a factor too; whether a factor is a psychological trait is a question of theory and validity.
  • Whether the structure is right. EFA describes these 300 adults' answers. Whether three factors hold up in other people needs a confirmatory factor analysis in a new sample.
  • Whether the items are valid. Items can hang together neatly and still miss the construct. Whether the relationships factor tracks real social support is a question of validity, which needs other measures.
  • Why the traits are related. The .41 between positive emotion and engagement says the two go together, not that one causes the other.
  • That the number of factors is settled. Parallel analysis, the scree, interpretability and Velicer's MAP test (psych's vss, a useful second check) agreed on three here. When they disagree, several solutions are defensible, and a different sample size can tip parallel analysis one way or the other.

Common Mistakes

  • Don'tUse principal components analysis and call it factor analysis.

    InsteadPCA summarizes all of each item's variance, unique part included; factor analysis models only the shared part. Use maximum likelihood or principal axis factoring, and name it.

  • Don'tIgnore a Heywood case, a communality of 1 or more, or a failure to converge.

    InsteadIt usually means too many factors, or a factor with fewer than three items. Try fewer factors.

  • Don'tName a factor by its strongest item and treat the name as proven.

    InsteadName it cautiously from all its items, and test the structure in new data with a confirmatory factor analysis.

  • Don'tDelete every item with a cross-loading.

    InsteadLook at its content first. An item that belongs to two related traits may still be a good item. Score it on the factor it loads on most, or leave it out of the subscales, and say which.

  • Don'tRun the EFA and a confirmatory factor analysis on the same sample and call the CFA a confirmation.

    InsteadSplit the sample, or confirm the structure in a new one.

  • Don'tKeep every factor whose eigenvalue is above 1 because that's the software's default.

    InsteadDecide with parallel analysis and the scree, and check that each factor makes sense. Random data alone give leading eigenvalues above 1.

  • Don'tUse varimax out of habit when the traits you're measuring are likely to be related.

    InsteadUse an oblique rotation such as oblimin or promax, and report the factor correlations.

Result Decoder

Interpretation Guidelines

Benchmarks Pattern Loading
  • |λ| < .30 Weak

    Usually read as not loading on that factor. A loading this small reflects less than 10% of the item's variance.

  • .30 ≤ |λ| < .50 Salient

    Counts as loading by the common cutoffs (.30 to .40), though some authors ask for more. The item belongs to the factor, but only partly reflects it.

  • |λ| ≥ .50 Strong

    Clears even the strictest common cutoff. The item is a clear marker of the factor and helps name it.

Conventions, not rules: Stefana et al. (2025) list minimum loadings of .30, .32, .35, .40 and .50 from different authors, depending partly on how narrow the scale is. They apply to standardized pattern loadings. Judge an item by its content and by its loadings on the other factors too.

More about effect size ↓

How It's Reported

Equation Form

Example

KMO = .82; Bartlett's χ²(66) = 1022.86, p < .001; three factors by parallel analysis; main loadings .54 to .78; factor correlations .16 to .41; χ²(33) = 23.93, p = .876

Table 1. Pattern Matrix for the Twelve Wellbeing Items

Example
Positive EmotionEngagementRelationshipsh^2
1. I feel cheerful most days .71−.05.05.51
2. I often feel joyful .78.02−.03.61
3. I feel content with how my life is going .66.06−.03.47
4. I laugh easily .59−.01−.03.34
5. I get absorbed in what I'm doing .01.78−.02.61
6. I lose track of time when I'm doing something I enjoy −.02.71.04.51
7. I stay fully focused on my work or studies .03.61.00.39
8. I look for activities that challenge me −.02.54−.05.27
9. I feel supported by the people in my life .03.00.77.60
10. I have someone I can confide in −.05.06.63.40
11. I feel loved −.05−.04.74.52
12. I'm happiest when I'm with the people close to me .36.06.45.47
Factor correlation: Engagement .41
Factor correlation: Relationships .33.16

Note. N = 300. Maximum likelihood extraction, direct oblimin rotation (δ = 0). Each item's largest loading is its main one; h² = communality. The last two rows give the correlations between factors. The three factors account for 47% of the items' total variance.

Table 2. Eigenvalues and Parallel Analysis

Example
Observed EigenvalueRandom MeanRandom 95th PercentileKeep?
Factor 1 3.711.341.42Yes
Factor 2 1.971.251.31Yes
Factor 3 1.541.181.23Yes
Factor 4 0.681.121.17No
Factor 5 0.661.071.11No
Factor 6 0.601.021.05No

Note. Eigenvalues of the twelve items' correlation matrix (they add up to 12), against the eigenvalues of 500 random-normal data sets of the same size, 300 people by 12 variables. A factor is kept while its eigenvalue beats the random 95th percentile. Only the first six of twelve are shown.

Full Text (APA Style)

Example

The twelve wellbeing items were suitable for factor analysis: they were correlated, Bartlett's χ²(66) = 1022.86, p < .001, and sampling adequacy was good, KMO = .82. Parallel analysis of the principal-component eigenvalues against 500 random-normal data sets of the same size, and the scree plot, both pointed to three factors: the first three eigenvalues (3.71, 1.97 and 1.54) exceeded the 95th percentile of the random eigenvalues, and the fourth (0.68) did not. A maximum likelihood factor analysis with direct oblimin rotation gave three correlated factors that together accounted for 47% of the items' variance (Table 1). Every item loaded between .54 and .78 on one factor and below .10 on the others, except “I'm happiest when I'm with the people close to me,” which loaded on both relationships (.45) and positive emotion (.36). We labeled the factors positive emotion, engagement and relationships. Positive emotion correlated .41 with engagement and .33 with relationships; engagement and relationships correlated .16. With three factors, the largest gap between an observed and a reproduced item correlation was .04, and the chi-square test found no sign of misfit, χ²(33) = 23.93, p = .876. Analyses used Pearson correlations of the 1–5 ratings, with no missing data (psych 2.6.5 in R).

  • Name the extraction method (maximum likelihood, principal axis) and the rotation (oblimin, promax), and say how you chose the number of factors: for parallel analysis, which eigenvalues (principal-component or reduced), how many random data sets, and whether you compared with their mean or 95th percentile.
  • Say which correlations you factored (Pearson or polychoric), how you handled missing data, and which software you used.
  • Back a claim of good fit with the leftover correlations; a non-significant chi-square only means misfit wasn't detected.
  • Give the whole pattern matrix with communalities, not just the loadings above a cutoff, and the factor correlations.
  • Say which items cross-load and what you did with them.
  • Treat the factor names as your interpretation, and say that the structure still needs confirming in new data.

Reading Each Piece

The equation form above, piece by piece.

KMO = .82 Most of what the items share runs through the whole set rather than through particular pairs, so the correlations are worth factoring. “Meritorious” on Kaiser's scale, as the psych package's documentation reports it (Revelle, 2026).
e1 to e4 = 3.71, 1.97, 1.54, 0.68 Three dimensions stand out, and the rest are small. Plotted in order, the eigenvalues fall steeply to the third and then flatten: the scree plot's elbow comes after three.
Parallel analysis: three factors Three dimensions carry more variation than random data of the same size would. Random data's first eigenvalue alone is 1.42 here, which is why “keep eigenvalues above 1” can't be trusted on its own. Here it happens to agree.
h² = .47 (item 12) The three factors account for 47% of item 12's variation; the other 53% is specific to the item or noise. Across all twelve items the communalities run from .27 to .61 and add up to 5.69, 47% of the total.
λ = .54 to .78 Four items each mark positive emotion, engagement and relationships, with main loadings from .54 (“I look for activities that challenge me”) to .78 (“I get absorbed in what I'm doing”) and no other loading above .10. Every main loading is strong by the benchmarks above. Benchmarks ↑
Item 12: λ = .45 (relationships), .36 (positive emotion) “I'm happiest when I'm with the people close to me” reflects both relationships and positive emotion, with salient loadings on each. That makes sense for its wording; it's a cross-loading to report and a decision to make, not an error. Benchmarks ↑
φ = .16 to .41 The three traits are related but distinct: people higher in positive emotion tend to be more engaged (.41) and to feel more connected (.33), while engagement and relationships barely overlap (.16). Correlations this size are why an oblique rotation was the right choice.
Bartlett's χ²(66) = 1022.86, p < .001 The items are clearly correlated: if all 66 correlations were zero in the population, a chi-square this large or larger would essentially never happen. That's a low bar; it says there's something to factor, not how much.
χ²(33) = 23.93, p = .876 Three factors leave no misfit the test can detect: if three factors fit exactly, a chi-square at least this large would turn up about 88% of the time. The largest gap between an observed and a reproduced correlation is .04. With a much larger sample the test would flag trivial gaps, so read it alongside the leftover correlations.

Calculations

The Running Example

Example

The wellbeing study: 300 adults, twelve items rated 1 to 5, factored to find how many traits lie behind them and which items belong to each.

There's no single hypothesis to test. The targets are the number of factors behind the twelve items, how strongly each item reflects each factor (its loadings) and how strongly the factors are related, in the population of adults like these. Bartlett's test and the model's chi-square are checks along the way, not the result.

What Your Data Should Look Like

One row per person and one numeric column per item, with reverse-worded items already reverse-scored so that higher always means more of the trait. Rating-scale items (1 to 5, 1 to 7) are treated as numbers. With five or more answer options and no heavy pile-up at one end, that works well; with fewer options or strong skew, factor polychoric correlations instead (here they give the same three factors, with loadings a few hundredths higher). If answers are missing, say how you handled them: pairwise correlations, or better, full-information maximum likelihood or multiple imputation. Leave out the ID column and anything that isn't one of the items being factored. Plan on at least a few hundred people; the stronger and cleaner the loadings, the fewer you need.

Example
personcheerfuljoyfulcontentlaughabsorbedlose_timefocusedchallengesupportedconfidelovedtogether
1443235434543
2111322222122
3454123334334
4444343323323
5223445552234
6345433332212
… 294 more rows
ItemMSD
Cheerful3.131.03
Joyful3.191.11
Content3.221.05
Laugh3.111.13
Absorbed3.251.07
Lose Time3.201.11
Focused3.091.15
Challenge3.211.14
Supported3.161.09
Confide3.021.08
Loved3.111.09
Together3.311.11

N = 300.

Simulated data.

Download all 300 rows (data.csv)

Napkin Math

The whole test, one idea at a time. Under each heading, a line says why the step matters, and the green note reads the equation in plain English with the wellbeing study's numbers. Collapse all to read just the headings: they tell the whole story on their own.

  1. 1. See How a Shared Factor Makes Items Correlate

    The idea behind the whole analysis. The model treats each answer as part shared factor and part unique to the item. Two items that reflect the same factor correlate about as much as their two loadings multiplied; the unique parts correlate with nothing. EFA looks for the fewest factors, and the loadings, that reproduce all 66 correlations this way.

    x_i = \lambda_i F + u_i, \qquad r_{ij} \approx \lambda_i \lambda_j =.71 \times .78 \approx .55

    \lambda_i is how strongly item i reflects the factor F, and u_i is the item's unique part; its variance is the item's uniqueness. “I feel cheerful most days” loads .71 on positive emotion and “I often feel joyful” .78, so the model expects them to correlate about .71 × .78 = .55, and they do (r = .55). An item's communality (step 6) is the part of it the factors account for, statistically; the rest is its uniqueness. The leftover correlations in step 10 are the gaps between observed correlations and the ones the factors imply.

  2. 2. Check That the Items Are Correlated at All

    Factors can only reproduce correlations that exist. Bartlett's test asks whether the items' correlations could all be zero. It's a low bar, but a failure would end the analysis here.

    \chi^2 = -\left(n - 1 - \dfrac{2p + 5}{6}\right)\ln\lvert R\rvert =-\left(300 - 1 - \dfrac{29}{6}\right) \times (-3.47716)

    \chi^2 = 1022.86

    df = 66

    p < .001

    n is our 300 adults and p our 12 items, so the multiplier is 299 − 4.8333 = 294.1667. \ln\lvert R\rvert = −3.47716 measures how much the twelve items overlap. 294.1667 × 3.47716 = 1022.86, on 12 × 11 ÷ 2 = 66 df: far beyond anything all-zero correlations would produce.

  3. 3. Measure How Much the Items Share across the Whole Set

    Correlations could be strong but confined to isolated pairs. KMO compares each pair's correlation with its partial correlation, what's left once all the other items are held constant. If the items share common factors, the partials are small.

    \text{KMO} = \dfrac{\sum r_{ij}^2}{\sum r_{ij}^2 + \sum q_{ij}^2} =\dfrac{5.34}{5.34 + 1.21}

    = .82

    \sum r_{ij}^2 = 5.34

    \sum q_{ij}^2 = 1.21

    \sum r_{ij}^2 adds up the 66 squared correlations, 5.34. \sum q_{ij}^2 adds up the squared partial correlations, only 1.21. 5.34 ÷ (5.34 + 1.21) = 5.34 ÷ 6.55 = .82.

  4. 4. Find How Much Variation Each Dimension Carries

    The correlation matrix can be split into as many uncorrelated dimensions (principal components) as there are items. Each dimension's eigenvalue says how much of the items' total variation it carries, counted in items' worth. The twelve eigenvalues add up to 12.

    e_1

    = 3.71

    e_2 = 1.97

    e_3 = 1.54

    e_4 = 0.68

    The twelve eigenvalues add up to 12: 3.71 + 1.97 + 1.54 + 0.68 + \dots + 0.35 = 12. e_1 = 3.71 means the strongest dimension carries as much variation as 3.7 of our 12 items (31%). After e_3 = 1.54 the values drop to 0.68 and then trail off slowly: the scree. These come from the full correlation matrix, unique variance included, so the first three carry 7.22 items' worth (60%). The three common factors fitted in step 6 account for less, 47%, because they leave each item's unique part out; parallel analysis uses these eigenvalues only to decide how many factors to fit.

  5. 5. Compare Each Eigenvalue with What Random Data Would Give

    Even pure noise produces a few eigenvalues above 1, just by chance. Parallel analysis makes many random data sets the same size as ours and keeps a factor only while our eigenvalue beats the random one in the same position.

    e_k > e_k^{\text{random}} =1.54 > 1.23, \quad 0.68 < 1.17

    e_3^{\text{random}} = 1.23

    e_4^{\text{random}} = 1.17

    m = 3

    e_k^{\text{random}} is the 95th percentile of the kth eigenvalue across 500 random data sets of 300 people by 12 items. Our third eigenvalue, 1.54, beats the random 1.23; our fourth, 0.68, falls well short of 1.17. Keep three.

  6. 6. Estimate How Much of Each Item the Three Factors Explain

    Maximum likelihood fits three common factors to the correlations. Each item's communality is the share of its variance those factors account for; the rest is unique to the item. Rotating the factors later won't change it.

    h_i^2 = \sum_j \lambda_{ij}^2 =0.638^2 + (-0.256)^2 + (-0.017)^2

    = .47

    \sum h_i^2 = 5.69

    \sum h_i^2 / 12 = .474

    \lambda_{ij} are item 12's loadings on the three factors as extracted, before rotation (the signs of unrotated factors are arbitrary; squaring removes them). .407 + .066 + .000 = .47: the factors account for 47% of the variation in “I'm happiest when I'm with the people close to me.”

  7. 7. Turn the Factors So Each Item Points Mostly at One

    The extracted factors fit the data, but items load on several of them at once, which is hard to read. Rotation turns the factors toward simple structure. Direct oblimin turns the factors to make Q, the sum of the products of each item's squared loadings on two factors, as small as it can, and lets the factors correlate.

    Q = \sum_i \sum_{j < k} \lambda_{ij}^2 \lambda_{ik}^2 =0.714 \rightarrow 0.042

    Q_{\text{before}} = 0.714

    Q_{\text{after}} = 0.042

    Q adds up, over the 12 items, the products of each item's squared loadings for every pair of factors. It's 0 when every item loads on just one factor. Rotation brings it from 0.714 to 0.042, while every communality stays the same.

  8. 8. Read Which Items Load on Which Factor

    The rotated loadings form the pattern matrix (Table 1). Each loading is an item's link to one factor with the other factors held constant. Items that load together define a factor; an item loading on two is a cross-loading.

    \lambda_{5,\,\text{E}}

    = .78

    \lambda_{12,\,\text{R}} = .45

    \lambda_{12,\,\text{P}} = .36

    \lambda_{12,\,\text{E}} = .06

    \lambda_{5,\,\text{E}} is item 5, “I get absorbed in what I'm doing,” on the engagement factor: .78, the strongest loading in the table, with loadings near 0 on the other two. Item 12 is the exception, .45 on relationships and .36 on positive emotion.

  9. 9. Check How Strongly the Factors Are Related

    An oblique rotation estimates the correlations between factors instead of forcing them to zero. They show whether the traits overlap, and whether an oblique rotation was needed.

    \phi_{\text{P,E}},\ \phi_{\text{P,R}},\ \phi_{\text{E,R}} =.41,\ .33,\ .16

    \phi_{\text{P,E}} = .41

    \phi_{\text{P,R}} = .33

    \phi_{\text{E,R}} = .16

    \phi_{\text{P,E}} is the correlation between the positive-emotion and engagement factors, .41. Positive emotion and relationships correlate .33, and engagement and relationships only .16.

  10. 10. Check That Three Factors Reproduce the Correlations

    A good solution should reproduce the items' correlations from the three factors alone. Maximum likelihood gives a chi-square test of the leftover gap; here it's a check, not the goal.

    \chi^2 = \left(n - 1 - \dfrac{2p + 5}{6} - \dfrac{2m}{3}\right) \times F_{\text{ML}} =292.17 \times 0.0819

    F_{\text{ML}} = 0.0819

    \chi^2 = 23.93

    df = 33

    p = .876

    \max \lvert r - \hat{r} \rvert = .04

    F_{\text{ML}} = 0.0819 measures the gap between the observed correlations and the ones three factors imply, and the multiplier is 300 − 1 − 4.83 − 2 = 292.17 (m = 3 factors). 292.17 × 0.0819 = 23.93. The df are what's left of the 66 correlations after the loadings are estimated: ((12 − 3)² − (12 + 3)) ÷ 2 = 33. A chi-square of 23.93 on 33 df is smaller than chance misfit alone would usually produce (p = .876).

Run It in Software

The code below reads the running example's data from data.csv; save it in the same folder you run the code from.

SPSS (version 30, as documented by IBM)

SPSS 30's FACTOR command has no parallel analysis option (its syntax reference lists none), so run parallel analysis in R (below) and use SPSS for the factor analysis itself.

  1. Analyze → Dimension Reduction → Factor.
  2. Move the twelve items into Variables.
  3. Descriptives: check Initial solution and KMO and Bartlett's test of sphericity.
  4. Extraction: set Method to Maximum likelihood, choose Fixed number of factors with 3, and check Scree plot.
  5. Rotation: choose Direct Oblimin (Delta 0).
  6. Options: check Sorted by size and Suppress small coefficients, absolute value below .30. Click OK.

SPSS applies Kaiser normalization before rotating unless told not to. The syntax below turns it off (NOKAISER) so the results match R's and this page's; with the menu default, loadings and factor correlations can differ by about .01.

Or paste this syntax:

FACTOR
  /VARIABLES cheerful joyful content laugh absorbed lose_time focused
    challenge supported confide loved together
  /PRINT INITIAL EXTRACTION ROTATION KMO
  /FORMAT SORT BLANK(.30)
  /PLOT EIGEN
  /CRITERIA FACTORS(3) ITERATE(100) NOKAISER
  /EXTRACTION ML
  /ROTATION OBLIMIN(0).

Reading the Output

Read KMO and Bartlett's Test first, then the eigenvalues and scree plot, then the Pattern Matrix with the Communalities, then the Factor Correlation Matrix.

KMO and Bartlett's Test

Kaiser-Meyer-Olkin Measure of Sampling Adequacy .816
Bartlett's Test of Sphericity: Approx. Chi-Square 1022.864
df 66
Sig. < .001

Total Variance Explained, Initial Eigenvalues (first four of twelve): 3.711, 1.974, 1.540, 0.683, which are 30.9%, 16.4%, 12.8% and 5.7% of the variance. Compare them with parallel analysis; SPSS's own default, keeping eigenvalues above 1, happens to agree here.

Communalities: “Initial” is each item's squared multiple correlation with the other items, the starting value; “Extraction” is the communality in Table 1 (.27 to .61).

Pattern Matrix (sorted, loadings below .30 blank)

Factor 1 Factor 2 Factor 3
joyful .778
cheerful .714
content .664
laugh .594
absorbed .779
lose_time .715
focused .609
challenge .535
supported .767
loved .742
confide .634
together .357 .455

Factor Correlation Matrix: the positive-emotion factor correlates .405 with engagement and .326 with relationships; engagement and relationships correlate .161.

SPSS may number the factors in a different order from this table; the factor numbers carry no meaning, so name each factor from its items. Read the Pattern Matrix, not the Structure Matrix, to decide which items belong to which factor. SPSS also prints a Goodness-of-fit Test for maximum likelihood; its chi-square can differ slightly from R's, which uses Bartlett's correction.

Output laid out from this page's computed results, not captured from a live run; labels and layout may differ slightly in your version.

R
library(psych)
wellbeing <- read.csv("data.csv")
items <- wellbeing[, -1]   # drop the person column

# 1. Enough shared variance to factor?
KMO(items)$MSA
cortest.bartlett(cor(items), n = nrow(items))

# 2. How many factors? Parallel analysis on principal components (Horn, 1965):
#    eigenvalues of 500 random-normal data sets the same size as ours
set.seed(2026)
random <- replicate(500, eigen(cor(matrix(rnorm(nrow(items) * ncol(items)), ncol = ncol(items))))$values)
round(data.frame(observed = eigen(cor(items))$values,
                 random_mean = rowMeans(random),
                 random_95 = apply(random, 1, quantile, 0.95))[1:6, ], 2)

# 3. Three factors by maximum likelihood, oblimin rotation
fit <- fa(items, nfactors = 3, fm = "ml", rotate = "oblimin")
print(fit$loadings, digits = 2, cutoff = 0.30)
round(fit$communality, 2)
round(fit$Phi, 2)
c(chisq = fit$STATISTIC, df = fit$dof, p = fit$PVAL)
max(abs(fit$residual[lower.tri(fit$residual)]))   # largest residual correlation
[1] 0.8156448
$chisq
[1] 1022.864

$p.value
[1] 1.50276e-171

$df
[1] 66

  observed random_mean random_95
1     3.71        1.34      1.42
2     1.97        1.25      1.31
3     1.54        1.18      1.23
4     0.68        1.12      1.16
5     0.66        1.07      1.10
6     0.60        1.01      1.05

Loadings:
          ML3   ML2   ML1
cheerful   0.71
joyful     0.78
content    0.66
laugh      0.59
absorbed         0.78
lose_time        0.71
focused          0.61
challenge        0.54
supported              0.77
confide                0.63
loved                  0.74
together   0.36        0.45

                ML3  ML2  ML1
SS loadings    2.05 1.79 1.76
Proportion Var 0.17 0.15 0.15
Cumulative Var 0.17 0.32 0.47
 cheerful    joyful   content     laugh  absorbed lose_time   focused challenge
     0.51      0.61      0.47      0.34      0.61      0.51      0.39      0.27
supported   confide     loved  together
     0.60      0.40      0.52      0.47
     ML3  ML2  ML1
ML3 1.00 0.41 0.33
ML2 0.41 1.00 0.16
ML1 0.33 0.16 1.00
     chisq         df          p
23.9253695 33.0000000  0.8760736
[1] 0.04272299

Keep a factor while its observed eigenvalue beats random_95, the 95th percentile of the random eigenvalues; random_mean is the mean, Horn's original criterion, which gives three factors here too. R's random eigenvalues are its own draws, so they can differ from Table 2's in the second decimal; the decision is the same. psych's fa.parallel(items, fa = "pc") runs a similar analysis and plots it, but its printed pc.sim column is the random mean, not the 95th percentile. The factor labels ML1 to ML3 are arbitrary: name factors from their items. With correlated factors the “Proportion Var” row counts overlapping variance, so don't read it as each factor's separate share.

Output from a real run: R 4.6.1 (psych 2.6.5, GPArotation 2026.8.2), run 2026-10-03.

Python
import numpy as np
import pandas as pd
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_kmo, calculate_bartlett_sphericity

wellbeing = pd.read_csv("data.csv")
items = wellbeing.drop(columns="person")
calculate_kmo(items)[1]                # 0.8156
calculate_bartlett_sphericity(items)   # (1022.86, 1.50e-171)

fa = FactorAnalyzer(n_factors=3, method="ml", rotation="oblimin").fit(items)
fa.get_eigenvalues()[0][:4].round(2)   # [3.71 1.97 1.54 0.68]
print(pd.DataFrame(fa.loadings_, index=items.columns).round(2))

# Communalities from the unrotated fit (see below)
print(FactorAnalyzer(n_factors=3, method="ml", rotation=None).fit(items).get_communalities().round(2))
              0     1     2
cheerful   0.71 -0.05  0.05
joyful     0.78  0.02 -0.03
content    0.66  0.06 -0.03
laugh      0.59 -0.01 -0.03
absorbed   0.01  0.78 -0.02
lose_time -0.02  0.71  0.04
focused    0.03  0.61  0.00
challenge -0.02  0.54 -0.05
supported  0.03  0.00  0.77
confide   -0.05  0.06  0.63
loved     -0.05 -0.04  0.74
together   0.36  0.06  0.45
[0.51 0.61 0.47 0.34 0.61 0.51 0.39 0.27 0.6  0.4  0.52 0.47]

The loadings match R's. Two cautions for factor_analyzer 0.5.1 with an oblique rotation: get_communalities() on the rotated fit just adds up squared pattern loadings, which ignores the factor correlations (it gives .34 instead of .47 for together), so take communalities from the unrotated fit, which rotation doesn't change. And phi_, the factor correlations, came out in a different factor order from loadings_ on these data (.33 where R's positive emotion–engagement correlation is .41), so check its order against R before reporting it. factor_analyzer has no parallel analysis; use R's fa.parallel.

Output from a real run: Python 3.9.6 (factor_analyzer 0.5.1, scikit-learn 1.6.1, numpy 2.0.2, pandas 2.3.3), run 2026-10-03.

Impact

Effect Size

EFA has no single effect size. The sizes that matter are the loadings, how strongly each item reflects its factor, and the communalities, how much of each item the factors account for. A standardized loading is on a correlation-like scale, so loadings can be compared across items and studies; with little overlap between factors, its square is roughly the share of the item's variance that factor carries.

\lambda_{5,\,\text{E}} = .78, \qquad .78^2 \approx .61

“I get absorbed in what I'm doing” loads .78 on engagement: about 61% of the variation in how people answer it lines up with the engagement factor. The weakest main loading, .54 for “I look for activities that challenge me,” means only about 29% does, which makes it the item to look at first if the scale is shortened.

For the solution as a whole, the three factors account for 47% of the twelve items' variance, typical for questionnaire items, whose answers carry a good deal of item-specific variation. The practical question isn't whether .47 is large but whether each subscale has enough strong items to be scored reliably, which is what omega for each subscale answers next.

To use the result, most researchers add or average each factor's items into a subscale score. Factor scores (psych's factor.scores) weight items by their loadings instead, but the weights change from sample to sample. A cross-loading item like item 12 is usually scored on the factor it loads on most (relationships) or left out of both subscales; say which, and check the subscale's omega either way.

Benchmarks Pattern Loading at a Glance
Weak
|λ| < .30
Salient
.30 ≤ |λ| < .50
Strong
|λ| ≥ .50

Full benchmarks and caveats ↑

Uncertainty

EFA isn't a significance test. The result is a structure: how many factors, which items load where, and how the factors relate. Two p-values turn up along the way, and neither is the answer.

Bartlett's test asks whether the items' correlations could all be zero. With any real questionnaire and a few hundred people it's significant, so it only rules out hopeless data.

The model chi-square asks whether the chosen number of factors leaves more misfit than chance could easily produce. Here a small, non-significant value is the good outcome, though it only means no misfit was detected.

Three factors left a chi-square of 23.93 on 33 df, p = .876: if three factors fit exactly, a chi-square at least this large would turn up about 88% of the time, so there's no sign that a fourth factor is being missed. That agrees with parallel analysis, which is the better guide to the number of factors.

The chi-square test grows with sample size, so in large samples it rejects models whose misfit is trivial, and in small ones it misses real misfit. Choosing the number of factors by adding factors until p passes .05 ties the answer to how many people you asked. Use parallel analysis, the scree and interpretability instead, and read the fit test and the leftover correlations as checks.

The loadings and factor correlations have sampling error too. psych's fa with n.iter = 500 bootstraps a confidence interval for each. Here item 12's .36 on positive emotion has an interval of about .25 to .46, so the data can't rule out a loading below .30, while its .45 on relationships runs from about .36 to .55.

Precision and Sample Size

Power is the chance that a study detects an effect that's really there. EFA doesn't test one effect, so power in that sense doesn't apply. What you plan instead is stability: enough people that the same factors, with roughly the same loadings, would come out in another sample. That depends less on a fixed number than on the data: strong loadings, high communalities and several items per factor make a small sample go further; weak loadings and factors marked by only two or three items need many more people.

Our items have main loadings of .54 to .78 and four items per factor, a comfortable design, and 300 adults is a common target for questionnaire work. With half as many people, the three factors would probably still appear, but the smaller loadings and the cross-loading item could easily shift, and parallel analysis's random eigenvalues would sit higher, making the third factor harder to keep.

Plan for stability: aim for at least four good items per expected factor and a few hundred people, more if loadings may be weak. Then check the structure in a second sample. There's no calculator for this test.

Other Info

Follow-Up and Post Hoc Tests

None. This page estimates rather than tests, so there are no follow-up comparisons to run.

References

  • Horn, J. L. (1965). A rationale and test for the number of factors in factor analysis. Psychometrika, 30(2), 179–185. https://doi.org/10.1007/BF02289447
    “A procedure based on the generation of random variables is given for estimating the component which needs to be subtracted.” (Abstract)
  • Fabrigar, L. R., Wegener, D. T., MacCallum, R. C., & Strahan, E. J. (1999). Evaluating the use of exploratory factor analysis in psychological research. Psychological Methods, 4(3), 272–299. https://doi.org/10.1037/1082-989X.4.3.272
    “Despite the widespread use of exploratory factor analysis in psychological research, researchers often make questionable decisions when conducting these analyses.” (Abstract)
  • Costello, A. B., & Osborne, J. W. (2005). Best practices in exploratory factor analysis: Four recommendations for getting the most from your analysis. Practical Assessment, Research, and Evaluation, 10, Article 7. https://doi.org/10.7275/jyj1-4868
    “In particular, this paper provides practical information on making decisions regarding (a) extraction, (b) rotation, (c) the number of factors to interpret, and (d) sample size.” (Abstract)
  • Stefana, A., Damiani, S., Granziol, U., Provenzani, U., Solmi, M., Youngstrom, E. A., & Fusar-Poli, P. (2025). Psychological, psychiatric, and behavioral sciences measurement scales: Best practice guidelines for their development and validation. Frontiers in Psychology, 15, Article 1494261. https://doi.org/10.3389/fpsyg.2024.1494261
    “A combination of theoretical reasoned reflection, parallel analysis (Horn, 1965) with replications of the simulated comparison data, and visual scree test (Cattell, 1966; Horn and Engstrom, 1979) should be used to determine the exact number of factors to retain” (Step 12: Extract the factors)
    “Items with factor loadings or slope coefficients less than 0.30 are deemed insufficient because they contribute less than 10% variance to the latent construct measured” (Step 13: Identify the best items)
    “Communalities are generally considered high if above 0.80, though 0.40–0.70 is more frequent in social sciences” (Step 11: Administer to an appropriately large and representative sample)
    “In the absence of such a theory, oblique rotations generally offer more accurate data representations, as psychological/psychiatric constructs are often interrelated.” (Rotation method)
    “As a first step, the suitability of the data for factor analysis must be evaluated using Bartlett’s sphericity test (p ≤ 0.05) and Kaiser-Meyer-Olkin measure of sampling adequacy (KMO ≥ 0.60)” (Step 12: Extract the factors)
  • Osborne, J. W. (2015). What is rotating in exploratory factor analysis? Practical Assessment, Research, and Evaluation, 20, Article 2. https://doi.org/10.7275/hb2g-m060
    “orthogonal rotations are probably not a best practice, as oblique rotations can accurately model uncorrelated and correlated factors, whereas orthogonal rotations cannot handle correlated factors as effectively.” (p. 6)
    “Oblique rotations do not force factors to be correlated, and so in that instance, the factors would be allowed to assume a correlation of zero, and the solution would be the same as that of an orthogonal rotation.” (p. 5)
  • Bernaards, C. A., & Jennrich, R. I. (2005). Gradient projection algorithms and software for arbitrary rotation criteria in factor analysis. Educational and Psychological Measurement, 65(5), 676–696. https://doi.org/10.1177/0013164404272507
  • Revelle, W. (2026). psych: Procedures for psychological, psychometric, and personality research (R package version 2.6.5). Northwestern University. https://CRAN.R-project.org/package=psych
    “The eigen value of 1 rule, although the default for many programs, seems to be a rough way of dividing the number of variables by 3.” (nfactors help page, Details)
  • Kaiser, H. F. (1970). A second generation little jiffy. Psychometrika, 35(4), 401–415. https://doi.org/10.1007/BF02291817
  • Kaiser, H. F., & Rice, J. (1974). Little Jiffy, Mark IV. Educational and Psychological Measurement, 34(1), 111–117. https://doi.org/10.1177/001316447403400115

Spot an error? Something still confusing? Tell us at support@statsforpsychology.com.