bfactor
fits a confirmatory maximum likelihood
bifactor model to dichotomous data under the item
response theory paradigm. Pseudo-guessing parameters may
be included but must be declared as constant.bfactor(fulldata, specific, guess = 0, SE = FALSE,
prev.cor = NULL, par.prior = FALSE, startvalues = NULL,
quadpts = NULL, ncycles = 300, EMtol = .001, nowarn =
TRUE, debug = FALSE, ...)
## S3 method for class 'bfactor':
summary(object, digits = 3, ...)
## S3 method for class 'bfactor':
coef(object, digits = 3, ...)
## S3 method for class 'bfactor':
fitted(object, digits = 3, ...)
## S3 method for class 'bfactor':
residuals(object, restype = 'LD',
digits = 3, printvalue = NULL, ...)
matrix
or
data.frame
of item responses that consists of only
0, 1, and NA
values to be factor analyzed. If
scores have been recorded by the response pattern then
they can be recoded to dichotomres='exp'
option. Only prints patterns
that have standardized residuals greater than
abs(printvalue)
. The default (NULL) prints all
response patternsncol(fulldata)
.slope
and int
to
specify the coefficients beta prior for the slopes and
normal prior for the intercNULL
then the number of quadrature points is
set to 9bfactor
of
class bfactorClass
'LD'
for a local dependence matrix (Chen &
Thissen, 1997) or 'exp'
for the expected values
for the frequencies of every response patternbfactor
follows the item factor analysis strategy
explicated by Gibbons and Hedeker (1992). Nested models
may be compared via an approximate chi-squared difference
test or by a reduction in AIC or BIC (accessible via
anova
); note that this only makes sense
when comparing class bfactorClass
models to class
mirtClass
. The general equation used for item
bifactor analysis in this package is in the logistic form
with a scaling correction of 1.702. This correction is
applied to allow comparison to mainstream programs such
as TESTFACT 4 (2003).
Unlike TESTFACT 4 (2003) initial start values are
computed by using information from a quasi-tetrachoric
correlation matrix, potentially with Carroll's (1945)
adjustment for chance responses. To begin, a MINRES
factor analysis with one factor is extracted, and the
transformed loadings and intercepts (see mirt for
more details) are used as starting values for the general
factor loadings and item intercepts. Values for the
specific factor loadings are taken to be half the
magnitude of the extracted general factor loadings. Note
that while the sign of the loading may be incorrect for
specific factors (and possibly for some of the general
factor loadings) the intercepts and general factor
loadings will be relatively close to the final solution.
These initial values should be an improvement over the
TESTFACT initial starting values of 1.414 for all the
general factor slopes, 1 for all the specific factor
slopes, and 0 for all the intercepts.
Factor scores are estimated assuming a normal prior
distribution and can be appended to the input data matrix
(full.scores = TRUE
) or displayed in a summary
table for all the unique response patterns. Fitted and
residual values can be observed by using the
fitted
and residuals
functions. To examine
individuals item plots use itemplot
which
will also plot information and surface functions
(although the plink
package may be
more suitable for IRT graphics). Residuals are computed
using the LD statistic (Chen & Thissen, 1997) in the
lower diagonal of the matrix returned by
residuals
, and Cramer's V above the diagonal.expand.table
, key2binary
,
confmirt
, fscores
###load SAT12 and compute bifactor model with 3 specific factors
data(SAT12)
fulldata <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
specific <- c(2,3,2,3,3,2,1,2,1,1,1,3,1,3,1,2,1,1,3,3,1,1,3,1,3,3,1,3,2,3,1,2)
mod1 <- bfactor(fulldata, specific)
coef(mod1)
###Try with guessing parameters added
guess <- rep(.1,32)
mod2 <- bfactor(fulldata, specific, guess = guess)
coef(mod2) #item 32 too difficult to include guessing par
#fix by imposing a weak intercept prior
mod3a <- bfactor(fulldata, specific, guess = guess, par.prior =
list(int = c(0,4), int.items = 32))
coef(mod3a)
#...or by removing guessing parameter
guess[32] <- 0
mod3b <- bfactor(fulldata, specific, guess = guess)
coef(mod3b)
Run the code above in your browser using DataLab