Each simulated student has two hidden abilities — mathematical and verbal — that are never observed directly. Six test scores are generated as noisy linear combinations of those two abilities: x = Λf + ε. Because every test leaks information about the same underlying abilities, the tests end up correlated with each other, and that correlation structure is all the simulator is allowed to "see."
R = (1/(N-1)) · ZᵀZ
R·v = λ·v (Jacobi eigen-decomposition)
loading = v · √λ
score = Z · v
- Correlation strength — how strongly each test truly depends on its ability; higher values make the two clusters of tests (math vs. verbal) pull apart into tighter, more separable point clouds.
- Factors to extract — how many eigenvectors of the correlation matrix are treated as "real" factors; the remaining axis is mostly noise and its loadings fade out.
- Loading arrows — for each variable, the arrow's components on the F1/F2/F3 axes are that variable's factor loadings; a long arrow near an axis means the test is a near-pure measure of that factor.
- Point cloud — every point is one simulated student, plotted at its estimated factor scores; two visible arms should emerge, one per hidden ability, once correlation strength is high enough.
This is the same eigenvector extraction used by real principal-axis factor analysis: diagonalize the correlation matrix, keep the top eigenvectors, and read off variance explained (eigenvalue ÷ number of variables) — the simplification here is skipping iterative communality re-estimation, which real PAF loops on.