首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法应用按现场分组的wilcoxon测试?

是否有方法应用按现场分组的wilcoxon测试?
EN

Stack Overflow用户
提问于 2020-08-19 12:32:24
回答 1查看 1.5K关注 0票数 2

我想用Wilcoxon双面检验对多组患者进行两种治疗,即对几个样本点中的每一个都有一个治疗前后(Conc)。我希望将数据集按站点划分为一个列表,然后应用测试,这样我就可以单独为每个站点提供一个输出,但是,我在将其设置为一个可以重复的函数时遇到了问题。

我有许多站点(站点)和两个级别的治疗(方案),结果是得分(Conc):

代码语言:javascript
复制
'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测试,主要是因为我对每个站点的处理(方案)之间的样本数略有不均匀。

当我对整个数据集使用此代码时,会得到一个合理的结果:

代码语言:javascript
复制
t1 <- wilcox.test(Conc ~ Scenario, data = data.frame)
t1

但是,这段代码并不单独应用于每个站点的测试。

我看过所有类似的例子(在SO和其他地方),这是我能想出的最好的代码:

代码语言:javascript
复制
t2 = data.frame %>% group_by(Site) %>% do(tidy(wilcox.test(Conc~Scenario, data=data.frame), na.rm=TRUE, equal.var=FALSE))
t2

这段代码为每个站点提供了一个输出,但是所有测试输出都是相同的,甚至p值:

代码语言:javascript
复制
# 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  

有人能看出我做错了什么吗?谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 13:23:02

编辑了21/08/2020以更贴切地反映您的数据

下面是一个dplyrpurrr 编辑的解决方案,以包含结果.

代码语言:javascript
复制
# '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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63487005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档