Search code examples
canvasr-exams

R/Exams: workflow or example with questions bank/group, and personalized quiz


I plan to return to teaching as an adjunct faculty in the near future. This go around, I plan to leverage R/Exams to streamline assignments and quizzes. I plan to leverage New Quizzes in Canvas to administer the questions.

Based on my preliminary research, my understanding is I can write individual questions as Rmd files. I plan to generate data in R that's relevant to each question, and can use a single Rmd to generate multiple versions of that single question.

I'm unclear how to specify question banks/groups or personalized quizzes, after leveraging the exams2canvas or exams2qti21 functions to generate the QTI files for each version of each question? What is the workflow like? Is this a manual process in Canvas? Like create an individual quiz, then import a group of questions for each question, then specify in Canvas how many questions should from each group should be drawn from each group, for each assignment/quiz? Is there a mechanism to specify these assignment level parameters via R/Exams?

My preference is to use R to manage as much of the assignment data and meta-data as possible, and minimize point and clicks in the LMS. Thanks!


Solution

  • Disclaimer: I'm not a Canvas user but my understanding is that the workflow is similar to QTI-based quizzes in other learning management systems.

    While it is possible to build up question banks inside Canvas, I typically import the each quiz separately but each one in a single file. So let's say I want to do a quiz with three questions and 100 participants, I would do:

    ## define the quiz as vector/list of exercises
    qz <- c(
      "boxplots.Rmd",
      "tstat.Rmd",
      "ttest.Rmd"
    )
    
    ## generate .zip with Canvas test (in working directory)
    exams2canvas(qz, n = 100)
    

    This will generate a zip file canvasquiz.zip that you can import into Canvas (as a QTI-zip). Then you can do some fine tuning in the quiz editor inside Canvas (if necessary) and release the quiz in your course. Every participant will then get a randomized version of the three exercises with each question sampled separately (with replacement) from the respective pool of 100 exercises. (Of course, you can also use more or less than 100 samples per question.)

    And the next time you need a similar quiz you can simply re-import the entire quiz as before. For me that's typically much quicker than selecting pools of questions from a question bank that I've built up.

    Finally, I would recommend to import via Classic Quizzes, though. New Quizzes still don't work as reliably as Classic Quizzes and it is hard to generate suitable QTI for them because the internals are not well documented (and not open source). Hence, some features of R/exams do not work with New Quizzes, yet.

    On YouTube there is also a user-contributed video on importing R/exams-generated quizzes into Canvas: https://www.youtube.com/watch?v=yQnIxwTx_PU. (Overall, the workflow is similar to what we do at our university in OpenOlat: https://www.youtube.com/watch?v=1ZhdmoDtUSA.)