mirt - second order model

1,353 views
Skip to first unread message

June Kuo

unread,
Jun 13, 2017, 4:24:19 PM6/13/17
to mirt-package
Does mirt support the second-order model? From the manual mirt can fit the unidimensional model, the bifactor and two-tier models, and the multidimensional model. I would like to know if it is possible to fit the data in the second model in the mirt package? Thanks.

Phil Chalmers

unread,
Jun 14, 2017, 1:31:39 PM6/14/17
to June Kuo, mirt-package
The second order model can be understood as a constrained version of the bifactor model, so imposing particular proportionality constraints would allow you to fit it. See the following article for further discussion:

Yung, Y.-F.; Thissen, D. & McLeod, L. D. On the relationship between the higher-order factor model and the hierarchical factor model Psychometrika, 1999, 64, 113-128



Phil

On Tue, Jun 13, 2017 at 4:24 PM, June Kuo <tzu7...@gmail.com> wrote:
Does mirt support the second-order model? From the manual mirt can fit the unidimensional model, the bifactor and two-tier models, and the multidimensional model. I would like to know if it is possible to fit the data in the second model in the mirt package? Thanks.

--
You received this message because you are subscribed to the Google Groups "mirt-package" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mirt-package+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Dirk Pelt

unread,
Aug 22, 2017, 8:16:52 AM8/22/17
to mirt-package, tzu7...@gmail.com
Hi Phil,

following up on this, did you mean that the proportionality constraints (Schmid-Leiman transformation?) should be modeled/plugged in manually?

Or has there in the meantime been an update that allows for fitting hierarchical models more directly in the mirt package?

Best, Dirk

Phil

To unsubscribe from this group and stop receiving emails from it, send an email to mirt-package...@googlegroups.com.

Phil Chalmers

unread,
Aug 22, 2017, 12:55:35 PM8/22/17
to Dirk Pelt, mirt-package
They would have to be modelled manually in mirt through special optimisation constraints in the M-step, which could be quite verbose and tedious to actually do (I've never personally done it, but it's likely possible). 

Phil

To unsubscribe from this group and stop receiving emails from it, send an email to mirt-package+unsubscribe@googlegroups.com.

Jorge Sinval

unread,
Aug 24, 2021, 5:59:29 AM8/24/21
to mirt-package
Can someone provide an example with code?

Michael P. Grosz

unread,
Sep 18, 2021, 11:06:54 AM9/18/21
to mirt-package
Yes, I think it would be helpful to see an example code for how proportionality constraints could be imposed to fit a second-order factor model.

Phil Chalmers

unread,
Sep 21, 2021, 4:24:55 PM9/21/21
to Michael P. Grosz, mirt-package
I'm not 100% sure what is being asked here, but in case this is just about how to obtain the associated parameters for a higher-order model after having fit a testlet model via bfactor() the result is reasonably straightforward. For the higher-order model the form is 

P(y|θ,ψ) = ∑ as θs + d

where the θs terms are models according to the general factor θs = βs θg + ϵ. However, rather than fitting this model the testlet response model can be fit instead to impose the proportionality constraints, and then back-transformed when the model converges. Below is an example of this from the manual:

##########
library(mirt)

#simulate data
set.seed(1234)
a <- matrix(0, 12, 4)
a[,1] <- rlnorm(12, .2, .3)
ind <- 1
for(i in 1:3){
   a[ind:(ind+3),i+1] <- a[ind:(ind+3),1]
   ind <- ind+4
}
print(a)
d <- rnorm(12, 0, .5)
sigma <- diag(c(1, .5, 1, .5))
dataset <- simdata(a,d,2000,itemtype=rep('2PL', 12),sigma=sigma)

# estimate by applying constraints and freeing the latent variances
specific <- c(rep(1,4),rep(2,4), rep(3,4))
model <- "G = 1-12
          CONSTRAIN = (1, a1, a2), (2, a1, a2), (3, a1, a2), (4, a1, a2),
            (5, a1, a3), (6, a1, a3), (7, a1, a3), (8, a1, a3),
            (9, a1, a4), (10, a1, a4), (11, a1, a4), (12, a1, a4)
          COV = S1*S1, S2*S2, S3*S3"

simmod <- bfactor(dataset, specific, model)
coef(simmod, simplify=TRUE)
####

From this output the loadings on either the general of specific factor correspond to the same loadings as in the higher-order model (as they're constrained to be equal), while the β coefficients are obtained by way of the transformation 1/√{VAR(θs)). Using the above output, just use

###
cov <- coef(simmod, simplify=TRUE)$cov
betas <- 1 / sqrt(diag(cov)[-1L])
betas
###

HTH.

Phil


Dimitrios Zacharatos

unread,
Feb 17, 2022, 4:58:09 PM2/17/22
to mirt-package
This is a question I have as well and its nice to see that people have addressed it already, thank you guys.

Dimitrios Zacharatos

unread,
Feb 17, 2022, 6:40:43 PM2/17/22
to mirt-package
after I perform this model specification and this beta transformation can I use all other functions kindly provided in the mirt package without worries? more specifically will I be able to compute M* produce test information functions etc to evaluate the model?
Reply all
Reply to author
Forward
0 new messages