Sto cercando di valutare le prestazioni di un algoritmo di classificazione di apprendimento automatico supervisionato. Le osservazioni rientrano nelle classi nominali (2 per il momento, tuttavia mi piacerebbe generalizzare questo a problemi multi-classe), tratte da una popolazione di 99 soggetti.
Una delle domande a cui vorrei poter rispondere è se l'algoritmo mostra una differenza significativa nella precisione della classificazione tra le classi di input. Per il caso della classificazione binaria, sto confrontando l'accuratezza media tra le classi tra i soggetti usando un test di Wilcoxon associato (poiché la distribuzione sottostante non è normale). Al fine di generalizzare questa procedura a problemi multi-classe, ho deciso di utilizzare un test Friedman .
Tuttavia, i valori di p ottenuti da queste due procedure in caso di IV binario variano selvaggiamente, con il test di Wilcoxon ceduto p < .001
mentre p = .25
per il test di Friedman. Questo mi porta a credere di avere un fraintendimento fondamentale della struttura del test di Friedman.
Non è appropriato usare un test di Friedman in questo caso per confrontare l'esito delle misure ripetute dell'accuratezza su tutti i soggetti?
Il mio codice R per ottenere quei risultati ( subject
è l'identificatore del soggetto, acc
l'accuratezza DV e expected
la classe di osservazione 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
esegua un test di rango con segno confrontando l'accuratezza nelle due condizioni, perché non gli dici mai la variabile di accoppiamento. Per lo meno questo è un modo non sicuro di eseguire il test, perché si basa sull'ordinamento delle righe nei dati di input.