我有一个数据框,其中一个分组因子(第一列)具有多个级别(多于两个)和几个包含数据的列 . 我想将wilcox.test应用于整个日期框架,以将每个组变量与其他变量进行比较 . 我怎样才能做到这一点?
更新:我知道wilcox.test只会测试两组之间的差异,而我的数据框包含三组 . 但我更感兴趣的是如何做到这一点,而不是使用什么测试 . 最有可能的一个组将被删除,但我还没有决定,所以我想测试所有变种 .
这是一个示例:
structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), var1 = c(9.3,
9.05, 7.78, 7.11, 7.14, 8.12, 7.5, 7.84, 7.8, 7.52, 8.84, 6.98,
6.1, 6.89, 6.5, 7.5, 7.8, 5.5, 6.61, 7.65, 7.68), var2 = c(11L,
11L, 10L, 1L, 3L, 7L, 11L, 11L, 11L, 11L, 4L, 1L, 1L, 1L, 2L,
2L, 1L, 4L, 8L, 8L, 1L), var3 = c(7L, 11L, 3L, 7L, 11L, 2L, 11L,
5L, 11L, 11L, 5L, 11L, 11L, 2L, 9L, 9L, 3L, 8L, 11L, 11L, 2L),
var4 = c(11L, 11L, 11L, 11L, 6L, 11L, 11L, 11L, 10L, 7L,
11L, 2L, 11L, 3L, 11L, 11L, 6L, 11L, 1L, 11L, 11L), var5 = c(11L,
1L, 2L, 2L, 11L, 11L, 1L, 10L, 2L, 11L, 1L, 3L, 11L, 11L,
8L, 8L, 11L, 11L, 11L, 2L, 9L)), .Names = c("group", "var1",
"var2", "var3", "var4", "var5"), class = "data.frame", row.names = c(NA,
-21L))
UPDATE
感谢大家的所有答案!
3 回答
更新我的答案以跨列工作
结果如下:
pairwise.wilcox.test
函数似乎在这里很有用;也许是这样的?如果你只想要p值,你可以通过并提取它们并制作一个矩阵 .
另请注意
pairwise.wilcox.test
使用Holm方法调整多次比较;如果你想做一些不同的事情,请查看p.adjust
参数 .您可以使用
apply
循环遍历列,然后使用匿名函数将列传递给您要使用的任何测试,如下所示(假设数据框名为df
):注意:我使用了Kruskal-Wallis测试,因为它适用于多个组 . 如果只有两组,使用Wilcoxon测试也可以正常工作 .
如果你想对所有变量进行成对的Wilcoxon测试,这里是一个双线程,它将遍历所有列和所有对,并将结果作为列表返回: