Factor analysis is a statistical technique that identifies hidden patterns in your data by grouping related variables into a smaller number of underlying “factors.” The process follows a consistent sequence: check whether your data is suitable, extract factors, decide how many to keep, rotate them for clarity, and interpret the results. Each step involves specific decisions that shape your final outcome, so understanding the logic behind them matters as much as clicking the right buttons in your software.
Start With a Clear Construct in Mind
Before touching any software, you need a conceptual framework for what you’re measuring. Factor analysis works best when you have a theoretical reason to believe your variables cluster together. If you’re developing a survey about job satisfaction, for example, you might expect questions to group around themes like pay, autonomy, and relationships with coworkers. This initial thinking guides every downstream decision, from how many factors you extract to what you name them at the end.
Check Whether Your Data Is Suitable
Not every dataset can support a factor analysis. Two tests tell you whether yours qualifies.
The Kaiser-Meyer-Olkin (KMO) statistic measures how much your variables share in common. It ranges from 0 to 1. A KMO above 0.5 is the minimum threshold for proceeding, while a value above 0.8 means your data is well suited for factor analysis. Below 0.5, the results probably won’t be useful.
Bartlett’s test of sphericity checks whether your variables are correlated enough to form meaningful groups. You want this test to be statistically significant (p less than 0.05). A non-significant result means your variables are too independent from each other for factor analysis to find any structure.
Sample size also matters. A common guideline is at least 5 to 10 observations per variable, though more is always better. Small samples make your results unstable and harder to replicate. The exact number you need also depends on how strong your factor loadings turn out to be, which we’ll cover later.
Choose an Extraction Method
Extraction is the step where the software identifies the underlying factors in your data. The three most common methods are Principal Component Analysis (PCA), Principal Axis Factoring (PAF), and Maximum Likelihood (ML). They differ in what they assume about error and what kind of factors they produce.
PCA assumes all error in your data is random. It extracts “real” factors that are optimized for your specific dataset. Technically, these are called components rather than factors, because they’re defined entirely by the data at hand rather than estimated as hypothetical constructs. PCA places a value of 1 on the diagonal of the correlation matrix, meaning it analyzes all variance in each variable, including variance unique to that variable.
PAF, by contrast, assumes there’s both random and systematic error in your scores. It places estimated shared variance on the diagonal instead of 1, so it only analyzes the variance your variables have in common. The factors it produces are hypothetical, estimated from the data but not completely defined by it. This makes PAF a better fit when you believe your variables are imperfect indicators of some broader latent trait.
Maximum Likelihood takes yet another approach. It adjusts the correlation matrix after each round of estimation, giving more weight to variables that have less unique (unshared) variance. It also tests each factor for statistical significance before extracting it, which means nonsignificant factors aren’t extracted at all. ML is the method of choice when you want to generalize from your sample to a broader population, because it uses your sample’s correlation matrix to predict the population matrix.
For most exploratory work in the social and health sciences, PAF is the most commonly recommended extraction method. PCA is appropriate when your goal is simply to reduce a large set of variables into a smaller set of composites without making claims about latent constructs.
Decide How Many Factors to Keep
This is one of the most consequential decisions in the entire process. Retaining too few factors buries important information; retaining too many produces a complex, hard-to-interpret solution. Three main approaches exist, and they don’t always agree.
The Eigenvalue-Greater-Than-1 Rule
Each factor has an eigenvalue representing how much total variance it explains. The classic Kaiser criterion says you keep every factor with an eigenvalue above 1. The logic is that a factor should explain at least as much variance as a single original variable. This rule is simple and built into most software defaults, but it has a well-known limitation: it doesn’t account for sampling variability, so it frequently overestimates the number of factors, especially with large numbers of variables.
The Scree Plot
A scree plot graphs each factor’s eigenvalue in descending order. You look for the “elbow” where the curve flattens out and retain only the factors before that point. The problem is that the elbow can be ambiguous. Two researchers looking at the same plot may disagree on where the curve bends, making this method relatively inaccurate in practice.
Parallel Analysis
Parallel analysis is now considered the gold standard. It works by generating random datasets with the same number of variables and observations as yours but with no underlying factor structure. The software then compares your real eigenvalues to the 95th percentile of eigenvalues from these random datasets. You keep a factor only if its observed eigenvalue exceeds what you’d expect from pure chance. Simulation studies consistently show that parallel analysis identifies the correct number of factors more accurately than either the Kaiser rule or scree plots.
Current best practice recommendations emphasize using parallel analysis as your primary method, potentially supplemented by fit indices. Relying solely on eigenvalues greater than 1 is outdated.
Rotate for Interpretability
After extraction, factors are often difficult to interpret because variables load onto multiple factors at similar levels. Rotation repositions the factors in mathematical space to produce a cleaner, more interpretable pattern. It doesn’t change the total amount of variance explained; it just redistributes it across factors.
You have two families of rotation to choose from. Orthogonal rotations (the most popular being Varimax) force factors to remain uncorrelated with each other. This produces a simpler structure but assumes your underlying constructs are completely independent. Oblique rotations (Promax and Direct Oblimin are the most common) allow factors to correlate. If your factors do turn out to be uncorrelated, an oblique rotation will produce results nearly identical to an orthogonal one, so oblique rotations are the safer default.
A practical approach: run an oblique rotation first and check the correlations between factors. If they’re all below about 0.32, the factors are essentially independent and an orthogonal rotation would be equally appropriate. If any factor correlations exceed that threshold, stick with the oblique solution.
Interpret the Factor Loadings
Factor loadings are the correlations between each original variable and each factor. They range from -1 to 1, and their magnitude tells you how strongly a variable belongs to a given factor. The question is: how large does a loading need to be before you treat it as meaningful?
The answer depends partly on your sample size. Hair and colleagues published a widely used table showing that a loading of 0.30 requires a sample of about 350 to be considered significant, while a loading of 0.50 only needs about 120 participants, and a loading of 0.70 is significant with just 60. As a general rule, Stevens suggests a cutoff of 0.40 regardless of sample size for interpretive purposes. Comrey and Lee offered a qualitative scale: 0.32 is poor, 0.45 is fair, 0.55 is good, 0.63 is very good, and 0.71 is excellent.
A factor is typically considered reliable if it has at least four variables loading at 0.6 or above, regardless of sample size. When a variable loads strongly on two or more factors (called cross-loading), it usually gets removed from the analysis because it doesn’t clearly belong to one construct. A common threshold for identifying cross-loading is when the difference between the two highest loadings is less than 0.15 to 0.20.
The total variance explained by your retained factors should fall between 50% and 90%. Below 50%, your factors aren’t capturing enough of what’s going on in the data. Above 90% is unusual and may suggest redundancy among your variables.
Name Your Factors
Once you’ve identified which variables load on which factor, you assign each factor a descriptive label based on the content of its highest-loading variables. This is the most subjective step. Look at the three to five strongest-loading variables on each factor and ask what they have in common conceptually. The name should be broad enough to cover all the variables but specific enough to distinguish that factor from the others.
If you can’t find a coherent theme among a factor’s top-loading variables, that’s a signal something may be off. You might need to revisit how many factors you retained or remove problematic variables and rerun the analysis.
Running the Analysis in Software
In SPSS, the factor analysis menu lives under Analyze > Dimension Reduction > Factor. You select your variables, choose an extraction method, set your rotation, and request the KMO and Bartlett’s test under the Descriptives submenu. SPSS doesn’t have built-in parallel analysis, so you’ll need a macro or external tool for that step.
In R, the psych package is the standard toolkit. The fa() function handles extraction and rotation in one call, and the fa.parallel() function runs parallel analysis. You can specify the number of factors, extraction method, and rotation type as arguments.
In Python, the factor_analyzer library covers the full workflow. Use calculate_bartlett_sphericity() and calculate_kmo() to check data suitability. The FactorAnalyzer() function fits the model: set n_factors to your chosen number and rotation='promax' (or whichever rotation you prefer). After fitting, call get_factor_loadings() for the loading matrix, get_uniqueness() for the variance unique to each variable, and get_factor_variance() for the proportion of variance each factor explains.
Reporting Your Results
When writing up a factor analysis, include the extraction method, rotation type, total variance explained, and the factor loading matrix. For oblique rotations, report the pattern matrix (which shows the unique contribution of each factor to each variable) rather than the structure matrix. Flag all loadings above your chosen cutoff in bold. Note any items that were removed due to cross-loading or low communality. Include the KMO value and Bartlett’s test result to show your data was appropriate for the analysis. APA style recommends noting the sample size, extraction method, and rotation type in a table note, along with an indication of which items were reverse-scored if applicable.

