Estimate an FAmodel
.
estFAmodel(Sigma, p, n.obs=NA,
est="factanal",
estArgs=list(scores="none", control=list(opt=list(maxit=10000))),
rotation=if(p==1) "none" else "quartimin", rotationArgs=NULL,
GPFargs=list(Tmat=diag(p), normalize=TRUE, eps=1e-5, maxit=1000),
BpermuteTarget=NULL,
factorNames=paste("Factor", seq(p)),
indicatorNames=NULL)
covariance of the data matrix.
integer indication number of observations in the dataset.
integer indication number of factors to estimate.
name of the estimation function.
list of aarguments passed to the estimation function.
character vector indicating the factor rotation method (see GPArotation for many options).
list of arguments passed to the rotation method,
specifying arguments for the rotation criteria. See GPFoblq
.
list of arguments passed to GPFoblq
or GPForth
for rotation optimization
matrix of loadings. If supplied, this is used to permute the order of estimated factors and change signs. (It is for comparison with other results.
vector of strings indicating names of factor series.
vector of strings indicating names of indicator series.
A FAmodel
object (see details).
The default est
method and quartimin
rotation give parameters
using standard
(quasi) ML factor analysis (on the correlation matrix and then scaled back).
The function factanal
with no rotation is used to find the initial
(orthogonal) solution. Rotation is then done
(by default with quartimin using GPFoblq
optimization).
factanal
always uses the correlation matrix, so standardizing does
not affect the solution.
If rotation
is "none"
the result of the factanal
estimation is not rotated. In this case, to avoid confusion with a rotated
solution, the factor covariance matrix Phi
is returned as NULL
.
Another possibility for its value would be the identity matrix, but this is
not calculated so NULL
avoids confusion.
The arguments rotation
, rotationArgs
are used for rotation.
The quartimin default uses GPArotation and its default
normalize=TRUE
, eps=1e-5
, maxit=1000
, and Tmat=I
are passed through the rotation method to GPFoblq
.
The estimated loadings, Bartlett predictor matrix, etc.,
are put in the returned FAmodel
(see below).
The Bartlett factor score coefficient matrix can be calculated as
$$(B' \Omega^{-1} B)^{-1} B' \Omega^{-1} x$$
or equivalently as
$$(B' \Sigma^{-1} B)^{-1} B' \Sigma^{-1} x,$$
The first is simpler because \(\Omega\) is diagonal, but breaks down
with a Heywood case, because \(\Omega\) is then singular (one or
more of its diagonal elements are zero). The second only requires
nonsingularity of \(\Sigma\). Typically, \(\Sigma\) is not singular
even if \(\Omega\) is singular.
\(\Sigma\) is calculated from \(B \Phi B' + \Omega\),
where \(B, \Phi,\) and \(\Omega\) are the
estimated values returned from factanal
and rotated.
The data covariance could also be used for \(\Sigma\).
(It returns the same result with this estimation method.)
The returned FAmodel
object is a list containing
the estimated loadings matrix.
the covariance of the idiosyncratic component (residuals).
the covariance of the factors.
the Bartlett predictor matrix.
the standardized Bartlett predictor matrix.
a logical indicating if estimation converged.
a logical indicating if rotation converged.
a logical indicating if the rotation is orthogonal.
the uniquenesses.
thearguments of the function call.
Gilbert, Paul D. and Meijer, Erik (2005) Time Series Factor Analaysis with an Application to Measuring Money. Research Report 05F10, University of Groningen, SOM Research School. Available from https://hdl.handle.net/11370/d7d4ea3d-af1d-487a-b9b6-c0816994ef5a.
# NOT RUN {
data("WansbeekMeijer", package="GPArotation")
fa.unrotated <- estFAmodel(NetherlandsTV, 2, n.obs=2150, rotation="none" )
fa.varimax <- estFAmodel(NetherlandsTV, 2, n.obs=2150, rotation="Varimax" )
fa.eiv <- estFAmodel(NetherlandsTV, 2, n.obs=2150, rotation="eiv" )
fa.oblimin <- estFAmodel(NetherlandsTV, 2, n.obs=2150, rotation="oblimin" )
cbind(loadings(fa.unrotated), loadings(fa.varimax), loadings(fa.oblimin), loadings(fa.eiv))
# }
Run the code above in your browser using DataLab