Fitting the ISOP and ADISOP Model for Frequency Tables
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
fX |
Fitted frequency table |
ResX |
Residual frequency table |
fit |
Fit statistic: weighted least squares of deviations between observed and expected frequencies |
item.sc |
Estimated item parameters |
person.sc |
Estimated person parameters |
ll |
Log-likelihood of the model |
freq.fitted |
Fitted frequencies in a long data frame |
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).
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 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
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.