knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(irt)
irt package contains many useful functions commonly used in psychometrics. 
Item parameters are defined within three main objects types:
Item object contains all of the information about a test/survey item. It
is the building block of Testlet and Itempool objects. It mainly contains
item parameters and item's psychometric model.  But it can also contain many
other item attributes such as item content, item_id. User can also define
additional attributes, for example, key, enemies, word_count,
seed_group, etc.
Testlet object is a set of Item objects. It can also have it's own
psychometric model. User can also define additional attributes.
Itempool object is a collection of Item and Testlet objects. 
ItemIn order to create an Item object, the psychometric model and item parameter
values is sufficient. Specifying an item_id field is required if Item will be
used within an Itempool or Testlet. 
A three parameter logistic model item (3PL) requires a, b and c 
parameters to be specified:
item1 <- item(a = 1.2, b = -.8, c = .33, model = "3PL") item1
a is the item discrimination, b is the item difficulty and c is the
pseudo-guessing parameter.
By default, the value of scaling constant D is specified as 1. But it can be
overridden:
item1 <- item(a = 1.2, b = -.8, c = .33, D = 1.7, model = "3PL") item1
item_id and content field can be specified as well:
item1 <- item(a = 1.2, b = -.8, c = .33, D = 1.7, model = "3PL", item_id = "ITM384", content = "Quadratic Equations") item1
Additional fields can be added through misc field: 
item1 <- item(a = 1.2, b = -.8, c = .33, D = 1.7, model = "3PL", item_id = "ITM384", content = "Quadratic Equations", misc = list(key = "A", enemies = c("ITM664", "ITM964"), seed_year = 2020, target_grade = "11") ) item1
An item characteristic curve can be plotted using plot function:
plot(item1)
Rasch model item requires b parameter to be specified:
item2 <- item(b = -.8, model = "Rasch") item2
For Rasch model, D parameter cannot be specified. 
1PL ModelA one-parameter model item requires b parameter to be specified:
item3 <- item(b = -.8, D = 1.7, model = "1PL") item3
2PL ModelA two-parameter model item requires a and b parameters to be specified:
item4 <- item(a = 1.2, b = -.8, D = 1.702, model = "2PL") item4
4PL ModelA four-parameter model item requires a, b, c and d parameters to be
specified:
item5 <- item(a = 1.06, b = 1.76, c = .13, d = .98, model = "4PL", item_id = "itm-5") item5
d is the upper-asymptote parameter. 
GRM)A Graded Response model item requires a and b parameters to be specified. 
b parameters is ascending vector of threshold parameters: 
item6 <- item(a = 1.22, b = c(-1.9, -0.37, 0.82, 1.68), model = "GRM", item_id = "itm-6") item6 plot(item6)
D parameter can also be specified. 
GPCM)A Generalized Partial Credit model item requires a and b parameters to be
specified. b parameters is ascending vector of threshold parameters:
item7 <- item(a = 1.22, b = c(-1.9, -0.37, 0.82, 1.68), D = 1.7, model = "GPCM", item_id = "itm-7") item7
PCM)A Partial Credit model item requires b parameters to be
specified. b parameters is ascending vector of threshold parameters:
item8 <- item(b = c(-1.9, -0.37, 0.82, 1.68), model = "PCM") item8
An item with random item parameters can be generated using generate_item 
function:
generate_item("3PL") generate_item("2PL") generate_item("Rasch") generate_item("GRM") # The number of categories of polytomous items can be specified: generate_item("GPCM", n_categories = 5)
TestletA testlet is simply a collection of Item objects:
item1 <- item(a = 1.2, b = -.8, c = .33, D = 1.7, model = "3PL", item_id = "ITM384", content = "Quadratic Equations") item2 <- item(a = 0.75, b = 1.8, c = .21, D = 1.7, model = "3PL", item_id = "ITM722", content = "Quadratic Equations") item3 <- item(a = 1.06, b = 1.76, c = .13, d = .98, model = "4PL", item_id = "itm-5") t1 <- testlet(c(item1, item2, item3)) t1
An testlet_id field is required if testlet will be used in an item pool.
t1 <- testlet(item1, item2, item3, testlet_id = "T1") t1
ItempoolAn Itempool object is the most frequently used object type in irt package. 
It is a collection of Item and Testlet objects. 
item1 <- generate_item("3PL", item_id = "I1") item2 <- generate_item("3PL", item_id = "I2") item3 <- generate_item("3PL", item_id = "I3") ip1 <- itempool(item1, item2, item3)
Item pools can be composed of items from different psychometric models and testlets:
item4 <- generate_item("GRM", item_id = "I4") item5 <- generate_item("3PL", item_id = "T1-I1") item6 <- generate_item("3PL", item_id = "T1-I2") t1 <- testlet(item5, item6, item_id = "T1") ip2 <- itempool(item1, item2, item3, item4, t1)
Most of the time item pools are generated using data frames:
n_item <- 6 # Number of items ipdf <- data.frame(a = rlnorm(n_item), b = rnorm(n_item), c = runif(n_item, 0, .3)) ip3 <- itempool(ipdf) ip3 # Scaling constant can be specified ip4 <- itempool(ipdf, D = 1.7) ip4
ipdf <- data.frame( item_id = c("Item_1", "Item_2", "Item_3", "Item_4", "Item_5", "Item_6"), model = c("3PL", "3PL", "3PL", "GPCM", "GPCM", "GPCM"), a = c(1.0253, 1.3609, 1.6617, 1.096, 0.9654, 1.3995), b1 = c(NA, NA, NA, -1.112, -0.1709, -1.1324), b2 = c(NA, NA, NA, -0.4972, 0.2778, -0.5242), b3 = c(NA, NA, NA, -0.0077, 0.9684, NA), D = c(1.7, 1.7, 1.7, 1.7, 1.7, 1.7), b = c(0.7183, -0.4107, -1.5452, NA, NA, NA), c = c(0.0871, 0.0751, 0.0589, NA, NA, NA), content = c("Geometry", "Algebra", "Algebra", "Geometry", "Algebra", "Algebra") ) ip5 <- itempool(ipdf)
Itempool objects can also be converted to a data frame:
as.data.frame(ip2)
Probability of correct response (for dichotomous items) and probability of 
each category (for polytomous items) can be calculated using prob function:
item1 <- generate_item("3PL") theta <- 0.84 # The probability of correct and incorrect response for `item1` at theta = 0.84 prob(item1, theta) # Multiple theta values prob(item1, theta = c(-1, 1)) # Polytomous items: item2 <- generate_item(model = "GPCM") prob(item2, theta = 1) prob(item2, theta = c(-1, 0, 1))
Probability of correct response (or category) for each item in an item pool can be calculated as:
ip <- generate_ip(model = "3PL", n = 7) ip prob(ip, theta = 0) # When there are multiple theta values, a list where each element corresponds # to a theta value returned. prob(ip, theta = c(-2, 0, 1))
Item characteristic curves (ICC) can be plotted:
# Plot ICC of each item in the item pool plot(ip) # Plot test characteristic curve plot(ip, type = "tcc")
Information value of an item at a given $\theta$ value can also be calculated:
item1 <- generate_item("3PL") info(item1, theta = -2) # Multiple theta values info(item1, theta = c(-1, 1)) # Polytomous items: item2 <- generate_item(model = "GPCM") info(item2, theta = 1) info(item2, theta = c(-1, 0, 1))
Information values for each item in an item pool can be calculated as:
ip <- generate_ip(model = "3PL", n = 7) ip info(ip, theta = 0) info(ip, theta = c(-2, 0, 1))
Information functions can be plotted:
# Plot information function of each item plot_info(ip) # Plot test information function plot_info(ip, tif = TRUE)
For a given set of item parameters and item responses, the ability ($\theta$)
estimates can be calculated using est_ability function. 
# Generate an item pool ip <- generate_ip(model = "2PL", n = 10) true_theta <- rnorm(5) resp <- sim_resp(ip = ip, theta = true_theta, output = "matrix") # Calculate raw scores est_ability(resp = resp, ip = ip, method = "sum_score") # Estimate ability using maximum likelihood estimation: est_ability(resp = resp, ip = ip, method = "ml") # Estimate ability using EAP estimation: est_ability(resp = resp, ip = ip, method = "eap") # Estimate ability using EAP estimation with a different prior # (prior mean = 0, prior standard deviation = 2): est_ability(resp = resp, ip = ip, method = "eap", prior_pars = c(0, 2))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.