On this page

Exploratory factor analysis & principal component analysis

The Factor analysis module finds the latent structure in a set of variables. It offers principal component analysis (PCA) and nine exploratory factor analysis (EFA) extraction methods, with orthogonal and oblique rotations, in three steps: choose the settings, decide how many factors or components to keep, then run the full extraction with loadings, diagnostics and optional factor scores. Once the structure is clear – one dimension or several – the items can go on to IRT analysis for item-level modelling, including multidimensional IRT.

PCA vs. EFA – which do I need? Components summarise the variables; factors explain why they correlate – see principal component analysis and exploratory factor analysis. Reducing many measurements to a few scores wants PCA; developing a scale or testing a theoretical structure wants EFA.

  1. Select your variables (at least 3 numeric)
  2. Pick a correlation type, extraction method, and rotation
  3. Set the factor range and toggle parallel analysis / scree plot options
  4. Click Analyze & determine factors to check data suitability and compare solutions
  5. Set the number of factors, toggle output options
  6. Click Run full analysis for loadings, diagnostics, and scores

Requirements

At least 3 numeric variables must be selected. Categorical variables are excluded automatically; any that you selected are listed as Excluded (non-numerical) in the results, so you can see exactly what was dropped.

There is also a ceiling on how many factors you can ask for, and it differs by method. For PCA it is the number of variables – you can extract as many components as you have variables. For EFA it is the Ledermann bound, which is noticeably tighter – 6 variables allow at most 3 factors, 10 allow 6, 20 allow 14. The three factor-count fields carry that ceiling as their own upper limit, so the spinners stop there and a value left over from a wider selection is clamped when you change variables or extraction method. Asking for more anyway – by typing it – is rejected by Step 2 and Step 3 with a message naming the computed maximum for your variable count: past the bound the model is not identified, and the app refuses the request rather than returning one of the infinitely many solutions R would.

Step 1: Method & settings

Three dropdowns on the Step 1 card decide what the analysis is fitted to and how: the correlation type, the extraction method and the rotation. They carry through Step 2, Step 3 and the extraction method comparison, and every results card says which matrix, extraction and rotation built it.

Correlation type

A factor analysis is fitted to the correlation matrix of the selected variables, not to the variables themselves, so the type chosen here decides what every later card describes.

  • Correlation type – which correlations the matrix holds: Pearson’s, Spearman’s, or the latent-normal estimators for ordinal items. Every card computed from the matrix names the estimator that built it.
  • Pearson – the default: product-moment correlations, for continuous and roughly normally distributed variables – the matrix the concept page fits its worked solution to.
  • Spearman – rank correlations, for continuous variables whose relationships are monotone rather than linear, or that carry outliers – see Spearman’s ρ.
  • Mixed (polychoric/polyserial) – latent correlations for ordinal items (Likert scales) or a mix of ordinal and continuous variables: each pair is estimated by the method its two measurement levels call for – polychoric between two ordinal items, tetrachoric when both have two categories, polyserial between an ordinal item and a continuous one, biserial for a two-category item against a continuous one – see the latent-normal family. “Ordinal” is the type set in the data view, never inferred from the values, so a binary item left typed as continuous is correlated with plain Pearson. An ordinal variable with more than 8 distinct values is treated as continuous for its pairs and an alert names it; when no selected variable reaches an ordinal estimator at all, the run falls back to Pearson correlations and an alert says so. Both alerts appear on every card computed from the matrix – the suitability card, Step 3 and the extraction method comparison. Codes need not be consecutive integers – 0/0.5 or 1/1.5/2 are ranked onto 1…k before the estimator sees them.

Why polychoric? Pearson correlations between 1–5 items are attenuated by the coarse scale; a polychoric correlation estimates the correlation between the continua behind the answers – see polychoric correlation. For questionnaire items, Mixed is usually the most appropriate choice.

Extraction method

  • Extraction method – how the loadings are found. PCA compresses the variables into components; every other method fits the common factor model and differs in the discrepancy between the observed and the reproduced correlations that it minimises – see extraction method. The choice matters on marginal data and hardly at all on clean structure, and the extraction method comparison shows what it does to yours. Three methods – maximum likelihood, alpha factoring and minimum rank – refuse a matrix that is not positive definite; the rest run on a smoothed one and say so on every card.
  • Principal components (PCA) – the default. Not factor analysis: it extracts components that maximise the total variance, with no communalities to estimate and no model fit statistics – see principal component analysis. Under PCA the bifactor-family rotations (Bifactor and Biquartimin) and the Schmid-Leiman transformation are disabled; oblique rotations stay available, with a component correlation matrix and a structure matrix reported as for EFA, and so does the extraction method comparison, which sets your component solution against the common-factor extractions.
  • Maximum likelihood – assumes multivariate normality and yields the χ² test and the fit indices on the same footing as a CFA’s – see maximum likelihood. Choose it when the variables are roughly normal and you want formal fit tests; it can fail to converge on a small sample or a poorly conditioned matrix, and it refuses a non-positive-definite one outright – switch to minimum residual or principal axis factoring then.
  • Principal axis factoring – eigen-decomposes the reduced correlation matrix and iterates the communalities until they settle; no distributional assumptions – see principal axis factoring. A solid default for EFA, and the traditional choice for ordinal items and small samples.
  • Minimum residual – minimises the squared off-diagonal residual correlations directly; no distributional assumptions, and it converges where maximum likelihood may not – see minimum residual. Robust and widely recommended – the choice when in doubt.
  • Unweighted least squares – the same squared residuals summed over the whole matrix, diagonal included; numerically near-identical to minimum residual, so selecting both in the comparison adds no independent check – see unweighted least squares.
  • Weighted least squares – each squared residual weighted by the product of its two items’ uniquenesses, so the residuals among poorly predicted items count for more – see weighted least squares. The one least-squares method a severely non-positive-definite matrix can still defeat after smoothing.
  • Generalized least squares – the residuals weighted by the whole inverse of the correlation matrix; the least-squares criterion closest to maximum likelihood’s, and more tolerant of non-normality – see generalized least squares.
  • Minimum sample size weighted χ² – psych’s MINCHI: the least-squares criterion with each residual weighted by the number of cases behind its correlation – see minimum sample size weighted χ². The module fits complete cases, so every pair carries the same count and the method reduces to the least-squares fit.
  • Minimum rank – chooses the communalities so that the common variance the retained factors leave unexplained is as small as it can be, and the explained share a true proportion – see minimum rank. It needs Rcsdp, which the app carries, and it refuses a non-positive-definite matrix.
  • Alpha factoring – extracts the factors that generalise best to the items not asked – the ones with the highest α – by rescaling each item by its communality – see alpha factoring. Worth reaching for when the items differ widely in how much they share; it refuses a non-positive-definite matrix.

Which extraction method? Minimum residual or principal axis factoring when in doubt – they assume nothing about the distribution and handle typical data well; maximum likelihood when the variables are roughly normal and you want a formal fit test – see extraction method.

Rotation method

Rotation turns the factor axes so that the loadings are easier to read, without changing the communalities or the fit – see rotation. Each option is a different rotation criterion: on clean structure they agree, and on data whose items load in more than one way the criterion decides which pattern you see.

  • Rotation method – the criterion the loadings are rotated to: orthogonal, keeping the factors uncorrelated, or oblique, letting them correlate. Every rotation but Bifactor and Biquartimin is available under PCA too; a single factor is never rotated, whatever is chosen here.
  • None (unrotated) – the raw extraction: as much variance as possible on the first factor, so every item loads on it and the second factor is a contrast – see rotation.

Orthogonal – the factors stay uncorrelated, so the loadings are plain correlations and the results easy to describe, at the price of cross-loadings wherever the constructs are in fact related – see orthogonal rotation.

  • Varimax – the default: maximises the spread of the squared loadings within each factor, so each factor has a few large loadings and many small ones – see varimax. The most common choice, and the one rotation for which Kaiser normalization is ticked by default.
  • Quartimax – simplifies each variable’s row instead, and so tends to pull the loadings onto one general factor – see quartimax.
  • Equamax – the compromise between varimax and quartimax; the same as varimax at two factors, separating from it as the count grows – see equamax.
  • Varimin – varimax reversed: spreads every item across every factor, for a theory that says the items share a general factor a simple-structure rotation would hide – see varimin.
  • Geomin T – the orthogonal geomin: asks only that every item have at least one near-zero loading, so it is the rotation least likely to hide a real cross-loading – see geomin.
  • Bentler’s invariant T – the orthogonal form of Bentler’s invariant pattern simplicity criterion; in practice close to varimax – see Bentler’s invariant.
  • Bifactor – a general factor plus specific group factors in one rotation – see bifactor model. If you expect 3 content dimensions, set the number of factors to 4 (one general + three specific). EFA only, and at least 3 factors – a general factor plus 2 or more group factors, as for Biquartimin – so with fewer the analysis stops with an error, in the extraction method comparison too. The Schmid-Leiman transformation reaches the same structure from an oblique solution.

Oblique – the factors are allowed to correlate and the correlation is reported; the loadings are then read from the pattern matrix – see oblique rotation.

  • Oblimin – the standard oblique rotation and the usual choice: the same simplicity as varimax with the factors free to correlate – see oblimin. The app runs it at γ = 0, which is quartimin, so Quartimin returns the same solution.
  • Promax – a fast approximation: the varimax loadings raised to a power and rotated obliquely towards the result; it lets the factors correlate a little more than oblimin – see promax.
  • Quartimin – the oblique counterpart of quartimax and the member of the oblimin family at γ = 0 – the same solution as Oblimin here – see quartimin.
  • Simplimax – goes straight for a chosen number of near-zero loadings, by default as many as there are items – see simplimax.
  • Cluster – rotates towards a target in which every item sits on the one factor it loads on most; the most literal simple structure – see cluster.
  • Geomin Q – the oblique geomin – see geomin.
  • Bentler’s invariant Q – the oblique Bentler’s invariant, in practice close to oblimin – see Bentler’s invariant.
  • Biquartimin (oblique bifactor) – the oblique counterpart of Bifactor: a general factor plus correlated group factors – see bifactor model. The dropdown qualifies the name because the criterion run under it is the Jennrich–Bentler oblique bifactor one rather than Carroll’s original biquartimin. Same requirements as Bifactor – at least 3 factors, EFA only – and it takes no Schmid-Leiman transformation, since it already imposes a general factor.

Orthogonal vs. oblique? Constructs are rarely independent – anxiety and depression correlate – so an oblique rotation is the realistic default: if the factors turn out uncorrelated it shows near-zero factor correlations and looks like varimax anyway – see oblique rotation. When in doubt, start with Oblimin.

Step 2: Determine number of factors

Before the full analysis, this step checks whether the selected variables can be factored at all and compares the candidate factor counts, so that the number you set in Step 3 is a decision rather than a guess. Its Model selection card holds the suitability checks, the optional per-variable MSA, the scree plot with the retention rules’ recommendations and the model comparison table; every count it reports respects the ceiling for your method.

Configuration

  • Factor/component range to test – the counts the model comparison table fits and lists, one row each. The retention rules under the scree plot are evaluated over every count the model can identify, so a recommendation can fall outside this range.
  • Minimum – the smallest count to fit (default 1).
  • Maximum – the largest count to fit (default 6). The field’s own upper limit is the ceiling for your method and variable count – the number of variables under PCA, the Ledermann bound under EFA – and a typed value above it is rejected with a message naming the maximum.
  • Run parallel analysis – on by default; draws random datasets of your sample’s size and compares their eigenvalues with yours, under two nulls – see parallel analysis. The number of draws is Parallel analysis draws below; the two counts it yields are listed under the scree plot and its four curves drawn on it.
  • Parallel analysis draws – shown while parallel analysis is on: the number of random datasets drawn. Range: 20–1,000. Default: 100. The recommendation keeps a factor only if its eigenvalue beats the 95th percentile of these draws, which is why the floor is 20 rather than something smaller – with fewer draws that “95th percentile” is effectively the largest draw, a far more conservative and far noisier bar. Lowering it is mainly worth it for the Mixed (polychoric/polyserial) correlation type, where each draw costs roughly two seconds; Pearson and Spearman draws are fast enough that the default rarely gets in the way.
  • Show scree plot – on by default; draws the chart. The recommendations beneath it are listed either way, so unticking this hides the picture, not the counts.
  • Show per-variable MSA – off by default; adds the per-variable sampling adequacy table and the list of the strongest anti-image partial correlations.

Click Analyze & determine factors to run.

Data suitability tests

Data suitability tests. A table of five checks on the correlation matrix, each with its value and – when the interpretation setting is on – a verdict; with it off, the rows report the numbers alone. Above it the card names the variables, any excluded as non-numerical, the sample size with the rows listwise deletion cost (20 of 120 rows were dropped (listwise) for missing values) and the correlation type the matrix was built with – the two facts every number below depends on, so an exported card can be read on its own.

  • Kaiser-Meyer-Olkin (KMO) measure – overall sampling adequacy, 0 to 1, graded on the Kaiser–Rice scale: Marvelous from 0.90, Meritorious from 0.80, Middling from 0.70, Mediocre from 0.60, Miserable from 0.50, Unacceptable below – see KMO. Below 0.50 an alert says the data are not suited to factor analysis, whether or not interpretation is on. On a singular matrix the verdict is replaced by Unreliable (singular matrix) and the value is not to be trusted.
  • Bartlett’s test of sphericity – χ² and its p-value for the null that the variables are uncorrelated – see Bartlett’s test. A p above the assumption test significance level raises an alert: there is nothing to factor. The verdict is withheld as Unreliable (singular matrix) on a singular, non-positive-definite or rank-deficient matrix, and a legend line qualifies the p-value on a Spearman, polychoric or mixed matrix, where it is approximate at best.
  • Correlation matrix determinant – how far the matrix is from singular, 1 for uncorrelated variables and 0 for a singular matrix – see determinant. The value and Field’s 0.00001 bar are always reported; the Multicollinearity detected verdict and its alert need one of the checks that do not depend on the number of variables to agree – a rank shortfall, a pair correlating above |r| = 0.9, or a variable with a squared multiple correlation above 0.99 – and the row reads Acceptable otherwise. A separate alert names every pair above |r| = 0.9, and Step 3 repeats that check.
  • Smallest eigenvalue – the lowest eigenvalue of the correlation matrix, read as Matrix is positive definite or Matrix is not positive definite – see positive definite. The bar is a small numerical tolerance rather than zero, the same one Step 3’s pre-flight and the model comparison table apply, so the three never disagree. A matrix that fails is smoothed for every extraction that can use the result and refused by maximum likelihood, alpha factoring and minimum rank; an alert beneath the table says so. A Mixed (polychoric/polyserial) matrix is repaired while it is built and passes this row afterwards, so that repair is reported by an alert of its own, repeated above every card computed from the matrix.
  • Cases-to-variables ratio – complete cases per variable, read as Adequate, Below the recommended 5:1 or Sample too small (fewer than 50 cases, which takes precedence) – see cases-to-variables ratio. An alert beneath the table repeats either failing verdict, so you learn the sample is thin here rather than after Step 3.

Beneath the table, alerts name what the rows cannot: Redundant variables detected when the matrix’s rank falls short of the number of variables, each redundant variable listed with the variables it is reproduced from (Total ← Item A, Item B, Item C) – the alert to act on first, since a singular matrix makes KMO, Bartlett’s test and the anti-image partials unreliable, and a matrix that is merely ill-conditioned already stops the extractions that cannot smooth; a perfectly correlated pair, named; a non-positive-definite matrix; a variable whose squared multiple correlation with the others exceeds 0.99, which all but guarantees a Heywood case in Step 3; the Mixed estimator’s fallback and demotion alerts from Step 1; and the KMO, Bartlett and sample-size failures. The alerts appear whether or not interpretation is on, and for KMO and Bartlett’s test they are the only place the failure is spelled out when it is off. Drop one variable from each named group or pair – usually the total, keeping its parts – and re-run.

What do these tests tell me? KMO asks whether the variables share enough variance for common factors to exist; Bartlett’s test asks the bare minimum, whether they correlate at all – see Can the items be factored?. A KMO below 0.50 or a non-significant Bartlett test means a factor analysis of these variables is not worth running.

Per-variable MSA (optional)

Per-variable measure of sampling adequacy (MSA). A table with one row per variable, sorted lowest first, showing each variable’s own sampling adequacy – the diagonal of the anti-image correlation matrix, graded on the KMO scale. Rows below 0.50 are shaded red, below 0.60 yellow, and a legend line restates the two bands. A variable below 0.50 shares too little with the others to belong to any factor – consider dropping it. Both tables here ride the Show per-variable MSA checkbox, and both are withheld when the correlation matrix cannot be inverted, since neither can be computed from it.

  • Variable – the variable the row describes.
  • MSA – the variable’s measure of sampling adequacy, 0 to 1, higher is better – see KMO, whose per-variable form it is.
  • Interpretation – the KMO grade of the row’s MSA, from Marvelous to Unacceptable, shown when the interpretation setting is on.

Strongest anti-image partial correlations. The ten variable pairs with the largest anti-image partial correlations, worst first, graded by absolute value against your Correlation strength bands – yellow from Moderate (default 0.5), red from Strong (default 0.7) – with a note giving the total number of pairs when the list is cut. The full p × p matrix is in Step 3; this list is here so you can act before choosing a count.

  • Variable pair – the two variables the partial correlation is between.
  • Anti-image partial – the correlation left between them once every other selected variable is partialled out. Near zero is what a factorable set looks like; a large one marks two variables sharing something no common factor accounts for, and it is the pair dragging both their MSAs down – near-duplicate items, or a pair with a method effect the rest of the set lacks. Dropping or merging one of the pair usually lifts both MSAs.

Scree plot

Scree plot. An interactive chart of the eigenvalues by position, largest first, with every retention rule’s reference drawn on it – see scree plot. Under EFA the curve is the reduced correlation matrix’s series – the one the extraction works on, negative tail included – with the correlation matrix’s own series behind it in grey; under PCA there is one series – see two eigenvalue series. The chart is resizable and exports as SVG, PNG or JPG (see resizing and exporting charts).

The plot draws:

  • Actual eigenvalues – the blue line, with hoverable points
  • Correlation matrix – EFA only; the grey line: the eigenvalues of the unreduced correlation matrix, the series the Kaiser and empirical Kaiser criteria read. Not drawn under PCA, where the two series are one
  • Elbow – an enlarged dot on the blue curve at the point the elbow rule marks; the factor it sits on is the elbow method’s count
  • Kaiser criterion – the red dashed line at eigenvalue 1, the bar of the Kaiser criterion below
  • Empirical Kaiser – the brown dashed line: the empirical Kaiser criterion’s reference value at each position, above Kaiser’s 1 at the first and settling onto it further along
  • Hull method – EFA only; a pink dashed vertical rule at the count the Hull method retains – a count, not a level, which is why it runs the other way. Drawn only when the count is above one and inside the displayed range; the recommendation names it either way
  • Simulated data (95th pct) – the purple dashed line, when parallel analysis ran: the 95th percentile of the eigenvalues of multivariate-normal random data
  • Resampled data (95th pct) – the green dashed line: the same percentile from datasets built by shuffling each of your own columns, which keeps every variable’s distribution
  • Simulated data (mean) and Resampled data (mean) – the same two nulls at their average eigenvalue, drawn faded. The counts are read off the 95th-percentile curves; a percentile sits above its mean, so the crossover on a mean curve suggests more factors than the recommendation says

Below the chart, a recommendations box lists what each retention rule keeps – up to nine counts under EFA, eight under PCA, which has no Hull count. It is drawn whether or not Show scree plot is ticked: the counts are the decision, the chart the illustration. The rules need not agree – see How many factors for why a small factor splits them.

  • Kaiser criterion – the number of eigenvalues above 1, counted on the correlation matrix’s series and labelled (correlation matrix) under EFA – see Kaiser criterion. Counted on the values as printed, so it never contradicts the table’s rounded column. Tends to over-extract
  • Empirical Kaiser criterion – the same series against a reference value per position instead of a flat 1, kept up to the first position that fails (Braeken & van Assen, 2017) – see empirical Kaiser criterion. The count to prefer over the plain Kaiser one wherever they differ
  • Hull method – EFA only; the count at the elbow of the fit-against-degrees-of-freedom frontier over every solution the model can identify (Lorenzo-Seva, Timmerman & Kiers, 2011) – see Hull method. Read from fitted solutions rather than eigenvalues, not run under PCA, and omitted when the frontier has no turning point
  • Elbow method – the point on the blue curve furthest from the straight line from its first eigenvalue to its last – see elbow; the same rule as the cluster module’s elbow plot. Omitted when the curve bends too little to mark; on clean structure it lands one above parallel analysis, so read it as a check on the others rather than a verdict
  • Parallel analysis (simulated data) – the factors whose eigenvalues beat the 95th percentile of multivariate-normal random data, drawn as many times as Parallel analysis draws says – see parallel analysis. The recommended starting point
  • Parallel analysis (resampled data) – the same rule against the null built by shuffling your own columns – see resampled parallel analysis. The two nulls coincide on symmetric items and part on skewed or coarse ones, where this is the count to prefer
  • Velicer’s MAP – the count at the minimum of the average squared partial correlation, evaluated from one factor up to the ceiling for your method whatever range you set, so it can point below your Minimum or above your Maximum – see Velicer’s MAP. The usual second opinion on parallel analysis; it leans towards too few where Kaiser leans towards too many
  • VSS₁ and VSS₂ – the counts that maximize the very simple structure criterion at complexity 1 and 2, over the same untruncated series the model comparison table bolds, so the recommendation and the bold cell always agree – see very simple structure. VSS₂ skips the one-factor position, where the criterion is undefined

When some parallel-analysis draws fail – routine on the polychoric or mixed path, where a resampled matrix can be impossible to estimate – a note beneath the box reports how many of the requested draws produced eigenvalues, since the percentiles are computed from the survivors.

Which recommendation should I follow? Start from parallel analysis, read its two nulls together, and take Velicer’s MAP as the second opinion; a three-way agreement of parallel analysis, MAP and Hull is strong evidence, and the elbow is a check rather than a vote – see How many factors. When the rules disagree, fit the candidate counts in Step 3 and keep the one whose factors you can read.

Model comparison table

Model comparison table. One row per count in the range you set, each a whole solution fitted without rotation: its eigenvalue, its share of the variance and – under EFA – its fit indices, then the simple-structure diagnostics under both methods – see model comparison. Values that meet the good-fit cutoffs are bold, rows whose correlation-matrix eigenvalue exceeds 1 are shaded blue, and a legend beneath the table restates each rule in force. Read it for the row where the indices settle – the leap in fit at the true count, and nothing to gain past it.

  • N – the number of factors or components in that row, and a control: click it to carry the count into Step 3 – the Number of factors/components field is filled, the options that depend on it refreshed, and a toast confirms it. A dagger (†) beside the count marks a solution that hit the iteration limit before converging: its indices are shown but rest on an unsettled model, so re-run before choosing it; hover the dagger, or read the legend line, for the note. Rows marked Fitting failed or Not fitted carry nothing over and keep a plain cell
  • Fitting failed – the solution was attempted and could not be fitted; it stays in the table rather than being dropped. Hover the label for R’s own message, which usually tells an over-parameterized model from a rotation that does not work at that count
  • Not fitted – the solution was not attempted: maximum likelihood, alpha factoring and minimum rank refuse a non-positive-definite matrix, so on one every row reads so and a warning above the table says why. The eigenvalue columns and the scree plot need no fit and stand; fix the matrix – the suitability card names what to remove – or switch to minimum residual or principal axis factoring, which smooth it and fit
  • Eigenvalue – the eigenvalue at that position – under EFA of the reduced correlation matrix, which is what the extraction sees and what the blue curve draws; under PCA of the correlation matrix – see eigenvalue
  • λ (correlation matrix) – EFA only; the same position in the unreduced correlation matrix’s series: the number the Kaiser rule and the blue row highlight read – see two eigenvalue series
  • Last factor % – the share of the total variance the N-th factor alone explains; the column is Last component % under PCA. Each row is a whole solution, so this is the last factor’s own contribution, not the solution’s total – the next column carries that
  • Cumulative % – the solution’s total: the share of the variables’ variance it accounts for, which is also its mean communality. Bold from 70% up. Under PCA it climbs to 100% as components are added; under EFA it plateaus at the common-variance ceiling, and a value below 40 says the factors are not explaining much of the individual variables

Under EFA the fit columns follow; the graded ones read your model fit cutoffs:

  • df – the degrees of freedom the model leaves. At 0 or below the row’s indices cannot be graded: nothing is bold, the Interpretation cell reads Not interpretable (df ≤ 0) and a legend line says why – such a model reproduces the correlation matrix by construction, so a perfect CFI or a zero SRMR there says nothing – see saturated model. The Ledermann bound is exactly the count at which df reaches 0
  • χ²(df), p – the exact-fit test for that row’s model – whether it reproduces the correlation matrix within sampling error – see chi-square test of model fit. Reads N/A at df ≤ 0
  • RMSEA – the misfit per degree of freedom, lower is better, bold at or below the acceptable cutoff (default 0.08) – see RMSEA
  • CFI – the improvement over the baseline model of uncorrelated variables, bold from the acceptable cutoff up (default 0.90) – see CFI
  • TLI – CFI with a penalty for free parameters, same cutoff – see TLI
  • BIC – the Bayesian information criterion from the likelihood’s χ², bold at its minimum – see BIC
  • EBIC – the same trade-off built from the residual correlations the solution leaves rather than from the likelihood, bold at its own minimum, which need not be BIC’s row – see EBIC
  • SABIC – the sample-size adjusted BIC
  • ESABIC – EBIC with the same sample-size adjustment
  • SRMR – the average residual correlation, standardized the conventional way so the cutoff applies, bold at or below it (default 0.08) – see SRMR
  • RMS residual (psych) – psych’s own root-mean-square residual: the same residuals with a different divisor, so it reads a little higher than SRMR. An extra diagnostic, not graded
  • RMS residual, df-corrected – the same summary divided by the degrees of freedom instead of by the number of residuals. Not graded

Under both methods:

  • Complexity – the mean of Hoffman’s complexity across variables: 1.0 when every variable loads on exactly one factor, bold at 1.2 or below. Graded on a varimax-rotated copy of the row’s unrotated solution, so it measures what Step 3’s solution quality measures; Step 3 grades the rotation you chose, so its number can differ under an oblique one
  • Unassigned variables – how many variables have no salient loading – none reaching 0.3 in absolute value – on the same varimax copy; bold at 0. The 0.3 is the conventional salience bar and stays fixed: it does not follow the loadings display threshold
  • VSS₁ – the very simple structure criterion with one loading kept per variable, bold at its maximum over every count the model can identify – the same untruncated series the scree plot recommendation reads, so the two always agree
  • VSS₂ – the same with two loadings kept per variable, bold the same way. A row with fewer factors than the column’s complexity reads -: the criterion is undefined there, and a 0 in a higher-is-better column would read as a terrible fit rather than an absent one
  • MAP – Velicer’s minimum average partial, bold at its minimum over every count from one up – so a column with no bold cell means the optimum lies outside your range, and the recommendation names where
  • Interpretation – the row’s verdict, shown when interpretation is on. Under EFA it is the worst band any of RMSEA, CFI, TLI and SRMR reaches in that row, so one poor index is enough to pull Excellent fit down, and it reads Not interpretable (df ≤ 0) where the row cannot be graded; under PCA it grades Cumulative % – Excellent variance coverage from 80%, Good from 70%, Adequate from 60%, Low below

Legend lines beneath the table restate the rules the table needed, and two more appear on demand. psych’s VSS routine cannot run under every extraction – Alpha factoring always fails it – so the VSS₁, VSS₂ and MAP columns are then computed with minimum residual instead and a line names the substitute: MAP does not depend on the extraction, but the two VSS columns describe the substitute’s solution, so read them as indicative; if the substitute fails too, or under PCA, which gets no retry, the three columns are blank throughout and the line says so. Under any extraction other than maximum likelihood a line qualifies the χ²-derived columns – χ², RMSEA, CFI, TLI, BIC and SABIC come from the maximum-likelihood discrepancy whichever method produced the loadings, so under the others they are approximations that overstate the misfit and the grades in Interpretation correspondingly conservative; the same note appears under the Step 3 fit indices and in the extraction comparison.

If the correlation matrix was smoothed – at estimation, for Mixed correlations, or before these fits (see Data suitability tests) – a warning above the table says so, and every fit index in it describes the smoothed matrix.

Reading fit indices. No single index tells the story: look for convergence – RMSEA, CFI, TLI and SRMR pointing at the same count – and read the information criteria across rows, lower winning – see fit index. When BIC’s and EBIC’s minima land on different rows the data are genuinely ambiguous between the two counts – see EBIC – and parallel analysis and interpretability settle it.

Step 3: Run full analysis

Once the count is settled – typed into Number of factors/components, or carried over by clicking a row’s N in the model comparison table – click Run full analysis. The results card is titled with the extraction and the rotation that ran and opens with the variables, any excluded as non-numerical, the sample size, the factor count and – whenever a rotation ran – whether Kaiser normalization was applied to it, so two cards with the same title cannot be different solutions and an exported card carries its settings with it. Its sections follow in the order below; those an output option governs appear only while the option is on.

Analysis configuration

  • Number of factors/components – default 3; at least 1 and at most the ceiling for your method – the number of variables under PCA, the Ledermann bound under EFA. A single factor is never rotated, whatever the dropdown says: the card is titled No rotation, no factor correlation or structure matrix exists, and Kaiser normalization and Factor/component correlations switch themselves off while the count is 1 rather than being accepted and ignored – see rotation. The dropdown keeps its value, ready for when you raise the count.
  • Compare extraction methods – opens the extraction method comparison, which fits the count above under several common-factor extractions side by side – under PCA with your component solution as the congruence anchor they are compared against.
  • Kaiser normalization – scales every variable’s loadings to unit length before the rotation and restores them after, so a variable with a low communality has an equal say in where the axes land – see Kaiser normalization. Works with every rotation, PCA included; greyed out under None (unrotated) and at a single factor. Its default follows the rotation – on under Varimax, off under every other – and picking a rotation resets it, so set it after the rotation rather than before. It moves the rotated loadings and the factor correlations – a little, on clean structure – and never the communalities, the variance explained or a fit index.

Output options

Each checkbox adds a section to the results card. The default set is the loadings, the communalities and the variance explained, plus the factor correlations whenever the rotation is oblique.

  • Loadings matrix – on by default: the core output, one row per variable and one column per factor – see Loadings matrix.
  • Bootstrap confidence intervals for loadings – off by default; the sub-option under the loadings matrix that prints a bias-corrected bootstrap interval beneath every loading, at the cost of re-fitting the whole solution on every replication – see Confidence intervals for the loadings.
  • Communalities – on by default: the share of each variable’s variance the factors explain – a column of the loadings table, or a table of their own when the loadings matrix is off.
  • Variance explained – on by default: how much variance each factor accounts for, on two denominators – see Variance explained.
  • Factor/component correlations – the matrix of correlations among the factors, Φ, for PCA as well as EFA. Shown, and ticked by itself, only under an oblique rotation with at least 2 factors, since Φ is the defining output of an oblique solution; clearing it afterwards sticks – see Factor/component correlations and factor correlations.
  • Schmid-Leiman transformation – re-expresses an oblique EFA solution as a general factor plus orthogonal group factors, with the omega coefficients. Shown only under an oblique EFA rotation other than Quartimin and Biquartimin (oblique bifactor), from 2 factors up – see Schmid-Leiman transformation.
  • Schmid-Leiman factor scores – per-case scores on the general and the group factors; shown once the transformation is ticked – see Schmid-Leiman factor scores.
  • Confidence intervals for omega coefficients – a bootstrap interval for every row of the omega table – ωh, ωt, ωh/ωt, ECV, the subscale omegas and each coefficient H; shown once the transformation is ticked, and slow, since every replication re-runs it – see Omega reliability coefficients.
  • Residual correlations – the full matrix of observed minus reproduced correlations – see Residual correlation matrix. The count of large residuals sits in the fit indices whether or not this is on.
  • Anti-image correlations – the matrix of negated partial correlations, each variable’s MSA on the diagonal – see Anti-image matrices and anti-image correlation. The per-variable MSAs of Step 2 are its diagonal.
  • Anti-image covariances – the covariance form of the same matrix, each variable’s unpredicted variance on the diagonal – see Anti-image matrices and anti-image covariance.
  • Factor/component scores – a score per case on every factor, with the determinacy, the score coefficients and the correlations among the scores, computed by the Scoring method below – see Factor/component scores and factor scores.
  • Path diagram – draws the structure: factors, variables, loadings and, under an oblique rotation, the factor correlations – see Path diagram.
  • Show values on diagram – on by default once Path diagram is ticked: prints the loading, correlation and uniqueness values beside the lines; turn it off for a picture of the structure alone.
  • Scoring method – appears when factor or Schmid-Leiman scores are on: the rule that turns a solution into a score per case, each rule buying one property at the cost of another – see factor score estimation. At a single factor it is fixed to Regression and greyed out, since the four methods return identical scores there.
  • Regression – the default: the scores that correlate most with the factor, at the price of shrinkage towards the mean and score correlations that overstate the factor correlations – see regression scores.
  • Bartlett – unbiased scores, with no pull towards the mean, at the cost of a little determinacy – see Bartlett scores.
  • Anderson-Rubin – scores forced to be uncorrelated, for uncorrelated predictors downstream. Under an oblique rotation they contradict the model’s own factor correlations, and a caveat under the dropdown says so – see Anderson–Rubin scores.
  • Ten Berge – the correlation-preserving scores: their correlations equal the factor correlations, so they are the choice where the score correlations will be read as the factors’ – see Ten Berge scores.
  • Loadings display threshold – loadings below this absolute value are blanked in the loadings table (default 0.3); a typed value outside 0–1 is clamped and an empty field shows everything. The path diagram hides the same loadings, keeping each variable’s strongest group-factor loading – drawn faded and dashed when it falls below the cutoff – so no variable is left unconnected; the general factor of a bifactor or hierarchical solution is not eligible for that exception. The salience count does not follow this threshold.

Diagnostics and warnings

Diagnostics & warnings. Every check that fired, as alerts at the top of the results card – errors first, then warnings and notes – each naming the variables or values involved. The matrix checks run before the fit and are the ones Step 2 runs, so a run that fails outright still reports them beside the error, usually with the reason the extraction could not run, and lists the Excluded (non-numerical) variables as a successful run does; the model checks run after the fit. The Schmid-Leiman entries move to a diagnostics section of the hierarchical card whenever it is rendered, beside the numbers they qualify.

Errors stop the run, or mark a solution inadmissible:

  • Non-positive definite matrix – the smallest eigenvalue is negative or within a rounding error of zero, and the extraction is maximum likelihood, alpha factoring or minimum rank, which cannot run on it; any other extraction that then fails on such a matrix (weighted least squares, at severe levels) gets the same message after the fit. It names the method and the eigenvalue; the advice points at minimum residual or principal axis factoring – or, when one of those is what failed, at linear dependencies among the variables. Every other extraction runs on a smoothed matrix under the warning below.
  • Constant variable – one or more variables take the same value in every case, so no correlation can be computed for them; the message names them – remove them from the selection.
  • Too few cases for variables – with cases ≤ variables the correlation matrix is singular. Add cases or drop variables.
  • Correlation matrix not built – the matrix was never computed, usually because an R package failed to load; the R console has the underlying failure.
  • Perfect correlations – variable pairs with r = 1; remove one from each pair.
  • Bifactor rotation with fewer than 3 factors – Bifactor and Biquartimin (oblique bifactor) need a general factor plus at least 2 group factors. Extract 3 or more, or choose another rotation.
  • Bifactor rotation under PCA – the two model a general factor beside variable-specific variance, which components do not have; Step 1 greys the pair out under PCA and the analysis enforces the same rule on its own. Switch to an EFA extraction or another rotation.
  • Ultra-Heywood case – EFA only: a communality above 1.0 – the model claims more than all of a variable’s variance – see Heywood case. The card still renders so the variable can be read off; try fewer factors or another extraction.

Warnings qualify a solution that still stands:

  • Matrix smoothed – the correlation matrix was not positive definite and was smoothed before the extraction – or while a polychoric or mixed matrix was built – so every number on the card describes the smoothed matrix. It also appears beside an error when the extraction then fails anyway.
  • Heywood case – EFA only: a communality at 0.999 or above, so the model is claiming nearly all of a variable’s variance – usually too many factors or a near-duplicate variable – see Heywood case. Under the extractions psych fits by bounded optimisation – minimum residual, maximum likelihood, the three least-squares methods and minimum sample size weighted χ² – a uniqueness is held at 0.005 or above, so a communality stops at 0.995 instead; there the flag is a uniqueness at that lower bound, and the warning says so.
  • Extraction did not converge – the iterative extraction ran out of communality iterations before settling, so the communalities and everything derived from them – loadings, fit indices, scores – may be unstable. Try another extraction or fewer factors.
  • Extraction retried with SMC = FALSE – the extraction failed from its default start, the squared multiple correlations, and was retried from unit communalities; the solution shown is that retry – a valid fit from different starting conditions, not strictly comparable with the other extractions’. Only Principal axis factoring and Alpha factoring are retried, here and in the extraction comparison alike.
  • Rotation did not converge – the rotation hit its iteration cap, so the pattern matrix is the best of the attempted starts rather than the criterion’s optimum. The extraction is unaffected – communalities and fit indices still hold. Try another rotation; most likely under the bifactor family and Simplimax.
  • Collapsed factors – one or more of the extracted factors carries essentially no common variance – the solution kept a factor the data do not support. Extract fewer factors.
  • Saturated model (df = 0) – the model reproduces the correlation matrix exactly, so its fit cannot be tested; the fit indices are reported and not graded – see saturated model. Extract fewer factors for a testable model.
  • Over-parameterized model (df < 0) – more parameters than the correlation matrix determines, so the solution is not identified. Extract fewer factors.
  • High SMC – a variable whose squared multiple correlation with the others exceeds 0.99 – a Heywood case in waiting. Raised by the suitability card too, where it costs nothing to act on.
  • Very high correlations – variable pairs with |r| above 0.9, named with their r – possible multicollinearity.
  • Near-zero determinant – the determinant is below 0.00001 and a check that does not depend on the number of variables agrees – the same rule the suitability table applies. It grades the redundancy without naming anyone; when the rank check below fires too, read that one first. Consider dropping or combining the redundant variables.
  • Redundant variables – the matrix is rank-deficient: at least one variable is an exact linear combination of others, each named with the variables it is reproduced from (Total ← Item A, Item B, Item C). The one diagnosis that says which variable to drop, and the one no pairwise check can see – see matrix rank.
  • Mixed correlations degraded to Pearson – Mixed (polychoric/polyserial) was selected but no variable reached an ordinal estimator, so plain Pearson correlations were computed – see Correlation type.
  • Ordinal variables too wide for the polychoric estimator – variables typed ordinal with more than 8 distinct values were correlated as continuous; the message names them, so a partly Pearson matrix is not read as fully polychoric.
  • No clear general factor – bifactor rotations: no column loads broadly enough with a consistent sign to be the general factor, so the columns stay F1…Fn – identify it from the loadings yourself.
  • Anti-image matrices failed – the anti-image tables could not be computed and are absent; the rest of the solution stands.
  • Anti-image withheld (singular matrix) – the correlation matrix has no inverse for the partial correlations and MSAs to come from, so the tables are withheld rather than filled with a pseudo-inverse’s output – the rule Step 2 follows.
  • Factor scores failed – the scores could not be computed and their section is absent. Typical of Bartlett and Anderson-Rubin on collinear loadings – switch to Regression; when Regression itself failed the message points at the multicollinearity diagnostics instead, since it inverts the correlation matrix.
  • Scoring method downgraded – psych fell back while computing the scores, to regression weights on a repaired matrix or to a pseudo-inverse on a singular one, so the scores, coefficients and determinacy are not the method you asked for, or approximations of it; the message names which.
  • Loading CIs could not be bootstrapped – the intervals failed; the loadings stand – see Confidence intervals for the loadings.
  • Small sample size – fewer than 50 cases; factor analysis typically needs 100 or more.
  • Low observations-to-variables ratio – a note rather than a warning: fewer than 5 cases per variable, so the solution may be unstable – see cases-to-variables ratio.

On the Schmid-Leiman card, whenever the transformation ran or was skipped:

  • Schmid-Leiman with 1 factor – the transformation is skipped: omega hierarchical is not meaningful for one factor. The checkbox is hidden at 1, so this is a backstop.
  • Schmid-Leiman with 2 factors – omega constrains the two group factors’ loadings on the general factor to be equal; three are needed for full identification. The item-level g column still varies, so do not read the constraint off it.
  • Schmid-Leiman reverse-scored items – omega() re-keyed the named negatively-loading items before estimating the coefficients, the convention published omega values follow; the loadings shown keep their original direction – see Schmid-Leiman transformation.
  • Schmid-Leiman did not converge – the omega() fit ran out of iterations, so the hierarchical loadings, the omega coefficients and the variance decomposition may be unstable; the primary solution is a separate fit and may be fine.
  • Schmid-Leiman ultra-Heywood and Schmid-Leiman Heywood – a communality above, or near, 1.0 in the hierarchical solution, graded as in the primary one; the omega coefficients and the variance decomposition are then unreliable, the primary solution unaffected.
  • Kaiser normalization not applied to SLT – normalization was requested but reaches the main solution only, so the two loading matrices are scaled differently – see Schmid-Leiman transformation.
  • Schmid-Leiman normalized when the main solution wasn’t – the converse, and the one the shipped defaults fire: under Promax and Cluster the transformation always normalizes.
  • Schmid-Leiman ran a different extraction – Unweighted least squares, Alpha factoring or Minimum sample size weighted χ² was requested, which omega() cannot run, so the hierarchy was built with minimum residual; the card’s title says so.
  • Schmid-Leiman ran a different rotation – omega()'s own oblique rotation failed and it substituted Promax; the message names both and the card’s title reads the rotation that ran.
  • Schmid-Leiman factor scores failed – the hierarchical scores could not be computed while the transformation stands. Bartlett and Anderson-Rubin usually fail here – the general and group columns are near-collinear within each item block by construction – so switch to Regression.
  • Omega CIs could not be bootstrapped – the intervals for the omega coefficients failed; the point estimates stand.

What is a Heywood case? A communality at or above 1 – the model explaining more of a variable than the variable has – which means too many factors, a near-copy of another variable or too few items per factor – see Heywood case. The check is EFA’s alone: a component solution has no unique variance to squeeze to zero, and at the maximum number of components a communality of 1 is the right answer.

Model fit indices

Model fit indices. How far the solution reproduces the correlation matrix, one row per index: the exact-fit test, the four graded indices, psych’s two other residual summaries and the count of large residuals, the four information criteria, two fit shares and the objective function – see fit index for how to read them together. With the interpretation setting on, RMSEA, CFI, TLI, SRMR and the residual count carry a verdict against your model fit cutoffs, withheld as Not interpretable (df ≤ 0) when the model has no residual degrees of freedom. Under any extraction but maximum likelihood a note beneath the table says the χ²-derived rows are approximations and their grades conservative – the extraction comparison shows by how much. Under PCA the section is titled Residual fit summary and holds the residual rows alone – SRMR without a verdict, RMS residual (psych), Residuals > 0.05 and the two fit shares – with a note saying why.

  • Chi-square test – χ²(df) and its p-value for the null that the model reproduces the correlation matrix exactly – see chi-square test of model fit. A high p is the good news, and with a large sample almost every model is rejected, so read the indices below rather than this verdict. At df = 0 the statistic is shown without a p-value.
  • RMSEA – the misfit per degree of freedom, with its 90% interval in brackets whatever your Confidence level setting – see RMSEA. Graded on the point estimate: by default excellent ≤ 0.05, good ≤ 0.08, mediocre ≤ 0.10, poor above. N/A at df = 0.
  • CFI – the improvement over the baseline model of uncorrelated variables, 0 to 1 – see CFI. By default excellent ≥ 0.95, acceptable ≥ 0.90, mediocre ≥ 0.85, poor below.
  • TLI – CFI with a penalty for free parameters, so extra factors do not inflate it; it can exceed 1 when the model over-fits its df – see TLI. Same bands as CFI; N/A at df = 0.
  • SRMR – the average residual correlation, standardized the conventional way so the published cutoffs apply – see SRMR. Same bands as RMSEA; under PCA reported without a verdict.
  • RMS residual (psych) – psych’s own root-mean-square residual: the same residuals on a different divisor, so a little above SRMR. Not graded.
  • RMS residual, df-corrected – the same summary divided by the degrees of freedom instead of the number of residuals. Not graded.
  • Residuals > 0.05 – how many off-diagonal residual correlations exceed 0.05 in absolute value, as a count and a share, read Too many large residuals when more than half do (Field, 2018) and Few large residuals otherwise. The verdict is withheld at df ≤ 0 and kept under PCA, which has no degrees of freedom – the one graded row a component solution keeps.
  • BIC – the Bayesian information criterion from the likelihood’s χ²; lower is better, and only across models of the same data – see BIC.
  • EBIC – the empirical BIC, built from the residual correlations the solution leaves rather than from the likelihood – see EBIC. Its minimum across counts need not sit on BIC’s row; the model comparison table bolds each.
  • SABIC – the sample-size adjusted BIC, a lighter penalty per parameter.
  • ESABIC – EBIC with the same adjustment.
  • Fit (whole correlation matrix) – the share of the matrix’s total sum of squares the solution reproduces, psych’s fit, diagonal included – so it reads high for almost any solution and is not variance explained; Cumulative var is. Both shares are read beside the residual correlations.
  • Off-diagonal fit – the same share over the correlations alone, the demanding one of the pair and the one to read; computed the same way under PCA and EFA, so the two are comparable.
  • Objective function – the value of the discrepancy function the extraction minimised, for reference.

Why does a saturated model look perfect? At df = 0 the model has as many parameters as the matrix has information and reproduces it by construction – its perfect indices are arithmetic, not evidence – see saturated model. The verdicts are withheld there; RMSEA, TLI and the information criteria read N/A, and the Ledermann bound is exactly the count at which df reaches 0.

Chi-square is significant – is the model bad? Not on that alone: with a few hundred cases the exact-fit test rejects trivial misfit – see chi-square test of model fit. Read RMSEA, CFI, TLI and SRMR together instead.

Solution quality

Solution quality. Three summary numbers for the solution you ran – the ones the model comparison table reports for every candidate, mean communality under its Cumulative % heading – so you can see whether the count you settled on kept its promise. The table grades a varimax copy of each solution; here the numbers describe the rotation you chose, so under an oblique one they differ a little – see complexity.

  • Mean communality (h²) – the average share of a variable’s variance the factors explain – see communality. Below 0.40 the factors are not accounting for much of the individual variables.
  • Mean complexity – Hoffman’s complexity averaged over the variables: 1.0 when every variable loads on exactly one factor, higher with cross-loading.
  • Variables with no salient loading – how many variables reach no loading of 0.3 in absolute value on any factor – see salient loading. 0 is what you want. The 0.3 is the conventional salience bar and stays fixed whatever the loadings display threshold says – one decides whether a variable found a factor, the other what is worth showing.

Variance explained

Variance explained. One row per factor or component with its sum of squared loadings and its share of the variance on two denominators – all the variance in the variables, and the variance the solution explains – see variance explained. A legend restates the two denominators and, under an oblique rotation, adds a line on what a column counts. In a bifactor or Schmid-Leiman solution the rows are labelled as the loadings table labels its columns – g for the general factor, the rest renumbered – so the two tables never name the same factor differently.

  • SS loadings – the sum of squared loadings on that factor, its strength in units of one variable – see eigenvalue. Under an oblique rotation the column counts the variance the factor accounts for including what it shares with the factors it correlates with, so two columns are not exclusive of each other; the columns still sum to the total the solution explains.
  • Proportion var – the factor’s share of the total variance of all the variables.
  • Cumulative var – the running total of the above; the last row is the solution’s total, which under EFA is also its mean communality.
  • Proportion explained – the factor’s share of the variance the solution does explain.
  • Cumulative explained – the running total of that; the last row is 100% by construction. Under EFA the gap between the two pairs is the common factor model’s: with communalities around 0.4 a sound solution reaches 100% here and well under 50% in Cumulative var, because only the shared variance was ever the target.

How much variance is enough? In PCA 60–70% cumulative is a common guideline; in EFA the question is whether the factors can be read – 40 to 60% is usual for questionnaire items – see variance explained. Do not add factors to push the number up.

Loadings matrix

Factor loadings (pattern matrix). One row per variable, one column per factor, each cell the variable’s loading on that factor – see factor loading. The heading names the quantity: under an oblique rotation the cells are pattern coefficients, so it reads Factor loadings (pattern matrix) and the structure matrix follows further down; under an orthogonal rotation the two coincide and it reads Factor loadings; under PCA it reads Component loadings either way. After rotation the columns are ordered by descending SS loadings – F1 (or PC1) is the largest factor in the rotated solution, not the one extracted first – and each is reflected so its loadings sum to a positive number, which can hand back a factor whose items were all worded towards distress as a “wellbeing” factor: check the signs against the items’ wording before naming one. The order and the reflections carry through to the factor correlations, the structure matrix, the scores and the path diagram, so every view on the card agrees. Under a bifactor rotation the column that loads broadly with a consistent sign is labelled g and the rest renumbered F1, F2…; when no column qualifies every column stays numbered and the No clear general factor warning says so.

The controls above the table decide what it shows; click Update table to apply them:

  • Cutoff threshold – loadings below this absolute value are blanked; starts at the panel’s Loadings display threshold (default 0.3). The comparison reads the value as printed, so a loading that rounds up to the cutoff is shown. If a path diagram is on screen it is redrawn at the new cutoff too, so the two never disagree about which loadings are hidden.
  • Highlight threshold – loadings at or above this absolute value are shown in bold (default 0.6), the usual bar for a strong loading; graded as printed, like the cutoff.
  • Sort by – the row order, Original order or Highest loading.
  • Original order – the variables in the order they were selected.
  • Highest loading – the variables grouped by the factor each loads most on, strongest first within each group – the order the path diagram arranges them in. In a bifactor solution g is left out of that decision – it loads on nearly everything, so sorting by it would put every variable in one group – and variables group by their strongest group factor instead.
  • Update table – applies the three controls. Both thresholds are clamped to 0–1, and a field left empty is read as 0.
  • Communality – the final column while Communalities is on: the share of the variable’s variance the factors explain – see communality. Flagged in yellow below 0.40, as the legend says; one that couldn’t be computed reads N/A in red – an unknown value, not a poor one.

A legend under the table restates the two thresholds in force and, with the intervals below on, names the interval and its level.

Reading the loadings. A loading says how much of the variable the factor accounts for: below about 0.3 the variable barely belongs, from 0.6 it is a strong indicator, and one loading moderately on two factors is a cross-loading – ambiguous, and a candidate for removal – see factor loading and cross-loading.

Confidence intervals for the loadings

Ticking Bootstrap confidence intervals for loadings – the sub-option under Loadings matrix – prints a bias-corrected bootstrap interval in brackets beneath every loading and adds a legend line naming the interval and its level. Your cases are resampled with replacement Bootstrap replications times, the whole solution – correlation matrix, extraction, rotation and Kaiser normalization – is re-fitted on each resample and matched to the reported one factor by factor, its columns re-signed, before the bounds are read off; Confidence level sets the width and Bootstrap seed makes the bounds reproducible – see bias-corrected percentile bootstrap. Re-fitting on every replication is slow, and with Mixed (polychoric/polyserial) correlations, where each resample re-estimates the matrix as well, a run can take several minutes; a note says so while it runs. The bounds need at least 50 usable resamples: below that none are drawn and a warning says why – pointing at Bootstrap replications when that setting is itself under 50 – and when some resamples were lost but at least 50 survived, a note says the intervals rest on those alone.

What the interval tells you. Whether it covers zero: a cross-loading whose interval straddles zero is not evidence of a cross-loading, and a primary loading whose interval reaches down to the Cutoff threshold is not the anchor item it looks like – see confidence interval. Simple structure that survives here is simple structure worth reporting.

Communalities

Communalities. With Loadings matrix on, the communalities ride in that table as its final column and this section is not drawn; with the loadings matrix off they get a table of their own, one row per variable, so the checkbox does something whichever way the loadings checkbox is set – see communalities. A legend restates the yellow flag.

  • Communality (h²) – the share of the variable’s variance the factors explain, flagged in yellow below 0.40 and N/A in red when it couldn’t be computed, exactly as in the loadings table – see communality.
  • Uniqueness (u²) – the complementary share, 1 − h², that the factors leave unexplained – see uniqueness. Under PCA the column is headed Unexplained variance instead: a component model has no unique-variance parameter, so the quantity is the share of the variable the retained components don’t reproduce, not an estimated uniqueness.

Structure matrix (oblique rotations only)

Structure matrix. Under an oblique rotation, a second table below the loadings: the zero-order correlations between variables and factors – the pattern loadings multiplied by the factor correlations – see structure matrix. It carries its own copy of the loadings table’s controls, starting at the same cutoff, and the same bold-and-blank legend; its cutoff does not reach the path diagram, which follows the loadings table alone.

Pattern vs. structure. The pattern matrix is each variable’s unique relationship with a factor, the other factors held constant; the structure matrix is the total correlation, factor correlations included, so its values are larger and the gap grows with the factor correlation – see pattern matrix. Standard EFA reporting includes both.

Path diagram

Factor path diagram. A picture of the structure – factors as ellipses on the left, variables as rectangles in the next column, loadings as arrows between them and, under EFA, an error circle per variable on the right – see path diagram. Under PCA the heading reads Component path diagram, the arrows run from the variables to the components and there are no error terms, since a component is a weighted sum of its variables rather than a cause of them. Only loadings above the loadings table’s cutoff are drawn – change it there, click Update table, and the diagram is redrawn to match – except each variable’s strongest group-factor loading, always drawn, faint and dashed when it falls below the cutoff, so no variable is left floating under a factor with nothing to explain why; g never qualifies for that exception. The variables are grouped by the factor they load most on, the order Highest loading sorts the table into.

  • Factors – blue ellipses on the left: PC1, PC2… under PCA, F1, F2… under EFA. A bifactor general factor is an orange g, drawn on the opposite flank – see below.
  • Variables – grey rectangles in the next column along, widened to fit the longest name in the solution – so ordinary column names read in full, in an exported SVG or PNG too, where no tooltip recovers a clipped one – up to about 35 characters; a longer name is truncated, and hovering the box gives the full text.
  • Loadings – arrows from factor to variable (from variable to component under PCA), blue for a positive loading and red for a negative – the same diverging pair the correlation graphs use for signed associations, chosen over red/green so the sign stays readable with red–green colour vision deficiency – thickness proportional to the loading, straight for a variable’s primary loading and curved for a cross-loading, dashed and faded for the general factor’s fan in a bifactor solution. The value sits beside each line in that line’s own colour, darkened so small text stays legible, so a label can be traced back to its line where fans cross; untick Show values on diagram to drop the labels when a busy solution makes them clutter, and hovering a line reports its value either way.
  • Error terms – EFA only: small orange circles on the far right, one per variable, carrying its uniqueness u² = 1 − h², the share of its variance the factors don’t account for; hover a circle for the value.
  • Factor correlations – under an oblique rotation, curved double-headed arrows between the factors on the left, on the same blue/red sign scale as the loadings and labelled Factor correlation (Component correlation under PCA) in the legend.

The legend under the diagram names every line style in use, and only those in use: Loadings: – Loadings (pattern): under an oblique rotation, since the arrows carry pattern coefficients and an exported SVG travels without the table heading that says so – with its Positive and Negative swatches and the cutoff in force (|λ| ≥ 0.3); Primary loading below the cutoff only when a faint dashed line was actually drawn; General factor loadings whenever a bifactor or hierarchical solution is drawn; Residual variance (u²) whenever the error circles are; and Arrows run variables → components under PCA alone.

A bifactor rotation, or the Schmid-Leiman transformation, flanks the general factor: g loads on every variable, so it sits to the right of the variable column while the group factors stay on the left, the two fans approaching the variables from opposite sides, and each error circle moves to a short stub off its variable’s top-right corner. Plain EFA, PCA and a bifactor solution whose general factor couldn’t be identified keep the ordinary factors → variables → errors columns.

The diagram is resizable and exports as SVG, PNG or JPG with the buttons beside it (see resizing and exporting charts); the files are named after the kind of diagram – factor_path_diagram, component_path_diagram, bifactor_path_diagram, schmid_leiman_path_diagram – so a run that draws two of them doesn’t produce two identically named downloads.

Factor/component correlations (oblique rotations only)

Factor correlations. A symmetric matrix of the correlations among the factors, Φ, under an oblique rotation – Component correlations under PCA – labelled the way the loadings table labels its columns, so a bifactor solution’s general factor reads g here too; the diagonal shows 1 in muted text, formatted to the same precision and decimal separator as every other cell – see factor correlations.

High factor correlations. Two factors correlating above 0.70 may not be distinct enough to justify separate factors: consider extracting one fewer, or a Schmid-Leiman transformation to separate the general from the specific variance – see factor correlation.

Anti-image matrices

  • Anti-image correlation matrix – the negated partial correlations between every pair of variables, all the others held constant, with each variable’s MSA on the diagonal – see anti-image correlation. The diagonal is shown in bold and graded on the same six-tier Kaiser scale as the overall KMO – green from 0.70 (middling and above), yellow from 0.50 (mediocre, miserable), red below (unacceptable) – and a legend restates the tiers. The off-diagonals should be near zero and are graded by absolute value against your Correlation strength bands – yellow from Moderate (default 0.5), red from Strong (default 0.7) – so the problem pairs stand out without reading the whole grid; Step 2 lists the worst of them on their own, before you pick a factor count.
  • Anti-image covariance matrix – the covariance form of the same matrix, without the MSA colour coding and with a legend of its own naming its two kinds of cell – see anti-image covariance. The diagonal is each variable’s anti-image variance, 1 − R², the share of it the other variables don’t predict – small is good, since a variable that shares most of itself with the rest is what is worth factoring; the off-diagonals are what survives of each pair’s association once every other variable is partialled out, and should sit near zero. Standardizing this matrix produces the correlation matrix above it.

Both are derived from the raw correlation matrix, so when it isn’t positive definite (common with Mixed correlations) some entries – diagonal MSAs included – can’t be computed and read N/A in red, under a note saying why; on a singular matrix both tables are withheld behind the Anti-image withheld (singular matrix) warning rather than filled from a pseudo-inverse – the rule the Step 2 per-variable MSA table follows – so fix what the rank alert names and both come back.

Residual correlation matrix

Residual correlation matrix. With Residual correlations on, the pair-by-pair form of the Residuals > 0.05 count: for every pair of variables, the correlation you observed minus the one the solution reproduces – see residual correlations. It is drawn as a lower triangle with an empty diagonal; cells above 0.05 in absolute value are highlighted, graded on the value as printed, and a legend says so.

The check that doesn’t depend on an index. Fit indices summarize the residuals into one number; this table shows where they are – a pair left badly under-reproduced under an acceptable SRMR is usually a method effect, a reverse-worded pair or a dimension the factor count missed. Read the highlighted cells as the pairs to explain and the Residuals > 0.05 row as the verdict – see residual correlations.

Factor/component scores

Factor scores. A preview of the first 10 scored cases (all of them, if fewer) with a score per factor – Component scores under PCA – and a note giving the number of cases scored and the scoring method that actually ran, which at a single factor is Regression whatever the dropdown says, since the analysis enforces the lock itself rather than only the greyed-out control – see factor scores. In a bifactor solution the columns are labelled as the loadings table labels its own – g and the renumbered group factors – and the determinacy line, the coefficient matrix and the inserted variables follow the same names, so nothing on the card calls one factor by two names. Insert the scores to use them in a later analysis – as predictors in regression, for clustering or in a group comparison.

  • Case – the row’s position in the original dataset – not in the preview, and not in the filtered subset when a case filter is active. Non-consecutive numbers – 1, 3, 4, 5, 6, 11… – say at a glance that cases 2 and 7–10 were dropped for missing data.
  • Score determinacy – a line beneath the preview with each factor’s ρ, the correlation between the scores the module computed and the true factor scores, computed from the weights of the method you selected, so it grades the scores in the table rather than the solution in the abstract – see score determinacy. ρ ≥ 0.90 is the preferred bar and shows in green, ≥ 0.80 the accepted minimum in yellow, anything lower in red – as is a value outside 0–1, a numerical failure rather than a score. Switching between Regression, Bartlett, Anderson-Rubin and Ten Berge changes it, and the gaps widen under an oblique rotation. The line is drawn under PCA too, where Regression and Ten Berge read 1.000 for every component – a component is an exact weighted sum of its variables, so weights that recover it exactly exist – while Bartlett and Anderson-Rubin land just below, each imposing a property the component doesn’t have; worth seeing before you save the columns.
  • Insert scores into dataset – adds the scores as new variables named as the card labels its columns – F1, F2… (PC1, PC2… under PCA; g and the renumbered group factors in a bifactor solution) – with the scoring method suffixed for any method but regression (F1_Bartlett, F1_Anderson, F1_tenBerge). If variables with those names already exist you are asked to confirm overwriting. The scores land on the rows they were computed from, NA on the cases the analysis excluded, even when listwise deletion shortened the working dataset – and the new variable is not added to your selection: a score column is NA on exactly the cases the analysis dropped, so selecting it automatically would hand listwise deletion the analysis’s own exclusions and quietly shrink the sample for everything you ran afterwards. Select it in the variable-selection modal like any other variable, and delete it there, on the Organize tab, if the scoring method you tried is not the one you want. The button records the dataset the scores were computed against – its shape and which load it was – so if you filter cases, transform variables or reload data and then come back to an older card, the insert is refused with a message asking you to re-run: re-importing a different file with the same number of rows and columns is a different dataset, and writing scores onto rows they no longer describe is the one failure that wouldn’t announce itself.

Why determinacy matters. Factor scores are estimates, not the latent values: near 1.0 they are almost interchangeable with the factor, but at a low ρ two cases with very different true standings can land on similar scores, and anything built on the saved columns inherits that blur – see score determinacy and factor score estimation.

Factor/component score coefficients

Factor score coefficients. Directly beneath the scores preview, on the same Factor/component scores checkbox, the coefficient matrix the scores were built from – SPSS’s Factor Score Coefficient Matrix – Component score coefficients under PCA: one row per variable, one column per factor, labelled as the loadings table labels its columns – see score coefficients. Read each column as a recipe: standardize every variable (mean 0, SD 1), multiply each by its coefficient in that column, add the results, and you have that case’s score in the table above – which makes the section the reproducibility record of the scores, and what lets a reader recompute them, or apply your scoring to a fresh sample, without re-running the extraction.

Coefficients are not loadings. A loading runs from the factor to the variable; a coefficient runs the other way – the weight the variable gets when the score is computed back out of the variables – so it depends on the scoring method and on how the variables overlap, and a variable with a large loading can carry a modest coefficient when another already covers its ground – see score coefficients. Report loadings to describe the structure, coefficients to say how the scores were made.

Correlations among the factor scores

Correlations among the factor scores. Below the coefficients, on the same checkbox, whenever at least 2 factors or components were extracted, whatever the rotation or method: a symmetric matrix of the correlations between the score columns as they were actually computed – not the model’s factor correlations – with 1 in muted text on the diagonal and a note beneath saying what to expect of each method – see score correlations. Under PCA the heading reads Correlations among the component scores and the note is worded for components. The numbers are the saved columns’ own: under Pearson they coincide with what the model implies, under Spearman or Mixed they need not – the weights come from the latent matrix while the scores are built from the raw standardized variables – and it is the saved columns you would go on to analyse.

Read it as a check on the scoring method you picked:

  • Under Anderson-Rubin the off-diagonals sit at 0.00 by construction; anything else points at a numerical problem.
  • Under Ten Berge the matrix matches the factor correlations cell for cell.
  • Under Regression and Bartlett the scores are correlated but do neither: under an oblique rotation they track the factor correlations roughly, and under an orthogonal one they still show some correlation though the factors have none.
  • The gap between this matrix and the factor correlations is normal, and its size is the useful part: the wider it is, the less the saved scores behave like the latent variables they stand in for.

Under PCA the split falls differently: Regression and Ten Berge scores reproduce the component correlations exactly, Bartlett scores do neither, and Anderson-Rubin forces them to zero against a non-zero Φ – the contradiction the caveat under the scoring dropdown warns about, visible here.

Why the scores don’t reproduce the model’s correlations. The common factor model doesn’t determine the scores – infinitely many sets are consistent with one solution – so every scoring method picks one by a rule that buys one property at the cost of another, and the correlations here are a property of the estimates the rule produced, not of the factors – see factor score estimation. That is why the module prints them beside determinacy rather than asking you to assume them.

Schmid-Leiman transformation

Ticking Schmid-Leiman transformation adds a second results card, titled Schmid-Leiman transformation, … extraction – … rotation and listed as Schmid-Leiman in the output’s contents. The option is offered under an oblique EFA rotation other than Quartimin and Biquartimin (oblique bifactor), from 2 factors up – omega hierarchical is not meaningful for one. The card re-expresses the oblique solution as a hierarchy – a general factor g loading on every variable, plus orthogonal group factors F1, F2… carrying what each cluster shares beyond it – see Schmid–Leiman transformation. It is a separate fit, not a rearrangement of the loadings above: psych’s omega() re-extracts and re-rotates the solution before transforming it, so the card opens with its own header – the variables, any excluded as non-numerical, the sample size and the number of group factors – and its own diagnostics section, and its title names the extraction and rotation that actually ran, which need not be the ones you chose.

When to use Schmid-Leiman? When the factors correlate and the question is whether one dimension runs through them all – see hierarchical factor model. From three factors up a bifactor rotation fits the same structure in one step.

Because it is its own fit, five things can differ from the main solution, each announced in the card’s diagnostics:

  • It can carry a Heywood case of its own, or be clean where the main solution is not; the omega coefficients and the variance decomposition are then unreliable, and the loadings above are unaffected.
  • Kaiser normalization doesn’t travel with your setting: the transformation normalizes under Promax and Cluster and never under Oblimin, Simplimax, Geomin Q and Bentler’s invariant Q, whatever the checkbox says. With the shipped defaults – the checkbox cleared for every rotation but Varimax – the two loading matrices are scaled differently under Promax and Cluster, and whenever they disagree a warning names which side was normalized; read them side by side with that in mind.
  • Three extractions don’t reach it: under Unweighted least squares, Alpha factoring and Minimum sample size weighted χ² the hierarchy is built with Minimum residual instead, the card’s title and the citation say so, and the Schmid-Leiman ran a different extraction warning names both; the main solution keeps the method you picked.
  • Its rotation can be substituted too: when the oblique criterion fails inside the transformation, Promax runs instead – the card’s title reads the rotation that ran and the Schmid-Leiman ran a different rotation warning names both, so nothing on the card is labelled with a rotation that didn’t produce it.
  • It can run out of iterations on its own, reported here rather than on the main card – a converged main fit beside a Schmid-Leiman did not converge warning is a real combination, not a contradiction.

omega() also reverse-scores any item whose loading on g is negative before it estimates the coefficients, and the Schmid-Leiman reverse-scored items warning names them: the loadings shown keep the items’ original direction, so a negative g loading stays negative in the table, while the omega coefficients describe the re-keyed items – the convention published omega values follow.

Omega reliability coefficients

Omega reliability coefficients. A key–value table, one row per coefficient – its value, the bootstrap interval when Confidence intervals for omega coefficients is on, and under the interpretation setting a verdict – with no header row, so the interval’s level is stated in the note beneath instead. Five global rows come first, then three per group factor. A row whose coefficient came back missing – a group factor that collapsed – stays in the table with a muted —, so a subscale that could not be scored is never mistaken for one that is fine. What each coefficient means is on the reliability page; the rows are:

  • Omega hierarchical (ωh) – the share of a total score’s variance the general factor accounts for – see omega hierarchical. Graded Strong general factor from 0.80, Moderate from 0.50 and Weak below.
  • Omega total (ωt) – the total’s reliability from every factor together, graded on the same ladder as every other reliability coefficient in the app – see reliability metrics – so a value below 0.70 reads Questionable here exactly as it would there; it is the number the reliability module reports for the same items as McDonald’s ω.
  • Omega hierarchical asymptotic (ωh/ωt) – ωh divided by ωt: of what the scale measures dependably, how much is the general factor – see omega hierarchical asymptotic. One bar: Reliable variance mostly general from 0.80, Reliable variance substantially group-specific below.
  • Explained common variance (ECV) – the general factor’s share of the common variance, the general row of the variance decomposition – see explained common variance. Substantial multidimensionality below 0.50, Moderate multidimensionality to 0.70, and Essentially unidimensional from 0.70 only when PUC is at least 0.80 or ωh at least 0.70 agrees.
  • Coefficient H (g) – construct replicability: how well an optimally weighted composite of the items would recover the general factor, and so how likely it is to reappear in another study – see coefficient H. Well-defined construct from 0.80, Adequately defined construct from 0.70, Poorly defined construct below.
  • Omega hierarchical subscale F1, F2… (ωhs) – one row per group factor: the subscale’s reliability with the general factor partialled out, its specific part alone – see omega hierarchical subscale. It carries no verdict, on purpose: the reliability cutoffs are written for a score, and a small ωhs is a finding about the general factor’s reach rather than a defective subscale.
  • Omega subscale F1, F2… (ωs) – the same subscale’s reliability as a score of its own, general variance included, printed beside its ωhs – see omega subscale. Graded on the reliability ladder like ωt.
  • Coefficient H F1, F2… – the same replicability measure for each group factor, from its own column of the hierarchical loadings; reported without a verdict.

Read ωhs and ωs as a pair. ωs is what the subscale is worth as a score, ωhs what it adds beyond the total – a wide gap means the subscale is mostly the general factor showing through – see omega hierarchical subscale.

ECV needs PUC. A high ECV is only as good as the share of item pairs able to reveal a group factor at all, which is what the PUC line under the variance decomposition counts – see percent uncontaminated correlations.

With Confidence intervals for omega coefficients on – the option appears once the transformation is ticked – a third column carries a bootstrap interval for every row, global coefficients, subscale omegas and each coefficient H alike, and a note beneath the table states the level and the method. Your cases are resampled with replacement Bootstrap replications times, the correlation matrix is rebuilt with your correlation type on each resample and the whole transformation is re-run on it; Confidence level sets the width and Bootstrap seed makes the bounds reproducible – see bias-corrected percentile bootstrap. Re-running the hierarchy on every replication is slow, and with Mixed (polychoric/polyserial) correlations, where each resample re-estimates the matrix as well, a run can take several minutes; a note says so while it runs. The subscale intervals are rougher than the global ones – each resample’s group factors are matched back to the original solution before its values are pooled – and the note says so too. Every interval carries its own count of usable resamples, since a resample can return a perfectly good ωh and still lose a group factor, and a second note reports the worst of them in three tiers: below 50 usable resamples the affected bounds are shown as — and the note is a warning; with Bootstrap replications itself below 50 nothing failed and the warning asks you to raise the setting; and when every interval cleared 50 on fewer resamples than requested, the note is informational and the bounds stand. A — in the column is therefore an interval that could not be estimated, never a row that was not bootstrapped.

Variance decomposition

Variance decomposition. A table splitting the common variance between the general factor and each group factor – a Factor, a Variance and a % of total column, one row for General (g), one per group factor and a highlighted Total row – with a caption saying what the variance is and, beneath it, the PUC line. The variance is common variance only: the total is the sum of the squared general- and group-factor loadings, not the number of variables, so every percentage is a share of that total. It tracks the sum of the main solution’s communalities and need not equal it when variables cross-load – see Schmid–Leiman transformation.

  • General (g) – the general factor’s row: the sum of its squared loadings over the items, and its share of the total, which is the ECV – see general factor.
  • % of total – each row’s share of the common variance: the general row’s is the ECV, a group row’s that factor’s own ECV, and together they make 100% – see explained common variance.

The line beneath the caption gives the percent uncontaminated correlations (PUC) – the share of item pairs whose two items belong to different group factors, each item assigned to the group factor it loads on most strongly, since PUC is normally quoted against an a priori subscale key – and states where the app’s Essentially unidimensional bar sits: ECV ≥ 0.70, above the ECV > 0.60 rule of thumb, so a solution some sources would call unidimensional will not be labelled so here – see percent uncontaminated correlations.

Hierarchical factor loadings

Hierarchical factor loadings. An interactive table with the same controls as the loadings matrix – Cutoff threshold, starting at the panel’s Loadings display threshold, Highlight threshold, at 0.40 here rather than the main table’s 0.6 – the transformation splits each item’s loading between the general factor and its group factor, so neither part alone reaches the bar the undivided loading clears – Sort by and Update table – and a legend line above it naming the columns. One row per variable: the general loading, the group loadings and four diagnostics. A loading that couldn’t be estimated reads N/A in red rather than as an empty cell, so a blank here means “below the cutoff” and nothing else. Highest loading groups the variables by their strongest group factor, leaving g out of the decision as the main table does for a bifactor solution – it carries the largest loading for nearly every item – and the diagram below groups the same way; changing the cutoff here redraws that diagram.

  • g – the general factor loading – see general factor.
  • F1, F2, … – the group factor loadings, orthogonal to g and to each other – see group factor.
  • h² – the communality, the variance every factor explains together – see communality.
  • u² – the uniqueness, 1 − h² – see uniqueness.
  • p² – the proportion of the variable’s common variance that comes from g: g² ⁄ h².
  • com – Hoffman’s complexity, 1 when the variable loads on exactly one factor – see complexity.

Empty group factor column? Every loading of a group factor below the cutoff means the general factor absorbed that cluster – usually a sign to extract one factor fewer rather than to lower the cutoff – see group factor.

Hierarchical path diagram

Hierarchical path diagram. The path diagram of the transformed solution, drawn with Path diagram on and titled Schmid-Leiman hierarchical structure on the canvas: the general factor faces the group factors across the variables, so its one-to-all fan and the group factors’ fans approach from opposite sides and never cross. It follows the hierarchical loadings table’s cutoff – change it there, click Update table, and the diagram is redrawn – keeps each variable’s strongest group-factor loading faint and dashed below it while g’s lines simply stop at the cutoff, and takes Show values on diagram like the main diagram. The legend names the line styles in use – Loadings: with its Positive and Negative swatches and the cutoff, Primary loading below the cutoff when one was drawn, General factor loadings and Residual variance (u²) – and the export buttons save it as schmid_leiman_path_diagram, so a run that draws both diagrams doesn’t produce two identically named downloads.

  • Group factors – blue ellipses on the left, F1, F2…, their lines to the variables straight for a variable’s strongest group loading and curved for a cross-loading, blue or red by sign.
  • Variables – rectangles in the middle, grouped by their strongest group factor.
  • General factor “g” – an orange ellipse on the far right, its dashed, faded lines fanning to every variable whose g loading clears the cutoff.
  • Error terms – circles on short 45° stubs off each variable’s top-right corner, carrying that variable’s u² from the hierarchical solution; hover one for the value.

Schmid-Leiman factor scores

Schmid-Leiman factor scores. With the option on, a preview of the first 10 scored cases with a g column and one per group factor, a note giving the number of cases scored and the scoring method that ran, and the Score determinacy line on the same ρ scale and bands – the scores computed by the Scoring method you chose above, on the hierarchical loadings – see Schmid–Leiman transformation. Read the determinacy here in particular: the general column and each block’s group column are near-proportional by construction, so hierarchical scores are usually the least determinate the module produces – often below the 0.80 bar – and determinacy is part of the standard bifactor reporting set beside ωh, ECV and PUC. The Case column is the row’s position in the original dataset, as in the main scores table.

  • Insert SLT scores into dataset – adds the scores as new variables named SLT_g, SLT_F1, SLT_F2…, with the scoring method suffixed for any method but regression (SLT_g_Bartlett, SLT_g_Anderson, SLT_g_tenBerge), under the same rules as Insert scores into dataset: a confirmation before an existing variable is overwritten, NA on the cases the analysis excluded, the new variables left out of your selection, and a refusal when the dataset has changed since the analysis ran.

Extraction method comparison

Opened by the Compare extraction methods button in Step 3. A dialog picks the extraction methods, and the card fits the solution Step 3 is set up to run – its factor count, the rotation from Step 1 and its Kaiser normalization – under each of them side by side, so you can see how much the choice of extraction matters: a fit table with one row per method, then Tucker’s congruence coefficients between every pair of solutions. The card is titled with the rotation that ran and listed as Extraction comparison in the output index; it opens with the variables, any excluded as non-numerical, the sample size, the factor count, whether Kaiser normalization was applied and the methods compared. On clean structure the methods agree and on marginal data they part – see extraction method for what the choice does and when it matters.

Method selection

The dialog opens only when Step 3’s settings can run: at least three numerical variables, a factor count within the Ledermann bound – the EFA bound even under PCA, since every compared row is a common-factor extraction – and no bifactor-family rotation below three factors. A setting that fails is reported by a toast while you can still act on it, in the order the Run full analysis button checks them, so the dialog and the button always name the same first problem. A line at the top of the dialog names the factor count, the rotation and the normalization the comparison will inherit, since none of those fields is reachable while it is open. Under EFA your own extraction is ticked on opening, alongside whatever was ticked last time – Maximum likelihood (ML), Principal axis factoring (PA) and Minimum residual (MINRES) on the first – so the sweep contains the solution it is a check on; untick it for a sweep that deliberately excludes it. Under PCA the ticked methods are still common-factor extractions: your component solution is fitted once as the congruence anchor, heads every pair in the congruence table and gets no row in the fit table; an analysis-info line on the card says so, and turns red – with R’s message on hover – if that fit failed, in which case the coefficients compare the extractions with each other only.

  • Major 3 (ML, PA, MINRES) – ticks maximum likelihood, principal axis factoring and minimum residual – the three most widely used – and clears the other six
  • Select all – ticks all nine methods
  • Deselect all – clears all nine
  • Run comparison – runs the sweep with the ticked methods, at least two of them – fewer is refused with a toast – closes the dialog and adds the card

The nine checkboxes are the Step 1 extraction methods, labelled with their abbreviations. Unweighted least squares (ULS) and Minimum residual (MINRES) minimize nearly the same criterion – the squared residuals over the whole matrix against over the off-diagonals only – and return near-identical loadings, so their congruence rounds to 1.000 and ticking both rarely adds an independent check; the dialog says so, and both stay available – see unweighted least squares and minimum residual.

Fit metrics comparison

Fit metrics comparison. One row per method, in the dialog’s order: the four graded indices, the exact-fit test, the two information criteria, then complexity, Cumulative % and the unassigned count. Every row is your Step 3 solution refitted under that method – rotated the way you chose, with the same Kaiser normalization – so the row whose extraction is the one you ran reproduces the main card’s numbers and the others are that solution seen from another method’s angle. RMSEA, CFI, TLI, SRMR, BIC and SABIC read as on Step 3’s fit card, which holds their entries. The best value in each column is bold – lower RMSEA, BIC, SABIC, SRMR and complexity, higher CFI, TLI and Cumulative %, zero unassigned – on the value as printed; RMSEA, CFI, TLI and SRMR are coloured as well, against your model fit cutoffs – green for good or excellent, yellow for mediocre, red for poor – so you can see whether the method bolded as best actually fits, or merely fits least badly. Every row shares one df, since every method is fitted at the same count: at df ≤ 0 every row’s model reproduces the correlation matrix by construction, the colouring is skipped, a legend line says so, and only the non-ML-derived columns and the congruence coefficients below still tell the methods apart – extract fewer factors for a comparison that can. χ², RMSEA, CFI, TLI, BIC and SABIC are computed from the maximum-likelihood discrepancy whichever method produced the loadings, so ML is bolded on them by construction – read that bolding as closest to the ML objective, not fits best, as the legend says – while SRMR, complexity, Cumulative % and the unassigned count compare cleanly across methods. Above the table the matrix alerts Step 3 raises appear in the same order – a matrix that is not positive definite or was smoothed, a Mixed run that fell back to Pearson or correlated wide ordinal variables as continuous, and a rank-deficient matrix with Redundant variables detected naming which variable to drop – because this card runs none of the data suitability tests and would otherwise be comparing nine attempts to fit an unfittable matrix without saying so. The legend beneath restates the bolding rule, the salience bar and the Heywood rules, adds the colour key whenever a row is gradable, and carries four notes on demand: the ML-derived caveat always, the asterisk and the dagger notes when a row was retried or did not converge, and the df ≤ 0 note when the comparison ran without residual degrees of freedom.

  • Extraction – the method, by the abbreviation the dialog shows in brackets (ML, PA, MINRES, ULS, WLS, GLS, MINCHI, MINRANK, ALPHA), with the row’s flags beside it: Fitting failed in red, with R’s own message on hover, for a method that could not be fitted – its cells read – and it is left out of the congruence table; Heywood case or Inadmissible (ultra-Heywood) for an inadmissible solution; an asterisk (*) for a method whose default start failed and which was fitted on a retry from unit communalities – PA and ALPHA are the only methods retried – so its metrics and its congruence coefficients rest on different starting conditions from every other row and are indicative rather than strictly comparable; a dagger (†) for one that hit the iteration limit before converging – the marker the model comparison table uses, for the same reason – its row fully populated and its coefficients computed like any other, on a model that had not finished settling. Hover either marker for its note.
  • Inadmissible (ultra-Heywood) – a communality above 1 in that method’s solution, as Step 3 grades an Ultra-Heywood case: the row is tinted red and left out of the best-value bolding. A Heywood case – a communality at 0.999 or above – is a caution, tinted yellow and still eligible – see Heywood case; under the extractions psych fits by bounded optimisation it is a uniqueness held at its 0.005 lower bound, as in Step 3.
  • χ²(df), p – the exact-fit test for that row’s model – whether it reproduces the correlation matrix within sampling error – with its degrees of freedom, the same for every row, and its p-value; – where the method failed or the statistic is undefined – see chi-square test of model fit. The one ML-derived column with no bold.
  • Complexity – the mean of Hoffman’s complexity across variables on that method’s solution under your rotation – so it matches Step 3’s solution quality for the extraction you ran, where the model comparison table grades a varimax copy – bold at its minimum.
  • Cumulative % – the share of the variables’ variance the solution accounts for, which is also its mean communality – the quantity and the unit of the model comparison table’s column of that name; under an oblique rotation the overlap between correlated factors is accounted for, so the equality holds either way. Bold at its maximum.
  • Unassigned variables – how many variables have no salient loading – none reaching 0.3 in absolute value – on that method’s rotated solution; the bar is fixed and does not follow the loadings display threshold. Bold at 0.

Tucker’s congruence coefficients

Tucker’s congruence coefficients. How alike the methods’ factor solutions are, pair by pair: a summary of the pair means, then a table with a coefficient per factor for every pair – see congruence coefficient for what the number measures and how it is read. Congruence is pairwise, so it needs two methods that produced a solution; with fewer, a note replaces the section and says so. The summary’s figures, listed below, are coloured by the same tiers as the table, the mean and the single-factor figure carrying a verdict: ≥ 0.95 the solutions are essentially equivalent, 0.85–0.94 fairly similar, below 0.85 substantially different. Under PCA the summary is split in two – the EFA methods compared with each other under Overall factor solution similarity, and the same four figures for the pairs involving your congruence anchor under Component solution against each extraction, the question you opened the dialog to ask; under EFA, or when only one extraction survived, the single set is reported. Every pair enters the summary whatever its flags, so it qualifies itself: a pair involving a Heywood or inadmissible solution, a method rescued by the SMC = FALSE retry, or one that hit the iteration limit appends its caution right there rather than leaving it to the legend under the table.

  • Mean congruence across all method pairs – the mean of the pair means over every pair compared, with its verdict: the summary’s one mean under EFA, or when only one extraction survived
  • Mean congruence across the common-factor extraction pairs – under PCA, the same mean over the EFA methods’ pairs with each other, the component solution left out
  • Mean congruence with the component solution – under PCA, the mean over the pairs involving your congruence anchor: how well the component structure survives a common-factor extraction
  • Minimum congruence (most dissimilar pair) – the lowest pair mean in the group it sits under: the two methods that agree least, found by their Mean in the table
  • Maximum congruence (most similar pair) – the highest pair mean in its group: the two methods that agree most
  • Lowest congruence for any single factor – the lowest coefficient any one factor reached in any pair of its group, with its verdict: a factor that fails to replicate between two methods shows here even when its pair’s mean, averaged over the other factors, reads well

The table beneath has a row per pair. Values are coloured green (≥ 0.95, in bold), yellow (0.85–0.94) and red (< 0.85); a row is tinted yellow when one of its methods hit a Heywood case and red for an ultra-Heywood one – a high coefficient there says the two solutions agree, not that either is trustworthy, so fix the admissibility first, usually with fewer factors, and then read the congruence – while a retry asterisk leaves the row untinted, being a comparability caveat rather than an admissibility one. Coefficients are reported as absolute values – the sign of a factor is an arbitrary by-product of the rotation – which the legend says, and which matters if you cross-check against psych::factor.congruence(), which reports the signed coefficient. The legend names the reference method, restates the matching, explains each flag that appears and gives the three tiers.

  • Comparison – the two methods, by abbreviation, each with the same Heywood case, Inadmissible (ultra-Heywood), asterisk and dagger flags as in the fit table – a method fitted from different starting values produced a different solution, so its congruence with the others measures that too
  • F1…Fn – that pair’s own coefficient for each factor, the two methods’ factors matched one to one by best fit, which is what Tucker’s coefficient is defined on. The column labels come from one shared alignment against a single reference method – your PCA solution when it was fitted as the anchor, otherwise the method whose solution is closest to all the others – so F1 names the same underlying factor in every row however many methods you compared; the legend names which
  • Mean – the mean of the row’s cells; the row’s minimum is not printed but feeds the summary’s lowest-single-factor line, so nothing in the table can contradict the figure above it

Is the structure robust? Congruence ≥ 0.95 between methods says the factors are not an artifact of the extraction you chose; poor congruence says the structure is unstable – too few cases, too few items per factor or the wrong count – see congruence coefficient.

Setting interactions

Several settings act on each other:

  • Choosing PCA disables the Bifactor and Biquartimin (oblique bifactor) rotations – a selected one is reset to Varimax, with the normalization default that goes with it – and hides the Schmid-Leiman transformation; the oblique rotations, the component correlations and the extraction comparison stay available
  • Choosing None (unrotated) greys out Kaiser normalization and clears it; switching rotation resets the checkbox to that rotation’s default – on for Varimax, off for the rest
  • Setting the factor count to 1 does the same, whatever the rotation dropdown says, and hides Factor/component correlations and the Schmid-Leiman option; raising the count again restores the checkbox with its rotation default, so a 3 → 1 → 3 round trip keeps Varimax’s normalization. The Scoring method is fixed to Regression at one factor, and the Anderson-Rubin caveat stands down
  • Choosing an oblique rotation reveals Factor/component correlations, for PCA as well as EFA, from 2 factors up, and ticks it on that transition alone – a later factor-count change leaves a box you cleared alone; an orthogonal rotation hides and clears it again
  • Changing the variable selection or the extraction method re-publishes the factor-count ceiling on all three count fields and clamps anything above it
  • Choosing an oblique EFA rotation other than Quartimin and Biquartimin (oblique bifactor) reveals the Schmid-Leiman option from 2 factors up; hiding it clears it and its two sub-options
  • Enabling Schmid-Leiman transformation reveals Schmid-Leiman factor scores and Confidence intervals for omega coefficients; disabling it clears both
  • Enabling Factor/component scores or Schmid-Leiman factor scores reveals the Scoring method dropdown
  • Enabling Loadings matrix reveals Bootstrap confidence intervals for loadings; disabling it clears the sub-option, which has nowhere to render without the table
  • Enabling Path diagram reveals Show values on diagram, whose own tick is left alone, so switching the diagram off and on returns the sub-option as you set it

Missing data

Missing values are handled by the global missing data setting, with one difference: factor analysis is computed on a single correlation matrix, so whichever method the setting names, the module drops every case that is blank on any of the selected variables before building it – there is no pairwise option here. With the setting on listwise deletion the cases blank on any variable selected in the Variables dialog are already gone – a net at least as wide as the module’s own; with imputation the blanks were filled before the module saw them and nothing is dropped. Every card’s header states the sample size the matrix rests on, and the suitability card says how many rows the module’s own pass removed – compare it with your file’s row count – see listwise deletion.

How many cases does factor analysis need? The rules of thumb disagree by an order of magnitude, and the strength of the structure matters more than any ratio – see cases-to-variables ratio.

Interpretation thresholds

With the interpretation setting on, the suitability, MSA, model comparison, fit and omega tables carry a verdict column; with it off they report their numbers alone. The colour-coded cells – the determinacy line, the extraction comparison’s two tables, the yellow communalities and the bold loadings – are drawn either way, being formatting rather than a column. The four fit bands are your model fit cutoffs, adjustable there; every other bar is fixed, and every verdict is graded on the value as printed, so a label never contradicts the number beside it. The bars, each explained in its own entry above:

Metric Bands
KMO and per-variable MSA ≥ 0.90 marvelous, ≥ 0.80 meritorious, ≥ 0.70 middling, ≥ 0.60 mediocre, ≥ 0.50 miserable, < 0.50 unacceptable
RMSEA, SRMR ≤ 0.05 excellent, ≤ 0.08 good, ≤ 0.10 mediocre, > 0.10 poor fit (the setting’s defaults)
CFI, TLI ≥ 0.95 excellent, ≥ 0.90 good, ≥ 0.85 mediocre, < 0.85 poor fit (the setting’s defaults)
Model comparison verdict under EFA the worst band any of the four indices reaches; under PCA Cumulative % ≥ 80 excellent, ≥ 70 good, ≥ 60 adequate, < 60 low variance coverage; Not interpretable at df ≤ 0
Communality no verdict – flagged in yellow below 0.40
Loading no verdict – bold from the Highlight threshold (0.6 in the loadings and structure tables, 0.4 in the hierarchical one), blank below the Cutoff threshold
Omega hierarchical (ωh) ≥ 0.80 strong, ≥ 0.50 moderate, < 0.50 weak general factor
Omega hierarchical asymptotic (ωh/ωt) ≥ 0.80 reliable variance mostly general, below that substantially group-specific
Omega total (ωt), omega subscale (ωs) the shared reliability ladder – the labels the reliability and IRT modules use, the redundancy caution above 0.95 included
ECV ≥ 0.70 essentially unidimensional when PUC ≥ 0.80 or ωh ≥ 0.70 agrees, ≥ 0.50 moderate, < 0.50 substantial multidimensionality
Coefficient H ≥ 0.80 well-defined, ≥ 0.70 adequately defined, < 0.70 poorly defined construct
Score determinacy (ρ) ≥ 0.90 preferred (green), ≥ 0.80 the accepted minimum (yellow), < 0.80 red
Residuals > 0.05 more than half of them – Too many large residuals; otherwise Few large residuals
Tucker’s congruence ≥ 0.95 excellent (factors can be considered equal), ≥ 0.85 good (fair similarity), < 0.85 poor (different factors)
Cases-to-variables ratio fewer than 50 cases Sample too small, under 5:1 Below the recommended 5:1, otherwise Adequate

Reporting checklist

Key things to include when writing up factor analysis results:

Method:

  • Extraction method (e.g. MINRES, ML, PCA) and why it was chosen
  • Rotation method (e.g. Oblimin, Varimax) and why, and whether Kaiser normalization was applied
  • Correlation type (Pearson, polychoric, etc.)
  • How the number of factors was determined (parallel analysis, Velicer’s MAP, the empirical Kaiser criterion, the Hull method, scree plot, fit indices, theoretical reasoning) – for parallel analysis, the number of draws and the seed
  • Loadings display threshold used
  • Sample size and the cases-to-variables ratio
  • How missing data were handled

Results:

  • KMO and Bartlett’s test (data suitability)
  • Fit indices (RMSEA with its 90% interval, CFI, TLI – for EFA)
  • The residual summary: SRMR and the count of residuals above 0.05 – the one fit statement that means the same thing for PCA and EFA
  • Total variance explained
  • The full loadings matrix (or at least loadings above threshold), with communalities; for oblique rotations, both pattern and structure matrices. If you computed bootstrap intervals for the loadings, report them with the loadings and say how many replications they rest on
  • Factor correlations (for oblique rotations)
  • If factor scores were saved: the scoring method and the per-factor determinacy ρ, which is specific to that method – and the score coefficient matrix if anyone needs to reproduce or reapply the scoring. With two or more factors, the correlations among the scores themselves are worth reporting beside the factor correlations, since readers can’t derive one from the other
  • Any items removed and why

For Schmid-Leiman:

  • Omega hierarchical, omega total, ωh/ωt, ECV, PUC and coefficient H, with the bootstrap confidence intervals if you computed them
  • The per-subscale ωhs and ωs pair
  • The hierarchical loadings matrix
  • Which items omega() reverse-scored, and whether the extraction or rotation was substituted – the card’s title and its diagnostics say

Reproducibility

Every analysis prints the underlying R code to the R console – you can inspect, copy, or re-run the exact commands. Factor analysis uses the psych R package, plus GPArotation for every rotation but Varimax, Cluster and None (unrotated) – under PCA as well as EFA, and inside the Schmid-Leiman transformation – Rcsdp under Minimum rank, and MASS when the anti-image matrices are on. Citations appear automatically at the top of the output section and track what your run actually did rather than the module’s repertoire – the packages and the extraction that ran, the rotation criterion psych actually applied, Kaiser normalization when it was applied, the suitability tests, the retention rules the scree card reported, the fit indices and, with interpretation on, the benchmarks they were graded against, the scoring method and its determinacy, Tucker’s congruence and the correlation estimators that built the matrix – so two runs that differ only in rotation carry different reference lists. Parallel analysis, the VSS and MAP sweep, the rotation’s random starts and the Schmid-Leiman re-fit are seeded by Reproducibility seed, the bootstrap intervals by Bootstrap seed – leave a seed empty for fresh draws each run, or set an integer for stable comparisons. The decisions behind the module – what it refuses, smooths, falls back to, rotates by itself and cites – are argued in the method notes.

Common pitfalls

Factor analysis is one of the most powerful tools in the behavioral sciences – and one of the most misused. A few things to keep in mind before interpreting your results:

EFA discovers, it doesn’t confirm. EFA finds a structure that fits your data, but the same data can produce different structures depending on extraction method, rotation, and number of factors. Treating an EFA solution as evidence that the structure is “real” is circular reasoning. If you want to test whether a hypothesized structure holds, use confirmatory factor analysis – ideally on a separate sample.

Factor labels are your interpretation, not the data’s. Naming a factor “Emotional Intelligence” because it has loadings from empathy, self-awareness, and mood regulation items is a creative act, not a statistical finding. The math only says these variables share variance – the meaning is your claim. Readers should be able to see the loadings and judge whether your label is reasonable.

Don’t use EFA as a “better correlation.” EFA models latent structure – it assumes your variables are caused by underlying factors. If you just want to know which variables are related, use a correlation matrix. Running EFA on variables with no theoretical reason to share a common cause (GDP, temperature, and shoe size) will happily produce factors, but they’ll be meaningless.

PCA components are not latent factors. PCA is a data-reduction tool – it creates weighted composites that maximize explained variance. It doesn’t model underlying causes. Interpreting a principal component as if it’s a latent trait (“the first component is general intelligence”) is a stronger claim than PCA supports. Use EFA when you want to make claims about latent constructs.

Don’t chase clean loadings. It’s tempting to keep removing cross-loading or low-communality variables until every item loads neatly on exactly one factor. But this can produce a scale that only “works” on your sample – you’re fitting the noise. Remove items for substantive reasons (poor wording, theoretical misfit, floor/ceiling effects), not just because the loadings look prettier.

Don’t EFA and CFA the same data. A common pattern in published research: run EFA, find 3 factors, then run CFA on the same dataset to “confirm” the structure. This is circular – of course CFA will fit well, you just extracted the structure from the same data. Split your sample (EFA on one half, CFA on the other) or use an independent replication sample.

More factors isn’t better. Adding factors will always improve variance explained, just as adding predictors always improves R² in regression. The question is whether each factor captures a meaningful dimension. A 7-factor solution that explains 75% of variance is worse than a 3-factor solution that explains 50% if those extra factors are uninterpretable or contain 1–2 items each. Factors with fewer than 3 items are generally unstable.

Sample-specific solutions. Factor structures can vary across samples, cultures, and contexts. A 5-factor personality model extracted from American college students may not replicate in a clinical population or a different culture. Always report your sample characteristics and consider extraction method comparison to check whether the structure is robust even within your own data.