fsIndeterminacy: Understanding Factor Score Indeterminacy with Finite...

View source: R/fsIndeterminacy.R

fsIndeterminacyR Documentation

Understanding Factor Score Indeterminacy with Finite Dimensional Vector Spaces


This function illustrates the algebra of factor score indeterminacy using concepts from finite dimensional vector spaces. Given any factor loading matrix, factor correlation matrix, and desired sample size, the program will compute a matrix of observed scores and multiple sets of factors scores. Each set of (m common and p unique) factors scores will fit the model perfectly.


  Lambda = NULL,
  Phi = NULL,
  N = NULL,
  X = NULL,
  SeedX = NULL,
  SeedBasis = NULL,
  SeedW = NULL,
  SeedT = 1,
  DoFCorrection = TRUE,
  Print = "short",
  Digits = 3,
  Example = FALSE



(Matrix) A p x m matrix of factor loadings.


(Matrix) An m x m factor correlation matrix.


(Integer) The desired sample size.


(Matrix) an optional N x p matrix of observed scores. Note that the observed scores are expected to fit the factor model (as they will if they are generated from simFA and Population = TRUE is specified). Default (X = NULL).


(Integer) Starting seed for generating the matrix of observed scores, X.


(Integer) Starting seed for generating a basis for all scores.


(Integer) Starting seed for generating a weight matrix that is used to construct those parts of the factor scores that lie outside of span(X).


(Integer) Starting seed for generating a rotation matrix that creates a new set of factor scores from an existing set of scores such that the new set also perfectly fits the factor model.


(Logical) Degrees of freedom correction. If DoFCorrection = TRUE then var(x) = 1/(N-1) * t(x) %*% x; else var(x) = 1/N * t(x) %*% x. Default (DoFCorrection = TRUE).


(Character) If Print = "none" no summary information will be printed. If Print = "short" then basic output for evaluating the factor scores will be printed. If Print = "long" extended output will be printed. Default (Print = "short").


(Integer) Sets the number of significant digits to print when printing is requested.


(Logical) If Example = TRUE the program will execute the orthogonal two factor model described in Waller (2021).


  • "Sigma": The p x p model implied covariance matrix.

  • "X": An N x p data matrix for the observed variables.

  • "Fhat": An N x (m + p) matrix of regression factor score estimates.

  • "Fi": A possible set of common and unique factor scores.

  • "Fj": The set of factor scores that are minimally correlated with Fi.

  • "Fk": Another set of common and unique factor scores. Note that in a 1-factor model, Fk = Fi.

  • "Fl": The set of factor scores that are minimally correlated with Fk. Note that in a 1-factor model, Fj = Fl.

  • "Ei": Residual scores for Fi.

  • "Ej": Residual scores for Fj.

  • "Ek": Residual scores for Fk.

  • "El": Residual scores for Fl.

  • "L": The factor loading super matrix.

  • "C": The factor correlation super matrix.

  • "V": A (non unique) basis for R^N.

  • "W": Weight matrix for generating Zi.

  • "Tmat": The orthogonal transformation matrix used to construct Fk from Fi .

  • "B: The matrix that takes Ei to Ek (Ek = Ei B).

  • "Bstar" In an orthogonal factor model, Bstar takes Fi to Fk (Fk = Fi Bstar). In an oblique model the program returns Bstar=NULL.

  • "P": The matrix that imposes the proper covariance structure on Ei.

  • "SeedX": Starting seed for X.

  • "SeedBasis": Starting seed for the basis.

  • "SeedW": Starting seed for weight matrix W.

  • "SeedT": Starting seed for rotation matrix T.

  • "Guttman": Guttman indeterminacy measures for the common and unique factors.

  • "CovFhat": Covariance matrix of estimated factor scores.


Niels G. Waller (nwaller@umn.edu)


Guttman, L. (1955). The determinacy of factor score matrices with applications for five other problems of common factor theory. British Journal of Statistical Psychology, 8, 65-82.

Ledermann, W. (1938). The orthogonal transformation of a factorial matrix into itself. Psychometrika, 3, 181-187.

Schönemann, P. H. (1971). The minimum average correlation between equivalent sets of uncorrelated factors. Psychometrika, 36, 21-30.

Steiger, J. H. and Schonemann, P. H. (1978). In Shye, S. (Ed.), A history of factor indeterminacy (pp. 136–178). San Francisco: Jossey-Bass.

Waller, N. G. (2021) Understanding factor indeterminacy through the lens of finite dimensional vector spaces. Manuscript under review.

See Also

Other Factor Analysis Routines: BiFAD(), Box26, GenerateBoxData(), Ledermann(), SLi(), SchmidLeiman(), faAlign(), faEKC(), faIB(), faLocalMin(), faMB(), faMain(), faScores(), faSort(), faStandardize(), faX(), fals(), fapa(), fareg(), orderFactors(), print.faMB(), print.faMain(), promaxQ(), summary.faMB(), summary.faMain()


# ---- Example 1: ----
# To run the example in Waller (2021) enter:
out1 <- fsIndeterminacy(Example = TRUE)

# ---- Example 1: Extended Version: ----

N <- 10 # number of observations
# Generate Lambda: common factor loadings 
#          Phi: Common factor correlation matrix

Lambda <- matrix(c(.8,  0,
                   .7,  0,
                   .6,  0,
                    0, .5,
                    0, .4,
                    0, .3), 6, 2, byrow=TRUE)

out1  <- fsIndeterminacy(Lambda,
                         Phi = NULL,    # orthogonal model
                         SeedX = 1,     # Seed for X
                         SeedBasis = 2, # Seed for Basis
                         SeedW = 3,     # Seed for Weight matrix
                         SeedT = 5,     # Seed for Transformation matrix
                         N = 10,        # Number of subjects
                         Print = "long",
                         Digits = 3)

# Four sets of factor scores
  Fi <- out1$Fi
  Fj <- out1$Fj
  Fk <- out1$Fk
  Fl <- out1$Fl

# Estimated Factor scores
  Fhat <- out1$Fhat

# B wipes out Fhat (in an orthogonal model)
  B <- out1$B
  round( cbind(Fhat[1:5,1:2], (Fhat %*% B)[1:5,1:2]), 3) 

# B takes Ei -> Ek
  Ei <- out1$Ei
  Ek <- out1$Ek
  Ek - (Ei %*% B)

# The Transformation Approach
# Bstar takes Fi --> Fk
  Bstar <- out1$Bstar
  round( Fk - Fi %*% Bstar, 3)

# Bstar L' = L'
  L <- out1$L
  round( L %*% t(Bstar), 3)[,1:2]  

# ---- Example 3 ----
# We choose a different seed for T

out2  <- fsIndeterminacy(Lambda , 
                        Phi = NULL, 
                        X = NULL,
                        SeedX = 1,     # Seed for X 
                        SeedBasis = 2, #  Seed for Basis
                        SeedW = 3,     #  Seed for Weight matrix
                        SeedT = 4,     # Seed for Transformation matrix
                        Print = "long",
                        Digits = 3,
                        Example = FALSE)
 Fi <- out2$Fi
 Fj <- out2$Fj
 Fk <- out2$Fk
 Fl <- out2$Fl
 X  <- out2$X
# Notice that all sets of factor scores are model consistent 
 round( t( solve(t(Fi) %*% Fi) %*% t(Fi) %*% X) ,3)
 round( t( solve(t(Fj) %*% Fj) %*% t(Fj) %*% X) ,3)
 round( t( solve(t(Fk) %*% Fk) %*% t(Fk) %*% X) ,3)
 round( t( solve(t(Fl) %*% Fl) %*% t(Fl) %*% X) ,3)
# Guttman's Indeterminacy Index
round( (1/N * t(Fi) %*% Fj)[1:2,1:2], 3)

fungible documentation built on March 31, 2023, 5:47 p.m.