P 值热图 - 用 R 表示所有成对比较/p 值(例如,像彩色相关矩阵)
Posted
技术标签:
【中文标题】P 值热图 - 用 R 表示所有成对比较/p 值(例如,像彩色相关矩阵)【英文标题】:P-values heatmap - Representation of all pairwise comparisons/p-values with R (e.g. like a colored correlation matrix) 【发布时间】:2021-11-04 03:21:58 【问题描述】:我有很多成对比较; 很难在报告中可视化或添加所有 p 值。我想知道 R 中是否有一个函数可以很好地表示成对比较/所有 p 值。
类似这样的:
但是不是在小方块中显示相关值我们应该有 p 值吗?
谢谢
********* 已编辑/解决方案 *********
使用 emmeans 包进行成对比较时的解决方案(感谢@Park):
p.val.test<-pwpm(emmeans(your_model, "your_factor"),means = FALSE, flip = TRUE,reverse = TRUE) # p-values presented compactly in matrix form
p.val.test<-sub("[<>]", "", p.val.test)
p.matx<-matrix(as.numeric((p.val.test)),nrow = length(p.val.test[,1]),ncol = length(p.val.test[,1])) #if your factor has 5 levels ncol and nrow=5
rownames(p.matx) <- colnames(p.matx) <-colnames(p.val.test)
p.matx[upper.tri(p.matx, diag=FALSE)] <- NA
melt(p.matx) %>%
ggplot(aes(Var1, Var2, fill = value)) + geom_tile() +
geom_text(aes(label = value))
【问题讨论】:
你适合哪个测试来获得 p 值? @Park 我拟合了一个线性混合模型(使用 lmer),然后使用 Anova(来自 Car)然后我使用 Tukey post-hoc 测试进行成对比较(使用函数 emmeans) 你可以使用geom_tile
from ggplot2
重新创建这个带有p值的热图,但这完全取决于你如何存储这些值。你的 p 值数据集是什么样的?
Group1-Group2 pvalue=0.04。下一行 Groupe1-group3 p.value=0.0001,下一行 Group1-group4 p.value=0.15.......我有 30 行......
【参考方案1】:
嗯,我做了矩阵形成的成对简单线性回归。
dummy <- data.frame(
x1 = c(1,2,3,4),
x2 = c(1,0,3,4),
x3 = c(1,0,7,4),
x4 = c(1,0,7,-1),
x5 = c(8,0,7,-1)
)
colNames <- names(dummy)
mat <- matrix(NA, nrow = 5, ncol = 5)
mat[lower.tri(mat)] <- combn(colNames, 2, function(x) summary(lm(dummy[x][,1] ~ dummy[x][,2]))$coefficients[2,4])
mat <- round(mat,2)
rownames(mat) = colnames(mat) = colnames(dummy)
mat
x1 x2 x3 x4 x5
x1 NA NA NA NA NA
x2 0.15 NA NA NA NA
x3 0.35 0.19 NA NA NA
x4 0.96 0.80 0.27 NA NA
x5 0.45 0.88 0.75 0.33 NA
然后,使用melt
和geom_tile()
(或geom_rect
等)将返回相关矩阵图样式p值矩阵图
melt(mat) %>%
ggplot(aes(Var1, Var2, fill = value)) + geom_tile() +
geom_text(aes(label = value))
【讨论】:
谢谢@Park。有用 !最后一个问题,如何在结果图中着色(例如红色)p-value @learneRS+scale_fill_gradient(low = "red", high = "")
将使填充低为红色。您可能必须添加特定选项才能仅看到红色 p.value<0.05
使用 high=""
"Error: Unknown color name: " 显示错误。有效的是使用scale_fill_gradient2(mid ="red", limit = c(0,0.05),name="p-value")
仅将 p 值0.05 的颜色为红色
@learnerRS 我将high
留空,因为它可以自定义。恭喜:D以上是关于P 值热图 - 用 R 表示所有成对比较/p 值(例如,像彩色相关矩阵)的主要内容,如果未能解决你的问题,请参考以下文章