1

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

dunn.test函数可以选择使用带有分类向量的向量数据或使用公式表达式 as 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
4

1 回答 1

1

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

校正多重比较

对于您的示例数据,我将使用错误发现率(FDR)的Benjamini-Yekutieli变体。我认为这对您的数据表现良好的原因超出了 StackOverflow 的范围,但您可以在此处阅读有关它和其他更正方法的更多信息。我还建议您阅读相关论文;其中大多数是开放获取的。

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 检验统计量,第二行提供校正后的 p 值。

请注意,一旦针对多重比较进行了校正,您的任何成对测试都不会在 0.05 的 alpha 处显着,这并不奇怪,因为您的每个示例“站点”都是由完全相同的分布生成的。希望这有用。快乐分析!

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

于 2018-04-21T05:32:02.793 回答