有没有一种方法可以应用按站点分组的wilcoxon测试?

问题描述

我想对多组中的两种治疗使用Wilcoxon 2面测试,即,几个样品位中的每一个都有一个治疗前后(Conc)。我想按站点将数据集划分为一个列表,然后应用测试,以便可以分别为每个站点提供输出,但是,我很难将其设置为可以重复的功能。

我有多个站点(站点)和两个治疗级别(方案),其结果得分(浓):

'data.frame':   7344 obs. of  6 variables:
 $ Site        : chr  "A" "B" "C" "D" ...
 $ Scenario    : chr  "1" "1" "1" "1" "2" "2" "2" "2" ...
 $ Conc        : num  4.7727 0.055 0.0552 0.055 0.055 ...

每个站点/方案组合中都有多个Conc数据点(〜60)。我选择Wilcoxon检验的原因主要是因为每个站点之间的处理(方案)之间的样本数量略有差异。

当我对整个数据集使用此代码时,我得到了一个明智的结果:

t1 <- wilcox.test(Conc ~ Scenario,data = data.frame)
t1

但是,此代码并未将测试分别应用于每个站点。

我查看了所有可以在SO和其他地方找到的类似示例,这是我能想到的最好的代码:

t2 = data.frame %>% group_by(Site) %>% do(tidy(wilcox.test(Conc~Scenario,data=data.frame),na.rm=TRUE,equal.var=FALSE))
t2

此代码为我提供了每个站点的输出,但是所有测试输出都是相同的,即使p值也是如此:

# A tibble: 107 x 5
# Groups:   Site [107]
   Site     statistic p.value method                                      alternative
   <chr>       <dbl>   <dbl> <chr>                                             <chr>      
 1 A         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  
 2 B         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  
 3 C         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  
 4 D         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  
 5 E         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  
 6 F         6145702   0.690 Wilcoxon rank sum test with continuity correction two.sided  

有人可以看到我在做什么吗? 谢谢您的帮助

解决方法

修改日期为21/08/2020,以更紧密地镜像您的数据

这里是dplyrpurrr的解决方案已编辑,其中包含broom::tidy个结果...

# 'data.frame': 5626 obs. of 3 variables: 
# $ Site.Year: Factor w/ 3 levels "Baffle Creek at Newton Road_2018_2019",..: 1 1 1 1 1 1 1 1 1 1 ... 
# $ Scenario : chr "FF_Total" "FF_Total" "FF_Total" "FF_Total" ... 
# $ PAF : num 4.77 4.77 4.77 4.77 4.77

set.seed(2020)

Site.Year <- rep(c("Baffle Creek at Newton Road_2018_2019","Baffle Creek at Newton Road_2017_2018","Baffle Creek at Newton Road_2019_2020"),50)
Scenario <- rep_len(c(rep("FF_Total",4),rep("Not_FF_Total",4)),150)
PAF <- rnorm(150,mean = 2.5,sd = 1)

DailyPAF_long <- data.frame(Site.Year,Scenario,PAF)

DailyPAF_long$Site.Year <- factor(DailyPAF_long$Site.Year)
# str(DailyPAF_long)
# wilcox.test(PAF ~ Scenario,data = DailyPAF_long)

library(dplyr)
library(purrr)

DailyPAF_long %>% 
  base::split(Site.Year) %>% 
  purrr::map(~ wilcox.test(PAF ~ Scenario,data = .)) %>% 
  purrr::map_dfr(~ broom::tidy(.)) 

#> # A tibble: 3 x 4
#>   statistic p.value method                       alternative
#>       <dbl>   <dbl> <chr>                        <chr>      
#> 1       361  0.355  Wilcoxon rank sum exact test two.sided  
#> 2       219  0.0723 Wilcoxon rank sum exact test two.sided  
#> 3       380  0.195  Wilcoxon rank sum exact test two.sided

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...