在 Moodle 中结合 mchoice 和 num import 的完形填空题

Cloze question combining mchoice and num import in Moodle

我创建了一个结合 mchoice 和 num 的完形填空题。但是我不能像它说的那样在 Moodle 中导入问题 导入问题时出错无效的嵌入式答案(完形填空)问题(其中一个答案的分数应为 100%,因此此问题有可能获得满分。)。 如果我把它变成一个单一的 mchoice 问题(删除 num 问题)或者我把它变成一个单一的 num chechetion(删除 mchoice 部分),它就会起作用。我在 r-exams.org 上找不到这样的例子,这就是我转向这里的原因。

这是我的代码:

```{r data generation, echo = FALSE, results = "hide"}
library(exams)
Fragen=data.frame(
  Fragen=c(
    "Vergleich Schlachtgewicht (g) männlicher und weiblicher Hühner (Hähne/Hennen) der gleichen Linie.",
    "Untersuchung der Anzahl Insektenarten, welche auf unterschiedlichen Feldern vorkommen (Magerwiese, Klee, je 10 Felder).",
    "Untersuchung Sulfatgehalt (mg) bei Wasserproben aus der Limmat. Die Proben wurden an zwei unterschiedlichen Stellen entnommen (Limmatquai, Werdinsel, während 14 Tagen)",
    "Untersuchung Kürbisgewicht (kg) bei Düngung mit Gülle oder Kompost"),
  Stichprobe1=c("Hahn","Magerwiese","Limmatquai","Guelle"),
  Stichprobe2=c("Henne","Klee","Werdinsel","Kompost"),
  mean1=c(2500,50,250,10),
  mean2=c(2000,20,200,12),
  sd1=c(300,20,50,5),
  sd2=c(300,10,40,5),
  n=c(20,10,14,16)
)
n=sample(4,1)

## DATA
x1=abs(round(rnorm(Fragen$n[n],Fragen$mean1[n],Fragen$sd1[n])))
x2=abs(round(rnorm(Fragen$n[n],Fragen$mean2[n],Fragen$sd2[n])))
datadf=data.frame(x1,x2)
names(datadf)=c(as.character(Fragen$Stichprobe1[n]),as.character(Fragen$Stichprobe2[n]))
write.csv(datadf, "stichproben.csv", row.names = FALSE, quote = FALSE)

alpha=0.05
ps1=shapiro.test(x1)$p.value
ps2=shapiro.test(x2)$p.value
pf=var.test(x1,x2)$p.value
if (ps1 > alpha & ps2 > alpha) {
  if (pf > alpha) {
    p=t.test(x1,x2,var.equal = TRUE)$p.value
  }else{
    p=t.test(x1,x2,var.equal = FALSE)$p.value
  }
}else{
  p=wilcox.test(x1,x2)$p.value
}
p
msol=c(ps1>alpha & ps2>alpha, pf>alpha,TRUE)
msol
```

Question
========

`r Fragen$Fragen[n]`

Die Daten sind im File [stichproben.csv](stichproben.csv). 

Answerlist
----------
* Die Stichproben sind normalverteilt
* Die Varianzen sind homogen
* Die Stichproben sind unabhängig
* Führe den am besten geeigneten Test durch und kopiere den p-Wert ins Feld:

Solution
========

```{r solutionlist, echo = FALSE, results = "asis"}

```

Meta-information
================
exname: t-Test unabhaengig
extype: cloze
exsolution: `r mchoice2string(msol)`|`r format(p)`
exclozetype: mchoice|num
extol: `r format(0.01*p)`

新答案(编辑:2020-06-07)

R-Forge (2.4-0) 上的当前 R/exams 开发版本已得到改进,可以更好地支持 cloze 问题中的 mchoice 元素。 运行 你的 exams2moodle("stichproben.Rmd") 在 Moodle 中产生了这样的练习:

警告:默认情况下,这使用 Moodle 的多项选择题评估规则,其中每个不正确的复选框都会消除一个正确的复选框。原则上,可以更改 exams2moodle() 中的 eval 规则,但这并不适用于所有设置。显然,如果 Moodle 的百分比相加只是大约但不完全为 100%,则它们无法正确读取。我的解读是这是 Moodle 中的一个错误。另见下文。

旧答案 (2020-05-17)

在 Moodle 完形填空练习中,多个答案正确的多项选择题有点棘手。我的理解是,这些在一定程度上实际上是不允许的(参见 https://moodle.org/mod/forum/discuss.php?d=213016 上的讨论)。因此,我们只有包含单项选择元素而不是多项选择元素的完形填空练习示例。

[注:行话跨系统不统一。 R/exams 中的 "Single choice" 在 Moodle 中称为 "multiple choice, single answer"。 R/exams中的"multiple choice"在Moodle中被称为"multiple choice, multiple answer"。在这里,我使用 R/exams.]

所使用的较短的行话

其实我觉得Moodle还是不支持选择题作为完形填空题的元素。这也与您收到的错误消息一致,只要求一个正确答案产生 100%。

然而,事实证明在某些条件下它确实有效。首先,您需要选择 MULTIRESPONSE 而不是 MULTICHOICE 输入 exams2moodle() (即,这可以在 R/exams 端修复)。其次,正确答案的百分比总和需要正好 100%。不幸的是,这与 Moodle 要求 33.33333% 作为 1/3 点的输入相冲突。我没有找到解决这个问题的方法 - 除了避免恰好三个答案正确的情况。

例如,我将上面的代码复制到文件 stichproben.Rmd 中,然后 运行:

set.seed(77)
exams2moodle("stichproben.Rmd", name = "stichproben", cloze = list(
  cloze_mchoice_display = "MULTIRESPONSE",
  eval = list(partial = TRUE, rule = "false2")
))

请注意,种子很重要,因为它导致多项选择题中只有三分之二的项目是正确的。选择 eval 规则,如果选择了不正确的项目,则减去 50% 的分数。这一切都按照 Moodle 中的预期工作。

然而,运行上面的代码之前使用set.seed(1),导致选择题中的所有三项都是正确的。然后我仍然收到您问题中引用的错误消息,并且 - 如上所述 - 我不知道 if/how 这可以避免。我没有找到解决方案。因此,就个人而言,我宁愿避免 cloze 问题中的 mchoice 元素,而是使用多个 schoice 元素。