对数据框中的大量组合执行 Kruskal-wallis 测试

问题描述 投票:0回答:1

我在 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

也许有来自

*apply
家族的东西?

r kruskal-wallis
1个回答
1
投票

interaction
中使用
by

> by(dat, with(dat, interaction(A, B)), \(x) {
+   with(x, kruskal.test(D, C))[c('statistic', 'parameter', 'p.value')]
+ }) |> do.call(what='rbind')
            statistic parameter p.value
mix1.size1  2379      3         0      
mix2.size1  2620      3         0      
mix22.size1 2460      3         0      
mix2.size2  2537      3         0      

数据:

> 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))
© www.soinside.com 2019 - 2024. All rights reserved.