首页 > 解决方案 > 在条形图上添加 pvalue 和奇数比

问题描述

我有一个数据框,其中包含我在条形图上绘制的值,我想在我比较的不同组之间添加 pvalue 和奇数比。

这是我的数据和条形图代码。

data=data.frame(Liste=c("List1", "List2", "List3", "List4"), 
                TPA=c(9,8,25,3), 
                TPB=c(7,18,14,12))

data=data %>% mutate (tot=TPA+TPB)

> data
  Liste TPA TPB tot
1 List1   9   7  16
2 List2   8  18  26
3 List3  25  14  39
4 List4   3  12  15

tab14=melt(as.data.table(data), id.vars = c("Liste", "tot") )
tab15= tab14 %>% mutate(pct=value/tot*100)

ggplot(tab15, aes(x=Liste, y=pct, fill=variable)) + 
  geom_bar(stat = "identity",position="dodge")

在此处输入图像描述

我想添加在 res 表中获得的 p 值和奇数比下面是预期的结果(手动添加的值)

idx = t(combn(seq_along(data$Liste),2))


res = lapply(1:nrow(idx),function(i){
  test = fisher.test(data[idx[i,],c("TPA","TPB")])
  data.frame(
    group1 = data$Liste[idx[i,1]],
    group2 = data$Liste[idx[i,2]],
    odds_ratio = as.numeric(test$estimate),
    p = as.numeric(test$p.value)
  )
})

res = do.call(rbind,res)

> res
  group1 group2 odds_ratio           p
1  List1  List2  2.8162459 0.120542971
2  List1  List3  0.7244134 0.760816253
3  List1  List4  4.8573292 0.065892860
4  List2  List3  0.2546791 0.011637052
5  List2  List4  1.7538485 0.715806992
6  List3  List4  6.8725049 0.005673158

在此处输入图像描述

我该如何继续?

标签: rggplot2p-value

解决方案


优势比是组之间概率的二乘二比较(在您的情况下为列表),因此很难想象一个简单的解决方案可以在一维条形图上显示它。

但是,因为您使用combn,您可以用这样的矩阵形式表示 then 。我们使用您的代码:

library(tidyverse)
library(reshape2)
library(data.table)
library(ggplot2)

复制粘贴上面的代码。

ggplot(res, aes(x = group1, y = group2, fill = odds_ratio)) +
    geom_tile() +
    geom_text(aes(label = paste(round(p, 2))), col= "red", size = 5, show.legend = T) + 
    scale_fill_gradient(low = "gray", high = "black",
                        breaks=seq(0, 6)) +
    theme_classic() +
    xlab("") +
    ylab("") +
    guides(fill=guide_colourbar(title="Odds ratio value")) +
    ggtitle("p-values") +
    theme(plot.title = element_text(color = "red"))

优势比


推荐阅读