knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Simulate "stats" from underlying factors

library(mvtnorm)
library(psych)

set.seed(1.234)
N <- 200                             # number of observations
P <- 6                               # number of variables
Q <- 2                               # number of factors

# true P x Q loading matrix -> variable-factor correlations
Lambda <- matrix(c(0.7,-0.4, 0.8,0, -0.2,0.9, -0.3,0.4, 0.3,0.7, -0.8,0.1),
                 nrow=P, ncol=Q, byrow=TRUE)

FF  <- rmvnorm(N, mean=c(5, 15), sigma=diag(Q))    # factor scores (uncorrelated factors)
E   <- rmvnorm(N, rep(0, P), diag(P)) # matrix with iid, mean 0, normal errors
X   <- FF %*% t(Lambda) + E           # matrix with variable values
Xdf <- data.frame(X) 

Lambda
fa(X, nfactors = 2, rotate = "varimax")$loadings
?factanal
factanal()


jwmortensen/roster documentation built on May 30, 2019, 3:09 p.m.