bifactor(L, Tmat=diag(ncol(L)), normalize=FALSE, eps=1e-5, maxit=1000)
biquartimin(L, Tmat=diag(ncol(L)), normalize=FALSE, eps=1e-5, maxit=1000)
TargetQ(L, Tmat=diag(ncol(L)), normalize=FALSE, eps=1e-5, maxit=1000,Target=NULL)
Promax(x, m = 4)
target.rot(x,keys=NULL)
vgQ.bimin(L) #called by bifactor
vgQ.targetQ(L,Target=NULL) #called by TargetQ
The difference between biquartimin and bifactor is just that the latter is the orthogonal case which is documented in Jennrich and Bentler (2011). It seems as if these two functions are sensitive to the starting values and random restarts (modifying T) might be called for.
bifactor output for the 24 cognitive variable of Holzinger matches that of Jennrich and Bentler as does output for the Chen et al. problem when fm="mle" is used and the Jennrich and Bentler solution is rescaled from covariances to correlations.
Promax is a very direct adaptation of the stats::promax function. The addition is that it will return the interfactor correlations as well as the loadings and rotation matrix.
In addition, it will take output from either the factanal, fa
or earlier (factor.pa
, factor.minres
or principal
) functions and select just the loadings matrix for analysis.
The target.rot function is an adaptation of a function of Michael Browne's to do rotations to arbitrary target matrices. Suggested by Pat Shrout.
The default for target.rot is to rotate to an independent cluster structure (every items is assigned to a group with its highest loading.)
target.rot will not handle targets that have linear dependencies (e.g., a pure bifactor model where there is a g loading and a group factor for all variables).
Jennrich, Robert and Bentler, Peter (2011) Exploratory Bi-Factor Analysis. Psychometrika, 1-13
promax
, factor.pa
, factor.minres
, or principal
for examples of data analysis and Holzinger
or Bechtoldt
for examples of bifactor data.jen <- sim.hierarchical()
f3 <- fa(jen,3,rotate="varimax")
f3 #not a very clean solution
Promax(f3)
target.rot(f3)
m3 <- factanal(covmat=jen,factors=3)
Promax(m3) #example of taking the output from factanal
#compare this rotation with the solution from a targeted rotation aimed for an independent cluster solution
target.rot(m3)
#now try a bifactor solution
f3.bi <- fa(jen,3,rotate="bifactor")
f3.bi
f3.biq <- fa(jen,3,rotate="biquartimin")
Run the code above in your browser using DataCamp Workspace