Learn R Programming

CDM (version 7.4-19)

personfit.appropriateness: Appropriateness Statistic for Person Fit Assessment

Description

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).

Usage

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

Run this code
# NOT RUN {
#############################################################################
# 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)

# }
# NOT RUN {
#############################################################################
# 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)
# }

Run the code above in your browser using DataLab