9 votos

Destacando los resultados significativos de la no-paramétrica de comparaciones múltiples en boxplots

He diagramas de caja de los 13 grupos que muestro en una parcela. Los grupos han desequilibrado las poblaciones y no están distribuidos normalmente. Quiero mostrar que los pares son estadísticamente similares (es decir, han de kruskal.la prueba de la p-valor < 0.05) por poner un,b,c, etc. en la parte superior de los cuadros de ese partido. Aquí es un pseudo código para mostrar lo que tengo:

A = c(1, 5, 8, 17, 16, 3, 24, 19, 6) 
B = c(2, 16, 5, 7, 4, 7, 3) 
C = c(1, 1, 3, 7, 9, 6, 10, 13) 
D = c(2, 15, 2, 9, 7) 
junk = list(g1=A, g2=B, g3=C, g4=D) 
boxplot(junk) 

Aquí está una parcela que he encontrado que hace lo que yo quiero (excepto tengo 13 grupos en una fila):

7voto

DavLink Puntos 101

El código más sencillo que viene a mi mente es la que se muestra a continuación. Estoy bastante seguro de que hay algunos ya existentes de la función(s) para hacer que en CRAN, pero soy demasiado perezoso para buscar para ellos, incluso en R-buscar.

dd <- data.frame(y=as.vector(unlist(junk)), 
                 g=rep(paste("g", 1:4, sep=""), unlist(lapply(junk, length))))

aov.res <- kruskal.test(y ~ g, data=dd)
alpha.level <- .05/nlevels(dd$g)  # Bonferroni correction, but use 
                                  # whatever you want using p.adjust()

# generate all pairwise comparisons
idx <- combn(nlevels(dd$g), 2)

# compute p-values from Wilcoxon test for all comparisons
pval.res <- numeric(ncol(idx))
for (i in 1:ncol(idx))
  # test all group, pairwise
  pval.res[i] <- with(dd, wilcox.test(y[as.numeric(g)==idx[1,i]], 
                                      y[as.numeric(g)==idx[2,i]]))$p.value

# which groups are significantly different (arranged by column)
signif.pairs <- idx[,which(pval.res<alpha.level)]

boxplot(y ~ g, data=dd, ylim=c(min(dd$y)-1, max(dd$y)+1))
# use offset= to increment space between labels, thanks to vectorization
for (i in 1:ncol(signif.pairs))
    text(signif.pairs[,i], max(dd$y)+1, letters[i], pos=4, offset=i*.8-1)

Aquí es un ejemplo de lo que el código anterior podría producir (con diferencias significativas entre los cuatro grupos):

enter image description here

En lugar de la prueba de Wilcoxon, uno podría basarse en el procedimiento implementado en el kruskalmc() función de la pgirmess paquete (véase una descripción del procedimiento utilizado aquí).

También, asegúrese de comprobar Rudolf del Cardenal R consejos acerca de R: gráficos básicos 2 (véase, en particular, Otro gráfico de barras, con anotaciones).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X