如何在R图中显示重要的p值

vnjpjtjt  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(125)

我把我的一些数据标绘成这样的格式

Time    SD  Average Situation   n   se

我用这个密码

library(ggplot2)
ggplot(data, aes(x=Time, y=Average, colour=Situation)) + 
    geom_errorbar(aes(ymin=Average-se, ymax=Average+se), width=.1) +
    geom_line() +
    geom_point()

我想在实验组和对照组之间进行T检验,并想在图中使用星号*显示显著性。我很难找到这样的代码。我知道如何做一个正常的T检验,但我真的希望那些有星号的图表显示的意义。

bhmjp9jg

bhmjp9jg1#

编辑我根据你的评论重写了这篇文章,给予了一个适合我的例子:

假设你想把t检验的p值加到你的图上…

set.seed(1)
### data following OPs format
data <- data.frame(Time=seq(10),
                   Average=abs(rnorm(10)),
                   Situation=rep(letters[1:2], 5)
                   )
### get p value
pval <- t.test(data$Average[data$Situation=="a"],
               data$Average[data$Situation=="b"])$p.value
### strip to 3 significant digits
pval <- signif(pval, 3)
### add asterisk if <0.05
pval <- ifelse(pval<0.05, paste0(pval, " *"), pval)
pval <- paste0("t-test \n p=", pval)

### plot as per OP
ggplot(data, aes(x=Time, y=Average, colour=Situation)) + 
    geom_line() +
    geom_point()+
### annotate it near lower left corner
    annotate("text",
             x=0.25*max(data$Time),
             y=0.25*max(data$Average),
             label=pval)

给予


查看?annotate了解更多选项。如果您想要p值的符号范围,那么您可以通过调用switch而不是ifelse来修改它。
一个更大的问题可能是t-test是否适合于时间依赖的结果。

相关问题