照葫芦画图之多组相关性分析

2022-03-23  本文已影响0人  生信宝库

说在前面

小编在之前的推文:照葫芦画图之相关聚类中,只是简单的说了一下相关性分析。然后,最近看到了一篇文献中,作者把多组数据之间的相关性在一个图中进行了展示,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等。

好啦,本次推文到这里就结束啦,欢迎大家再看过此推文后,将自己不同的见解通过后台发送给我们!


上一篇 下一篇

猜你喜欢

热点阅读