Confirmatory DETECT and polyDETECT Analysis
This function computes the DETECT statistics for dichotomous item responses and the polyDETECT statistic for polytomous item responses under a confirmatory specification of item clusters (Stout, Habing, Douglas & Kim, 1996; Zhang & Stout, 1999a, 1999b; Zhang, 2007; Bonifay, Reise, Scheines, & Meijer, 2015).
Item responses in a multi-matrix design are allowed (Zhang, 2013).
An exploratory DETECT analysis can be conducted using the
expl.detect
function.
conf.detect(data, score, itemcluster, bwscale=1.1, progress=TRUE, thetagrid=seq(-3, 3, len=200), smooth=TRUE, use_sum_score=FALSE, bias_corr=TRUE) ## S3 method for class 'conf.detect' summary(object, digits=3, file=NULL, ...)
data |
An N \times I data frame of dichotomous or polytomous responses. Missing responses are allowed. |
score |
An ability estimate, e.g. the WLE, sum score or mean score |
itemcluster |
Item cluster for each item. The order of entries must correspond
to the columns in |
bwscale |
Bandwidth factor for calculation of conditional covariance
(see |
progress |
Display progress? |
smooth |
Logical indicating whether smoothing should be applied for conditional covariance estimation |
thetagrid |
A vector which contains theta values where conditional covariances are evaluated. |
use_sum_score |
Logical indicating whether sum score should be used. With this option, the bias corrected conditional covariance of Zhang and Stout (1999) is used. |
bias_corr |
Logical indicating whether bias correction (Zhang & Stout, 1999)
should be utilized if |
object |
Object of class |
digits |
Number of digits for rounding in |
file |
Optional file name to be sunk for |
... |
Further arguments to be passed |
The result of DETECT are the indices DETECT
, ASSI
and RATIO
(see Zhang 2007 for details) calculated
for the options unweighted
and weighted
.
The option unweighted
means that all conditional covariances of
item pairs are equally weighted, weighted
means that
these covariances are weighted by the sample size of item pairs.
In case of multi matrix item designs, both types of indices can
differ.
The classification scheme of these indices are as follows (Jang & Roussos, 2007; Zhang, 2007):
Strong multidimensionality | DETECT > 1.00 |
Moderate multidimensionality | .40 < DETECT < 1.00 |
Weak multidimensionality | .20 < DETECT < .40 |
Essential unidimensionality | DETECT < .20 |
Maximum value under simple structure | ASSI=1 | RATIO=1 |
Essential deviation from unidimensionality | ASSI > .25 | RATIO > .36 |
Essential unidimensionality | ASSI < .25 | RATIO < .36 |
Note that the expected value of a conditional covariance for an item pair
is negative when a unidimensional model holds. In consequence,
the DETECT index can become negative for unidimensional data
(see Example 3). This can be also seen in the statistic
MCOV100
in the value detect
.
A list with following entries:
detect |
Data frame with statistics DETECT, ASSI, RATIO, MADCOV100 and MCOV100 |
ccovtable |
Individual contributions to conditional covariance |
ccov.matrix |
Evaluated conditional covariance |
Bonifay, W. E., Reise, S. P., Scheines, R., & Meijer, R. R. (2015). When are multidimensional data unidimensional enough for structural equation modeling? An evaluation of the DETECT multidimensionality index. Structural Equation Modeling, 22(4), 504-516. doi: 10.1080/10705511.2014.938596
Jang, E. E., & Roussos, L. (2007). An investigation into the dimensionality of TOEFL using conditional covariance-based nonparametric approach. Journal of Educational Measurement, 44(1), 1-21. doi: 10.1111/j.1745-3984.2007.00024.x
Stout, W., Habing, B., Douglas, J., & Kim, H. R. (1996). Conditional covariance-based nonparametric multidimensionality assessment. Applied Psychological Measurement, 20(4), 331-354. doi: 10.1177/014662169602000403
Zhang, J. (2007). Conditional covariance theory and DETECT for polytomous items. Psychometrika, 72(1), 69-91. doi: 10.1007/s11336-004-1257-7
Zhang, J. (2013). A procedure for dimensionality analyses of response data from various test designs. Psychometrika, 78(1), 37-58. doi: 10.1007/s11336-012-9287-z
Zhang, J., & Stout, W. (1999a). Conditional covariance structure of generalized compensatory multidimensional items. Psychometrika, 64(2), 129-152. doi: 10.1007/BF02294532
Zhang, J., & Stout, W. (1999b). The theoretical DETECT index of dimensionality and its application to approximate simple structure. Psychometrika, 64(2), 213-249. doi: 10.1007/BF02294536
For a download of the free DIM-Pack software (DIMTEST, DETECT) see https://psychometrics.onlinehelp.measuredprogress.org/tools/dim/.
See expl.detect
for exploratory DETECT analysis.
############################################################################# # EXAMPLE 1: TIMSS mathematics data set (dichotomous data) ############################################################################# data(data.timss) # extract data dat <- data.timss$data dat <- dat[, substring( colnames(dat),1,1)=="M" ] # extract item informations iteminfo <- data.timss$item # estimate Rasch model mod1 <- sirt::rasch.mml2( dat ) # estimate WLEs wle1 <- sirt::wle.rasch( dat, b=mod1$item$b )$theta # DETECT for content domains detect1 <- sirt::conf.detect( data=dat, score=wle1, itemcluster=iteminfo$Content.Domain ) ## unweighted weighted ## DETECT 0.316 0.316 ## ASSI 0.273 0.273 ## RATIO 0.355 0.355 ## Not run: # DETECT cognitive domains detect2 <- sirt::conf.detect( data=dat, score=wle1, itemcluster=iteminfo$Cognitive.Domain ) ## unweighted weighted ## DETECT 0.251 0.251 ## ASSI 0.227 0.227 ## RATIO 0.282 0.282 # DETECT for item format detect3 <- sirt::conf.detect( data=dat, score=wle1, itemcluster=iteminfo$Format ) ## unweighted weighted ## DETECT 0.056 0.056 ## ASSI 0.060 0.060 ## RATIO 0.062 0.062 # DETECT for item blocks detect4 <- sirt::conf.detect( data=dat, score=wle1, itemcluster=iteminfo$Block ) ## unweighted weighted ## DETECT 0.301 0.301 ## ASSI 0.193 0.193 ## RATIO 0.339 0.339 ## End(Not run) # Exploratory DETECT: Application of a cluster analysis employing the Ward method detect5 <- sirt::expl.detect( data=dat, score=wle1, nclusters=10, N.est=nrow(dat) ) # Plot cluster solution pl <- graphics::plot( detect5$clusterfit, main="Cluster solution" ) stats::rect.hclust(detect5$clusterfit, k=4, border="red") ## Not run: ############################################################################# # EXAMPLE 2: Big 5 data set (polytomous data) ############################################################################# # attach Big5 Dataset data(data.big5) # select 6 items of each dimension dat <- data.big5 dat <- dat[, 1:30] # estimate person score by simply using a transformed sum score score <- stats::qnorm( ( rowMeans( dat )+.5 ) / ( 30 + 1 ) ) # extract item cluster (Big 5 dimensions) itemcluster <- substring( colnames(dat), 1, 1 ) # DETECT Item cluster detect1 <- sirt::conf.detect( data=dat, score=score, itemcluster=itemcluster ) ## unweighted weighted ## DETECT 1.256 1.256 ## ASSI 0.384 0.384 ## RATIO 0.597 0.597 # Exploratory DETECT detect5 <- sirt::expl.detect( data=dat, score=score, nclusters=9, N.est=nrow(dat) ) ## DETECT (unweighted) ## Optimal Cluster Size is 6 (Maximum of DETECT Index) ## N.Cluster N.items N.est N.val size.cluster DETECT.est ASSI.est RATIO.est ## 1 2 30 500 0 6-24 1.073 0.246 0.510 ## 2 3 30 500 0 6-10-14 1.578 0.457 0.750 ## 3 4 30 500 0 6-10-11-3 1.532 0.444 0.729 ## 4 5 30 500 0 6-8-11-2-3 1.591 0.462 0.757 ## 5 6 30 500 0 6-8-6-2-5-3 1.610 0.499 0.766 ## 6 7 30 500 0 6-3-6-2-5-5-3 1.557 0.476 0.740 ## 7 8 30 500 0 6-3-3-2-3-5-5-3 1.540 0.462 0.732 ## 8 9 30 500 0 6-3-3-2-3-5-3-3-2 1.522 0.444 0.724 # Plot Cluster solution pl <- graphics::plot( detect5$clusterfit, main="Cluster solution" ) stats::rect.hclust(detect5$clusterfit, k=6, border="red") ############################################################################# # EXAMPLE 3: DETECT index for unidimensional data ############################################################################# set.seed(976) N <- 1000 I <- 20 b <- sample( seq( -2, 2, len=I) ) dat <- sirt::sim.raschtype( stats::rnorm(N), b=b ) # estimate Rasch model and corresponding WLEs mod1 <- TAM::tam.mml( dat ) wmod1 <- TAM::tam.wle(mod1)$theta # define item cluster itemcluster <- c( rep(1,5), rep(2,I-5) ) # compute DETECT statistic detect1 <- sirt::conf.detect( data=dat, score=wmod1, itemcluster=itemcluster) ## unweighted weighted ## DETECT -0.184 -0.184 ## ASSI -0.147 -0.147 ## RATIO -0.226 -0.226 ## MADCOV100 0.816 0.816 ## MCOV100 -0.786 -0.786 ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.