pairwise.wilcox.test - переформатировать вывод - PullRequest
5 голосов
/ 23 октября 2011

Это нормальный результат теста:

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

Недавно мне пришлось провести тест с 10 уровнями фактора.Хотя нижний треугольный формат pairwise.wilcox.test полезен и лаконичен, я подумал, что было бы удобно расположить его по-простому в выводе Tukey HSD, где каждая попарная комбинация указана вместе с соответствующим значением p.Это была моя попытка сделать это:

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

Если у кого-нибудь есть какие-нибудь советы / хитрости / советы о том, как сделать это проще и / или более элегантным, я был бы признателен.

1 Ответ

9 голосов
/ 24 октября 2011

Я бы использовал пакет reshape или reshape2 для этой задачи, в частности команду melt().Объект, возвращаемый pairwise.wilcox.test, содержит интересующие данные в третьем слоте, поэтому что-то вроде melt(pw[[3]]) должно сработать:

    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
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...