Evaluación con R. La librería exams.

Introducción

  • VERSIÓN PRELIMINAR: TUTORIAL EN PROCESO DE ELABORACIÓN.

  • El objetivo de este tutorial es explicar como se puede utilizar R, específicamente la librería exams de R, para elaborar exámenes. La página oficial de la librería contiene algunos tutoriales recomendables, especialmente los que aparecen en la parte inferior de esa página. Aquí vamos a adaptar esa información a nuestras necesidades, abreviando o extendiendo las explicaciones según convenga.

  • Aunque daremos detalles y ejemplos más abajo, el esquema del proceso es este:

    1. El profesor escribe una plantilla de ejercicio para cada tipo ejercicio de los que componen el examen.
    2. En el momento de preparar un examen las plantillas de los ejercicios seleccionados se procesan con exams usando R.
    3. El resultado es un examen que puede venir presentado en distintos formatos de salida: pdf (por ejemplo para imprimirlo), html para incluirlo en una página web o uno de los diversos formatos necesarios para sistemas de gestión de aprendizaje (LMS) como Moodle, Blackboard, etc.
    4. Al utilizar R para generar los exámenes se pueden incluir elementos aleatorios y programables en ellos, de manera que se puede conseguir un examen distinto para cada persona que se examina.
  • Las plantillas de examen se pueden compartir y depositar en repositorios (públicos o privados).

Preliminares y requisitos

  • El punto de partida es la instalación de R y (opcionalmente, pero muy recomendable) RStudio. Hay, como hemos dicho, un tutorial en la página de R/exams, aunque tal vez prefieras nuestras propias instrucciones de instalación (enlace pendiente).

  • Si vas a generar exámenes en formato pdf necesitas una instalación de LaTeX (enlace pendiente). Si no haces una instalación completa, al menos deberías instalar tinityex desde R ejecutando:

    tinytex::install_tinytex()

    en la consola de comandos de R.

  • También necesitaremos Pandoc, una herramienta de conversión entre distintos formatos de documentos. Si estás usando RStudio no tendrás que hacer nada más, porque la instalación de RStudio incluye Pandoc. Pero en caso de duda (o si usas Linux) puedes mirar esta página.

  • El paso final debería ser la instalación de la librería exams de R. Se puede hacer ejecutando

    install.packages("exams", dependencies = TRUE)

    en la consola de comandos de R. La opción dependencies = TRUE sirve para asegurarnos de que R trata de instalar todas las librerías de las que depende el funcionamiento de R/exams. Alternativamente puedes usar el procedimiento de instalación de librerías de RStudio, como se ilustra aquí:

Un ejemplo muy sencillo.

  • Vamos a usar R/exams para generar un examen extremadamente simple, con dos preguntas de respuesta múltiple, cada una con solo una respuesta correcta. Primero vamos a describir los componentes del ejemplo uno a uno y en el próximo apartado veremos como usarlos para fabricar el primer examen.

  • Aprovecharemos este ejemplo tan sencillo para ilustrar varias de las opciones de salida posibles: en pdf, docx y html. El proceso es sencillo pero requiere de algo de preparación. Debemos preparar los siguientes ficheros (puedes descargarlos todos juntos en este fichero zip):

    • Ficheros de enunciados de los ejercicios de este examen,escrito en Rmarkdown. En nuestro ejemplo, son los ficheros pregunta01.Rmd y pregunta02.Rmd. No te preocupes si no sabes nada de Rmarkdown. Es un tipo de fichero diseñado precisamente para ser extremadamente fácil de usar, pero manteniendo a la vez un potencial muy grande. Por ejemplo, el fichero de nuestra segunda pregunta es este:

      Question
      ========
      
      Elige entre las siguientes fracciones una equivalente a esta:
      $$
      \dfrac{\dfrac{4}{7} - \dfrac{2}{5}}{\dfrac{9}{70}}
      $$
      
      
      Answerlist
      ----------
      * $\frac{4}{3}$
      * $\frac{3}{2}$
      * $\frac{5}{6}$
      * $\frac{8}{7}$
      * $\frac{1}{5}$
      
      
      Solution
      ========
      
      Answerlist
      ----------
      * Cierto. 
      * Falso. 
      * Falso. 
      * Falso. 
      * Falso. 
      
      
      Meta-information
      ================
      exname: Examen01
      extype: schoice
      exsolution: 10000
      exshuffle: 5

      Como puedes ver, el fichero tiene una estructura muy sencilla. En la primera parte (Question) escribimos el enunciado, incluyendo las respuestas múltiples que se pueden elegir (en Answerlist). Se puede usar LaTex para introducir expresiones matemáticas, como hemos hecho aquí con las fracciones. La segunda parte (Solution) contiene la información sobre cuál es la respuesta correcta y otros parámetros (en Meta-information) que permiten que R/exams procese adecuadamente esta pregunta. Ten en cuenta que este fichero corresponde a un tipo concreto de pregunta (respuesta múltiple) y que es especialmente sencillo porque no hemos incluido ningún elemento aleatorio: la pregunta y las posibles respuestas son valores fijos, así que no estamos aprovechando todavía muchas posibilidades que nos ofrece R.

    • Ficheros de formato (en la jerga de R/exams, un fichero template) para cada tipo salida: HTML, LaTeX y Word. En este ejemplo son los ficheros formatoExamen01.html, formatoExamen01.tex y formatoExamen01_DOCX.html respectivamente. La librería R/exams habrá instalado en algún lugar (recóndito) de tu ordenador sus propios ficheros de formato. En el futuro, cuando quieras preparar un examen puedes hacer como hicimos todos. Usar los que te proporcionamos aquí o los propios de la librería como punto de partida y adaptarlos a tus necesidades. Con un poco de ensayo y error eso debería bastar para conseguir buenos resultados. Estos ficheros son el lugar en el que definir el encabezamiento del examen, incluir un logo, instrucciones para la realización del examen, etc.

    • Un script de R que es el encargado de usar la librería R/exams para generar los distintos modelos de examen a partir de los ficheros precedentes. Aunque no sepas mucho de R, el fichero es, en este ejemplo, muy sencillo. Se trata de:

      1. Cargar la librería R/exams
      2. Crear una lista con los ficheros correspondientes a los ejercicios que queremos incluir en el examen.
      3. Elegir un nombre para el fichero (o ficheros) de examen resultante. Por razones que quedarán claras más abajo, es una buena idea (aunque opcional) que ese nombre acabe en un guión.
      4. Llamar una tras otra a las funciones de R/exams que generan el examen en distintos formatos de salida. Los nombres de esas funciones son bastante autodescriptivos: exams2pdf, exams2html, etc.

      En nuestro caso el fichero es procesarExamen01.R, cuyo contenido es este:

      ####################################################
      # Recuerda fijar el directorio de trabajo de R 
      ###################################################
      
      # Primero cargamos la librería exams
      library(exams)
      
      listaPreguntas = c("pregunta01.Rmd", "pregunta02.Rmd")
      
      nombreExamen = "Examen01_" # Es buena idea que acabe en _
      
      # Salida en formato pdf (requisito: LaTeX)
      exams2pdf(listaPreguntas, dir = ".", 
                question = "Pregunta:",
                solution = "Respuesta",
                name = nombreExamen, 
                template = "formatoExamen01.tex")
      
      
      # Salida en formato HTML
      exams2html(listaPreguntas, dir = ".", 
                 question = "Pregunta:",
                 solution = "Respuesta",
                 name = nombreExamen, 
                 template = "formatoExamen01.html")
      
      # Salida en formato MSWord (requisito: Pandoc y, claro, MSWord)
      exams2pandoc(listaPreguntas, dir = ".",
                   template = "formatoExamen01_DOCX.tex",
                   name = nombreExamen)

      Como puedes ver las opciones de esas funciones son también bastante intuitivas. Además del nombre de la lista de preguntas debemos indicarle a cada una de estas funciones cuál es el fichero de formato a usar según el tipo de salida.

Manos a la obra.

  • Usaremos ahora todos esos ficheros para producir como resultado el examen en varios formatos.

  • Descarga los ficheros y descomprime el fichero zip en aguna carpeta de tu ordenador. Abre con RStudio el fichero de comandos procesarExamen01.R: Asegúrate antes de seguir adelante de que has usado las opciones de menú Session\(\to\)Set Working Directory\(\to\)To Source File Location de Rstudio para establecer el directorio de trabajo de R.

  • Ahora usa el botón Run para ejecutar ese fichero de comandos. Alternativamente, selecciona todo el contenido del fichero y pulsa Ctrl+Enter (Cmd+Enter en Mac).

  • Tras algunos instantes en los que la consola de RStudio mostrará mensajes describiendo el proceso, y si no hay ningún problema, en la carpeta de trabajo habrán aparecido tres ficheros de examen, similares a estos:

Fíjate en que R/exams ha añadido como sufijo el número 1 al nombre del examen que hemos elegido. Eso permitirá, más adelante, que podamos generar varios exámenes distintos (incluso uno por alumno) a partir de las mismas plantillas de ejercicios. Cada examen recibirá un nombre distinto. Y eso explica también porque es una buea idea añadir un guión bajo al final del nombre.

  • Si abres uno cualquiera de esos ficheros encontrarás el enunciado del examen con las dos preguntas que hemos preparado. De momento este examen tan sencillo apaenas contiene elementos de aleatoriedad. Y digo apenás porque si repites el proceso y ejecutas de nuevo el fichero de comandos procesarExamen01.R muy probablemente obtendrás una nueva versión del mismo examen con las opciones de respuesta en un orden distinto. Eso está bien pero es, desde luego, solo el principio de lo que podemos conseguir con R. En las próximas secciones de este tutorial vamos a llevar las cosas más lejos.

Otros tipos de preguntas.

  • El examen de ejemplo que hemos usado solo incluye dos (tristes) preguntas de respuesta múltiple. Pero R/exams incluye otros tipos de preguntas. Su sitio web contiene una galería de ejemplos muy interesante. Pero al usarla hay que tener en cuenta que una parte importante de esos ejercicios están pensados para ilustrar algunas posibilidades realmente avanzadas de la librería. En particular pueden no ser fáciles de usar por usuarios que no se sientan relativamente cómodos con R o con las matemáticas o la estadística subyacentes a esa pregunta. Aquí vamos a incluir ficheros de ejemplo adicionales tratando de mantenerlos tan sencillos y generales como sea posible, pero que a la vez permitan ilustrar la discusión. Veamos a continuación los tipos básicos de preguntas de R/exams.

Preguntas de tipo schoice y mchoice.

  • Ambos modelos de preguntas ofrecen múltiples respuestas. La diferencia más evidente es que en las schoice solo una de las respuestas es correcta, mientras que en las mchoice puede haber más de una respuesta correcta y la puntuación depende de la selección de respuestas como correctas/incorrectas que haga el alumno.
  • Ya hemos visto un par de ejemplos de schoice en el apartado anterior, en los ficheros pregunta01.Rmd y pregunta02.Rmd.

Preguntas de tipo num.

  • Como su nombre sugiere, es un tipo de pregunta diseñada para que el alumno introduzca una respuesta numérica, en notación decimal. El matiz sobre el formato de la respuesta es especialmente importante si estamos pensando en usar estos exámenes en el contexto de cualquier sistema de corrección automatizada, como el de los LMS tipo Moodle o Backboard. En situaciones así, si el alumno obtiene como respuesta, por ejemplo, \(1/3\) entonces debe introducirla como \(0.3333\) o con el número de cifras significativas que se estipule (en el enunciado de la pregunta o en las intrucciones del examen) para garantizar que el sistema puede discriminar entre respuestas correctas e incorrectas.

Preguntas de tipo string

  • Es el tipo de preguntas que esperan una respuesta en formato texto. Son, por tanto, las que tienen un formato de respuesta más abierto. Por un lado, eso permite una mayor flexibilidad al alumno. Respuestas como “la mitad” y “el 50%” pueden considerarse ambas correctas. Pero si queremos usar corrección automática este tipo de preguntas deben limitarse a aquellos contextos en el que el léxico de posibles respuestas está claramente delimitado. Por ejemplo, una pregunta adecuada sería
    “¿Cuál es el código de tres letras del aeropuerto internacional de Calgary en Canadá?”
    porque en ese contexto la única respuesta correcta es YYC. Es cierto que el alumno puede introducir la respuesta en mayúsculas o minúsculas, o con un espacio al principio, etc. Pero con un poco de esfuerzo extra en el código R de la pregunta se pueden sortear la mayoría de esos problemas para aprovechar todas las ventajas de la corrección automática con preguntas de este tipo.

Operaciones simbólicas. Python y Matlab.

  • 2020-11-20: Pendiente…
Fernando San Segundo
Fernando San Segundo
Profesor Colaborador Asociado - Doctor

My research interests include Applied Mathematics, Data Analysis, Scientific Computation and Mathematical Modelling.