说在前面
小编在之前的推文:照葫芦画图之相关聚类中,只是简单的说了一下相关性分析。然后,最近看到了一篇文献中,作者把多组数据之间的相关性在一个图中进行了展示,Immugent觉得非常炫酷,于是小编就专门查了相关的代码,今天就分享给大家。
相关性分析其实就是看两个观测值之间有没有一定的规律联系,而在实际运用中,我们可能进行了分组,于是我们有时还需要同时比较各个分组间相关性的区别,这就用到了今天所展示的图啦。
话不多说,下面开始展示。。。
代码实现
首先我们先做一组数据简单的相关性分析。
rm(list=ls())
library(ggplot2)
library(ggpubr)
theme_set(
theme_minimal() +
theme(legend.position = "top")
)
# Load data
data("mtcars")
df <- mtcars
# Convert cyl as a grouping variable
df$cyl <- as.factor(df$cyl)
# Inspect the data
head(df[, c("wt", "mpg", "cyl", "qsec")], 4)
b <- ggplot(df, aes(x = wt, y = mpg))
# Scatter plot with regression line
b + geom_point()+
geom_smooth(method = "lm")
# Add regression line and confidence interval
# Add correlation coefficient: stat_cor()
ggscatter(df, x = "wt", y = "mpg",
add = "reg.line", conf.int = TRUE,
add.params = list(fill = "lightgray"),
ggtheme = theme_minimal()
)+
stat_cor(method = "pearson",
label.x = 3, label.y = 30)
然后在进行多组数据相关性分析之前,我们需要先看一下它们的分布情况。
b + geom_point(aes(color = cyl, shape = cyl))+
stat_ellipse(aes(color = cyl), type = "t")+
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
# Convex hull of groups
b + geom_point(aes(color = cyl, shape = cyl)) +
stat_chull(aes(color = cyl, fill = cyl),
alpha = 0.1, geom = "polygon") +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
# Add mean points and confidence ellipses
b + geom_point(aes(color = cyl, shape = cyl)) +
stat_conf_ellipse(aes(color = cyl, fill = cyl),
alpha = 0.1, geom = "polygon") +
stat_mean(aes(color = cyl, shape = cyl), size = 2) +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
我们可以从上图粗略看出,虽然三组数据都有呈现负相关的特征,但是趋势是有区别的,那么我们就来通过多组间相关性分析来精确的描述它们之间的区别。
# Change color and shape by groups (cyl)
b + geom_point(aes(color = cyl, shape = cyl))+
geom_smooth(aes(color = cyl, fill = cyl), method = "lm") +
geom_rug(aes(color =cyl)) +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))+
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
# Remove confidence region (se = FALSE)
# Extend the regression lines: fullrange = TRUE
b + geom_point(aes(color = cyl, shape = cyl)) +
geom_rug(aes(color =cyl)) +
geom_smooth(aes(color = cyl), method = lm,
se = FALSE, fullrange = TRUE)+
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))+
ggpubr::stat_cor(aes(color = cyl), label.x = 3)
b + geom_point(aes(color = cyl, shape = cyl))+
geom_smooth(aes(color = cyl, fill = cyl),
method = "lm", fullrange = TRUE) +
facet_wrap(~cyl) +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))+
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
theme_bw()
小结
有一说一,虽然相关性分析看似很有道理,其实在实际应用中也是有很多bug的,比如有一些相关性很强的基因之间并没有实际联系,多组间相关性分析更是如此。这就提醒我们需要主要相关性分析的适用性:首先必须保证样本量足够大;其次就是注意数据的统计学分布。其中样本量是前提,统计学分布是指标,不同统计学分布的数据偏向于使用不同的相关性分析,常用的有pearson, spearman等。
好啦,本次推文到这里就结束啦,欢迎大家再看过此推文后,将自己不同的见解通过后台发送给我们!
网友评论