考虑以下数据帧dat1
:
set.seed(123)
dat1 <- data.frame(Loc = rep(letters[1:20], each = 10),
ID = 1:200,
var1 = rnorm(200),
var3 = rnorm(200),
var4 = rnorm(200),
var5 = rnorm(200),
var6 = rnorm(200))
dat1$ID <- factor(dat1$ID)
下面的函数将使用rstatix
包做一个dunn_test
所述的电平之间Loc
取其为var
被指定时,它将返回从所述P值的相关矩阵dunn_test
:
library(rstatix)
dunn.cor <- function(dat, var, gv){
res <- dat%>% rstatix::dunn_test(as.formula(paste(var, "~", gv)))
p <- res$p
dst <- matrix(NA, 20, 20)
dst[lower.tri(dst)] <- p
dst <- as.dist(dst)
attr(dst, "Labels") <- levels(dat1$Loc)
dst <- as.matrix(dst, upper=TRUE, lower=TRUE)
diag(dst) <- 1
dst <- round(dst,2)
return(dst)
}
#example for var1:
dunn.cor(dat=dat1, var= "var1", gv = "Loc")
我想order
在函数外部创建一个对象,该对象指定希望行AND列出现在矩阵中的顺序。例如:
order <- c("m", "l", "n", "h", "p", "j", "r", "k", "c", "d", "f", "o", "t", "i", "g", "s", "e", "q", "b", "a")
为了明确起见,我希望矩阵的行和列以此顺序排列,就像常规的相关矩阵一样。如何修改函数,以便矩阵行和列以此顺序排列?
如果我们需要有这样一个特定的顺序,也可以创建一个factor
与levels
指定的
dat1$Loc <- factor(dat1$Loc, levels = order)
然后我们申请
library(dplyr)
library(tidyr)
library(tibble)
out <- dat1 %>%
rstatix::dunn_test(var1 ~ Loc) %>%
select(group1, group2, p) %>%
pivot_wider(names_from = group2, values_from = p, values_fill = list(p = 0)) %>%
column_to_rownames('group1') %>%
as.matrix
out1 <- out + t(out)
dimnames(out1)
#[[1]]
# [1] "m" "l" "n" "h" "p" "j" "r" "k" "c" "d" "f" "o" "t" "i" "g" "s" "e" "q" "b"
#[[2]]
# [1] "l" "n" "h" "p" "j" "r" "k" "c" "d" "f" "o" "t" "i" "g" "s" "e" "q" "b" "a"
如果我们需要一个二进制矩阵
out2 <- +(out1 <= 0.05)
并与 corrplot
corrplot(out2, is.corr = FALSE, type = 'lower')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句