首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: ggplot2 - Kruskal-Wallis每个小面测试

R: ggplot2 - Kruskal-Wallis每个小面测试
EN

Stack Overflow用户
提问于 2017-10-03 01:52:57
回答 1查看 2.1K关注 0票数 3

我有多个方面的方块图,我想在每个方面执行一个Kruskal测试,并将结果放在每个方面的左上角。

为了举例说明这一点,我使用了虹膜数据集,在该数据集中添加了一个名为“处理”的附加变量。

MWE:

代码语言:javascript
复制
library(reshape2)
library(ggplot2)
data(iris)
iris$treatment <- rep(c("A","B"), length(iris$Species)/2)
mydf <- melt(iris, measure.vars=names(iris)[1:4])
mydf$treatment <- as.factor(mydf$treatment)
mydf$variable <- factor(mydf$variable, levels=sort(levels(mydf$variable)))

ggplot(mydf,aes(x=variable, y=value)) +
    geom_boxplot(aes(fill=Species)) +
    facet_grid(treatment~Species, scales="free", space="free_x") +
    geom_text(label=paste("Kruskal-Wallis, p=", with(mydf, kruskal.test(value ~ variable)$p.value)))

以上是我最好的尝试,它产生了以下结果。

这显然是错误的。

我希望Kruskal测试的结果(Petal.Length,Petal.Width,Sepal.Length,Sepal.Width)出现在每个方面的左上角。

每个数据子集(根据治疗和物种)进行6次测试,因此我认为p.value应该进行调整(最好由Benjamini进行)。

如果可能的话,如果每个产生的p.value都可以舍入到小数点后的2位,那就太好了。如果可能的话,我宁愿避免使用ggpubr,因为我对它有问题,并且坚持使用geom_text()。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 09:55:13

给出了here的解。

代码语言:javascript
复制
library(reshape2)
library(ggplot2)
data(iris)
iris$treatment <- rep(c("A","B"), length(iris$Species)/2)
mydf <- melt(iris, measure.vars=names(iris)[1:4])
mydf$treatment <- as.factor(mydf$treatment)
mydf$variable <- factor(mydf$variable, levels=sort(levels(mydf$variable)))

library(dplyr)
pv <- mydf %>% group_by(treatment, Species) %>%
    summarize(p.value = kruskal.test(value ~ variable)$p.value)

ggplot(mydf,aes(x=variable, y=value)) +
    geom_boxplot(aes(fill=Species)) +
    facet_grid(treatment~Species, scales="free", space="free_x") +
    geom_text(data=pv, aes(x=2, y=7, label=paste0("Kruskal-Wallis\n p=",p.value)))

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46536090

复制
相关文章

相似问题

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