Multilevel IRT using mixedmirt()

1,372 views
Skip to first unread message

stte...@gmail.com

unread,
Jul 18, 2013, 10:20:10 PM7/18/13
to mirt-p...@googlegroups.com
Hi Phil,

I want to do a multilevel IRT analysis considering unidimensional and multidimensional underlying ability. I have two data sets: student and school level data.
Student level data contains responses of about 80000 students to 45 questions and two covariates(e.g. s1 & s2). School level data contains information for 116 schools on eight variables (e.g. w1-w8).
I want to do a random intercept model with covraiates on both levels using one underlying factor and then two (additive model) underlying factors for item responses.

1) can I do this analysis in mirt?
2) if yes, would you please give me some sense of its syntax?
3) Do school level data need to be repeated for each student?

I think this is enough for this post.We can discuss more later.

Thanks,
Amin.

Phil Chalmers

unread,
Jul 20, 2013, 1:23:19 PM7/20/13
to Amin Mousavi, mirt-p...@googlegroups.com
On Thu, Jul 18, 2013 at 10:20 PM, <stte...@gmail.com> wrote:
> Hi Phil,
>
> I want to do a multilevel IRT analysis considering unidimensional and multidimensional underlying ability. I have two data sets: student and school level data.
> Student level data contains responses of about 80000 students to 45 questions and two covariates(e.g. s1 & s2). School level data contains information for 116 schools on eight variables (e.g. w1-w8).
> I want to do a random intercept model with covraiates on both levels using one underlying factor and then two (additive model) underlying factors for item responses.
>
> 1) can I do this analysis in mirt?

Sounds like it.

> 2) if yes, would you please give me some sense of its syntax?

In mixedmirt() there are two types of additional input, fixed and
random, which follow a similar format to how the nlme package
specifies these effects. I keep item level predictors separate though,
which requires an additional optional data.frame to be passed (for
models like the linear latent trait model).

For a multilevel model with a random group and two fixed covariates
you could do something like

mod <- mixedmirt(data, covdata, model, fixed = ~ 0 + s1 + s2, random =
~ 1 | group)

There are a few examples in ?mixedmirt, and I've included comments to
help users understand what's going on.

> 3) Do school level data need to be repeated for each student?

I believe so yes.

Phil

>
> I think this is enough for this post.We can discuss more later.
>
> Thanks,
> Amin.
>
> --
> 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...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

stte...@gmail.com

unread,
Jul 20, 2013, 2:33:25 PM7/20/13
to mirt-p...@googlegroups.com, Amin Mousavi
OK. Let's assume s1 and s2 as student level data, w1 and w2 school level data and clust as clustering indicator which is repeated for w1 and w2 values.It's analogous to "group" in mixedmirt() example (I think so far).

In a multilevel IRT considering our example, level1 and level2 covariates are regressed on estimated abilities as (in a random intercept model):

Ability= B0j +B1*s1+B2*s2 +e (level1 equation,j is cluster indicator)
B0j= G0 +G1*w1+G2*w2 +u0j (level2 equations. u is error)
B1= u1
B2= u2

Indeed I Want to implement this model in mirt in which abilities are estimated by mirt().So

1) I need to have a data frame containing s1,s2,w1,w2 and clust for covariates in a form like:

covdata<-data.frame(clust,s1,s2,w1.w2)

correct?

2) Will the covariates be regressed on estimated abilities?If no, on what will they be regressed?

3) Assuming that covariates are regressed to estimated abilities, a fixed and random formulas for a random intercept model witht level1 and level2 covariates can be like these:

fixed=~0+s1+s2+w1+w2 (I don't know what's the role of 0 in this formula)
random= ~1|clust (the same as 0 in previous formula about 1 in this one)

are those formulas correct?

4) can mixedmirt() give me variance components of the model?

5) For IRT model, all I need is to define the model using confmirt.model(), right?

Sorry for this much of questions, I'm not very familiar with R and just trying to implement my knowledge based on examples in mirt.

Thanks,
Amin.

Phil Chalmers

unread,
Jul 20, 2013, 4:19:39 PM7/20/13
to Amin Mousavi, mirt-p...@googlegroups.com
On Sat, Jul 20, 2013 at 2:33 PM, <stte...@gmail.com> wrote:
> OK. Let's assume s1 and s2 as student level data, w1 and w2 school level data and clust as clustering indicator which is repeated for w1 and w2 values.It's analogous to "group" in mixedmirt() example (I think so far).
>
> In a multilevel IRT considering our example, level1 and level2 covariates are regressed on estimated abilities as (in a random intercept model):
>
> Ability= B0j +B1*s1+B2*s2 +e (level1 equation,j is cluster indicator)
> B0j= G0 +G1*w1+G2*w2 +u0j (level2 equations. u is error)
> B1= u1
> B2= u2
>
> Indeed I Want to implement this model in mirt in which abilities are estimated by mirt().So

It's not really 'abilities' that can be predicted following
convergence since the person level parameters become conditional on
other effects.....they're more like residuals after conditioning on
person/group level predictors.

>
> 1) I need to have a data frame containing s1,s2,w1,w2 and clust for covariates in a form like:
>
> covdata<-data.frame(clust,s1,s2,w1.w2)
>
> correct?

So far so good.

>
> 2) Will the covariates be regressed on estimated abilities?If no, on what will they be regressed?

If no item design is included then yes, the regression is on the
(potentially unequally weighted abilities from designs like the 2PL
model, rather than Rasch) ability parameters.

>
> 3) Assuming that covariates are regressed to estimated abilities, a fixed and random formulas for a random intercept model witht level1 and level2 covariates can be like these:
>
> fixed=~0+s1+s2+w1+w2 (I don't know what's the role of 0 in this formula)
> random= ~1|clust (the same as 0 in previous formula about 1 in this one)

The zero is just for a nicer convention, just like when using a
standard linear model with lm() including a lm(y~ 0 + group) changes
the fixed design matrix from an intercept + predictors format to an
indicator design. It doesn't change anything in the estimation, but I
find it's easier to interpret sometimes, especially for small
categorical predictors like gender.

This formula looks correct, especially if it's a Rasch model you are after.

>
> are those formulas correct?
>
> 4) can mixedmirt() give me variance components of the model?

It gives the estimated variance components by using summary(), or
coef() which will return all parameters with standard errors. Also
useful for applying Wald tests.

>
> 5) For IRT model, all I need is to define the model using confmirt.model(), right?

Yes, or just a numeric value of 1 if its just a one factor solutions
(exploratory models are not allowed though).

Phil

stte...@gmail.com

unread,
Jul 20, 2013, 4:38:44 PM7/20/13
to mirt-p...@googlegroups.com, Amin Mousavi
Interesting.

1) you're right.with "Abilities" I meant for an empty model without covariates

2) I don't have any item design (and I'm not exactly sure what you mean by "item design") and just want to use 2PL model for analyzing data. Do I need to change fixed and random formulas as I'm not going to use Rasch model?

3) So using, say,

model<-confmirt.model(1,itemtype="2PL")

is enough for model specification in case of one(or two) dimensional 2PL IRT model?

Amin.

Phil Chalmers

unread,
Jul 20, 2013, 4:42:13 PM7/20/13
to Amin Mousavi, mirt-p...@googlegroups.com
On Sat, Jul 20, 2013 at 4:38 PM, <stte...@gmail.com> wrote:
> Interesting.
>
> 1) you're right.with "Abilities" I meant for an empty model without covariates

Ah, I see what you mean.

>
> 2) I don't have any item design (and I'm not exactly sure what you mean by "item design") and just want to use 2PL model for analyzing data. Do I need to change fixed and random formulas as I'm not going to use Rasch model?

Yes, pass the option to mixedmirt(..., itemtype = '2PL'). Rasch is the
default here.

>
> 3) So using, say,
>
> model<-confmirt.model(1,itemtype="2PL")
>
> is enough for model specification in case of one(or two) dimensional 2PL IRT model?

model <- 1

is what you want for just a one factor solution. confmirt.model() is
just used for multidimensional models with different estimated item
slopes.

Phil

stte...@gmail.com

unread,
Jul 20, 2013, 4:55:09 PM7/20/13
to mirt-p...@googlegroups.com, Amin Mousavi
Nice.

So, for instance for a two dimensional model it would be enough just to use:

model<-2

or do I need to specify a model like(e.g. for 10 items):

model<-confmirt.model()
f1=1-10 #as I don't know the underlying structure
f2=1-10 #as I don't know the underlying structure
COV=f1*f2
which one is correct?

I used "mlirt" package for analyzing PISA data but it's designed for unidimensional models.I'm goining to compare output of your package with mlirt to see how mirt works.I'll post the results here.

Amin.

Phil Chalmers

unread,
Jul 22, 2013, 12:04:53 AM7/22/13
to Amin Mousavi, mirt-p...@googlegroups.com
No these wouldn't be correct since the models are exploratory, and the
second both exploratory and under-identified. mixedmirt() only accepts
confirmatory models (not rotationally indeterminate ones; think
confirmatory factor analysis in SEM) so the confmirt.model() format or
mirt.model() if you are using the latest dev would have to something
like a simple structure with a inter factor correlation, or whatever
else makes sense empirically. The numeric 1 makes sense since all
models with only one factor can't be rotated anyway.

Phil

stte...@gmail.com

unread,
Jul 22, 2013, 2:10:54 PM7/22/13
to mirt-p...@googlegroups.com, Amin Mousavi
So, I have to decide about the two-dimensional model which I want to use in my analysis.

Another thing,in the output of mixedmirt() for random effects, what are these:

[note: I ran this model
mixedmirt(data = y, covdata = cov, model = model, fixed = ~0 +items, random = ~1 | group, cl = cl) as a random intercept model without any covariate, is it correct?]

$Theta
F1
F1 4.91

$group
COV_group
COV_group 0.000123

and how can I find information about level1 (i.e. sigma) anf level2 (i.e. tau) variances? I use multilevel terminology.

Thanks,
Amin.

Phil Chalmers

unread,
Jul 22, 2013, 2:14:06 PM7/22/13
to Amin Mousavi, mirt-p...@googlegroups.com
I don't really differentiate the two, since you can also have other
random effects that don't necessarily follow that scheme (such as
random item intercepts). I think that the θ variance would be your
level 1 residual, while the group variance would be level 2.

Amin Mousavi

unread,
Jul 22, 2013, 3:51:00 PM7/22/13
to Phil Chalmers, mirt-p...@googlegroups.com
in my simulated data, the level1 residual (aka sigma) was 1.07347 and level2 residual(aka tau) was 0.6059856 which is the variance of level1 intercept across groups.

I used lmer as an alternative to mixedmirt for estimating an empty model (.i.e without covariates) with a random intercept which is:

Level-1 Model

Y = B0 + R

Level-2 Model
B0 = G00 + U0
in which, R is level1 residual (and its variance is called sigma-squared); U0 is level2 residual (and its variance is called tau) and G00 is the fixed effect. I used EAP estimated abilities by mirt for one dimesional model as dependent variable in lmer. Students are nested in 10 groups. This the model I used in lmer:

lmer(F1 ~ 1+(1|group), data,REML=F)

results were:
Random effects:
 Groups   Name        Variance Std.Dev.
 group    (Intercept) 0.00000  0.00000 
 Residual             0.83359  0.91301 
Number of obs: 2000, groups: group, 10

Fixed effects:
             Estimate Std. Error t value
(Intercept) 3.478e-06  2.042e-02       0

which are pretty close to what one can obtain from HLM using the same data set.Note that in the above output Residual is equal to sigma-squared and group is equal to tau. I tried to estimate such model in mixedmirt by:

mixedmirt(data = y, covdata = cov, model = model, fixed = ~1, random = ~1 | group, cl = cl)

and results were:

FIXED EFFECTS:
            Estimate Std.Error z.value
(Intercept)   -0.123     0.025  -4.901

--------------
RANDOM EFFECT COVARIANCE(S):
Correlations on upper diagonal

$Theta
     F1
F1 3.57

$group
          COV_group
COV_group  0.000143

as you can seCOV_group is what we can call tau but I can't find anything similar to sigma-square. The value 3.57 can be obtained in mixedmirt if we create an id variable and uase " 1|id " instead of  " 1|group ".

I'm a little bit confused with output of mixedmirt() compared to other packages.Would you please help to figure this out?

FYI, data sets are attached.

Thanks,
Amin.




respg.csv
student.csv

Phil Chalmers

unread,
Jul 22, 2013, 4:54:46 PM7/22/13
to Amin Mousavi, mirt-p...@googlegroups.com
You are estimating a Rasch model in mixedmirt. When you used mirt() to
estimate your model you should have changed the itemtype = 'Rasch' in
order to make approach comparable when somputing the EAP scores, in
which case the variance parameter is probably considerably larger than
1 judging by the mixedmirt results you posted.

You seem to really want a 2PL model in mixedmirt, so pass the option
itemtype = '2PL'. This will constrain the hyper parameter (your
sigma^2) to be 1 and estimate all the item slopes and intercepts (the
identification mentioned by Fox 2007 in JSS, p. 4). What you are doing
here is fixing all the item slopes @1 and freely estimating the latent
variance parameter, which is more analogous to the standard
exploratory IRT modeling that can be estimated directly with
generalized multilevel modeling software using a binomial link. I
think you are doing a kind of '2PL two-step' which can be modeled in
mixedmirt directly, in which case the latent variance parameter is
often arbitrarily constrained to 1 anyway for identification.

Amin Mousavi

unread,
Jul 22, 2013, 5:31:47 PM7/22/13
to Phil Chalmers, mirt-package
Phil,

Thank you for your clarification. I passed ' itemtype="2PL" ' to mixedmirt() and it returned:
$Theta
   F1
F1  1

$group
          COV_group
COV_group  0.000144

which make sense about sigma^2 and tau. But for intercept as a fixed effect (i.e. G00 in my model) it returned -0.603 which I'm not sure in mixedmirt() this number corresponds to what. I used this code:

mixedmirt(y,cov,model,fixed=~1+items,random=~1|group,itemtype="2PL",cl=cl)

Also, as I understood, I need to have items as fixed effects for assuming that there is no item effect or its fixed across groups, right? Does mixedmirt() always assume that there is a person effect in the model?

I used mlirt package for analyzing my data now I want to use mixedmirt() for the same model.Would you please help me on this assuming that there are "s1" and "w1" as level1 and level2 covariates;respondents are nested with "group" and have responded a 10-item test?
In other word, my model is:

Ability=B0j+ B1*s1 + e
      B0j=G00 + G01*w1 + u0j # j is group indicator
      B1= G10

and as you know,Ability  is estimated through the test under 2PL IRT model.

I know this is too much but you're the only person who can help me on this. Your sense of professional commitment is admired.

Amin.








Phil Chalmers

unread,
Jul 22, 2013, 6:13:04 PM7/22/13
to Amin Mousavi, mirt-package
On Mon, Jul 22, 2013 at 5:31 PM, Amin Mousavi <stte...@gmail.com> wrote:
> Phil,
>
> Thank you for your clarification. I passed ' itemtype="2PL" ' to mixedmirt()
> and it returned:
> $Theta
> F1
> F1 1
>
> $group
> COV_group
> COV_group 0.000144
>
> which make sense about sigma^2 and tau. But for intercept as a fixed effect
> (i.e. G00 in my model) it returned -0.603 which I'm not sure in mixedmirt()
> this number corresponds to what.

Neither do I :-) . It's the same as in lme4 when estimating the item
intercept parameters and not adding the ~ + 0, to the formula so
instead of getting all the item level intercepts you get all but one
of them with a global intercept parameter. That's why in all my
examples when using + items I add the 0 in to make the design matrix
resemble item intercepts.

I used this code:
>
> mixedmirt(y,cov,model,fixed=~1+items,random=~1|group,itemtype="2PL",cl=cl)
>
> Also, as I understood, I need to have items as fixed effects for assuming
> that there is no item effect or its fixed across groups, right?

The internal 'items' keyword frees the item intercept parameters (the
'd' s), otherwise the intercepts aren't estimated at all (and fixed to
0) to allow for the linear latent trait model (LLTM). Use coef() often
on your models to see what's going on, or for even more in depth looks
use mod2values() or extract the @constraints slot for where the
equality constraints are applied.

Does
> mixedmirt() always assume that there is a person effect in the model?

Indeed it does, and I keep it separate to better track where the 2PL
and friend slopes are supposed to go. Also, I really can't imagine
when one wouldn't be estimating this random effect automatically
(explain the model so well that persons don't differ from each other
at all and hence have 0 variance? Right.....)

>
> I used mlirt package for analyzing my data now I want to use mixedmirt() for
> the same model.Would you please help me on this assuming that there are "s1"
> and "w1" as level1 and level2 covariates;respondents are nested with "group"
> and have responded a 10-item test?
> In other word, my model is:
>
> Ability=B0j+ B1*s1 + e
> B0j=G00 + G01*w1 + u0j # j is group indicator
> B1= G10
>
> and as you know,Ability is estimated through the test under 2PL IRT model.

All fixed covariates, regardless of their level, go into the fixed
formula, and random effect to the random (except for the person level
ones typically used in the rest of the package for specifying the
theta designs). Person level covariats (like IQ, for example, and what
you call s1) would go into the covdata object and have a unique value
for each row, while group level data (like group means on some
predictor) would also go here and be given the same values for each
homogenous group so that it also has the same number of rows (what you
call w1). That would be your level 1 and level 2 predictors using that
terminology (I just don't like the terms since you can also have item
level predictors as well).

Random effects work the same, so u0j would correspond to the jth group
in the random = ~ 1 | group syntax. e above is just the ith residual
for persons (possibly weighted by the sloping parameters in the 2PL
model for each item). So you might think of e_i = a_j * theta_i, and
in the Rasch models the simplification is obviously e_i = theta_i,
giving equal impact to each item.


>
> I know this is too much but you're the only person who can help me on this.
> Your sense of professional commitment is admired.

Thanks for your kind words. Hopefully this function is starting to
make more sense.

Phil

Amin Mousavi

unread,
Jul 23, 2013, 7:28:14 PM7/23/13
to Phil Chalmers, mirt-package
Thank you Phil.It takes some times for me to follow what you did!

1) I found out that we can see this kind of modeling (with school level data, just item and person level data) as a cross classified modeling in which item responses are nested within items and persons, right?is this what mixedmirt() does?

2) I also realized that in Fox's work the variance of latent variable and response variable (i.e. what you have as "value" in your example with lmer) at person level is fixed to 1 and 0 respectively for identification purpose.So as it's a unidemensional modelling of ability there is no need for fixing slope of the first item.

3) Back to point number 1, if that's what mixedmirt() does is it correct to say that when we have school level indicators and covariates in addition to person and item level data, mixedmirt() combines cross classified analysis with multilevel modeling indeed?

4) let's look at my analysis from CFA point of view, if I model my data as one latent variable measured with 10  binary items and nested within schools, what would be the difference between a multilevel CFA and mixedmirt() if I fix the variance of latent variable to 1 and free alll factor loading?

I think I'm getting into it!
I really like our discussion as it can not be found elsewhere and it's all because of your patience on responding to my endless questions!! 

Amin.



On Tue, Jul 23, 2013 at 11:11 AM, Phil Chalmers <rphilip....@gmail.com> wrote:
Hi Amin,

I just released that you can actually change the identification
yourself. Here's an example of fixing the slope parameter and freeing
the variance term:

####
library(mirt)
set.seed(1234)
N <- 750
a <- matrix(rlnorm(10,.3,1),10,1)
a[1] <- 1
d <- matrix(rnorm(10), 10)
Theta <- matrix(sort(rnorm(N)))
pseudoIQ <- Theta * 5 + 100  + rnorm(N, 0 , 5)
group <- factor(rep(c('G1','G2','G3'), each = N/3))
data <- simdata(a,d,N, itemtype = rep('dich',10), Theta=Theta)
covdata <- data.frame(group, pseudoIQ)
model <- 1

pars <- mixedmirt(data, covdata, model, fixed = ~ 0 + group + items,
itemtype = '2PL', pars = 'values')
pars$value[which(pars$name == 'a1')[1L]] <- 1
pars$est[which(pars$name == 'a1')[1L]] <- FALSE
pars$est[which(pars$name == 'COV_11')] <- TRUE
mod <- mixedmirt(data, covdata, model, fixed = ~ 0 + group + items,
itemtype = '2PL', pars = pars)
summary(mod)
coef(mod)

#normal way
mod2 <- mixedmirt(data, covdata, model, fixed = ~ 0 + group + items,
itemtype = '2PL')
summary(mod2)
coef(mod2)
####

So that should make life a little easier (hopefully). Cheers.

Phil

On Mon, Jul 22, 2013 at 8:28 PM, Phil Chalmers
<rphilip....@gmail.com> wrote:
> On Mon, Jul 22, 2013 at 8:24 PM, Amin Mousavi <stte...@gmail.com> wrote:
>> 1) That's right.I'm interested on the variances more that G00 but is there
>> anyway to let it be estimated in mixedmirt()?
>
> Currently, no, but I could probably add an option for it with a little
> work. The problem is how to track identifiablitiy for multidimensional
> models. Unidimensional is easy, just set the first slope equal to one
> and free the latent variance parameter. I might add this in the future
> but only for 1 factor models.
>
>>
>> 2)Are you saying that in mlirt some item parameters are fixed to 1 and 0 for
>> discriminant and difficulty parameters?
>> I estimates item parameters for all items and as far as I know and worked
>> with mlirt, it doesn't constrain item parameters.
>
> It must, the problem is exactly the same as estimating 2PL models. You
> either have to fix a slope to one in order to estimate the latent
> variance, or set an intercept to 0 to estimate the latent mean. It's
> probably either the first or last item, so check those closely.
>
> Phil
>
>
>>
>> Amin.
>>
>>
>> On Mon, Jul 22, 2013 at 6:16 PM, Phil Chalmers <rphilip....@gmail.com>

>> wrote:
>>>
>>> On Mon, Jul 22, 2013 at 8:03 PM, Amin Mousavi <stte...@gmail.com> wrote:
>>> > Phil,
>>> >
>>> > if I use ~ + 0 instead of ~ + 1 , there won't be any fixed effect for
>>> > empty
>>> > model.In other words, there won't be any estimate for G00. Using ~ + 1
>>> > will
>>> > assume a fixed intercept for each item and basically that -0.603 is the
>>> > 'd'
>>> > value for the fist item and consequently d valus for other items equals
>>> > -0.603+d* (i.e. d* is item's difficulty parameter when using  ~ + 0)
>>> So far so good.
>>>
>>> > but in
>>> > my model G00 refers to the intercept of the estimated ability.
>>>
>>> mirt assumes this to be fixed @0, just like any other random effect
>>> (where u ~ N(0, sigma^2)). Random effects are naturally deviations
>>> about zero to which we are interested in their variances. mlirt
>>> probably estimates this by constraining some item slopes and
>>> intercepts to 1 and 0 respectively, allowing these hyper parameters to
>>> be estimated. I didn't like that identification format since it's much
>>> harder to work with mixed item types and polytomous items, so I opted
>>> to fix the mean to 0 and variance to 1 for models that require it. You
>>> really aren't 'estimating' these values though since they are just
>>> arbitrary parameterizations defined by the items that are constrained
>>> to d=0 and a1=1....you could always change the item used to constrain
>>> the model to get wildly different means and variances. I just avoid
>>> that entirely since it just seems like an artifact and the method I
>>> used will be the same regardless of the item ordering.
>>>
>>> > In mlirt package, simga^2 is the variance of e and tau is the variance
>>> > of u0
>>> > across groups. in mlirt package, like mixedmirt() I think, the dependent
>>> > variable is probability of correct answer or its logit but the package
>>> > returns person and group (or school) level variances as sigma^2 and tau
>>> > respectively.
>>>
>>> Yes, and again mlirt probably constrains item parameters for
>>> identification rather than setting sigma ~ N(0,1
>>>
>>> >
>>> > Put differently, the model in mlirt package should be seen as a
>>> > three-level
>>> > model in which items are nested within persons and persons are nested
>>> > within
>>> > groups. am right?if so, how can I implement this three-level model in
>>> > mixedmirt()?
>>>
>>> The format you've been trying is this already, that's how.
>>>
>>> >
>>> > It's becoming complicated!!
>>> >
>>> > Amin.
>>> >
>>> >
>>> > On Mon, Jul 22, 2013 at 4:13 PM, Phil Chalmers
>>> >> You received this message because you are subscribed to a topic in the
>>> >> Google Groups "mirt-package" group.
>>> >> To unsubscribe from this topic, visit
>>> >> https://groups.google.com/d/topic/mirt-package/gN0JeJVHoQA/unsubscribe.
>>> >> To unsubscribe from this group and all its topics, send an email to

Phil Chalmers

unread,
Jul 24, 2013, 1:48:11 AM7/24/13
to Amin Mousavi, mirt-package
On Tue, Jul 23, 2013 at 7:28 PM, Amin Mousavi <stte...@gmail.com> wrote:
> Thank you Phil.It takes some times for me to follow what you did!
>
> 1) I found out that we can see this kind of modeling (with school level
> data, just item and person level data) as a cross classified modeling in
> which item responses are nested within items and persons, right?is this what
> mixedmirt() does?

In short, yes.

>
> 2) I also realized that in Fox's work the variance of latent variable and
> response variable (i.e. what you have as "value" in your example with lmer)
> at person level is fixed to 1 and 0 respectively for identification
> purpose.So as it's a unidemensional modelling of ability there is no need
> for fixing slope of the first item.

Also correct.

>
> 3) Back to point number 1, if that's what mixedmirt() does is it correct to
> say that when we have school level indicators and covariates in addition to
> person and item level data, mixedmirt() combines cross classified analysis
> with multilevel modeling indeed?

You're on a roll now.

>
> 4) let's look at my analysis from CFA point of view, if I model my data as
> one latent variable measured with 10 binary items and nested within
> schools, what would be the difference between a multilevel CFA and
> mixedmirt() if I fix the variance of latent variable to 1 and free alll
> factor loading?

Although I'm not entirely familiar with the CFA approach, I'm going to
say that these analyses are basically the same, except that you are
using IRT to represent the probability mapping functions rather than
the CFA mappings; so item models not easily available in SEM (such as
the 3-4PL, gpcm, etc) are possible in this framework.

Seongho Bae

unread,
Jul 15, 2014, 11:18:21 AM7/15/14
to mirt-p...@googlegroups.com, stte...@gmail.com
Dear Phil.

I read this whole discussion. And I want to know one more.

Can I do Multilevel Exploratory Full-information item factor analysis?

If I can, How can I do Multilevel Exploratory Full-information item factor analysis?

Best wishes,
Seongho Bae.

2013년 7월 19일 금요일 오전 11시 20분 10초 UTC+9, stte...@gmail.com 님의 말:

Phil Chalmers

unread,
Jul 15, 2014, 11:26:15 AM7/15/14
to Seongho Bae, mirt-package, S.A. Mousavi
I don't really recommend including explanatory factors to predict
variation when the test structure itself is under question. This is
one reason why I require confirmatory factor patterns in this method,
and don't plan on changing it anytime (it would be difficult to
explain reduction in latent factor variances when they are subject to
rotational indeterminacy....).

I have a manuscript on this topic that has been under review for a
little while now but should be completed soon, and I'll post the
reference information for it following its publication. Cheers.

Phil
> --
> 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...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

Seongho Bae

unread,
Jul 15, 2014, 11:46:43 AM7/15/14
to mirt-p...@googlegroups.com, seongh...@gmail.com, stte...@gmail.com
Okay, Phil.

I am interested to know how to conduct Multilevel Exploratory and Confirmatory Full-information Factor Analysis for solving research topics of Personnel Psychology.

I'll wait your manuscript what will post with keep calm, but I wish to meet soon that. I expect your commitment will be key to solving construct validation issue in selection settings for I/O Psychologist. Cheers.

Seongho Bae.

2014년 7월 16일 수요일 오전 12시 26분 15초 UTC+9, Phil Chalmers 님의 말:
Reply all
Reply to author
Forward
0 new messages