Learn R Programming

CDM (version 4.8-0)

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 class 'personfit.appropriateness':
summary(object, digits = 3 ,  \dots)

## S3 method for class 'personfit.appropriateness':
plot(x, cexpch=.65 ,  \dots)

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
  • summarySummaries of person fit statistic
  • personfit.appr.type1Statistic for spuriously high scorers (appr.type=1) evaluated for every person.
  • personfit.appr.type0Statistic 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
#############################################################################
# EXAMPLE 1: DINA model data.ecpe
#############################################################################

data(data.ecpe)

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

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

#############################################################################
# EXAMPLE 2: Person fit 2PL model
#############################################################################

library(sirt)
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( ncol(dat) , 2 , dim(probs0)[2] ) )
probs[,2,] <- probs0
probs[,1,] <- 1 - probs0
skillclassprobs <- mod1$trait.distr$pi.k
res <- personfit.appropriateness( data , probs , skillclassprobs )
summary(res)
plot(res)

Run the code above in your browser using DataLab