2

我正在尝试使用 实现一个简单的评估方案exams,但似乎没有一个选项可以满足我的需求:

有 5 个答案选项。我想给所有标记的正确答案和所有未标记的错误答案打 0.2 分,给所有未标记的好答案和标记的错误答案打零分。因此,一项任务可以产生 0、0.2、0.4、0.6、0.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"orrule = "false2"时会产生相同的结果rule = "true"。使用 时rule = "none",这是唯一的变化:

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

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

4

2 回答 2

1

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

  • 不标记/单击<answer>不会产生任何点。
  • 标记/单击答案选项会产生某些fraction总分。

因此,R/exams 通过将分数 1/#correct 分配给标记/单击正确答案来处理此问题。该rule参数仅控制在标记/单击错误答案时减去哪个分数。默认值是"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",如果标记/单击了不正确的答案,则会删除 100% 的分数:

ee <- exams_eval(partial = TRUE, rule = "all", negative = FALSE)
ee$pointvec("11000")
##  pos  neg 
##  0.5 -1.0 

有一些学习管理系统支持更灵活的积分计算方式(例如,在 QTI 中这原则上是可能的),但我认为您的特定方案不能在 Moodle 中实现。(如果有人比上面的 Moodle 文档了解更多,请告诉我!)

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

于 2019-01-07T23:51:39.690 回答
1

奇怪的是,没有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
于 2019-01-06T23:46:15.453 回答