我在 R 中有一个 df,有 50 种 A 和 B 的独特组合。 对于 A 和 B 的每种组合,我想执行 Kruskal-wallis 测试:
kruskal.test(D,C,data = df)
我想测试哪些组合 A 和 B 需要拒绝原假设。
如何在不对每个组合进行单独测试的情况下执行此操作? 我的数据样本如下
A B C D
mix1 size1 1 0.2
mix1 size1 2 0.15
mix1 size1 3 0.22
mix1 size1 4 0.215
mix2 size1 1 0.2
mix2 size1 2 0.15
mix2 size1 3 0.2
mix2 size1 4 0.15
mix2 size2 1 0.21
mix2 size2 2 0.11
mix2 size2 3 0.23
mix2 size2 4 0.615
...
mix22 size1 1 0.01
mix22 size1 2 0.18
mix22 size1 3 0.7
mix22 size1 4 0.17
我的预期输出是 df/table,其中包含 A 和 B 每种组合的 kruskal-wallis 测试的 p 值。
A B P
mix1 size1 0.005
mix2 size1 0.211
有(s/l/...)的东西适用???
使用
by
。
> by(dat, with(dat, interaction(A, B)), \(x) {
+ with(x, kruskal.test(C, D))[c('statistic', 'parameter', 'p.value')]
+ }) |> do.call(what='rbind')
statistic parameter p.value
mix1.size1 3 3 0.3916252
mix2.size1 0.6 1 0.438578
mix22.size1 3 3 0.3916252
mix2.size2 3 3 0.3916252
数据:
> dput(dat)
structure(list(A = c("mix1", "mix1", "mix1", "mix1", "mix2",
"mix2", "mix2", "mix2", "mix2", "mix2", "mix2", "mix2", "mix22",
"mix22", "mix22", "mix22"), B = c("size1", "size1", "size1",
"size1", "size1", "size1", "size1", "size1", "size2", "size2",
"size2", "size2", "size1", "size1", "size1", "size1"), C = c(1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L),
D = c(0.2, 0.15, 0.22, 0.215, 0.2, 0.15, 0.2, 0.15, 0.21,
0.11, 0.23, 0.615, 0.01, 0.18, 0.7, 0.17)), class = "data.frame", row.names = c(NA,
-16L))