R:从 conover 测试中绘制 p 值的问题(Dunn 的工作正常)

R: problems plotting p-values from conover test (Dunn's works fine)

我遇到了无法解决的错误消息。

我将以下代码用于 运行 R 中的 Kruskal Wallis,然后使用 Dunn 的代码进行成对比较:

res.kruskal <- mydata %>% kruskal_test(values ~ group)
res.kruskal
stat.test <- mydata %>% dunn_test(values ~ group, p.adjust.method = "hochberg") 
stat.test
stat.test <- stat.test %>% add_xy_position(x = "group")

然后我使用这个结果来绘制出意义,如下所示:

ggboxplot(mydata, x = "group", y = "values, fill = "group") +
  stat_pvalue_manual(stat.test, hide.ns = FALSE)

得到的情节很漂亮(万岁!)

但是 Cover Test 显然比 Dunn 的更强大并且更受欢迎...(也欢迎对此提出任何意见!)。 运行下面的代码returns一个错误:

res.kruskal <- immdatamed %>% kruskal_test(LplastinTL ~ group)
res.kruskal
attach(immdatamed)
stat.test <- conover.test(LplastinTL, group, method = "hochberg") 
stat.test
stat.test <- stat.test %>% add_xy_position(x = "group")
detach(immdatamed)

stat.test <- stat.test %>% add_xy_position(x = "group")
Error in asserttat_group_columns_exists(test) : 
  data should contain group1 and group2 columns

我想不通...我可以 运行 Conover 测试正常但无法解决上述错误以使其与 ggboxplot 一起工作。

我实际上更喜欢使用更美观的 ggplot & geom_boxplot 但根本无法将其与 Dunn_test 交互...

欢迎任何解决方案!

谢谢

P.S。我将其与 ggplot 一起使用:http://www.sthda.com/english/articles/24-ggpubr-publication-ready-plots/76-add-p-values-and-significance-levels-to-ggplots 但我继续想要 wilcoxon 或 t.test 进行成对比较...

解释我在做什么很长,因为我预计您对 R 和统计数据都没有经验。我什至不会解释为什么 Conover vs Dunn 那更 stats exchange thing see here

以后请说清楚你用的是什么包,比如你从来不提rstatix包含您的数据样本。

# 
library(dplyr)
library(ggpubr)
library(rstatix)

# I'm going to get the Conover test from this package 

require(DescTools)

# You didn't provide data I will use mtcars

mydata <- mtcars %>% select(mpg, gear)
mydata$gear <- factor(mydata$gear)

# Here's what you were doing

stat.test.dunn <- mydata %>% dunn_test(mpg ~ gear, p.adjust.method = "hochberg") 
stat.test.dunn <- stat.test.dunn %>% add_xy_position(x = "gear")
stat.test.dunn
#> # A tibble: 3 x 13
#>   .y.   group1 group2    n1    n2 statistic       p   p.adj p.adj.signif
#>   <chr> <chr>  <chr>  <int> <int>     <dbl>   <dbl>   <dbl> <chr>       
#> 1 mpg   3      4         15    12      3.76 1.69e-4 5.06e-4 ***         
#> 2 mpg   3      5         15     5      1.65 9.98e-2 2.00e-1 ns          
#> 3 mpg   4      5         12     5     -1.14 2.54e-1 2.54e-1 ns          
#> # … with 4 more variables: y.position <dbl>, groups <named list>, xmin <int>,
#> #   xmax <int>

ggboxplot(mydata, x = "gear", y = "mpg", fill = "gear") +
  stat_pvalue_manual(stat.test.dunn, hide.ns = FALSE)

我们可以这样 "fake it out"


stat.test.Conover <- DescTools::ConoverTest(mpg ~ gear, mydata, method = "hochberg" ) 
stat.test.Conover
#> 
#>  Conover's test of multiple comparisons : hochberg  
#> 
#>     mean.rank.diff    pval    
#> 4-3      13.658333 8.5e-05 ***
#> 5-3       7.966667  0.0767 .  
#> 5-4      -5.691667  0.1434    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
stat.test.Conover[[1]]
#>     mean rank diff         pval
#> 4-3      13.658333 8.490683e-05
#> 5-3       7.966667 7.666748e-02
#> 5-4      -5.691667 1.433731e-01

things_we_want <- rstatix::add_significance(data = as.data.frame(stat.test.Conover[[1]]))
things_we_want
#>   mean rank diff         pval pval.signif
#> 1      13.658333 8.490683e-05        ****
#> 2       7.966667 7.666748e-02          ns
#> 3      -5.691667 1.433731e-01          ns

stat.test.Conover <- stat.test.dunn
stat.test.Conover
#> # A tibble: 3 x 13
#>   .y.   group1 group2    n1    n2 statistic       p   p.adj p.adj.signif
#>   <chr> <chr>  <chr>  <int> <int>     <dbl>   <dbl>   <dbl> <chr>       
#> 1 mpg   3      4         15    12      3.76 1.69e-4 5.06e-4 ***         
#> 2 mpg   3      5         15     5      1.65 9.98e-2 2.00e-1 ns          
#> 3 mpg   4      5         12     5     -1.14 2.54e-1 2.54e-1 ns          
#> # … with 4 more variables: y.position <dbl>, groups <named list>, xmin <int>,
#> #   xmax <int>
stat.test.Conover$p.adj <- things_we_want$pval
stat.test.Conover$p.adj.signif <- things_we_want$pval.signif
stat.test.Conover
#> # A tibble: 3 x 13
#>   .y.   group1 group2    n1    n2 statistic       p   p.adj p.adj.signif
#>   <chr> <chr>  <chr>  <int> <int>     <dbl>   <dbl>   <dbl> <chr>       
#> 1 mpg   3      4         15    12      3.76 1.69e-4 8.49e-5 ****        
#> 2 mpg   3      5         15     5      1.65 9.98e-2 7.67e-2 ns          
#> 3 mpg   4      5         12     5     -1.14 2.54e-1 1.43e-1 ns          
#> # … with 4 more variables: y.position <dbl>, groups <named list>, xmin <int>,
#> #   xmax <int>

ggboxplot(mydata, x = "gear", y = "mpg", fill = "gear") +
  stat_pvalue_manual(stat.test.Conover, hide.ns = FALSE)