fit.isop.Rd
Fit the isotonic probabilistic model (ISOP; Scheiblechner, 1995) and the additive isotonic probabilistic model (ADISOP; Scheiblechner, 1999).
fit.isop(freq.correct, wgt, conv=1e-04, maxit=100, progress=TRUE, calc.ll=TRUE) fit.adisop(freq.correct, wgt, conv=1e-04, maxit=100, epsilon=0.01, progress=TRUE, calc.ll=TRUE)
freq.correct | Frequency table |
---|---|
wgt | Weights for frequency table (number of persons in each cell) |
conv | Convergence criterion |
maxit | Maximum number of iterations |
epsilon | Additive constant to handle cell frequencies
of 0 or 1 in |
progress | Display progress? |
calc.ll | Calculate log-likelihood values?
The default is |
See isop.dich
for more details of the
ISOP and ADISOP model.
A list with following entries
Fitted frequency table
Residual frequency table
Fit statistic: weighted least squares of deviations between observed and expected frequencies
Estimated item parameters
Estimated person parameters
Log-likelihood of the model
Fitted frequencies in a long data frame
Scheiblechner, H. (1995). Isotonic ordinal probabilistic models (ISOP). Psychometrika, 60, 281-304.
Scheiblechner, H. (1999). Additive conjoint isotonic probabilistic models (ADISOP). Psychometrika, 64, 295-316.
For fitting the ADISOP model it is recommended to first fit the ISOP model and then proceed with the fitted frequency table from ISOP (see Examples).
For fitting the ISOP model to dichotomous and
polytomous data see isop.dich
.
############################################################################# # EXAMPLE 1: Dataset Reading ############################################################################# data(data.read) dat <- as.matrix( data.read) dat.resp <- 1 - is.na(dat) # response indicator matrix I <- ncol(dat) #*** # (1) Data preparation # actually only freq.correct and wgt are needed # but these matrices must be computed in advance. # different scores of students stud.p <- rowMeans( dat, na.rm=TRUE ) # different item p values item.p <- colMeans( dat, na.rm=TRUE ) item.ps <- sort( item.p, index.return=TRUE) dat <- dat[, item.ps$ix ] # define score groups students scores <- sort( unique( stud.p ) ) SC <- length(scores) # create table freq.correct <- matrix( NA, SC, I ) wgt <- freq.correct # percent correct a1 <- stats::aggregate( dat==1, list( stud.p ), mean, na.rm=TRUE ) freq.correct <- a1[,-1] # weights a1 <- stats::aggregate( dat.resp, list( stud.p ), sum, na.rm=TRUE ) wgt <- a1[,-1] #*** # (2) Fit ISOP model res.isop <- sirt::fit.isop( freq.correct, wgt ) # fitted frequency table res.isop$fX #*** # (3) Fit ADISOP model # use monotonely smoothed frequency table from ISOP model res.adisop <- sirt::fit.adisop( freq.correct=res.isop$fX, wgt ) # fitted frequency table res.adisop$fX