Estoy tratando de evaluar el rendimiento de un algoritmo de clasificación de aprendizaje automático supervisado. Las observaciones se dividen en clases nominales (2 por el momento, sin embargo, me gustaría generalizar esto a problemas de clases múltiples), extraídas de una población de 99 sujetos.
Una de las preguntas que me gustaría poder responder es, si el algoritmo exhibe una diferencia significativa en la precisión de clasificación entre las clases de entrada. Para el caso de clasificación binaria, estoy comparando la precisión media entre las clases entre los sujetos usando una prueba de Wilcoxon pareada (ya que la distribución subyacente no es normal). Para generalizar este procedimiento a problemas de varias clases, tenía la intención de utilizar una prueba de Friedman .
Sin embargo, los valores de p obtenidos por esos dos procedimientos en el caso de una IV binaria varían enormemente, con el rendimiento de la prueba de Wilcoxon, p < .001
mientras que p = .25
para la prueba de Friedman. Esto me lleva a creer que tengo un malentendido fundamental de la estructura de la prueba de Friedman.
¿ No es apropiado usar una prueba de Friedman en este caso para comparar el resultado de las medidas repetidas de precisión en todos los sujetos?
Mi código R para obtener esos resultados ( subject
es el identificador del sujeto, acc
la precisión DV y expected
la clase de observación 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
hacer una prueba de rango con signo comparando la precisión en las dos condiciones, porque nunca le dice la variable de emparejamiento. Como mínimo, esta es una forma insegura de ejecutar la prueba, ya que depende del orden de las filas en los datos de entrada.