Demos un paso atrás y veamos cómo serían los datos. Por lo que describes, 3 algoritmos (es decir, grupos o tratamientos) y 10 conjuntos de datos (es decir, sujetos). En este caso, tiene un diseño dentro de los sujetos (es decir, medidas repetidas) con un factor. Una forma de representar esto es así:
set.seed(123)
df <- data.frame(dataset = rep(seq(10), 3),
algorithm = rep(c("ML1","ML2","ML3"), each=10),
Accuracy = runif(30))
> df
dataset algorithm Accuracy
1 1 ML1 0.28757752
2 2 ML1 0.78830514
3 3 ML1 0.40897692
4 4 ML1 0.88301740
5 5 ML1 0.94046728
6 6 ML1 0.04555650
7 7 ML1 0.52810549
8 8 ML1 0.89241904
9 9 ML1 0.55143501
10 10 ML1 0.45661474
11 1 ML2 0.95683335
12 2 ML2 0.45333416
13 3 ML2 0.67757064
14 4 ML2 0.57263340
15 5 ML2 0.10292468
16 6 ML2 0.89982497
17 7 ML2 0.24608773
18 8 ML2 0.04205953
19 9 ML2 0.32792072
20 10 ML2 0.95450365
21 1 ML3 0.88953932
22 2 ML3 0.69280341
23 3 ML3 0.64050681
24 4 ML3 0.99426978
25 5 ML3 0.65570580
26 6 ML3 0.70853047
27 7 ML3 0.54406602
28 8 ML3 0.59414202
29 9 ML3 0.28915974
30 10 ML3 0.14711365
Lo normal es que veas ejemplos que tienen como etiqueta "tema". En su caso, sus "sujetos" son "conjuntos de datos". Si se puede asumir la normalidad, se haría un ANOVA de medidas repetidas. Sin embargo, usted afirma que sabe que las precisiones no se distribuyen normalmente y naturalmente quiere un método no paramétrico. Su conjunto de datos también está equilibrado (10 muestras/grupo), por lo que podemos utilizar la prueba de Friedman (que esencialmente es un ANOVA de medidas repetidas no paramétrico).
Si obtiene un valor p significativo en la prueba, deberá realizar un análisis post-hoc con una prueba de Wilcoxon por pares con algún tipo de corrección (por ejemplo, Bonferroni, Holm, etc.). No utilizaría Mann-Whitney porque tiene datos de "medidas emparejadas/repetidas".
Por último, probablemente quiera conocer el tamaño del efecto de cualquier diferencia significativa. Para ello también se utilizaría la prueba de wilcoxon. En R no hay ninguna función que pueda recordar ahora mismo, pero la ecuación es muy simple:
$$r=\frac{Z}{sqrt(N)}$$
Donde Z es la puntuación Z y N es el tamaño de la muestra (entre los dos grupos que se comparan). Puede obtener esta puntuación Z utilizando la función wilcoxsign_test
de la coin
paquete.
Utilizando los datos anteriores, esto se puede hacer en R con lo siguiente. Tenga en cuenta que los datos anteriores fueron generados aleatoriamente, por lo que no son significativos. Esto es sólo para demostrar algo de código:
# Friedman Test
friedman.test(Accuracy ~ algorithm|dataset, data=df)
# Post-hoc tests with 'bonferroni correction'
with(df, pairwise.wilcox.test(Accuracy, algorithm, p.adj="bonferroni", paired=T))
# Get Z-score for calculating effect-size
library(coin)
with(df, wilcoxsign_test(Accuracy ~ factor(algorithm)|factor(dataset),
data=df[algorithm == "ML1" | algorithm == "ML2",]))
# Calculate effect size, in this case Z = -0.2548, two groups is 20 datasets
0.2548/sqrt(20)