Learn R Programming

psychomix (version 1.1-9)

simRaschmix: Simulate Data from Rasch Mixture Models

Description

Generate simulated data from mixtures of Rasch models. The latent classes of the mixture can differ regarding size as well as item and person parameters of the corresponding Rasch model.

Usage

simRaschmix(design, extremes = FALSE, attributes = TRUE, ...)

Value

A matrix of item responses with dimension (number of observations x number of items). If attributes = TRUE, the matrix has attributes cluster,

ability, and difficulty. The class memberships

cluster are only returned when not provided implicitly through and a vector of abilties and a difficulty matrix with entries for each subject.

Arguments

design

Type of data generating process. Can be provided as a character or a named list. See Details.

extremes

Logical. Should observations with none or all items solved be included in the data?

attributes

Logical. Should the true group membership as well as true item and person parameters be attached to the data as attributes "cluster", "difficulty", and "ability"?

...

Currently not used.

Details

The design of the data generating process (DGP) can be provided in essentially three different ways.

If the design argument is one of "rost1", "rost2" or "rost3", responses from the three DGPs introduced in Rost (1990) will be drawn.

Alternatively, the design can be provided as a named list with elements nobs, weights, ability, and difficulty. The weights can be provided in three formats: If provided as a vector of probabilities (summing to 1), class membership will be drawn with these probabilities. If weights is a vector of integer weights (summing to nobs, or an integer division thereof), Class sizes will be either the weights directly or a multiple thereof. As a third alternative, the weights can be provided as a function of the number of observations (nobs). The ability specification can also be provided in three formats: If provided as a matrix of dimension 2xk with mean and standard deviation for each of the k clusters, the ability parameters are drawn from a normal distribution with the corresponding parameters. Second, ability can be an array of dimension (., 2, k) with abilities and corresponding weights/probabilities per cluster. Third, it can also be provided as a list of k functions which take the number of observations as an argument. The specification of the item difficulty can be provided either as a matrix with k columns with the item difficulties per cluster or as a matrix with nobs rows with the item difficulties per subject.

As a third option, design may also be a named list containing a vector of ability parameters and a matrix difficulty of dimension (number of observation x number of items).

References

Frick, H., Strobl, C., Leisch, F., and Zeileis, A. (2012). Flexible Rasch Mixture Models with Package psychomix. Journal of Statistical Software, 48(7), 1--25. tools:::Rd_expr_doi("10.18637/jss.v048.i07").

Rost, J. (1990). Rasch Models in Latent Classes: An Integration of Two Approaches to Item Analysis. Applied Psychological Measurement, 14(3), 271--282.

See Also

raschmix

Examples

Run this code
#################
## Rost's DGPs ##
#################

suppressWarnings(RNGversion("3.5.0"))
set.seed(1990)

## DGP 1 with just one latent class 
r1 <- simRaschmix(design = "rost1")
## less than 1800 observations because the extreme scorers have been removed
table(attr(r1, "ability"))
table(rowSums(r1))

## DGP 2 with 2 equally large latent classes
r2 <- simRaschmix(design = "rost2", extreme = TRUE)
## exactly 1800 observations including the extreme scorers
table(attr(r2, "ability"))
table(rowSums(r2))

## DGP 3 with 3 latent classes
r3 <- simRaschmix(design = "rost3")
## item parameters in the three latent classes
attr(r3, "difficulty")


####################################
## flexible specification of DGPs ##
####################################

suppressWarnings(RNGversion("3.5.0"))
set.seed(482)

## number of observations
nobs <- 8

## relative weights
weights <- c(1/4, 3/4)
## exact weights: either summing to nobs or an integer division thereof
weights <- c(2, 6)
weights <- c(1, 3)
## weights as function
## here the result is the same as when specifying relative weights
weights <- function(n) sample(size = n, 1:2, prob = c(1/4, 3/4), replace
= TRUE)

## class 1: only ability level 0
## class 2: normally distributed abilities with mean = 2 and sd = 1
ability <- cbind(c(0, 0), c(2, 1))
## class 1: 3 ability levels (-1, 0, 1); class 2: 2 ability levels (-0.5, 0.5)
## with equal probabilities and frequencies, repectively
ability <- array(c(cbind(-1:1, rep(1/3, 3)), cbind(-1:1/2, c(0.5, 0, 0.5))), 
  dim = c(3, 2, 2))
ability <- array(c(cbind(-1:1, rep(1, 3)), cbind(-1:1/2, c(1, 0, 1))),
  dim = c(3, 2, 2))
## ability as function
ability <- list(
  function(n) rnorm(n, mean = 0, sd = 0.5),
  function(n) sample(c(-0.5, 0.5), size = n, replace = TRUE)
)

## difficulty per latent class
difficulty <- cbind(c(-1,1,rep(0,8)), c(rep(0,8),1,-1))

## simulate data
dat <- simRaschmix(design = list(nobs = nobs, weights = weights,
  ability = ability, difficulty = difficulty))

## inspect attributes and raw scores
table(attr(dat, "cluster"))
hist(attr(dat, "ability"))
barplot(table(rowSums(dat)))
attr(dat, "difficulty")


## specification of DGP only via ability and difficulty
## one vector of abilities of all subjects
ability <- c(rnorm(4, mean = 0, sd = 0.5), sample(c(-0.5, 0.5), size = 4, 
  replace = TRUE))
## difficulty per subject
difficulty <- matrix(c(rep(c(-1,1,rep(0,8)), 4), rep(c(rep(0,8),1,-1), 4)),
  nrow = 8, byrow = TRUE)
## simulate data
dat <- simRaschmix(design = list(ability = ability, difficulty = difficulty))

## inspect attributes and raw scores
hist(attr(dat, "ability"))
barplot(table(rowSums(dat)))
attr(dat, "difficulty")

Run the code above in your browser using DataLab