Learn R Programming

mirt (version 0.4.2)

multipleGroup: Multiple Group Estimation

Description

multipleGroup performes a full-information maximum-likelihood multiple group analysis for dichotomous and polytomous data under the item response theory paradigm using either Cai's (2010) Metropolis-Hastings Robbins-Monro algorithm or with an EM approach.

Usage

multipleGroup(data, model, group, itemtype = NULL, guess
    = 0, upper = 1, SE = FALSE, SEtol = .001, invariance =
    '', pars = NULL, method = 'MHRM', constrain = NULL,
    parprior = NULL, draws = 2000, quadpts = NULL,
    grsm.block = NULL, prev.mod = NULL, D = 1.702,
    technical = list(), debug = FALSE, verbose = TRUE, ...)

## S3 method for class 'MultipleGroupClass': coef(object, digits = 3, verbose = TRUE, ...)

## S3 method for class 'MultipleGroupClass': summary(object, digits = 3, verbose = TRUE, ...)

## S3 method for class 'MultipleGroupClass': anova(object, object2)

Arguments

data
a matrix or data.frame that consists of numerically ordered data, with missing data coded as NA
model
an object or named list of objects returned from confmirt.model() declaring how the factor model is to be estimated. The names of the list input must correspond to the unique values in the group variable. See
group
a character vector indicating group membership
invariance
a character vector containing the following possible options: [object Object],[object Object],[object Object],[object Object],[object Object]
guess
initial (or fixed) values for the pseudo-guessing parameter. Can be entered as a single value to assign a global guessing parameter or may be entered as a numeric vector for each item
upper
initial (or fixed) upper bound parameters for 4-PL model. Can be entered as a single value to assign a global upper bound parameter or may be entered as a numeric vector corresponding to each item
SE
logical, estimate the standard errors? Calls the MHRM subroutine for a stochastic approximation. Only applicable when method = 'EM' since the MHRM method calculates them automatically
D
a numeric value used to adjust the logistic metric to be more similar to a normal cumulative density curve. Default is 1.702
SEtol
tollerance value used to stop the MHRM estimation when SE = TRUE. Lower values will take longer but may be more stable for computing the information matrix
verbose
logical; display iteration history during estimation?
draws
the number of Monte Carlo draws to estimate the log-likelihood
quadpts
the number of quadratures to be used per dimensions when method = 'EM'
prev.mod
an optional input object of class 'MultipleGroupClass' to quickly change the starting values of the current estimation. If a parameter in the current model is being freely estimated then it's value will be set to whatever the correspo
method
a character indicating whether to use the EM ('EM') or the MH-RM ('MHRM') algorithm
itemtype
type of items to be modeled, declared as a vector for each item or a single value which will be repeated globally. The NULL default assumes that the items follow a graded or 2PL structure, however they may be changed to the following: 'Rasch', '1P
constrain
a list of user declared equality constraints. To see how to define the parameters correctly use pars = 'values' initially to see how the parameters are labeled. To constrain parameters to be equal create a list with separate concatena
grsm.block
an optional numeric vector indicating where the blocking should occur when using the grsm, NA represents items that do not belong to the grsm block (other items that may be estimated in the test data). For example, to specify two blocks of 3 with
parprior
a list of user declared prior item probabilities. To see how to define the parameters correctly use pars = 'values' initially to see how the parameters are labeled. Can define either normal (normally for slopes and intercepts) or beta
pars
a data.frame with the structure of how the starting values, parameter numbers, and estimation logical values are defined. The user may observe how the model defines the values by using pars = 'values', and this object can in turn be m
debug
logical; turn on debugging features?
object
an object of class confmirtClass
object2
an object of class confmirtClass
digits
the number of significant digits to be rounded
...
additional arguments to be passed
technical
list specifying subtle parameters that can be adjusted. These values are [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Details

By default the estimation in multipleGroup assumes that the models are maximally independent, and therefore could initially be performed by sub setting the data and running identical models with confmirt or mirt and aggregating the results (e.g., log-likelihood). However, constrains may be imposed across groups by invoking various invariance keywords or by inputing user defined freepars, constrain, and startvalues lists.

See Also

expand.table, key2binary, simdata, confmirt.model, fscores

Examples

Run this code
#single factor
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('dich', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
models <- confmirt.model()
   F1 = 1-15


mod_configural <- multipleGroup(dat, models, group = group, method = 'EM') #completely seperate analyses

# prev.mod can save precious iterations and help to avoid local minimums
mod_metric <- multipleGroup(dat, models, group = group, invariance=c('slopes'), method = 'EM',
                            prev.mod = mod_configural) #equal slopes
mod_scalar2 <- multipleGroup(dat, models, group = group, method = 'EM',  #equal intercepts, free variance and means
                             invariance=c('slopes', 'intercepts', 'free_varcov','free_means'),
                             prev.mod = mod_configural)
mod_scalar1 <- multipleGroup(dat, models, group = group, method = 'EM', #fixed means
                             invariance=c('slopes', 'intercepts', 'free_varcov'),
                             prev.mod = mod_configural)
mod_fullconstrain <- multipleGroup(dat, models, group = group, method = 'EM',
                             invariance=c('slopes', 'intercepts'),
                             prev.mod = mod_configural)

anova(mod_metric, mod_configural) #equal slopes only
anova(mod_scalar2, mod_metric) #equal intercepts, free variance and mean
anova(mod_scalar1, mod_scalar2) #fix mean
anova(mod_fullconstrain, mod_scalar1) #fix variance


#test whether first 6 slopes should be equal accross groups
values <- multipleGroup(dat, models, group = group, pars = 'values')
values
constrain <- list(c(1, 63), c(5,67), c(9,71), c(13,75), c(17,79), c(21,83))
equalslopes <- multipleGroup(dat, models, group = group, constrain = constrain, method = 'EM')
anova(equalslopes, mod_configural)

#############
#multiple factors

a <- matrix(c(abs(rnorm(5,1,.3)), rep(0,15),abs(rnorm(5,1,.3)),
rep(0,15),abs(rnorm(5,1,.3))), 15, 3)
d <- matrix(rnorm(15,0,.7),ncol=1)
mu <- c(-.4, -.7, .1)
sigma <- matrix(c(1.21,.297,1.232,.297,.81,.252,1.232,.252,1.96),3,3)
itemtype <- rep('dich', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = mu, sigma = sigma)
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))

#group models
model1 <- confmirt.model()
   F1 = 1-5
   F2 = 6-10
   F3 = 11-15


model2 <- confmirt.model()
   F1 = 1-5
   F2 = 6-10
   F3 = 11-15
   COV = F1*F2, F1*F3, F2*F3


models <- list(D1=model1, D2=model2) #note the names match the groups

mod_configural <- multipleGroup(dat, models, group = group) #completely seperate analyses
mod_metric <- multipleGroup(dat, models, group = group, invariance=c('slopes')) #equal slopes
mod_scalar <- multipleGroup(dat, models, group = group, #equal means, slopes, intercepts
                             invariance=c('slopes', 'intercepts', 'free_varcov'))
mod_fullconstrain <- multipleGroup(dat, models, group = group, #equal means, slopes, intercepts
                             invariance=c('slopes', 'intercepts'))

anova(mod_metric, mod_configural)
anova(mod_scalar, mod_metric)
anova(mod_fullconstrain, mod_scalar)

Run the code above in your browser using DataLab