如何在 R 图中显示显着的 p 值

Posted

技术标签:

【中文标题】如何在 R 图中显示显着的 p 值【英文标题】:How to show significant p Values in an R graph 【发布时间】:2013-10-12 10:04:09 【问题描述】:

所以我用这种格式绘制了一些数据

Time    SD  Average Situation   n   se

我使用了这段代码

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

我想在 Exp 和 Control 之间进行 T.test,并且我想使用星号 '*....在图表中显示重要性。我很难找到执行此操作的代码....我知道如何进行正常的 T.test,但我真的希望那些带有星号的图表能够显示重要性

【问题讨论】:

我无法回答 ggplot,因为我不使用它...但在基础 R 中,您将使用 text 函数。 那么如何使用文本功能编辑我的图表?? 我不确定text 是否与ggplot 一起使用...但基本上你只需要text(x,y,"my text")。有关完整帮助,请参阅 ?text。否则,将绘图保存为 pdf,在您最喜欢的矢量图形程序(我的是 Inkscape)中打开并在那里调整您的图形。更有效,让您更轻松地组成更大的人物。 【参考方案1】:

编辑我已根据您的 cmets 重写了此内容,以举一个适合我的示例:

假设您想将 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 是否适合时间相关的结果...

【讨论】:

我似乎收到此错误: if (nrow(layer_data) == 0) return() 中的错误:参数长度为零 是的,我的错。错误是由于没有为注释位置提供 xy 值 - 我错误地认为这些是默认值。已在上面进行了编辑以反映这一点。现在应该可以了。 干杯老兄..但我得到另一个错误错误:集合美学的长度不兼容:标签

以上是关于如何在 R 图中显示显着的 p 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 p 值逐步回归以删除 p 值不显着的变量

如何证明 NDCG 分数是显着的

ggpubr:在标签中显示显着性水平(*** 或 n.s.)而不是 p 值

excel怎样在图中补充统计分析的r值和p值

r 统计假设如何检验

matlab如何测试测量值之间的显着差异?