如何根据邓恩斯检验的输出创建 p 值的相关矩阵?

How to create a correlation matrix of p values from the output of a dunns test?

使用以下数据框,我需要做一个 dunn_test 以根据每个 var 查看哪些 Loc 彼此不同:

set.seed(123)
dat1 <- data.frame(Loc = rep(letters[1:20], each = 10),
                   ID = 1:200,
                   var1 = rnorm(200),
                   var2 = rnorm(200),
                   var3 = rnorm(200),
                   var4 = rnorm(200),
                   var5 = rnorm(200),
                   var6 = rnorm(200))
dat1$ID <- factor(dat1$ID)
library(rstatix)
res <- dunn_test(dat1, var1 ~ Loc)

如何在对象 resLoc 之间创建一个“p 值的相关矩阵”,使其看起来如下所示,并显示每个的 p 值成对比较:

 a b c d e f g h i j k l m n o p q r s t
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 
m 
n 
o 
p 
q 
r 
s 
t

这是一个基本的 R 方法:

pvals <- res$p
dst <- matrix(NA, 20, 20)
dst[lower.tri(dst)] <- pvals
dst <- as.dist(dst)
attr(dst, "Labels") <- letters[1:20]
dst <- as.matrix(dst, upper=TRUE, lower=TRUE)
dst[1:5, 1:5]
#           a          b          c          d         e
# a 0.0000000 0.54159206 0.25928005 0.33606421 0.7661024
# b 0.5415921 0.00000000 0.08212246 0.72516551 0.3639394
# c 0.2592800 0.08212246 0.00000000 0.03661193 0.4061898
# d 0.3360642 0.72516551 0.03661193 0.00000000 0.2078686
# e 0.7661024 0.36393940 0.40618977 0.20786861 0.0000000

您没有在对角线上注明您想要的内容。由于这些是 p 值,因此用 1 填充对角线是有意义的:

diag(dst) <- 1

根据要求:

data.frame(Group1=res$group1, Group2=res$group2, PValue=res$p) %>% 
  group_by(Group2) %>% 
  pivot_wider(values_from="PValue", names_from=c("Group1"))

为您提供未经调整的 p 值的下三角矩阵。交换 Group2"Group1"(在 group_bypivot_wider 动词中)将得到一个上三角矩阵。