R/plotICC.R

Defines functions plotICC

Documented in plotICC

#'@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.")
  }
}
chi2labs/CATdemo documentation built on May 13, 2022, 12:47 a.m.