我是否遵循了 dunn.test 函数的正确程序?

Am I following the correct procedures with the dunn.test function?

我使用 kruskal.test 测试了采样点在丰度值方面的差异。但是,我想确定站点之间的多重差异。

dunn.test函数可以选择使用带有分类向量的向量数据或使用公式表达式lm

我按照在有很多列的数据框中使用的方式编写函数,但我没有找到证实我的程序的示例。

library(dunn.test)

df<-data.frame(a=runif(5,1,20),b=runif(5,1,20), c=runif(5,1,20))

kruskal.test(df)

dunn.test(df)

我的结果是:

Kruskal-Wallis chi-squared = 6.02, df = 2, p-value = 0.04929  

Kruskal-Wallis chi-squared = 6.02, df = 2, p-value = 0.05  

      Comparison of df by group                           

      Between 1 and 2   2.050609, 0.0202
      Between 1 and 3  -0.141421, 0.4438
      Between 2 and 3  -2.192031, 0.0142

我看了你的代码,你很接近。一个问题是您应该使用 method 参数指定一种方法来更正多重比较。

更正多重比较

对于您的示例数据,我将使用 False Discovery Rate (FDR) 的 Benjamini-Yekutieli 变体。我认为这对你的数据表现良好的原因超出了 Whosebug 的范围,但你可以阅读更多关于它和其他校正方法 here。我还建议您阅读相关论文;其中大部分是开放获取的。

library(dunn.test)

set.seed(711) # set pseudorandom seed

df <- data.frame(a = runif(5,1,20),
                 b = runif(5,1,20), 
                 c = runif(5,1,20))

dunn.test(df, method = "by") # correct for multiple comparisons using "B-Y" procedure

# Output
data: df and group
Kruskal-Wallis chi-squared = 3.62, df = 2, p-value = 0.16


                           Comparison of df by group                           
                             (Benjamini-Yekuteili)                             
Col Mean-|
Row Mean |          1          2
---------+----------------------
       2 |   0.494974
         |     0.5689
         |
       3 |  -1.343502  -1.838477
         |     0.2463     0.1815

alpha = 0.05
Reject Ho if p <= alpha/2

解释结果

每个单元格的第一行提供每个比较的 Dunn 成对 z 检验统计数据,第二行提供您的 corrected p -值。

请注意,一旦针对多重比较进行了校正,none 的成对检验在 0.05 的 alpha 下显着,这并不奇怪,因为每个示例 "sites" 都是由相同的分布。希望这有用。祝您分析愉快!

P.S. 将来,如果您要使用 runif(或任何其他类型的伪随机数生成)。另外,如果您还有其他关于统计分析的问题,最好在以下网址提问:https://stats.stackexchange.com/