使用自定义评估方案评估 moodle 中的考试

Evaluate exam in moodle with a custom evaluation scheme

我正在尝试使用 exams 实施一个简单的评估方案,但 none 的选项似乎符合我的要求:

有5个答案选项。我想给所有标记正确答案和所有未标记错误答案打 0.2 分,所有未标记好答案和标记错误答案打 0 分。 因此,一个任务可以产生 0, .2, .4, . 6、.8 或 1 分。

我知道这个评估方案可能有一些缺点,但我正在以其他方式平衡这些缺点。

我在做扫描考试时能够实现这一点,因为我可以使用字符串距离函数来判断编码答案和解决方案的两个字符串中有多少字符不同。但是我现在想在moodle中做这个,所以我无法控制评价。

以下是我尝试过的一些示例:

ee <- exams_eval(partial = TRUE, rule = "all", negative = FALSE)
ee$pointsum("01111", "10000") # should be 0 and returns 0
ee$pointsum("01111", "10001") # should be .2 but returns 0
ee$pointsum("11111", "10001") # should be .4 and returns .4
ee$pointsum("00000", "11001") # should be .4 but returns 0
ee$pointsum("11011", "00011") # should be .6 but returns .5
ee$pointsum("11111", "10101") # should be .6 and returns .6
ee$pointsum("11001", "10001") # Should be .8 but returns .66
ee$pointsum("00000", "00001") # should be .8 but returns 0
ee$pointsum("11001", "11001") # Should be 1 and returns 1
ee$pointsum("00000", "00000") # Should be 1 but returns 0

前面的示例在使用 rule = "false"rule = "false2"rule = "true" 时产生相同的结果。使用 rule = "none" 时,这是唯一的变化:

ee$pointsum("01111", "10001") # should be .2 but returns 0.25

有没有办法在moodle中实现上述评估方案?

奇怪的是,没有 exams_eval 参数的组合可以给出所需的方案。人们可以通过检查所有 20 种组合来验证这一点。例如,

combs <- expand.grid(partial = c(TRUE, FALSE), negative = c(TRUE, FALSE),
                     rule = c("false2", "false", "true", "all", "none"),
                     stringsAsFactors = FALSE)
sapply(1:nrow(combs), function(n) {
  ee <- exams_eval(partial = combs[n, 1], negative = combs[n, 2], rule = combs[n, 3])
  ee$pointsum("11001", "10001")
})
#  [1]  0.6666667 -1.0000000  0.6666667  0.0000000  0.6666667 -1.0000000  0.6666667  0.0000000
#  [9]  0.6666667 -1.0000000  0.6666667  0.0000000  0.6666667 -1.0000000  0.6666667  0.0000000
# [17]  0.6666667 -1.0000000  0.6666667  0.0000000

这特别奇怪,因为该方案非常简单 - 计算匹配,我们可以按如下方式实现:

pointsum <- function(correct, answer) {
  correct <- as.numeric(strsplit(correct, "")[[1]])
  answer <- as.numeric(strsplit(answer, "")[[1]])
  mean(correct == answer)
}

pointsum("01111", "10000") # should be 0
# [1] 0
pointsum("01111", "10001") # should be .2
# [1] 0.2
pointsum("11111", "10001") # should be .4
# [1] 0.4
pointsum("00000", "11001") # should be .4
# [1] 0.4
pointsum("11011", "00011") # should be .6
# [1] 0.6
pointsum("11111", "10101") # should be .6
# [1] 0.6
pointsum("11001", "10001") # should be .8
# [1] 0.8
pointsum("00000", "00001") # should be .8
# [1] 0.8
pointsum("11001", "11001") # should be 1
# [1] 1
pointsum("00000", "00000") # should be 1
# [1] 1

R/exams 包目前不支持所需的评估方案,因为 Moodle 不支持它。查看 https://docs.moodle.org/36/en/Moodle_XML_format#Multiple_choice 上的 Moodle 文档表明您可以看到部分信用方案总是以下列方式工作:

  • 不是 marking/clicking <answer> 不会产生任何分数。
  • Marking/clicking一个答案选项产生一定的fraction总分。

因此,R/exams 通过将分数 1/#correct 分配给 marking/clicking 正确答案来处理此问题。 rule 参数仅控制在 marking/clicking 错误答案时减去哪个分数。默认是 "false2" 规则,它本质上是减去 1/#incorrect。例如,一个有 2 个正确答案和 3 个错误答案的项目被处理为:

ee2 <- exams_eval(partial = TRUE, rule = "false2", negative = FALSE)
ee2$pointvec("11000")
##        pos        neg 
##  0.5000000 -0.3333333 

当您使用 rule = "all" 时,如果不正确的答案是 marked/clicked:

,则 100% 的分数将被删除
ee <- exams_eval(partial = TRUE, rule = "all", negative = FALSE)
ee$pointvec("11000")
##  pos  neg 
##  0.5 -1.0 

有些学习管理系统支持更灵活的点数计算方式(例如,在 QTI 中,这原则上是可行的),但我认为您的特定方案无法在 Moodle 中实施。 (如果有人比上面的 Moodle 文档知道的更多,请告诉我!)

(你说你知道你的评估方案的缺点 - 当然,这很公平。但是,仅作记录以防其他人阅读:我个人不太喜欢你提出的方案。即使平均每个答案选项的正确概率为 50%,学生也可以通过始终单击所有答案选项或始终单击 [=45 平均获得 50% 的分数=] 的答案选项。如果每个选项的概率偏离 50%,这甚至会变得更高。因此,这为一些学生设定了奇怪的激励……至少是我通常教的商业和经济学学生。)