#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