2011-10-23 25 views
5

Đây là sản phẩm bình thường từ các thử nghiệm:pairwise.wilcox.test - định dạng lại sản lượng

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 

Gần đây tôi đã phải tiến hành một thử nghiệm với 10 cấp độ của một yếu tố. Trong khi định dạng tam giác thấp hơn của pairwise.wilcox.test hữu ích và súc tích, tôi nghĩ sẽ thuận tiện để sắp xếp nó theo cách simlar đến đầu ra Tukey HSD trong đó mỗi kết hợp cặp được liệt kê cùng với giá trị p được kết nối. Đây là nỗ lực của tôi để làm điều này:

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 

Nếu ai có một số mẹo/thủ thuật/lời khuyên về làm thế nào để làm cho điều này dễ dàng hơn và/hoặc thanh lịch hơn tôi sẽ biết ơn.

Trả lời

9

Tôi sẽ sử dụng gói reshape hoặc reshape2 cho tác vụ này, cụ thể là lệnh melt(). Đối tượng được trả về bởi pairwise.wilcox.test chứa dữ liệu quan tâm trong khe thứ ba, vì vậy, chẳng hạn như melt(pw[[3]]) nên thực hiện thủ thuật:

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

Thật tuyệt. Cảm ơn bạn :) –

Các vấn đề liên quan