Mã đơn giản nhất mà tôi nghĩ đến được hiển thị dưới đây. Tôi khá chắc chắn có một số chức năng đã có sẵn để thực hiện điều đó trên CRAN nhưng tôi quá lười để tìm kiếm chúng, ngay cả trên R- search .
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)
Dưới đây là một ví dụ về những gì đoạn mã trên sẽ tạo ra (với sự khác biệt đáng kể giữa bốn nhóm):
Thay vì thử nghiệm Wilcoxon, người ta có thể dựa vào thủ tục được thực hiện trong kruskalmc()
hàm từ gói pgirmess (xem mô tả về quy trình được sử dụng ở đây ).
Ngoài ra, hãy chắc chắn kiểm tra các mẹo R của Rudolf Cardinal về R: biểu đồ cơ bản 2 (đặc biệt, xem biểu đồ thanh khác, có chú thích ).