f1d.irt.RdEstimates the functional unidimensional item response model for dichotomous data (Ip, Molenberghs, Chen, Goegebeur & De Boeck, 2013). Either the IRT model is estimated using a probit link and employing tetrachoric correlations or item discriminations and intercepts of a pre-estimated multidimensional IRT model are provided as input.
f1d.irt(dat=NULL, nnormal=1000, nfactors=3, A=NULL, intercept=NULL, mu=NULL, Sigma=NULL, maxiter=100, conv=10^(-5), progress=TRUE)
| dat | Data frame with dichotomous item responses |
|---|---|
| nnormal | Number of \(\theta_p\) grid points for approximating the normal distribution |
| nfactors | Number of dimensions to be estimated |
| A | Matrix of item discriminations (if the IRT model is already estimated) |
| intercept | Vector of item intercepts (if the IRT model is already estimated) |
| mu | Vector of estimated means. In the default it is assumed that all means are zero. |
| Sigma | Estimated covariance matrix. In the default it is the identity matrix. |
| maxiter | Maximum number of iterations |
| conv | Convergence criterion |
| progress | Display progress? The default is |
The functional unidimensional item response model (F1D model) for dichotomous item responses is based on a multidimensional model with a link function \(g\) (probit or logit): $$ P( X_{pi}=1 | \bold{\theta}_p )= g( \sum_d a_{id} \theta_{pd} - d_i ) $$ It is assumed that \(\bold{\theta}_p\) is multivariate normally distribution with a zero mean vector and identity covariance matrix.
The F1D model estimates unidimensional item response functions such that $$ P( X_{pi}=1 | \theta_p^\ast ) \approx g \left( a_{i}^\ast \theta_{p}^\ast - d_i^\ast \right) $$ The optimization function \(F\) minimizes the deviations of the approximation equations $$ a_{i}^\ast \theta_{p}^\ast - d_i^\ast \approx \sum_d a_{id} \theta_{pd} - d_i $$ The optimization function \(F\) is defined by $$ F( \{ a_i^\ast, d_i^\ast \}_i, \{ \theta_p^\ast \}_p )= \sum_p \sum_i w_p ( a_{id} \theta_{pd} - d_i- a_{i}^\ast \theta_{p}^\ast + d_i^\ast )^2 \rightarrow Min! $$ All items \(i\) are equally weighted whereas the ability distribution of persons \(p\) are weighted according to the multivariate normal distribution (using weights \(w_p\)). The estimation is conducted using an alternating least squares algorithm (see Ip et al. 2013 for a different algorithm). The ability distribution \(\theta_p^\ast\) of the functional unidimensional model is assumed to be standardized, i.e. does have a zero mean and a standard deviation of one.
A list with following entries:
Data frame with estimated item parameters: Item intercepts
for the functional unidimensional \(a_{i}^\ast\) (ai.ast) and
the ('ordinary') unidimensional (ai0) item response
model. The same holds for item intercepts \(d_{i}^\ast\) (di.ast and
di0 respectively).
Data frame with estimated \(\theta_p^\ast\)
distribution. Locations are theta.ast with corresponding
probabilities in wgt.
Estimated or provided item discriminations
Estimated or provided intercepts
Used dataset
Object generated by tetrachoric2 if dat
is specified as input. This list entry is useful for applying
greenyang.reliability.
Ip, E. H., Molenberghs, G., Chen, S. H., Goegebeur, Y., & De Boeck, P. (2013). Functionally unidimensional item response models for multivariate binary data. Multivariate Behavioral Research, 48, 534-562.
For estimation of bifactor models and Green-Yang reliability
based on tetrachoric correlations see greenyang.reliability.
For estimation of bifactor models based on marginal maximum likelihood
(i.e. full information maximum likelihood) see the
TAM::tam.fa function in the TAM package.
############################################################################# # EXAMPLE 1: Dataset Mathematics data.math | Exploratory multidimensional model ############################################################################# data(data.math) dat <- ( data.math$data )[, -c(1,2) ] # select Mathematics items #**** # Model 1: Functional unidimensional model based on original data #++ (1) estimate model with 3 factors mod1 <- sirt::f1d.irt( dat=dat, nfactors=3) #++ (2) plot results par(mfrow=c(1,2)) # Intercepts plot( mod1$item$di0, mod1$item$di.ast, pch=16, main="Item Intercepts", xlab=expression( paste( d[i], " (Unidimensional Model)" )), ylab=expression( paste( d[i], " (Functional Unidimensional Model)" ))) abline( lm(mod1$item$di.ast ~ mod1$item$di0), col=2, lty=2 ) # Discriminations plot( mod1$item$ai0, mod1$item$ai.ast, pch=16, main="Item Discriminations", xlab=expression( paste( a[i], " (Unidimensional Model)" )), ylab=expression( paste( a[i], " (Functional Unidimensional Model)" ))) abline( lm(mod1$item$ai.ast ~ mod1$item$ai0), col=2, lty=2 ) par(mfrow=c(1,1)) #++ (3) estimate bifactor model and Green-Yang reliability gy1 <- sirt::greenyang.reliability( mod1$tetra, nfactors=3 ) if (FALSE) { #**** # Model 2: Functional unidimensional model based on estimated multidimensional # item response model #++ (1) estimate 2-dimensional exploratory factor analysis with 'smirt' I <- ncol(dat) Q <- matrix( 1, I,2 ) Q[1,2] <- 0 variance.fixed <- cbind( 1,2,0 ) mod2a <- sirt::smirt( dat, Qmatrix=Q, irtmodel="comp", est.a="2PL", variance.fixed=variance.fixed, maxiter=50) #++ (2) input estimated discriminations and intercepts for # functional unidimensional model mod2b <- sirt::f1d.irt( A=mod2a$a, intercept=mod2a$b ) ############################################################################# # EXAMPLE 2: Dataset Mathematics data.math | Confirmatory multidimensional model ############################################################################# data(data.math) library(TAM) # dataset dat <- data.math$data dat <- dat[, grep("M", colnames(dat) ) ] # extract item informations iteminfo <- data.math$item I <- ncol(dat) # define Q-matrix Q <- matrix( 0, nrow=I, ncol=3 ) Q[ grep( "arith", iteminfo$domain ), 1 ] <- 1 Q[ grep( "Meas", iteminfo$domain ), 2 ] <- 1 Q[ grep( "geom", iteminfo$domain ), 3 ] <- 1 # fit three-dimensional model in TAM mod1 <- TAM::tam.mml.2pl( dat, Q=Q, control=list(maxiter=40, snodes=1000) ) summary(mod1) # specify functional unidimensional model intercept <- mod1$xsi[, c("xsi") ] names(intercept) <- rownames(mod1$xsi) fumod1 <- sirt::f1d.irt( A=mod1$B[,2,], intercept=intercept, Sigma=mod1$variance) fumod1$item }