Learn R Programming

tsfa (version 2021.1-3)

estFAmodel: Estimate a Factor Model

Description

Estimate an FAmodel.

Usage

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)

Arguments

Sigma

covariance of the data matrix.

n.obs

integer indication number of observations in the dataset.

p

integer indication number of factors to estimate.

est

name of the estimation function.

estArgs

list of aarguments passed to the estimation function.

rotation

character vector indicating the factor rotation method (see GPArotation for many options).

rotationArgs

list of arguments passed to the rotation method, specifying arguments for the rotation criteria. See GPFoblq.

GPFargs

list of arguments passed to GPFoblq or GPForth for rotation optimization

BpermuteTarget

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.

factorNames

vector of strings indicating names of factor series.

indicatorNames

vector of strings indicating names of indicator series.

Value

A FAmodel object (see details).

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

loadings

the estimated loadings matrix.

Omega

the covariance of the idiosyncratic component (residuals).

Phi

the covariance of the factors.

LB

the Bartlett predictor matrix.

LB.std

the standardized Bartlett predictor matrix.

estConverged

a logical indicating if estimation converged.

rotationConverged

a logical indicating if rotation converged.

orthogonal

a logical indicating if the rotation is orthogonal.

uniquenesses

the uniquenesses.

call

thearguments of the function call.

References

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.

See Also

estTSF.ML, rotations, factanal

Examples

Run this code
# 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