This function computes the person fit appropriateness statistics (Levine & Drasgow, 1988) as proposed for cognitive diagnostic models by Liu, Douglas and Henson (2009). The appropriateness statistic assesses spuriously high scorers (attr.type=1) and spuriously low scorers (attr.type=0).

personfit.appropriateness(data, probs, skillclassprobs, h=0.001, eps=1e-10,
    maxiter=30, conv=1e-05, max.increment=0.1, progress=TRUE)

# S3 method for personfit.appropriateness
summary(object, digits=3,  ...)

# S3 method for personfit.appropriateness
plot(x, cexpch=.65,  ...)

Arguments

data

Data frame of dichotomous item responses

probs

Probabilities evaluated at skill space (abilities \(\theta\))

skillclassprobs

Probabilities of skill classes

h

Numerical differentiation parameter

eps

Constant which is added to probabilities avoiding zero probability

maxiter

Maximum number of iterations

conv

Convergence criterion

max.increment

Maximum increment in iteration

progress

Optional logical indicating whether iteration progress should be displayed.

object

Object of class personfit.appropriateness

digits

Number of digits for rounding

x

Object of class personfit.appropriateness

cexpch

Point size in plot

...

Further arguments to be passed

Value

List with following entries

summary

Summaries of person fit statistic

personfit.appr.type1

Statistic for spuriously high scorers (appr.type=1) evaluated for every person.

personfit.appr.type0

Statistic for spuriously low scorers (appr.type=0) evaluated for every person.

References

Levine, M. V., & Drasgow, F. (1988). Optimal appropriateness measurement. Psychometrika, 53, 161-176.

Liu, Y., Douglas, J. A., & Henson, R. A. (2009). Testing person fit in cognitive diagnosis. Applied Psychological Measurement, 33(8), 579-598.

Examples

#############################################################################
# EXAMPLE 1: DINA model data.ecpe
#############################################################################

data(data.ecpe, package="CDM")

# fit DINA model
mod1 <- CDM::din( CDM::data.ecpe$data[,-1], q.matrix=CDM::data.ecpe$q.matrix )
summary(mod1)

# person fit appropriateness statistic
data <- mod1$data
probs <- mod1$pjk
skillclassprobs <- mod1$attribute.patt[,1]
res <- CDM::personfit.appropriateness( data, probs, skillclassprobs, maxiter=8)
                 # only few iterations
summary(res)
plot(res)

if (FALSE) {
#############################################################################
# EXAMPLE 2: Person fit 2PL model
#############################################################################

data(data.read, package="sirt")
dat <- data.read
I <- ncol(dat)

# fit 2PL model
mod1 <- sirt::rasch.mml2( dat, est.a=1:I)
# person fit statistic
data <- mod1$dat
probs0 <- t(mod1$pjk)
probs <- array( 0, dim=c( I, 2, dim(probs0)[2] ) )
probs[,2,] <- probs0
probs[,1,] <- 1 - probs0
skillclassprobs <- mod1$trait.distr$pi.k
res <- CDM::personfit.appropriateness( data, probs, skillclassprobs )
summary(res)
plot(res)
}