r-有没有一种方法可以应用按地点分组的wilcoxon测试



我想对多组的两次治疗使用Wilcoxon双侧试验,即对几个样本位点中的每一个都有治疗前后(Conc(。我想按站点将数据集拆分成一个列表,然后应用测试,这样我就可以单独为每个站点提供输出,但是,我很难将其设置为可以重复的函数。

我有多个治疗点(Site(和两个治疗水平(Scenario(,结果得分(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  

有人看到我做错了什么吗?谢谢你的帮助

编辑于2020年8月21日,以更紧密地反映您的数据

以下是一个包含broom::tidy结果的dplyrpurrr已编辑的解决方案

# '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

相关内容

  • 没有找到相关文章

最新更新