r - 在条形图上添加 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
我该如何继续?
解决方案
优势比是组之间概率的二乘二比较(在您的情况下为列表),因此很难想象一个简单的解决方案可以在一维条形图上显示它。
但是,因为您使用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"))
推荐阅读
- flutter - 使用设置状态功能更新小部件
- mysql - 将 json Array 转换为 Json 对象并在 MySQL 上向其添加更多项目
- c# - 具有默认值的对象初始值设定项内的集合初始值设定项
- python - 如何在 tf.keras 训练期间获得当前时代的进展?
- symfony - 未调用通过子资源的 Symfony 选民
- mysql - 只需在 Laravel 的 mysql json 字段上插入一个新的键值
- python - 提取文件中的图像并将文件名作为标签
- .net-core - Dotnetcore:如何从服务引用中获取 httpClient?
- javascript - 将不间断连字符从 MS-Word 复制并粘贴到 HTML-Textarea
- swift - 在 Swift 测试驱动开发中对 @ObservableObject 进行单元测试