0

使用下面的数据框,我需要根据每个dunn_test来查看哪些Locs 彼此不同var

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)

如何Loc在 object 的 s之间制作“p 值的相关矩阵” res,使其如下所示,并显示每个成对比较的 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
4

2 回答 2

1

这是一个基本的 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
于 2020-06-29T17:58:19.693 回答
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动词中)会给你一个上三角矩阵。

于 2020-06-29T18:41:06.670 回答