| Title: | Classical Test Theory Item Analysis |
|---|---|
| Description: | Runs classical item analysis for multiple-choice test items and polytomous items (e.g., rating scales). The statistics reported in this package can be found in any measurement textbook such as Crocker and Algina (2006, ISBN:9780495395911). |
| Authors: | Cengiz Zopluoglu |
| Maintainer: | Cengiz Zopluoglu <[email protected]> |
| License: | GPL(>=2) |
| Version: | 1.1 |
| Built: | 2026-05-11 09:55:00 UTC |
| Source: | https://github.com/czopluoglu/itemanalysis |
The data is taken from the following website http://www.jmetrik.com/example-data.php. This file includes nominal responses of 6,000 examinees to 56 binary items.
data(dichotomous)data(dichotomous)
A data frame with 60000 examinees and 56 items
This package
| Package: | itemanalysis |
| Type: | Package |
| Version: | 1.1 |
| Date: | 2022-06-13 |
| License: | GPL-2 |
| LazyLoad: | yes |
The package can be used to run classical item analysis for multiple-choice test items and polytomously scored items (e.g., rating scale items).
Maintainer: Cengiz Zopluoglu <[email protected]>
itemanalysis1 for running classical item analysis for multiple-choice test items
itemanalysis2 for running classical item analysis for polytomously scored items
Classicial Test Theory Item Analysis for Multiple-Choice Test Items
itemanalysis1(data, key, options, ngroup = ncol(data) + 1, correction = TRUE, span.par=.3, verbose = T)itemanalysis1(data, key, options, ngroup = ncol(data) + 1, correction = TRUE, span.par=.3, verbose = T)
data |
a data frame with N rows and m columns, with N denoting the number of subjects and m denoting the number of items. |
key |
a vector of answer key with a length of m |
options |
a vector of response options for the test such as c("A","B","C","D") |
ngroup |
number of score groups to be use for plotting the item trace lines |
correction |
TRUE or FALSE. If it is TRUE, then an adjustment is made for point-biserial correlation. |
span.par |
a smoothing parameter to pass to ggplots when creating empirical ICCs |
verbose |
TRUE or FALSE. If it is TRUE, text output is printed. |
To be added later.
plots |
a list object storing the item trace line plots for each item |
item.stat |
a matrix of basic item statistics |
dist.sel |
a matrix of distractor selection proportion statistics |
dist.disc |
a matrix of corrected point-biserial statistics for distractors |
dist.disc |
a matrix of corrected biserial statistics for distractors |
Cengiz Zopluoglu
itemanalysis2 for classical item analysis of polytomously scored items
## Not run: data(dichotomous) head(dichotomous) str(dichotomous) # Key response vector key <- c("A","D","C","B","C","B","C","D","A","D","C","A","D","C","A", "B","D","B","A","C","A","A","C","B","C","B","D","A","A","A", "C","B","B","A","B","D","D","A","D","C","D","A","B","B","C", "D","B","C","C","B","D","A","C","B","A","D") # Use itemanalysis1 function to run the item analysis # In order to reduce running time for the example below, # I specify "data=dichotomous[,1:10]", so it only analyze the # first 10 items. # You should specify "data=dichotomous" to analyze based on 56 items. item.analysis <- itemanalysis1(data=dichotomous[,1:10], key=key, options=c("A","B","C","D"), ngroup=10, correction=FALSE) item.analysis$item.stat item.analysis$dist.sel item.analysis$dist.disc item.analysis$plots[[1]] # Item Trace Line for the first item item.analysis$plots[[2]] # Item Trace Line for the second item item.analysis$plots[[3]] # Item Trace Line for the third item item.analysis$plots[[4]] # Item Trace Line for the fourth item item.analysis$plots[[5]] # Item Trace Line for the fifth item item.analysis$plots[[6]] # Item Trace Line for the sixth item item.analysis$plots[[7]] # Item Trace Line for the seventh item item.analysis$plots[[8]] # Item Trace Line for the eigth item item.analysis$plots[[9]] # Item Trace Line for the ninth item item.analysis$plots[[10]] # Item Trace Line for the tenth item ## End(Not run)## Not run: data(dichotomous) head(dichotomous) str(dichotomous) # Key response vector key <- c("A","D","C","B","C","B","C","D","A","D","C","A","D","C","A", "B","D","B","A","C","A","A","C","B","C","B","D","A","A","A", "C","B","B","A","B","D","D","A","D","C","D","A","B","B","C", "D","B","C","C","B","D","A","C","B","A","D") # Use itemanalysis1 function to run the item analysis # In order to reduce running time for the example below, # I specify "data=dichotomous[,1:10]", so it only analyze the # first 10 items. # You should specify "data=dichotomous" to analyze based on 56 items. item.analysis <- itemanalysis1(data=dichotomous[,1:10], key=key, options=c("A","B","C","D"), ngroup=10, correction=FALSE) item.analysis$item.stat item.analysis$dist.sel item.analysis$dist.disc item.analysis$plots[[1]] # Item Trace Line for the first item item.analysis$plots[[2]] # Item Trace Line for the second item item.analysis$plots[[3]] # Item Trace Line for the third item item.analysis$plots[[4]] # Item Trace Line for the fourth item item.analysis$plots[[5]] # Item Trace Line for the fifth item item.analysis$plots[[6]] # Item Trace Line for the sixth item item.analysis$plots[[7]] # Item Trace Line for the seventh item item.analysis$plots[[8]] # Item Trace Line for the eigth item item.analysis$plots[[9]] # Item Trace Line for the ninth item item.analysis$plots[[10]] # Item Trace Line for the tenth item ## End(Not run)
Classical Test Theory Item Analysis for Polytomous Items
itemanalysis2(data, options, ngroup = ncol(data) + 1, correction = TRUE, span.par=.3,verbose=T)itemanalysis2(data, options, ngroup = ncol(data) + 1, correction = TRUE, span.par=.3,verbose=T)
data |
a data frame with N rows and m columns, with N denoting the number of subjects and m denoting the number of items. |
options |
a vector of numerical code of the response categories available for the items such as c(0,1,2,3). The minumum score is assumed to be 0. |
ngroup |
number of score groups to be use for plotting the item trace lines |
correction |
TRUE or FALSE. If it is TRUE, then an adjustment is made for point-biserial correlation. |
span.par |
a smoothing parameter to pass to ggplots when creating empirical ICCs |
verbose |
TRUE or FALSE. If it is TRUE, text output is printed. |
to be added later
plots |
a list object storing the item trace line plots for each item |
item.stat |
a matrix of basic item statistics |
dist.sel |
a matrix of distractor selection proportion statistics |
dist.disc |
a matrix of corrected point-biserial statistics for distractors |
dist.disc |
a matrix of corrected biserial statistics for distractors |
Cengiz Zopluoglu
itemanalysis1 for classical item analysis of multiple-choice test items
## Not run: data(timss2011_usa) timss2011_usa$Q14B <- recode(var = timss2011_usa$Q14B, recodes = "c(0)=3;c(1)=2;c(2)=1;c(3)=0") timss2011_usa$Q14C <- recode(var = timss2011_usa$Q14C, recodes = "c(0)=3;c(1)=2;c(2)=1;c(3)=0") item.analysis <- itemanalysis2(data=timss2011_usa, options=c(0,1,2,3), ngroup=18, correction=FALSE) item.analysis$item.stat item.analysis$dist.sel item.analysis$dist.disc item.analysis$plots[[1]] # Item Trace Line for the first item item.analysis$plots[[2]] # Item Trace Line for the second item item.analysis$plots[[3]] # Item Trace Line for the third item item.analysis$plots[[4]] # Item Trace Line for the fourth item item.analysis$plots[[5]] # Item Trace Line for the fifth item item.analysis$plots[[6]] # Item Trace Line for the sixth item ## End(Not run)## Not run: data(timss2011_usa) timss2011_usa$Q14B <- recode(var = timss2011_usa$Q14B, recodes = "c(0)=3;c(1)=2;c(2)=1;c(3)=0") timss2011_usa$Q14C <- recode(var = timss2011_usa$Q14C, recodes = "c(0)=3;c(1)=2;c(2)=1;c(3)=0") item.analysis <- itemanalysis2(data=timss2011_usa, options=c(0,1,2,3), ngroup=18, correction=FALSE) item.analysis$item.stat item.analysis$dist.sel item.analysis$dist.disc item.analysis$plots[[1]] # Item Trace Line for the first item item.analysis$plots[[2]] # Item Trace Line for the second item item.analysis$plots[[3]] # Item Trace Line for the third item item.analysis$plots[[4]] # Item Trace Line for the fourth item item.analysis$plots[[5]] # Item Trace Line for the fifth item item.analysis$plots[[6]] # Item Trace Line for the sixth item ## End(Not run)
The data is a subset of TIMSS 2011 USA data and includes responses for six statements to measure attitudes towards math. These rating scale items have response codes from 0 to 3 with 0 indicating "I strongly disagree", 1 indicating "I disagree", 2 indicating "I agree", and 3 indicating "I strongly agree" for a given statement. Note that items 14B and 14C has to be reverse coded before analysis to make them consistent with other four items.
data(timss2011_usa)data(timss2011_usa)
A data frame with 10079 observaiton and 6 items.
Q14AI enjoy learning mathematics
Q14BI wish have not to study Math
Q14CMathematics is boring
Q14DI learn interesting things in mathematics class
Q14EI like mathematics
Q14FI think it's important to do well in mathematics