Kode paling sederhana yang muncul di benak saya ditunjukkan di bawah ini. Saya cukup yakin ada beberapa fungsi yang sudah ada untuk melakukan itu pada CRAN tetapi saya terlalu malas untuk mencari mereka, bahkan pada pencarian-R .
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)
Berikut adalah contoh dari apa yang dihasilkan oleh kode di atas (dengan perbedaan yang signifikan antara keempat kelompok):
Alih-alih tes Wilcoxon, orang bisa mengandalkan prosedur yang diimplementasikan dalam kruskalmc()
fungsi dari paket pgirmess (lihat deskripsi prosedur yang digunakan di sini ).
Juga, pastikan untuk memeriksa tips R Rudolf Cardinal tentang R: grafik dasar 2 (lihat khususnya, grafik batang lain, dengan anotasi ).