R 如何从dunns测试的输出中创建p值的相关矩阵?

R 如何从dunns测试的输出中创建p值的相关矩阵?,r,matrix,correlation,dunn.test,R,Matrix,Correlation,Dunn.test,使用以下数据框,我需要进行dunn_测试,以查看根据每个var,哪些Locs彼此不同: set.seed(123) dat1以下是一种基本的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

使用以下数据框,我需要进行
dunn_测试
,以查看根据每个
var
,哪些
Loc
s彼此不同:

set.seed(123)

dat1以下是一种基本的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

pvals这里是一个基本的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
pvals根据要求:

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”
(在
groupby
pivot\u更宽的
动词中)将为您提供一个上三角矩阵。

根据要求:

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”
(在
groupby
pivot\u-wide
动词中)将为您提供一个上三角矩阵。

我的回答向您展示了一种可以使用的技巧。@Limey我已经完成了您在那里所做的工作,我不确定如何将其应用到我的案例中,但我有兴趣学习。你愿意用我的
res
对象演示吗?我的回答向你展示了一种你可以使用的技巧。@Limey我已经完成了你在那里所做的工作,我不知道如何在我的案例中应用它,但我对学习感兴趣。你愿意用我的
res
对象演示吗?啊,我明白了,非常感谢!现在,我看到了如何使用tidyverse语法执行与@dcarlson过程非常类似的操作,我现在仍在习惯这种语法。还有一个问题:如果我想指定
Loc
s在矩阵中的显示顺序,(例如,
order Yes。在管道开始处的
data.frame
中创建新列,将
Group1
Group2
映射到所需的顺序,并在管道的其余部分使用这些列,而不是
Group1
Group2
。因此这是不可能的,但我正试图做到:
res2%mutate(group1=factor(group1,levels=order))%%>%arrange(group1)
,然后将您所做的应用于对象
res2
,这不起作用。因此,我还没有弄清楚如何做到这一点,但在玩它的过程中,我意识到您的方法没有使上下三角形以相同的顺序出现(就像对角线上有1的普通corr矩阵)。我该如何做才能使轴的顺序相同(就像@dcarlson示例创建的那样)?我无法重现您的“不同顺序”问题。请提供一个示例。如果您查看
res
对象,其每个元素包含190行,对应于非对角三角形值矩阵。因此,我的解决方案是精确表示
res
。要增加输出,使其形成完整的400元素方形矩阵,请创建data.fram的副本e在管道的第一个元素中创建,交换
Group1
Group2
rbind
两个数据帧,然后继续。这是一个单行操作。然后用您选择的值填充对角线中的
NA
s。啊,我明白了,非常感谢!现在我知道如何做与@dcarlson过程使用tidyverse语法,我现在仍在习惯。还有一个问题:如果我想指定
Loc
s在矩阵中的显示顺序,(例如,
order Yes。在管道开始处的
data.frame
中创建新列,将
Group1
Group2
映射到所需的顺序,并在管道的其余部分使用这些列,而不是
Group1
Group2
。因此这是不可能的,但我正试图做到:
res2%mutate(group1=factor(group1,levels=order))%%>%arrange(group1)
,然后将您所做的应用于对象
res2
,这不起作用。因此,我还没有弄清楚如何做到这一点,但在玩它的过程中,我意识到您的方法没有使上下三角形以相同的顺序出现(就像对角线上有1的普通corr矩阵)。我该如何做才能使轴的顺序相同(就像@dcarlson示例创建的那样)?我无法重现您的“不同顺序”问题。请提供一个示例。如果您查看
res
对象,其每个元素包含190行,对应于非对角三角形值矩阵。因此,我的解决方案是精确表示
res
。要增加输出,使其形成完整的400元素方形矩阵,请创建data.fram的副本e在管道的第一个元素中创建,交换
Group1
Group2
rbind
两个数据帧,然后继续。这是一个单行操作。然后用您选择的值填充对角线中的
NA
s。感谢您的帮助,只是出于教学价值,我还很好奇您的应用程序是什么roach(可能只是使用base R)将指定
Loc
s的顺序。假设您按照希望它们在矩阵中出现的顺序创建了对象
order
,该对象包含
Loc
的级别:
order[Typo in original]。最好在使用
dat运行分析之前设置顺序。感谢您的帮助,仅出于教学价值,我也很好奇您的方法(可能只是使用base R)将指定
Loc
s的顺序。假设您将包含
Loc
级别的对象
order
按照希望它们在矩阵中出现的顺序制作:
order[Typo in original]。最好在使用
dat运行分析之前设置顺序