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

时间:2019-01-06 23:23:20

标签: r r-exams

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

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

我知道此评估方案可能存在一些缺点,但是我正在以其他方式弥补这些缺点。

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

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

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

有没有办法在上述情境中实施上述评估方案?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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%,甚至可能会更高。因此,这为某些学生设置了奇怪的激励措施……至少是我通常在教的商务和经济学专业的学生。)