Learn R Programming

CDM (version 2.7-7)

sequential.items: Constructing a Dataset with Sequential Pseudo Items for Ordered Item Responses

Description

This function constructs dichotomous pseudo items from polytomous ordered items (Tutz, 1997). Using this method, developed test models for dichotomous data can be applied for polytomous item responses after transforming them into dichotomous data. See Details for the construction.

Usage

sequential.items(data)

Arguments

data
A data frame with item responses

Value

  • A list with following entries
  • dat.expandA data frame with dichotomous pseudo items
  • iteminfoA data frame containing some item information
  • maxKVector with maximum number of categories per item

Details

Assume that item $j$ possesses $K \geq 3$ categories. We label these categories as $k=0,1,\ldots,K-1$. The original item responses $X_{nj}$ for person $n$ at item $j$ is then transformed into $K-1$ pseudo items $Y_{j1}, \ldots , Y_{j,K-1}$. The first pseudo item response $Y_{nj1}$ is defined as 1 iff $X_{nj} \geq 1$. The second item responses $Y_{nj2}$ is 1 iff $X_{nj} \geq 2$, it is 0 iff $X_{nj} = 1$ and it is missing (NA in the dataset) iff $X_{nj} = 0$. The construction proceeds in the same manner for other catgeories (see Tutz, 1997). The pseudo items can be recognized as 'hurdles' a participant has to master to get a score of $k$ for the original item. The pseudo items are treated as conditionally independent which implies that IRT models or CDMs which assume local independence can be employed for estimation. For deriving item response probabilities of the original items from response probabilities of the pseudo items see Tutz (1997, p. 141ff.).

References

Tutz, G. (1997). Sequential models for ordered responses. In W. van der Linden & R. K. Hambleton. Handbook of modern item response theory (pp. 139-152). New York: Springer.

Examples

Run this code
#############################################################################
# EXAMPLE 1: Constructing sequential pseudo items for data.mg
#############################################################################

data(data.mg)
dat <- data.mg
items <- colnames(dat)[ which( substring( colnames(dat) ,1,1)=="I" ) ]
##    [1] "I1"  "I2"  "I3"  "I4"  "I5"  "I6"  "I7"  "I8"  "I9"  "I10" "I11"
data <- dat[,items]

# construct sequential dichotomous pseudo items
res <- sequential.items(data)

# item information table
res$iteminfo
##      item itemindex category pseudoitem
##   1    I1         1        1         I1
##   2    I2         2        1         I2
##   3    I3         3        1         I3
##   4    I4         4        1    I4_Cat1
##   5    I4         4        2    I4_Cat2
##   6    I5         5        1    I5_Cat1
##   7    I5         5        2    I5_Cat2
##     [...]

# extract dataset with pseudo items
dat.expand <- res$dat.expand
colnames(dat.expand)
##    [1] "I1"       "I2"       "I3"       "I4_Cat1"  "I4_Cat2"  "I5_Cat1" 
##    [7] "I5_Cat2"  "I6_Cat1"  "I6_Cat2"  "I7_Cat1"  "I7_Cat2"  "I7_Cat3" 
##   [13] "I8"       "I9"       "I10"      "I11_Cat1" "I11_Cat2" "I11_Cat3"

# compare original items and pseudoitems

#**** Item I1
xtabs( ~ paste(data$I1) + paste(dat.expand$I1) )
##                 paste(dat.expand$I1)
##   paste(data$I1)     0     1    NA
##               0   4339     0     0
##               1      0 33326     0
##               NA     0     0   578

#**** Item I7

xtabs( ~ paste(data$I7) + paste(dat.expand$I7_Cat1) )
##                 paste(dat.expand$I7_Cat1)
##   paste(data$I7)     0     1    NA
##               0   3825     0     0
##               1      0 14241     0
##               2      0 14341     0
##               3      0  5169     0
##               NA     0     0   667

xtabs( ~ paste(data$I7) + paste(dat.expand$I7_Cat2) )
##                 paste(dat.expand$I7_Cat2)
##   paste(data$I7)     0     1    NA
##               0      0     0  3825
##               1  14241     0     0
##               2      0 14341     0
##               3      0  5169     0
##               NA     0     0   667

xtabs( ~ paste(data$I7) + paste(dat.expand$I7_Cat3) )
##                 paste(dat.expand$I7_Cat3)
##   paste(data$I7)     0     1    NA
##               0      0     0  3825
##               1      0     0 14241
##               2  14341     0     0
##               3      0  5169     0
##               NA     0     0   667

#*** Model 1: Rasch model for pseudo items
mod <- gdm( dat.expand , irtmodel="1PL" , theta.k=seq(-5,5,len=21) ,
             skillspace="normal" , decrease.increments=TRUE)

Run the code above in your browser using DataLab