让我为@Edward(+1)的现有答案添加几点:
如果您从序列 0.1, 0.2, ..., 0.9 生成一个解决方案,并希望其余八个数字中的四个作为干扰项,我建议不要使用num_to_schoice()
. 只有在 0.10、0.11、0.12、...、0.9 中移动到正确的解决方案时,我才会使用num_to_schoice()
.
没有num_to_schoice()
一位数
您可以设置一个包含序列中所有九个数字的答案列表,将正确的解决方案排序到第一个位置,然后使用exshuffle
元信息标签进行实际抽样。
例如,在数据生成中,您需要这样的东西:
sol <- 0.3
ans <- c(sol, setdiff(1:9/10, sol))
ans <- paste0("$", ans, "$")
在问题中,您可以包括
answerlist(ans, markup = "markdown")
## Answerlist
## ----------
## * $0.3$
## * $0.1$
## * $0.2$
## * $0.4$
## * $0.5$
## * $0.6$
## * $0.7$
## * $0.8$
## * $0.9$
最后,元信息需要:
exsolution: 100000000
exshuffle: 5
然后,这将使用正确的解决方案和八个错误答案中的四个——所有这些都以打乱的顺序排列。(请注意,上面使用 .Rmd 语法,对于 .Rnw 这需要相应地进行调整。)
用num_to_schoice()
两位数
对于使用一位数的场景,num_to_schoice()
它试图做太多事情,但对于一位数以上的情况,它可能很有用。具体来说,num_to_schoice()
确保正确解决方案的等级是非信息性的,即正确解决方案可以是等概率显示的序列中的最小、次小、...、最大数。具体来说,如果正确解决方案的分布在可能的范围内不均匀,这可能很重要。这就是以下代码有时会失败的原因:
num_to_schoice(0.3, digits = 1, delta = 0.1, range = c(0.1, 0.9))
在内部,这首先决定四个错误答案中有多少应该在正确解决方案 0.3 的左侧。NULL
显然,左边最多有两个错误答案的空间,如果超过,可能会导致警告和结果。移动到两位数可以解决这个问题,例如:
num_to_schoice(0.31, range = c(0.01, 0.99),
digits = 2, delta = 0.03, method = "delta")
评论:
- 就个人而言,我只会在正确的解决方案可能也有两位数的情况下这样做。否则学生可能会接受这种模式。
- 您需要确保在正确解决方案的左侧和右侧至少
4 * delta
有足够的空间容纳错误答案。
- 使用
delta = 0.01
当然是可能的,但如果你想要更大的增量那么delta = 0.03
或者delta = 0.07
通常也是有用的选择。这是因为从具有这种增量的等距网格中采样对于大多数学生来说通常是不明显的。相比之下,像 0.05、0.1、0.02 等这样的增量通常会很快被拾取。