The generateStructure function returns a mjc factor structure matrix. The number of variables per major factor pmjc is equal for each factor. The argument pmjc must be divisible by nVar. The arguments are strongly inspired from Zick and Velicer (1986, p. 435-436) methodology.
mjc: numeric: number of major factors (factors with practical significance)
pmjc: numeric: number of variables that load significantly on each major factor
loadings: numeric: loadings on the significant variables on each major factor
unique: numeric: loadings on the non significant variables on each major factor
Returns
values numeric matrix: factor structure
Examples
# .......................................................# Example inspired from Zwick and Velicer (1986, table 2, p. 437)## ...................................................................unique=0.2; loadings=0.5zwick1 <- generateStructure(var=36, mjc=6, pmjc=6, loadings=loadings, unique=unique)zwick2 <- generateStructure(var=36, mjc=3, pmjc=12, loadings=loadings, unique=unique)zwick3 <- generateStructure(var=72, mjc=9, pmjc=8, loadings=loadings, unique=unique)zwick4 <- generateStructure(var=72, mjc=6, pmjc=12, loadings=loadings, unique=unique)sat=0.8## ...................................................................zwick5 <- generateStructure(var=36, mjc=6, pmjc=6, loadings=loadings, unique=unique)zwick6 <- generateStructure(var=36, mjc=3, pmjc=12, loadings=loadings, unique=unique)zwick7 <- generateStructure(var=72, mjc=9, pmjc=8, loadings=loadings, unique=unique)zwick8 <- generateStructure(var=72, mjc=6, pmjc=12, loadings=loadings, unique=unique)## ...................................................................# nsubjects <- c(72, 144, 180, 360)# require(psych)# Produce an usual correlation matrix from a congeneric modelnsubjects <-72mzwick5 <- psych::sim.structure(fx=as.matrix(zwick5), n=nsubjects)mzwick5$r
# Factor analysis: recovery of the factor structureiterativePrincipalAxis(mzwick5$model, nFactors=6, communalities="ginv")$loadings
iterativePrincipalAxis(mzwick5$r , nFactors=6, communalities="ginv")$loadings
factanal(covmat=mzwick5$model, factors=6)factanal(covmat=mzwick5$r , factors=6)# Number of components to retaineigenvalues <- eigen(mzwick5$r)$values
aparallel <- parallel(var = length(eigenvalues), subject = nsubjects, rep =30, quantile =0.95, model="components")$eigen$qevpea
results <- nScree(x = eigenvalues, aparallel = aparallel)results$Components
plotnScree(results)# Number of factors to retaineigenvalues.fa <- eigen(corFA(mzwick5$r))$values
aparallel.fa <- parallel(var = length(eigenvalues.fa), subject = nsubjects, rep =30, quantile =0.95, model="factors")$eigen$qevpea
results.fa <- nScree(x = eigenvalues.fa, aparallel = aparallel.fa, model ="factors")results.fa$Components
plotnScree(results.fa)# ......................................................
References
Raiche, G., Walls, T. A., Magis, D., Riopel, M. and Blais, J.-G. (2013). Non-graphical solutions for Cattell's scree test. Methodology, 9(1), 23-29.
Zwick, W. R. and Velicer, W. F. (1986). Comparison of five rules for determining the number of components to retain. Psychological Bulletin, 99, 432-442.