我是否遵循了 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/
我使用 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/