gpt4 book ai didi

r - 如何将 spearman 相关 p 值以及相关系数添加到 ggpairs?

转载 作者:行者123 更新时间:2023-12-04 04:11:16 26 4
gpt4 key购买 nike

使用以下代码在 R 中构建 ggpairs 图。

df 是一个包含 6 个连续变量和一个 的数据框群 多变的

ggpairs(df[,-1],columns = 1:ncol(df[,-1]),
mapping=ggplot2::aes(colour = df$Group),legends = T,axisLabels = "show",
upper = list(continuous = wrap("cor", method = "spearman", size = 2.5, hjust=0.7)))+
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"))

我试图将 spearman 相关性的 p 值添加到生成的图的上面板(即)附加到 Spearman 相关系数。

通常,使用 cor.test 计算 p 值方法作为“Spearman”传递

也知道 StackOverFlow 帖子讨论了一个与此类似的查询,但我需要 ggpairs ,对此解决方案不起作用。此外,之前的查询尚未解决。

How to add p values for Spearman correlation coefficients plotted using pairs in R

最佳答案

我感觉这超出了您的预期..所以您需要定义一个自定义函数,例如 ggally_cor ,所以首先我们有一个函数来打印 2 个变量之间的相关性:

printVar = function(x,y){
vals = cor.test(x,y,
method="spearman")[c("estimate","p.value")]
names(vals) = c("rho","p")
paste(names(vals),signif(unlist(vals),2),collapse="\n")
}

然后我们定义一个函数,接收每对的数据,并计算1.整体相关性,2.分组相关性,并将其传递到ggplot中,基本上只打印此文本:
my_fn <- function(data, mapping, ...){
# takes in x and y for each panel
xData <- eval_data_col(data, mapping$x)
yData <- eval_data_col(data, mapping$y)
colorData <- eval_data_col(data, mapping$colour)

# if you have colors, split according to color group and calculate cor

byGroup =by(data.frame(xData,yData),colorData,function(i)printVar(i[,1],i[,2]))
byGroup = data.frame(col=names(byGroup),label=as.character(byGroup))
byGroup$x = 0.5
byGroup$y = seq(0.8-0.3,0.2,length.out=nrow(byGroup))

#main correlation
mainCor = printVar(xData,yData)

p <- ggplot(data = data, mapping = mapping) +
annotate(x=0.5,y=0.8,label=mainCor,geom="text",size=3) +
geom_text(data=byGroup,inherit.aes=FALSE,
aes(x=x,y=y,col=col,label=label),size=3)+
theme_void() + ylim(c(0,1))
p
}

现在我使用 mtcars,第一列是一个随机组:
df  =data.frame(
Group=sample(LETTERS[1:2],nrow(mtcars),replace=TRUE),
mtcars[,1:6]
)

和情节:
ggpairs(df[,-1],columns = 1:ncol(df[,-1]),
mapping=ggplot2::aes(colour = df$Group),
axisLabels = "show",
upper = list(continuous = my_fn))+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"))

enter image description here

我认为对于您自己的情节,文本的间距可能不是最佳的,但这只是调整 my_fn 的问题。 .

关于r - 如何将 spearman 相关 p 值以及相关系数添加到 ggpairs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61686171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com