As questões de múltipla escolha feitas no Moodle possuem um método de atribuição de pontos que segue algumas regras, demonstradas a seguir.
A primeira coisa a saber é que o valor de cada alternativa muda conforme o número de alternativas verdadeiras/falsas. Cada alternativa verdadeira terá pontuação sempre dada por \[ \frac{1}{\text{# verdadeiras}} \] ou seja, cada alternativa verdadeira será uma fração do número total de alternativas verdadeiras.
Ao marcar uma alternativa falsa, existirá uma penalização, ou seja, você receberá uma pontuação negativa por ter marcado uma alternativa falsa. Essa pontuação negativa será utilizada para descontar da nota final obtida marcando-se as alternativas verdadeiras. O cálculo da pontuação de cada alternativa falsa marcada é dado por \[ \frac{1}{\max\{ \text{# falsas, 2} \}} \] A ideia é a mesma da pontuação das alternativas verdadeiras, mas se houverem apenas uma ou nenhuma alternativa falsa na questão, a fração será sempre \(1/2\). Esse detalhe serve para que, no caso de ocorrer apenas uma alternativa falsa, a marcação dessa alternativa não anule toda a questão. Portanto, no caso de ocorrer apenas uma alternativa falsa, a penalização por marcar essa alternativa será \(1/2 = 0,5\), e não \(1/1 = 1\) se não houvesse esse detalhe.
É importante notar que, de acordo com esses critérios, a nota final poderia ser negativa. No entanto, a nota nunca será negativa, já que existe uma restrição para que seja no mínimo zero.
Atenção: esse é o comportamento padrão para a correção de questões de múltipla escolha adotado pelo pacote exams. Esse padrão pode ser alterado. Veja mais informações na seção detalhes técnicos.
Suponha uma questão com 2 alternativas verdadeiras (V) e 3 falsas (F). A pontuação de cada alternativa será:
Alguns cenários possíveis:
Suponha uma questão com 4 alternativas verdadeiras (V) e 1 falsa (F). A pontuação de cada alternativa será:
Alguns cenários possíveis:
Abaixo você pode conferir as pontuações atribuídas ao marcar um certo número de alternativas verdadeiras e falsas em questões com 1 a 5 alternativas verdadeiras.
As linhas das tabelas se referem ao número de alternativas verdadeiras marcadas, enquanto que as colunas se referem ao número de alternativas falsas marcadas.
Questão com 1 alternativa verdadeira e 4 falsas
F
V 0 1 2 3 4
0 0 0.00 0.0 0.00 0
1 1 0.75 0.5 0.25 0
Questão com 2 alternativas verdadeiras e 3 falsas
F
V 0 1 2 3
0 0.0 0.00 0.00 0
1 0.5 0.17 0.00 0
2 1.0 0.67 0.33 0
Questão com 3 alternativas verdadeiras e 2 falsas
F
V 0 1 2
0 0.00 0.00 0
1 0.33 0.00 0
2 0.67 0.17 0
3 1.00 0.50 0
Questão com 4 alternativas verdadeiras e 1 falsa
F
V 0 1
0 0.00 0.00
1 0.25 0.00
2 0.50 0.00
3 0.75 0.25
4 1.00 0.50
Questão com 5 alternativas verdadeiras e 0 falsas
F
V 0
0 0.0
1 0.2
2 0.4
3 0.6
4 0.8
5 1.0
A correção automática de questões do pacote exams segue uma das cinco regras implementadas na função exams_eval()
, que possui os seguintes argumentos
library(exams)
args(exams_eval)
function (partial = TRUE, negative = FALSE, rule = c("false2",
"false", "true", "all", "none"))
NULL
onde os argumentos são:
partial = TRUE
: permite que questões de múltipla escolha possuam créditos parciais. Do contrário, uma alternativa falsa marcada como verdadeira anula toda a questão.negative = FALSE
: controla se a questão pode ter nota negativa (o que pode acontecer de acordo com algumas regras de correção).rule
: as cinco regras implementadas (detalhes abaixo).Em questões de múltipla escolha com créditos parciais, a fração atribuída para cada alternativa verdadeira selecionada será sempre \(1/\text{V}\), onde \(\text{V}\) é o número de alternativas corretas (verdadeiras). Quando uma alternativa errada (falsa) é selecionada, a pontuação (negativa) atribuída varia conforme uma das cinco regras. Para cada alternativa errada selecionada, a pontuação negativa atribuída será:
false2
(default): \(1/\max\{\text{F}, 2\}\), onde \(\text{F}\) é o número de alternativas erradas (falsas).false
: usa \(1/\text{F}\).true
: usa \(1/\text{V}\), de forma que cada alternativa errada selecionada anula uma alternativa correta.all
: usa \(1\), de forma que uma única alternativa errada selecionada anula todas as corretas selecionadas.none
: usa \(0\), de forma que marcar alternativas erradas não desconta nenhuma fração da nota.Por exemplo, uma questão com 2 alternativas verdadeiras e 3 falsas terá as seguintes pontuações de acordo com cada uma das regras:
## false2
eef2 <- exams_eval(partial = TRUE, negative = FALSE, rule = "false2")
eef2$pointvec("11000")
pos neg
0.5000000 -0.3333333
## false
eef <- exams_eval(partial = TRUE, negative = FALSE, rule = "false")
eef$pointvec("11000")
pos neg
0.5000000 -0.3333333
## true
eet <- exams_eval(partial = TRUE, negative = FALSE, rule = "true")
eet$pointvec("11000")
pos neg
0.5 -0.5
## all
eea <- exams_eval(partial = TRUE, negative = FALSE, rule = "all")
eea$pointvec("11000")
pos neg
0.5 -1.0
## none
een <- exams_eval(partial = TRUE, negative = FALSE, rule = "none")
een$pointvec("11000")
pos neg
0.5 0.0
Pela definição das regras, a diferença entre false2
e false
ocorre apenas quando existirem uma ou nenhuma alternativa errada. Veja os exemplos:
## Uma errada ----------------------------------------------------------
## false2
eef2$pointvec("11110")
pos neg
0.25 -0.50
## false
eef$pointvec("11110")
pos neg
0.25 -1.00
## Nenhuma errada ------------------------------------------------------
## false2
eef2$pointvec("11111")
pos neg
0.2 -0.5
## false
eef$pointvec("11111")
pos neg
0.2 -Inf
O que ocorre é que false2
considera que no mínimo sempre haverão duas alternativas erradas, para que a pontuação máxima a ser descontada não seja maior do que \(0.5\) e a questão não seja anulada.
A nota final de uma questão será portanto dependente de dois fatores:
Para simplificar, vamos focar apenas nas regras false2
(a padrão) e false
. De maneira geral, a nota final (\(Z\)) de uma questão usando a regra false2
será
\[z = \left\{ \begin{array}{lr} x \frac{\text{P}}{\text{V}} - y \frac{\text{P}}{2}, & \text{se } \text{F} < 2\\ x \frac{\text{P}}{\text{V}} - y \frac{\text{P}}{\text{F}}, & \text{se } \text{F} \geqslant 2\\ \end{array} \right. \]
onde \(X\) é o número de alternativas corretas marcadas, \(Y\) é o número de alternativas erradas marcadas, \(\text{P}\) é a pontuação da questão, e \(\text{V}\) e \(\text{F}\) são o número de alternativas verdadeiras e falsas, respectivamente. Para a regra false
, o cálculo da pontuação simplifica apenas para \[
z = x \frac{\text{P}}{\text{V}} - y \frac{\text{P}}{\text{F}}
\]
Os exemplos abaixo mostram a pontuação final em dois cenários:
## (1) Questão com 1 alternativa verdadeira ----------------------------
## Uma verdadeira marcada
eef2$pointsum("10000", "10000") # false2
[1] 1
eef$pointsum("10000", "10000") # false
[1] 1
## Uma verdadeira e uma errada marcadas
eef2$pointsum("10000", "10001") # false2
[1] 0.75
eef$pointsum("10000", "10001") # false
[1] 0.75
## (2) Questão com 4 alternativas verdadeiras --------------------------
## Quatro verdadeira marcada
eef2$pointsum("11110", "11110") # false2
[1] 1
eef$pointsum("11110", "11110") # false
[1] 1
## Quatro verdadeiras e uma errada marcadas
eef2$pointsum("11110", "11111") # false2
[1] 0.5
eef$pointsum("11110", "11111") # false
[1] 0
Com essas regras gerais, podemos definir uma função para fazer o cálculo das notas seguindo estas duas regras.
z <- function(p, v, x, y, negative = FALSE, rule = "false2"){
stopifnot(rule %in% c("false2", "false"))
f <- 5 - v
if(rule == "false2"){
res <- ifelse(f < 2,
x * p/v - y * p/2,
x * p/v - y * p/f)
} else{
res <- x * p/v - y * p/f
}
res <- ifelse(isFALSE(negative) & res < 0, 0, res)
return(res)
}
Alguns exemplos similares aos cenários acima seriam
## Uma alternativa verdadeira, uma verdadeira e uma errada marcadas
z(p = 1, v = 1, x = 1, y = 1, rule = "false2")
[1] 0.75
z(p = 1, v = 1, x = 1, y = 1, rule = "false")
[1] 0.75
## Quatro alternativas verdadeiras, quatro verdadeiras e uma errada
## marcadas
z(p = 1, v = 4, x = 4, y = 1, rule = "false2")
[1] 0.5
z(p = 1, v = 4, x = 4, y = 1, rule = "false")
[1] 0
Com isso, podemos criar uma função que gera uma tabela com todos os possíveis resultados para um número diferente de alternativas verdadeiras/falsas.
makegrid <- function(p, v, ...){
f <- 5 - v
gx <- 0:v
gy <- 0:f
grid <- expand.grid(x = gx, y = gy)
for(i in 1:nrow(grid)){
grid$z[i] <- z(p = p, v = v, x = grid$x[i], y = grid$y[i], ...)
}
tab <- matrix(grid$z, nrow = length(unique(grid$x)),
ncol = length(unique(grid$y)),
dimnames = list(V = unique(grid$x),
F = unique(grid$y)))
return(round(tab, 2))
}
Assim, temos todas as possibilidades para cada regra:
## false2 --------------------------------------------------------------
makegrid(p = 1, v = 0, rule = "false2")
F
V 0 1 2 3 4 5
0 NA NA NA NA NA NA
makegrid(p = 1, v = 1, rule = "false2")
F
V 0 1 2 3 4
0 0 0.00 0.0 0.00 0
1 1 0.75 0.5 0.25 0
makegrid(p = 1, v = 2, rule = "false2")
F
V 0 1 2 3
0 0.0 0.00 0.00 0
1 0.5 0.17 0.00 0
2 1.0 0.67 0.33 0
makegrid(p = 1, v = 3, rule = "false2")
F
V 0 1 2
0 0.00 0.00 0
1 0.33 0.00 0
2 0.67 0.17 0
3 1.00 0.50 0
makegrid(p = 1, v = 4, rule = "false2")
F
V 0 1
0 0.00 0.00
1 0.25 0.00
2 0.50 0.00
3 0.75 0.25
4 1.00 0.50
makegrid(p = 1, v = 5, rule = "false2")
F
V 0
0 0.0
1 0.2
2 0.4
3 0.6
4 0.8
5 1.0
## false ---------------------------------------------------------------
makegrid(p = 1, v = 1, rule = "false")
F
V 0 1 2 3 4
0 0 0.00 0.0 0.00 0
1 1 0.75 0.5 0.25 0
makegrid(p = 1, v = 2, rule = "false")
F
V 0 1 2 3
0 0.0 0.00 0.00 0
1 0.5 0.17 0.00 0
2 1.0 0.67 0.33 0
makegrid(p = 1, v = 3, rule = "false")
F
V 0 1 2
0 0.00 0.00 0
1 0.33 0.00 0
2 0.67 0.17 0
3 1.00 0.50 0
makegrid(p = 1, v = 4, rule = "false")
F
V 0 1
0 0.00 0
1 0.25 0
2 0.50 0
3 0.75 0
4 1.00 0
makegrid(p = 1, v = 5, rule = "false")
F
V 0
0 NA
1 NA
2 NA
3 NA
4 NA
5 NA
Este conteúdo está disponível por meio da Licença Creative Commons 4.0