Factor analysis
Parallel Analysis
Compares the eigenvalues from your data with eigenvalues generated from random datasets of the same size to show how many factors are worth retaining.
Method summary
Parallel analysis produces no factor solution of its own. It settles a single number, how many factors to keep. The reasoning behind it runs as follows: even in a dataset of pure random numbers the eigenvalues do not come out equal, because sampling fluctuation pushes the leading ones above one. For an eigenvalue in real data to count as meaningful, then, it has to clear not a fixed cut-off but the level expected from random data with the same number of rows and columns. The panel sets up that comparison by computing the observed eigenvalues from the correlation structure of your columns, generating many random datasets of the same size, taking the eigenvalues of each, and using your chosen percentile of the simulated distribution at every rank as the threshold. The result puts two figures side by side for each factor, the observed eigenvalue and the threshold. The decision is made at the first rank where the observed value falls below the threshold, and the factors ahead of that rank are the ones retained.
Which research questions does it answer?
- The eigenvalue-above-one rule says five factors. Is it really five?
- The elbow in my scree plot is ambiguous, so can I put a number behind the retention decision instead?
- Does the claim that this scale is unidimensional survive a comparison against random data?
- Before I settle on a number of components, which factors actually separate from sampling fluctuation?
When should you use it?
- Before fitting an exploratory solution, while the number of factors is still being decided.
- When the eigenvalue-above-one rule and the scree plot point in different directions and a third criterion is needed.
- When the dimensionality of a scale is contested and the write-up has to justify the decision.
- When at least three columns are available and there are more observations than columns; the engine refuses the run below either condition.
- Before moving to a confirmatory model, to check that the number of factors you intend to test is consistent with the data.
Required variable types
- Every column must be numeric: scale items or numeric ratings. Setting the measurement level to 'scale' on the Variable tab makes them eligible in the method picker.
- There is no explained and explaining side. The columns are treated together as one pool of items.
- Three columns is the hard minimum. Since the output is a decision about a factor count, six items or more is where the method becomes informative in practice.
- There must be more observations than columns. When the two are equal, or observations are fewer, the correlation structure is singular and the run stops.
- One row per respondent. A row with a missing value on any selected column is dropped, and the simulated datasets are then built with that reduced number of rows.
Key assumptions
- Simulated data shaped like the real data
- For the comparison to mean anything, the random datasets must share the number of rows and columns with the real one. The threshold states how large an eigenvalue to expect from data of exactly that size and shape.
- Both sets of eigenvalues computed the same way
- Observed and simulated eigenvalues have to come through the same computation, otherwise the two numbers are not on comparable footing.
- Numeric columns with linear associations
- Since the comparison rests on the correlation structure, associations are assumed linear and columns are assumed to be measured close to interval level. With binary items the eigenvalues can understate the associations and the decision drifts downwards.
- Enough observations
- As the number of cases falls, the observed eigenvalues fluctuate more and the decision becomes unsteady for borderline factors. The simulated thresholds are built from the same small number of cases and therefore rise too, but that does not remove the instability on the observed side.
- Enough iterations for a steady threshold
- The threshold is a percentile of the simulated distribution, and with few iterations that percentile is itself unsteady. More iterations settle it down.
How YouReply checks these assumptions
- Simulated data shaped like the real data: The engine always generates the simulated datasets with the observation and column counts that entered the analysis, and there is no field for changing that, so the condition holds by construction.
- Both sets of eigenvalues computed the same way: Both sides go through the same eigenvalue routine for symmetric matrices, which puts the two columns of the table on one scale.
- Numeric columns with linear associations: The panel looks at neither the distributions of the columns nor the shape of their associations, and raises no warning about curvature or categorical measurement.
- Enough observations: The only enforced condition is that observations outnumber columns. Beyond that the panel applies no adequacy threshold and issues no warning about sample size.
- Enough iterations for a steady threshold: The iteration count is freely adjustable between 10 and 1000, with 100 as the default. The engine passes no judgement on whether a given count is sufficient; to see how steady the threshold is, raise the count and run again.
How the analysis is run
- 1Drag the file holding your item columns (CSV or XLSX) onto the upload area, arranged with one respondent per row.
- 2On the Data tab, confirm that the columns are read as numbers and that reverse-worded items have already been recoded.
- 3On the Variable tab declare the missing value codes and set the items to the 'scale' level. Codes left undeclared distort the correlation structure and shift the eigenvalues in the wrong direction.
- 4On the Analysis tab open the factor analysis category or search for the method name. With the 'Only ones that fit my data' switch on, methods that do not fit are dimmed rather than removed and carry their reason, and the data requirements box lets you confirm that observations outnumber columns.
- 5Tick the items in the parameter form. You can leave the iteration count and percentile at their defaults of 100 and the 95th, or change them within 10 to 1000 and 50 to 99 respectively.
- 6Start the run. No chart is drawn for this method; the result consists of collapsible sections holding the suggested factor count and the comparison table.
- 7Download the table as Excel and carry the retention decision into your write-up, then run exploratory factor analysis with that number entered by hand. The computation credits card names the library call and its version, and the free plan allows 50 runs per month.
Statistics and tables produced
- Suggested number of factors
- The figure the comparison yields. The scan halts at the first rank where the observed eigenvalue is equal to or smaller than the simulated threshold, and the factors ahead of that rank are counted.
- Number the eigenvalue-above-one rule gives
- The count of eigenvalues greater than one, reported in the same result for comparison. Placing the two numbers side by side shows immediately where the two criteria part company.
- Comparison table
- Three pieces of information per factor rank: the observed eigenvalue, the simulated eigenvalue, and whether that factor is retained. Ranks sitting just above or just below the threshold reveal where the decision is delicate.
- Flag for an overestimating eigenvalue rule
- The one flag in the output, raised when the eigenvalue-above-one rule suggests more factors than the comparison does. When it is up, a solution built on that rule is carrying surplus factors.
- Run settings
- The iteration count and percentile used, together with the number of observations and columns analysed. These belong in the write-up, because the threshold depends on them directly.
Effect size and confidence intervals
- Gap between the observed eigenvalue and the simulated threshold
- This gap is the quantity that says how far a factor separates from sampling fluctuation. A wide gap makes retention a safe decision; two figures close together make the decision sensitive to the iteration count and the percentile, and that sensitivity belongs in the write-up.
- Size of the eigenvalue per factor
- On the standardised scale an eigenvalue says how many columns' worth of variance a factor gathers. Divided by the number of columns it gives that factor's share of variance, although this method returns no percentages; those are read from exploratory factor analysis or component analysis output.
- Difference between the two criteria
- The gap between the count from the eigenvalue rule and the count from the comparison measures how strong the tendency to overestimate is in this particular dataset. A difference of one or two factors is unremarkable with survey data.
No confidence interval comes out of this method. The percentile setting is not a confidence level: it decides where the distribution of simulated eigenvalues is cut, which is to say how conservative the threshold will be. Nor does the suggested factor count carry a margin of uncertainty; the output is a single whole number. To judge how firm the decision is, read the pairs of observed and simulated values in the table, and if need be raise the iteration count or change the percentile and run again. Because the random number generator is seeded with a fixed value, repeated runs on the same data with the same settings return identical simulated values; something in the settings has to change before the numbers do.
Example research question and example result
The numbers below are a representative example, not data from a real study or a real user.
- Research question
- How many factors should be retained in a 20-item service quality battery? (Illustrative example, not real data.)
- Variables
- 20 items on a five-point rating format, all numeric and at scale level · 350 respondents with complete answers · 100 iterations, 95th percentile (the defaults)
- Example result
- The observed eigenvalues at the first five ranks were 6.10, 2.42, 1.35, 1.12 and 1.04, against simulated thresholds of 1.46, 1.36, 1.29, 1.23 and 1.18 at the same ranks. The observed value stayed above the threshold for the first three factors and fell below it at the fourth (1.12 against 1.23), where the scan halted. The suggested number of factors was 3, while the eigenvalue-above-one rule gave 5, and the flag for an overestimating eigenvalue rule came back raised.
- Interpretation
- The comparison supports retaining three factors. The fourth and fifth eigenvalues do sit above 1, but they fall short of what random data of this size would produce, so they do not separate from sampling fluctuation, and that is exactly where the difference of two factors comes from. At the third rank the gap is narrow, 1.35 against 1.29, which puts that factor on the boundary: nudge the percentile up and the decision can move to two factors. Once the three-factor solution is fitted, then, it is worth checking how many items form the third factor, how large their loadings are, and whether the factor can be named in content terms. The count is decided here; the structure itself comes out of exploratory factor analysis.
Real output on a sample dataset
The results below were produced by the analysis engine from this data file. Changing the variable changes the research question as well; every run was computed in advance, so the page sends no request to the engine.
Scale development data (synthetic)
A twenty item five point Likert scale answered by three hundred people. The items come from two latent constructs: the first ten measure one construct, the last ten the other, and the two are moderately correlated. The factor and reliability methods run on this file.
- Rows
- 300
- Columns
- respondent_id, item_1, item_2, item_3, item_4, item_5, item_6, item_7, item_8, item_9, item_10, item_11, item_12, item_13, item_14, item_15, item_16, item_17, item_18, item_19, item_20
The data is synthetic: it comes from a fixed random seed, not from a real study. The values below were produced by the analysis engine from this file, so uploading the same file to the panel gives the same results.
Research question: Compared with random data, how many factors genuinely deserve to be retained, and is that fewer than the eigenvalue greater than one rule suggests?
- Analyzed variables
- item_1,item_2,item_3,item_4,item_5,item_6,item_7,item_8,item_9,item_10,item_11,item_12,item_13,item_14,item_15,item_16,item_17,item_18,item_19,item_20
- Number of random datasets
- 200
- Percentile of the random eigenvalues
- 95
- Suggested number of factors
- 2
- Number of factors by the Kaiser criterion
- 2
- n_iterations
- 200
- percentile
- 95
- Valid observations
- 300
- The Kaiser criterion overestimates
- No
Eigenvalue comparison
| Row | Real data eigenvalue | Random data eigenvalue | Factor retained | Exceeds the random eigenvalue |
|---|---|---|---|---|
| Faktör 1 | 5.70 | 1.59 | Yes | Yes |
| Faktör 2 | 3.79 | 1.45 | Yes | Yes |
| Faktör 3 | 0.863 | 1.38 | No | No |
| Faktör 4 | 0.829 | 1.32 | No | No |
| Faktör 5 | 0.779 | 1.25 | No | No |
| Faktör 6 | 0.742 | 1.20 | No | No |
| Faktör 7 | 0.725 | 1.16 | No | No |
| Faktör 8 | 0.639 | 1.12 | No | No |
| Faktör 9 | 0.618 | 1.07 | No | No |
| Faktör 10 | 0.604 | 1.03 | No | No |
| Faktör 11 | 0.580 | 0.992 | No | No |
| Faktör 12 | 0.566 | 0.953 | No | No |
| Faktör 13 | 0.541 | 0.924 | No | No |
| Faktör 14 | 0.519 | 0.883 | No | No |
| Faktör 15 | 0.474 | 0.837 | No | No |
| Faktör 16 | 0.460 | 0.808 | No | No |
| Faktör 17 | 0.441 | 0.770 | No | No |
| Faktör 18 | 0.433 | 0.731 | No | No |
| Faktör 19 | 0.361 | 0.694 | No | No |
| Faktör 20 | 0.335 | 0.642 | No | No |
Computation credits: scipy 1.18.0 · statsmodels 0.14.6 · scikit-learn 1.9.0 · numpy 2.5.1 · pandas 3.0.5 · semopy 2.3.11 · 89fc29a · Data seed: 20260915
How to report the result
The number of factors was determined by Horn's parallel analysis (n = 350, 20 items, 100 iterations, 95th percentile): the first three observed eigenvalues (6.10, 2.42 and 1.35) exceeded their simulated counterparts (1.46, 1.36 and 1.29) while the fourth did not (1.12 against 1.23), so three factors were retained, against the five suggested by the eigenvalue-greater-than-one rule.
An example sentence close to APA style; the numbers are representative.
When you should not use it
- The method decides a count and nothing else. No loading matrix, communalities, explained variance percentages or rotation appear in this output; the solution itself calls for a separate exploratory factor analysis run.
- The scan is cut at the first rank where the observed eigenvalue falls below the threshold. A factor that clears its threshold after an earlier rank has already failed is not retained, so where the eigenvalue curves cross again the rule behaves cautiously and may leave a candidate factor out.
- For borderline factors the answer depends on the percentile and iteration count. Choosing the 99th percentile instead of the 95th on the same data can reduce the number retained, which is why the settings used have to be reported.
- Because the random number generator is seeded with a fixed value, runs on the same data with the same settings return identical simulated values. That is the behaviour you want for reproducibility, but it also hides the variability of the simulation itself.
- The suggested count is a statistical decision, not a theoretical one. If the items cannot be sensibly named under three factors, the number alone is not sufficient grounds.
- No confidence interval or margin of uncertainty is returned; the output is one whole number plus a comparison table.
What to use when the assumptions are not met
- Exploratory Factor Analysis (EFA)Why: To fit the solution itself once the number of factors is settled; loadings, communalities and explained variance are produced there.
- Principal Component Analysis (PCA)Why: When the aim is not to establish a number of latent dimensions but to track, as a percentage, how much spread survives a reduction in columns.
- Confirmatory Factor Analysis (CFA)Why: When both the factor count and the item-to-factor assignments come from theory; the question is then tested through fit indices rather than derived from the data.
Frequently asked questions
- Why does parallel analysis disagree with the eigenvalue-above-one rule?
- Because the two criteria take different things as their threshold. The eigenvalue rule uses a fixed number, the variance one item carries on the standardised scale. But in a dataset of random numbers the leading eigenvalues climb above 1 purely through sampling fluctuation, and the more items there are the larger that inflation grows. Parallel analysis rebuilds the threshold from data of your own size and so absorbs the inflation, which is why it usually suggests fewer factors. The literature has long shown the eigenvalue rule to overstate the number of factors, and where the two answers diverge, taking the one based on comparison is common practice.
- How many iterations and which percentile should I use?
- The defaults are 100 iterations and the 95th percentile, which is the combination most often used in practice. The iteration count governs how steady the threshold is: a percentile computed from 10 iterations wobbles, so if a decision sits on the boundary it is worth raising the count to 500 or 1000 and running again. The percentile governs how conservative the threshold is: the 99th lifts it and fewer factors survive, while values near the middle such as 50 lower it and the rule turns generous. Whichever settings you use belong in the write-up, because the count only means something alongside them.
- Why might a factor that clears its threshold still not be retained?
- The rule is not to count every factor above its threshold but to stop at the first rank where the observed eigenvalue is equal to or below the simulated one. Suppose the fourth factor falls short and the fifth rises back above: the scan is cut at the fourth and the fifth is not retained. The reason is that once the sequence has broken, later excesses are no longer reliably distinguishable from simulation noise. Since the comparison table shows the raw figures, you can see such a case for yourself.
- Can I use this method to show that my scale is unidimensional?
- If the suggested count comes out as 1, that is evidence of a single dimension separating from random data, but it is not a test of unidimensionality. Where a reliability coefficient rests on the assumption of one dimension, the decision should be backed by fitting a one-factor model in confirmatory factor analysis and examining its fit. It also pays to see how close the second eigenvalue came to its threshold: a value like 1.27 against a threshold of 1.29 leaves the unidimensionality claim weak.
References
- Horn, J. L. (1965). A Rationale and Test for the Number of Factors in Factor Analysis
- Hayton, J. C., Allen, D. G., & Scarpello, V. (2004). Factor Retention Decisions in Exploratory Factor Analysis: A Tutorial on Parallel Analysis
- Zwick, W. R., & Velicer, W. F. (1986). Comparison of Five Rules for Determining the Number of Components to Retain
- numpy.linalg.eigvalsh documentation
Try it with your own data
The free plan includes 50 analysis runs a month and needs no card.