#'@title plotICC
#'@description plotea CCI
#'@param itemCodigo codigo del item
#'@import plyr ggplot2
#'@export
plotICC = function(itemCodigo, parametros=NULL, myBy=NULL){
if(is.null(myBy)) myBy <- 0.1;
myData <- getSTD_aplicacionRespuesta(itemCodigo);
if(nrow(myData) > 0){
myRange <- round(range(myData$AplicacionAlumnoTheta, na.rm=TRUE) * 1.5, 1);
## agrupo respuestas correctas por tramos de habilidad
mySeq <- seq(myRange[1], myRange[2], by=myBy);
myData$z1.Group <- cut(myData$AplicacionAlumnoTheta,
breaks=c(mySeq, max(mySeq) + myBy),
labels=round(c(mySeq + myBy/2), 3)
);
myDataAg <- plyr::ddply(myData, .(z1.Group), function(x){
data.frame(
theta=as.numeric(unique(as.character(x$z1.Group))),
propRespuestasCorrectas=mean(x$AplicacionRespuestaPuntaje, na.rm=TRUE),
nCasos=nrow(x)
)
});
## obtengo habilidades medias por grado
habilidadesMediasPorGrado <- calculateHabilidadesMediasPorGrado();
## grafico
gg <- ggplot() +
geom_point(data=myDataAg, aes(x=theta, y=propRespuestasCorrectas, size=nCasos), col="blue") +
geom_vline(data=habilidadesMediasPorGrado, aes(xintercept=meanHability, col=Grado),
linetype = "longdash", alpha=0.6) +
ylab("CCI") +
xlab(expression(Habilidad (theta))) +
xlim(-6, 3) +
ylim(c(0, 1)) +
guides(size=guide_legend("Cantidad\ncasos")) +
ggtitle(paste0(itemCodigo," (", nrow(myData), " respuestas)"));
## calculo curva caracteristica del item.
if(is.null(parametros)){
bancoItems <- getItemsCalibrados();
a <- bancoItems$a[which(bancoItems$ItemCodigo == itemCodigo)];
b <- bancoItems$b[which(bancoItems$ItemCodigo == itemCodigo)];
c <- bancoItems$c[which(bancoItems$ItemCodigo == itemCodigo)];
d <- bancoItems$d[which(bancoItems$ItemCodigo == itemCodigo)];
} else {
a <- parametros$a;
b <- parametros$b;
c <- parametros$c;
d <- parametros$d;
}
if(length(a) > 0){
theta <- seq(-6, 3, by=0.01);
icc <- c + ( 1 - c )/(1 + exp(-a * (theta - b)));
myPlotData <- data.frame(theta=theta,
icc=icc);
gg <- gg + geom_line(data=myPlotData, aes(x=theta, y=icc));
}
print(gg)
} else {
plotHandler("No hay aplicaciones con habilidades estimadas para este item.")
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.