J'essaie d'évaluer les performances d'un algorithme de classification d'apprentissage automatique supervisé. Les observations se répartissent en classes nominales (2 pour l'instant, mais j'aimerais généraliser cela aux problèmes multi-classes), tirées d'une population de 99 sujets.
L'une des questions auxquelles j'aimerais pouvoir répondre est la suivante: si l'algorithme présente une différence significative dans la précision de la classification entre les classes d'entrée. Pour le cas de la classification binaire, je compare la précision moyenne entre les classes entre les sujets en utilisant un test de Wilcoxon apparié (car la distribution sous-jacente n'est pas normale). Afin de généraliser cette procédure aux problèmes multi-classes, j'ai voulu utiliser un test de Friedman .
Cependant, les valeurs de p obtenues par ces deux procédures dans le cas d'un IV binaire varient énormément, le test de Wilcoxon donnant p < .001
alors que p = .25
pour le test de Friedman. Cela m'amène à croire que j'ai une incompréhension fondamentale de la structure du test de Friedman.
N'est-il pas approprié d'utiliser un test de Friedman dans ce cas pour comparer le résultat des mesures répétées de la précision sur tous les sujets?
Mon code R pour obtenir ces résultats ( subject
est l'identifiant du sujet, acc
la précision DV et expected
la classe d'observation IV):
> head(subject.accuracy, n=10)
subject expected acc
1 10 none 0.97826087
2 10 high 0.55319149
3 101 none 1.00000000
4 101 high 0.68085106
5 103 none 0.97826087
6 103 high 1.00000000
7 104 none 1.00000000
8 104 high 0.08510638
9 105 none 0.95121951
10 105 high 1.00000000
> ddply(subject.accuracy, .(expected), summarise, mean.acc = mean(acc), se.acc = sd(acc)/sqrt(length(acc)))
expected mean.acc se.acc
1 none 0.9750619 0.00317064
2 high 0.7571259 0.03491149
> wilcox.test(acc ~ expected, subject.accuracy, paired=T)
Wilcoxon signed rank test with continuity correction
data: acc by expected
V = 3125.5, p-value = 0.0003101
alternative hypothesis: true location shift is not equal to 0
> friedman.test(acc ~ expected | subject, subject.accuracy)
Friedman rank sum test
data: acc and expected and subject
Friedman chi-squared = 1.3011, df = 1, p-value = 0.254
wilcox.test
fasse un test de classement signé comparant la précision dans les deux conditions, car vous ne lui dites jamais la variable d'appariement. À tout le moins, il s'agit d'une manière non sûre d'exécuter le test, car elle repose sur l'ordre des lignes dans les données d'entrée.