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: | 2025-02-25 04:16:19 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.
Q14A
I enjoy learning mathematics
Q14B
I wish have not to study Math
Q14C
Mathematics is boring
Q14D
I learn interesting things in mathematics class
Q14E
I like mathematics
Q14F
I think it's important to do well in mathematics