tam.fa.Rd
Estimates the bifactor model and exploratory factor analysis with marginal maximum likelihood estimation.
This function is simply a wrapper to tam.mml
or
tam.mml.2pl
.
tam.fa(resp, irtmodel, dims=NULL, nfactors=NULL, pid=NULL,
pweights=NULL, verbose=TRUE, control=list(), ...)
Data frame with polytomous item responses \(k=0,...,K\).
Missing responses must be declared as NA
.
A string which defines the IRT model to be estimated. Options
are "efa"
(exploratory factor analysis), "bifactor1"
(Rasch
testlet model in case of dichotomous data; Wang & Wilson, 2005;
for polytomous data it assumes item slopes of 1) and "bifactor2"
(bifactor model).
See Details for more information.
A numeric or string vector which only applies in case of
irtmodel="bifactor1"
or irtmodel="bifactor2"
.
Different entries in the vector indicate different dimensions of items
which should load on the nested factor. If items should only load
on the general factor, then an NA
must be specified.
A numerical value which indicates the number of factors in exploratory factor analysis.
An optional vector of person identifiers
An optional vector of person weights
Logical indicating whether output should
be printed during iterations. This argument replaces control$progress
.
See tam.mml
for more details. Note that the default is
Quasi Monte Carlo integration with 1500 nodes (snodes=1500
,
QMC=TRUE
).
Further arguments to be passed. These arguments are used in
tam.mml
and tam.mml.2pl
. For example,
beta.inits
or xsi.inits
can be supplied.
The exploratory factor analysis (irtmodel="efa"
is estimated using an echelon form of the loading matrix and uncorrelated factors.
The obtained standardized loading matrix is rotated using oblimin rotation.
In addition, a Schmid-Leimann transformation (see Revelle & Zinbarg, 2009)
is employed.
The bifactor model (irtmodel="bifactor2"
; Reise 2012)
for dichotomous responses is defined as
$$logit P(X_{pi}=1 | \theta_{pg}, u_{p1}, \ldots, u_{pD} )=
a_{i0} \theta_{pg} + a_{i1} u_{pd(i) } $$
Items load on the general factor \(\theta_{pg}\) and a specific (nested)
factor \(u_{pd(i) }\). All factors are assumed to be uncorrelated.
In the Rasch testlet model (irtmodel="bifactor1"
),
all item slopes are set to 1 and variances are
estimated.
For polytomous data, the generalized partial credit model is used. The loading structure is defined in the same way as for dichotomous data.
The same list entries as in tam.mml
but in addition the
following statistics are included:
Standardized factor loadings of the bifactor model or the exploratory factor analysis.
In case of exploratory factor analysis (irtmodel="efa"
),
loadings form the Schmid-Leimann solution of the psych package.
Output from oblimin rotation in exploratory factor analysis which is produced by the GPArotation package
Vector of dimensionality and reliability statistics. Included are the ECV measure (explained common variation; Reise, Moore & Haviland, 2010; Reise, 2012), \(\omega_t\) (Omega Total), \(\omega_a\) (Omega asymptotic) and \(\omega_h\) (Omega hierarchical) (Revelle & Zinbarg, 2009). The reliability of the sum score based on the bifactor model for dichotomous item responses is also included (Green & Yang, 2009).
Green, S. B., & Yang, Y. (2009). Reliability of summed item scores using structural equation modeling: An alternative to coefficient alpha. Psychometrika, 74, 155-167. doi:10.1007/s11336-008-9099-3
Reise, S. P. (2012). The rediscovery of bifactor measurement models. Multivariate Behavioral Research, 47(5), 667-696. doi:10.1080/00273171.2012.715555
Reise, S. P., Moore, T. M., & Haviland, M. G. (2010). Bifactor models and rotations: Exploring the extent to which multidimensional data yield univocal scale scores. Journal of Personality Assessment, 92(6), 544-559. doi:10.1080/00223891.2010.496477
Revelle, W., & Zinbarg, R. E. (2009). Coefficients alpha, beta, omega and the glb: Comments on Sijtsma. Psychometrika, 74(1), 145-154. doi:10.1007/s11336-008-9102-z
Wang, W.-C., & Wilson, M. (2005). The Rasch testlet model. Applied Psychological Measurement, 29(2), 126-149. doi:10.1177/0146621604271053
For more details see tam.mml
because tam.fa
is just
a wrapper for tam.mml.2pl
and tam.mml
.
if (FALSE) {
#############################################################################
# EXAMPLE 1: Dataset reading from sirt package
#############################################################################
data(data.read,package="sirt")
resp <- data.read
#***
# Model 1a: Exploratory factor analysis with 2 factors
mod1a <- TAM::tam.fa( resp=resp, irtmodel="efa", nfactors=2 )
summary(mod1a)
# varimax rotation
stats::varimax(mod1a$B.stand)
# promax rotation
stats::promax(mod1a$B.stand)
# more rotations are included in the GPArotation package
library(GPArotation)
# geomin rotation oblique
GPArotation::geominQ( mod1a$B.stand )
# quartimin rotation
GPArotation::quartimin( mod1a$B.stand )
#***
# Model 1b: Rasch testlet model with 3 testlets
dims <- substring( colnames(resp),1,1 ) # define dimensions
mod1b <- TAM::tam.fa( resp=resp, irtmodel="bifactor1", dims=dims )
summary(mod1b)
#***
# Model 1c: Bifactor model
mod1c <- TAM::tam.fa( resp=resp, irtmodel="bifactor2", dims=dims )
summary(mod1c)
#***
# Model 1d: reestimate Model 1c but assume that items 3 and 5 do not load on
# specific factors
dims1 <- dims
dims1[c(3,5)] <- NA
mod1d <- TAM::tam.fa( resp=resp, irtmodel="bifactor2", dims=dims1 )
summary(mod1d)
#############################################################################
# EXAMPLE 2: Polytomous data
#############################################################################
data(data.timssAusTwn.scored, package="TAM")
dat <- data.timssAusTwn.scored
resp <- dat[, grep("M0", colnames(dat))]
#***
# Model 1a: Rasch testlet model with 2 testlets
dims <- c( rep(1,5), rep(2,6))
mod1a <- TAM::tam.fa( resp=resp, irtmodel="bifactor1", dims=dims )
summary(mod1a)
#***
# Model 1b: Bifactor model
mod1b <- TAM::tam.fa( resp=resp, irtmodel="bifactor2", dims=dims )
summary(mod1b)
}