AFAIK, no hay forma cerrada para la distribución. El uso de R, la ingenua implementación de obtener la exacta distribución que funciona para mí hasta tamaños de grupo de al menos 12 - que toma menos de 1 minuto en un Core i5 uso Windows7 64bit y actual R. R del propio más inteligente algoritmo en C que se utiliza en pwilcox()
, se puede comprobar el origen de archivo src/nmath/wilcox.c
n1 <- 12 # size group 1
n2 <- 12 # size group 2
N <- n1 + n2 # total number of subjects
Ahora generar todos los posibles casos de las filas dentro del grupo 1. Estos son todos los ${N \choose n_{1}}$ diferentes muestras de los números de $1, \ldots, N$ del tamaño de la $n_{1}$. A continuación, calcular el rango de la suma (= estadístico de prueba para cada uno de estos casos. El cómputo de estas rango sumas de dinero para obtener la función de densidad de probabilidad de la frecuencia relativa, la suma total de estas frecuencias relativas es la función de distribución acumulativa.
rankMat <- combn(1:N, n1) # all possible ranks within group 1
LnPl <- colSums(rankMat) # all possible rank sums for group 1
dWRS <- table(LnPl) / choose(N, n1) # relative frequencies of rank sums: pdf
pWRS <- cumsum(dWRS) # cumulative sums: cdf
Comparar la distribución exacta en contra de la asintóticamente correcta distribución normal.
muLnPl <- (n1 * (N+1)) / 2 # expected value
varLnPl <- (n1*n2 * (N+1)) / 12 # variance
plot(names(pWRS), pWRS, main="Wilcoxon RS, N=(12, 12): exact vs. asymptotic",
type="n", xlab="ln+", ylab="P(Ln+ <= ln+)", cex.lab=1.4)
curve(pnorm(x, mean=muLnPl, sd=sqrt(varLnPl)), lwd=4, n=200, add=TRUE)
points(names(pWRS), pWRS, pch=16, col="red", cex=0.7)
abline(h=0.95, col="blue")
legend(x="bottomright", legend=c("exact", "asymptotic"),
pch=c(16, NA), col=c("red", "black"), lty=c(NA, 1), lwd=c(NA, 2))
![enter image description here]()