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_tilefrom 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

然后,使用meltgeom_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&lt;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 值(例如,像彩色相关矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

星号值错误地放置在热图上

统计学中的F值、P值和r分别表示啥意思,怎么求

R 中热图/聚类默认值的差异(热图与热图.2)?

f检验的p值和r值是啥意思?

召回率(R值),准确率(P值)及F值

r 比较两组p值