2011-10-23 15 views
5

Questa è l'uscita normale dal test:pairwise.wilcox.test - uscita riformattare

attach(airquality) 
pw <- pairwise.wilcox.test(Ozone, Month, p.adj = "bonf") 
pw 

data: Ozone and Month 

    May Jun Jul Aug 
Jun 1.0000 -  -  -  
Jul 0.0003 0.1414 -  -  
Aug 0.0012 0.2591 1.0000 -  
Sep 1.0000 1.0000 0.0074 0.0325 

Recentemente ho dovuto condurre un test con 10 livelli di un fattore. Mentre il formato triangolare inferiore di pairwise.wilcox.test è utile e conciso, ho pensato che sarebbe stato conveniente sistemarlo in modo similare all'uscita HSD di Tukey in cui ogni combinazione pairwise è elencata insieme al suo valore p asociato. Questo è stato il mio tentativo di fare questo:

pw.df <- as.data.frame(pw$p.value) 
pw.diff <- vector("character") 
pw.pval <- vector("numeric") 
for (i in 1:ncol(pw.df)) 
    for (j in i:length(pw.df)) { 
    pw.diff <- c(pw.diff,paste(colnames(pw.df[i]),"-",rownames(pw.df)[j])) 
    pw.pval <- c(pw.pval,pw.df[j,i]) 
    } 


# order them by ascending p value 
v <- order(pw.pval,decreasing = F) 
pw.df <- data.frame(pw.diff[v],pw.pval[v]) 


# display those that are significant at the 5% level 
pw.df[pw.df$pw.pval<0.05,] 

    pw.diff.v. pw.pval.v. 
1 May - Jul 0.000299639 
2 May - Aug 0.001208078 
3 Jul - Sep 0.007442604 
4 Aug - Sep 0.032479550 

Se qualcuno ha un po 'di suggerimenti/trucchi/consigli su come rendere questo più facile e/o più elegante sarei grato.

risposta

9

Vorrei utilizzare il pacchetto reshape o reshape2 per questa attività, in particolare il comando melt(). L'oggetto restituito da pairwise.wilcox.test contiene i dati di interesse nel terzo slot, in modo da qualcosa come melt(pw[[3]]) dovrebbe fare il trucco:

X1 X2  value 
1 Jun May 1.000000000 
2 Jul May 0.000299639 
3 Aug May 0.001208078 
4 Sep May 1.000000000 
5 Jun Jun   NA 
.... 
+0

che è grande. Grazie :) –