generateStructure: Generate a Factor Structure Matrix

View source: R/generateStructure.r

generateStructureR Documentation

Generate a Factor Structure Matrix

Description

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.

Usage

generateStructure(var, mjc, pmjc, loadings, unique)

Arguments

var

numeric: number of variables

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

Value

values numeric matrix: factor structure

Author(s)

Gilles Raiche
Centre sur les Applications des Modeles de Reponses aux Items (CAMRI)
Universite du Quebec a Montreal
raiche.gilles@uqam.ca

David Magis
Departement de mathematiques
Universite de Liege
David.Magis@ulg.ac.be

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.

See Also

principalComponents, iterativePrincipalAxis, rRecovery

Examples

# .......................................................
# Example inspired from Zwick and Velicer (1986, table 2, p. 437)
## ...................................................................
unique=0.2; loadings=0.5
zwick1 <- 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 model
nsubjects <- 72
mzwick5   <- psych::sim.structure(fx=as.matrix(zwick5), n=nsubjects)
mzwick5$r

# Factor analysis: recovery of the factor structure
iterativePrincipalAxis(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 retain
eigenvalues  <- 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 retain
eigenvalues.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)
# ......................................................



nFactors documentation built on Oct. 10, 2022, 5:07 p.m.