plot.ICCs <- function(a = NULL, b, c = 0, D = 1.7, single.item = TRUE) { k <- length(b) if(is.null(a)) { a <- rep(1, times = k) } if(length(a) < k) { a <- rep(a, times = k) } if(length(c) < k) { c <- rep(c, times = k) } if(single.item == TRUE) { probs <- list() if (k == 1) { probs[[1]] <- function(theta, D = D, a, b1, c = 0) { c + (1-c) * (1 - (exp(-D * a * (theta - b1)) / (1 + exp(-D * a * (theta - b1))))) } } if(k > 1) { probs[[1]] <- function(theta, D = D, a, b1, c = 0) { exp(-D * a * (theta - b1)) / (1 + exp(-D * a * (theta - b1))) } for (i in 2:(k-1)) { probs[[i]] <- function(theta, D = D, a, b1, b2, c = 0) { (exp(D * a * (theta - b1)) / (1 + exp(D * a * (theta - b1)))) - (exp(D * a * (theta - b2)) / (1+exp(D * a * (theta - b2)))) } } probs[[k]] <- function(theta, D = D, a, b1, b2, c = 0) { (exp(D * a * (theta - b1)) / (1 + exp(D * a * (theta - b1)))) } } } if(single.item == FALSE) { probs <- list() for (i in 1:k) { probs[[i]] <- function(theta, D = D, a, b, c) { c + (1 - c) * (1 / (1 + exp(-D * a * (theta - b)))) } } } color <- c("black", "green", "red", "lightblue", "yellow", "purple", "pink", "brown") curve(probs[[1]](x, a = a[1], b = b[1], c = c[1], D = D), -4, 4, col = color[1], xlab = expression(theta), ylab = "probability", ylim = c(0,1)) if(k > 1) { if (single.item == TRUE) { b <- c(b, Inf) for (i in 2:k) { curve(probs[[i]](x, a = a[i], b1 = b[i], b2 = b[i+1], D = D), -4, 4, col = color[i], add = TRUE) } } if(single.item == FALSE) { for (i in 2:k) { curve(probs[[i]](x, a = a[i], b = b[i], c = c[i], D = D), -4, 4, col = color[i], add = TRUE) } } } }
Here are some examples on how to use the function (images of some of the resulting plots are given below):
## 1PL model in logistic metric (default) for a single item: plot.ICCs(b =.5) ## 1PL model in normal metric for a single item: plot.ICCs(b =.5, D = 1) ## 2PL model for a single item: plot.ICCs(b = .5, a = 1.5) ## 3PL model for a single item: plot.ICCs(b = .5, a = 1.5, c = 1/3) ## 3PL curves for three items: plot.ICCs(b = c(-1, 0, .5), a = 1.5, c = 1/4, single.item = F) ## 3PL curves for three items with different a and c parameters: plot.ICCs(b = c(-1, 0, .5), a = c(.5, 1, 1.5), c = c(1/3, 1/2, 1/4), single.item = F) ## a GRM model for 8 response categories (i.e., 7 thresholds): plot.ICCs(a = 1, b = -3:3)
## 1PL model in logistic metric for a single item:
## 3PL curves for three items with different a and c parameters:
## a GRM model for 8 response categories (i.e., 7 thresholds):
This post was created with the help of: http://www.umass.edu/remp/software/simcata/wingen/modelsF.html for the probability ditribution functions http://www.craftyfella.com/2010/01/syntax-highlighting-with-blogger-engine.html for showing how to embed code in blogger posts
No comments:
Post a Comment