Un programa dinámico lo solucionará en poco tiempo.
Supongamos que administramos todas las preguntas a los estudiantes y luego seleccionamos al azar un subconjunto $\mathcal{I}$ de $k=10$ de todos los $n=100$ preguntas. Definamos una variable aleatoria $X_i$ para comparar a los dos estudiantes en la pregunta $i:$ lo puso en $1$ si el estudiante A es correcto y el estudiante B no, $-1$ si el estudiante B es correcto y el estudiante A no, y $0$ de lo contrario. El total
$$X_\mathcal{I} = \sum_{i\in\mathcal{I}} X_i$$
es la diferencia en las puntuaciones de las preguntas en $\mathcal I.$ Deseamos calcular $\Pr(X_\mathcal{I} \gt 0).$ Esta probabilidad se toma sobre la distribución conjunta de $\mathcal I$ y el $X_i.$
La función de distribución de $X_i$ se calcula fácilmente bajo el supuesto de que los alumnos responden de forma independiente:
$$\eqalign{ \Pr(X_i=1) &= P_{ai}(1-P_{bi}) \\ \Pr(X_i=-1) &= P_{bi}(1-P_{ai}) \\ \Pr(X_i=0) &= 1 - \Pr(X_i=1) - \Pr(X_i=0). }$$
Para abreviar, llamemos a estas probabilidades $a_i,$ $b_i,$ y $d_i,$ respectivamente. Escriba
$$f_i(x) = a_i x + b_i x^{-1} + d_i.$$
Este polinomio es un función generadora de probabilidad para $X_i.$
Consideremos la función racional
$$\psi_n(x,t) = \prod_{i=1}^n \left(1 + t f_i(x)\right).$$
(En realidad, $x^n\psi_n(x,t)$ es un polinomio: es una función racional bastante simple).
Cuando $\psi_n$ se expande como un polinomio en $t$ el coeficiente de $t^k$ consiste en la suma de todos los productos posibles de $k$ distintivo $f_i(x).$ Será una función racional con coeficientes no nulos sólo para potencias de $x$ de $x^{-k}$ a través de $x^k.$ Porque $\mathcal{I}$ se selecciona uniformemente al azar, los coeficientes de estas potencias de $x,$ cuando se normalizan para sumar la unidad, dan la función generadora de probabilidad para la diferencia de puntuaciones. Las potencias corresponden al tamaño de $\mathcal{I}.$
El objetivo de este análisis es que podamos calcular $\psi(x,t)$ fácilmente y con una eficacia razonable: simplemente multiplica el $n$ polinomios secuencialmente. Para ello es necesario conservar los coeficientes de $1, t, \ldots, t^k$ en $\psi_j(x,t)$ para $j=0, 1, \ldots, n.$ (por supuesto, podemos ignorar todos los poderes superiores de $t$ que aparecen en cualquiera de estos productos parciales). En consecuencia, toda la información necesaria que lleva $\psi_j(x,t)$ puede ser representado por un $2k+1\times n+1$ con filas indexadas por las potencias de $x$ (de $-k$ a través de $k$ ) y columnas indexadas por $0$ a través de $k$ .
Cada paso del cálculo requiere un trabajo proporcional al tamaño de esta matriz, escalando como $O(k^2).$ Teniendo en cuenta el número de pasos, se trata de un $O(k^2n)$ - tiempo, $O(kn)$ -espacio del algoritmo. Esto hace que sea bastante rápido para pequeñas $k.$ Lo he ejecutado en R
(no conocido por la velocidad excesiva) para $k$ hasta $100$ y $n$ hasta $10^5,$ donde tarda nueve segundos (en un solo núcleo). En la configuración de la pregunta con $n=100$ y $k=10,$ el cómputo se lleva a cabo $0.03$ segundos.
Este es un ejemplo en el que el $P_{ai}$ son valores aleatorios uniformes entre $0$ y $1$ y el $P_{bi}$ son sus cuadrados (que siempre son menores que el $P_{ai}$ (lo que favorece fuertemente al estudiante A). He simulado 100.000 exámenes, como se resume en este histograma de las puntuaciones netas:
Las barras azules indican los resultados en los que el alumno A obtuvo una mejor puntuación que el B. Los puntos rojos son el resultado del programa dinámico. Coinciden perfectamente con la simulación ( $\chi^2$ prueba, $p=51\%$ ). La suma de todas las probabilidades positivas da la respuesta en este caso, $0.7526\ldots.$
Obsérvese que este cálculo da más de lo que se pide: produce el distribución de probabilidad completa de la diferencia en las puntuaciones de todos los exámenes de $k$ o menos preguntas seleccionadas al azar.
Para aquellos que deseen una implementación de trabajo para usar o portar, aquí está el R
código que produjo la simulación (almacenado en el vector Simulation
) y ejecutado el programa dinámico (con los resultados en la matriz P
). El repeat
al final está ahí sólo para agregar todos los resultados inusualmente raros para que el $\chi^2$ la prueba se vuelve obviamente fiable. (En la mayoría de las situaciones esto no importa, pero evita que el sofware se queje).
n <- 100
k <- 10
p <- runif(n) # Student A's chances of answering correctly
q <- p^2 # Student B's chances of answering correctly
#
# Compute the full distribution.
#
system.time({
P <- matrix(0, 2*k+1, k+1) # Indexing from (-k,0) to (k,k)
rownames(P) <- (-k):k
colnames(P) <- 0:k
P[k+1, 1] <- 1
for (i in 1:n) {
a <- p[i] * (1 - q[i])
b <- q[i] * (1 - p[i])
d <- (1 - a - b)
P[, 1:k+1] <- P[, 1:k+1] +
a * rbind(0, P[-(2*k+1), 1:k]) +
b * rbind(P[-1, 1:k], 0) +
d * P[, 1:k]
}
P <- apply(P, 2, function(x) x / sum(x))
})
#
# Simulation to check.
#
n.sim <- 1e5
set.seed(17)
system.time(
Simulation <- replicate(n.sim, {
i <- sample.int(n, k)
sum(sign((runif(k) <= p[i]) - (runif(k) <= q[i]))) # Difference in scores, A-B
})
)
#
# Test the calculation.
#
counts <- tabulate(Simulation+k+1, nbins=2*k+1)
n <- sum(counts)
k.min <- 5
repeat {
probs <- P[, k+1]
i <- probs * n.sim >= k.min
z <- sum(probs[!i])
if (z * n >= 5) break
if (k.min * (2*k+1) >= n) break
k.min <- ceiling(k.min * 3/2)
}
probs <- c(z, probs[i])
counts <- c(sum(counts[!i]), counts[i])
chisq.test(counts, p=probs)
#
# The answer.
#
sum(P[(1:k) + k+1, k+1]) # Chance that A-B is positive
0 votos
Dejemos que $A$ y $B$ sea el número de respuestas correctas para $a$ y $b$ respectivamente. Entonces, por la ley de la probabilidad total: $P(A > B) = \sum_{x=0}^sP(A>B|B=x)P(B=x)$ . Si las probabilidades difieren de una pregunta a otra (es decir, las probabilidades dependen de i), la evaluación de las probabilidades individuales puede requerir el examen de todas las combinaciones posibles. Posibles soluciones... 1. Sigue siendo razonable utilizar un ordenador para calcular las probabilidades mediante fuerza bruta. 2. Si se puede suponer que (marginalmente) las probabilidades no dependen de $i$ , entonces se trata de una distribución binomial simple.
0 votos
@knrumsey todos $P_{ai}$ y $P_{bi}$ son valores fijos y se puede suponer $P_{ai}$ y $P_{bi}$ se definen inicialmente de forma aleatoria para $i = 1...100$ . Es posible usar un ordenador y de hecho lo estoy usando, pero las combinaciones totalizan $\frac{100!}{10!(100-10)!}$ que es bastante grande para iterar a través de
0 votos
¿Cuál es el significado de la generación aleatoria $p_{ai}$ ? Si el $p_{ai}$ y $p_{bi}$ no varían demasiado entre $i$ entonces tal vez una suposición binomial proporcione una aproximación razonable. Estableciendo $p_a = \frac{1}{s}\sum_{i=1}^s p_{ai}$ y de forma similar para $p_b$ .
0 votos
Dos comentarios más: Si el $p_{ai}$ y $p_{bi}$ se generan a partir de la misma distribución, entonces $P(A > B) $ debe ser igual a 1/2. En segundo lugar, si te parece bien una aproximación, podrías hacer una simulación de Montecarlo para estimar la probabilidad.
0 votos
En cada iteración, $ P(A>B) = P(A)*(1-P(B))$ porque A sólo es mejor cuando A tiene razón y B no. Así pues, si para una pregunta concreta, A acierta el 90% de las veces y B acierta el 80%, la probabilidad conjunta de que A acierte y B se equivoque es $ 0.9 * 0.2 = 0.18$ Ahora podría escribir un código que recorra las diez preguntas elegidas y asigne un punto a A o a B basándose en esta probabilidad conjunta. Al final, el ganador es el que tiene más puntos. Haz esto miles de veces y observa la probabilidad de que A gane a B. Esto podría llamarse Monte Carlo.