Nothing
ICCfit <- function( itemNumber, observedResponses, personEstimates, itemParameters
, xlim = c(-4,4), method = "Quantile", NQtiles = 10){
propCI <- function(propVector, nVector, alpha = .05){
propSE <- sqrt(propVector*(1-propVector)/nVector)
propLB <- propVector - (propSE * qnorm(1-(alpha/2)))
propUB <- propVector + (propSE * qnorm(1-(alpha/2)))
data.frame(propSE = propSE, propLB = propLB, propUB = propUB)
}
plotICC <- function(difficulty, range = xlim){
invlogit <- function(x)
{
1/(1 + exp(-x))
}
params <- data.frame(ability = seq(-4,4, length.out = 1000), difficulty = difficulty)
probs <- invlogit(params[,1]-params[,2])
lines(params[,1],probs)
}
plotICCerrors <- function(difficulty, dSE, range = xlim){
invlogit <- function (x)
{
1/(1 + exp(-x))
}
params <- data.frame(ability = seq(-4,4, length.out = 1000)
, lb = difficulty - 1.96 * dSE
, ub = difficulty + 1.96 * dSE)
probslb <- invlogit(params[,1]-params[,2])
probsub <- invlogit(params[,1]-params[,3])
xCoords <- c(ability = seq(-4,4, length.out = 1000),ability = seq(4,-4, length.out = 1000))
yCoords <- c(probslb,rev(probsub) )
polygon(xCoords,yCoords, col = "grey75", border = NA)
}
if(method == "ByPersonEstimate"){
aggdata <- aggregate(observedResponses,
by=list(round(personEstimates,2)), FUN = mean, na.rm = TRUE)
aggdata[,-1][aggdata[,-1] == 1] <- .999
aggdata[,-1][aggdata[,-1] == 0] <- .001
sampleSizeAggdata <- aggregate(is.na(observedResponses),
by=list(round(personEstimates,2)), FUN = length)
}
if(method == "Quantile"){
cutPoints <- quantile(personEstimates,seq(0,1,length = NQtiles + 1))
aggdata <-aggregate(observedResponses, by=list(cut(personEstimates,cutPoints)),
FUN=mean, na.rm=TRUE)
breakMeans <-aggregate(personEstimates, by=list(cut(personEstimates,cutPoints)),
FUN=mean, na.rm=TRUE)
aggdata[,1] <- breakMeans[,2]
aggdata[,-1][aggdata[,-1] == 1] <- .999
aggdata[,-1][aggdata[,-1] == 0] <- .001
sampleSizeAggdata <- aggregate(is.na(observedResponses),
by=list(cut(personEstimates,cutPoints)), FUN = length)
sampleSizeAggdata[,1] <- breakMeans[,2]
}
if(method == "Histogram"){
histData <- hist(personEstimates, breaks = "FD", plot = FALSE)
cutPoints <- histData$breaks
aggdata <-aggregate(observedResponses, by=list(cut(personEstimates,cutPoints)),
FUN=mean, na.rm=TRUE, drop = FALSE)
breakMeans <-aggregate(personEstimates, by=list(cut(personEstimates,cutPoints)),
FUN=mean, na.rm=TRUE, drop = FALSE)
aggdata[,1] <- histData$mids
aggdata[,-1][aggdata[,-1] == 1] <- .999
aggdata[,-1][aggdata[,-1] == 0] <- .001
sampleSizeAggdata <- aggregate(is.na(observedResponses),
by=list(cut(personEstimates,cutPoints)), FUN = length, drop = FALSE)
sampleSizeAggdata[,1] <- histData$mids
}
plot(aggdata[,1],aggdata[,itemNumber + 1]
, type = "n", axes = FALSE,
, ylab = "Proportion"
, xlab = "Proficiency"
, ylim = c(0,1)
, xlim = xlim)
plotICCerrors(itemParameters[itemNumber,1], itemParameters[itemNumber,2])
plotICC(itemParameters[itemNumber,1])
cbind(aggdata[,1],propCI(aggdata[,itemNumber + 1],sampleSizeAggdata[,itemNumber + 1]))
apply(cbind(aggdata[,1],propCI(aggdata[,itemNumber + 1],sampleSizeAggdata[,itemNumber + 1]))
,1,
function(x) segments(x0 = x[1], y0 = x[3], x1 = x[1], y1 = x[4]
, col = "#31333450"))
points(aggdata[,1],aggdata[,itemNumber + 1], pch = 18, cex = .75, col = "#31333450")
axis(2, las = 1)
axis(1)
title(paste("Item", rownames(itemParameters)[itemNumber]) )
print(sampleSizeAggdata)
}
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.