安装和更新

近期断断续续对linkET做了一些更新,主体是从方便用户使用,增强灵活性的角度出发的,至于我想在新版本中添加的功能,暂时还未完成,而且预计新功能完成可能得到端午节前后,所以这个版本(0.0.3)是未来一段时间比较稳定的版本,若是想尝新,不妨更新一下试试。

## install.packages("devtools")
devtools::install_github("Hy4m/linkET", force = TRUE)
library(linkET)

correlate()函数

之前的版本(包括最早的ggcor),correlate()函数都仅仅是封装cor()cor.test()函数,来作为默认的相关系数矩阵计算的函数,然后提供了统一的接口来把WGCNA等其他包计算的结果导入到linkET中。这一次更新,我尝试把其他包的函数(如psych::corr.test())作为计算引擎,完整的封装进correlate()函数,这样用户就不用去深究各种不同的包的函数差异。下面的例子给了一些示例,可以尝试运行查看结果。

## 默认计算方式,等价于上一个版本的correlate()
correlate(mtcars)
## 使用psych包作为计算引擎
correlate(mtcars, engine = "psych")


## 使用Hmisc包作为计算引擎
correlate(mtcars, engine = "Hmisc")


## 使用picante包作为计算引擎
correlate(mtcars, engine = "picante")


## 使用WGCNA包作为计算引擎
correlate(mtcars, engine = "WGCNA")

当然,correlate()函数还增加了一个group参数,这个参数可以用来指定原始数据的分组信息,例如比如著名的iris数据集中,若我们想根据物种la分别计算相关系数矩阵,我们就可以把group参数设置为Species这个向量。

# head(iris)
correlate(iris[-5], group = iris$Species)

mantel test可以用在 自变量和因变量中吗_python

直接输出分组计算的相关系数矩阵的结果,只能看到一点描述性信息,建议使用下面的代码把图画出来:

correlate(iris[-5], group = iris$Species) %>% 
  qcorrplot() + geom_square()

mantel test可以用在 自变量和因变量中吗_大数据_02

改变默认样式

linkET的开发过程中,我一直保持克制,希望能最大程度保持原汁原味的ggplot2的感觉,但是经不住问,我还是提供了一个set_corrplot_style()函数,每次打开R会话框后运行下这个函数,就能保证之后的所有的qcorrplot()函数画的图都改成了你想要的样式。

set_corrplot_style()
qcorrplot(mtcars) + geom_square()

mantel test可以用在 自变量和因变量中吗_人工智能_03

也可以使用你自己的调色板,比如改成红白蓝的配色:

set_corrplot_style(colours = c("red", "white", "blue"))
qcorrplot(mtcars) + geom_square()

mantel test可以用在 自变量和因变量中吗_python_04

最后,要是你嫌弃默认使用的scale_fill_gradientn()函数不能满足你的需求,你完全可以提供的scale函数,比如:

set_corrplot_style(scale = ggplot2::scale_fill_viridis_c())
qcorrplot(mtcars) + geom_square()

mantel test可以用在 自变量和因变量中吗_机器学习_05

用完了记得还原一下,不然之后的图还会按照你设置的样式画图:

set_default_style()

更丝滑的geom_couple()函数

我们先看看:

library(dplyr)
library(ggplot2)
data("varechem", package = "vegan")
data("varespec", package = "vegan")


mantel <- mantel_test(varespec, varechem,
                      spec_select = list(Spec01 = 1:7,
                                         Spec02 = 8:18,
                                         Spec03 = 19:37,
                                         Spec04 = 38:44)) %>% 
  mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf),
                  labels = c("< 0.2", "0.2 - 0.4", ">= 0.4")),
         pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf),
                  labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))


## 现学现用
set_corrplot_style()
qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +
  geom_square() +
  geom_couple(aes(colour = pd, size = rd), 
              data = mantel, 
              curvature = nice_curvature()) +
  scale_size_manual(values = c(0.5, 1, 2)) +
  scale_colour_manual(values = color_pal(3)) +
  guides(size = guide_legend(title = "Mantel's r",
                             override.aes = list(colour = "grey35"), 
                             order = 2),
         colour = guide_legend(title = "Mantel's p", 
                               override.aes = list(size = 3), 
                               order = 1),
         fill = guide_colorbar(title = "Pearson's r", order = 3))

mantel test可以用在 自变量和因变量中吗_大数据_06

现在想把Spec的几个点的位置微调一下,在之前的三期文章中我提到了可以使用aes(x = .x + 1)之类的方式来调整,但是这种方法每次都是所有的点做相同的调整,在这个版本中我新增了offset_xoffset_y两个参数,这两个参数能对指定的点做调整,没有指定的保持在原位不动。

qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +
  geom_square() +
  geom_couple(aes(colour = pd, size = rd), 
              data = mantel, 
              curvature = nice_curvature(),
              offset_x = list(Spec02 = 3, Spec03 = 3),
              offset_y = list(Spec01 = 0.5, Spec02 = 1)) +
  scale_size_manual(values = c(0.5, 1, 2)) +
  scale_colour_manual(values = color_pal(3)) +
  guides(size = guide_legend(title = "Mantel's r",
                             override.aes = list(colour = "grey35"), 
                             order = 2),
         colour = guide_legend(title = "Mantel's p", 
                               override.aes = list(size = 3), 
                               order = 1),
         fill = guide_colorbar(title = "Pearson's r", order = 3))

mantel test可以用在 自变量和因变量中吗_java_07

小结

linkET还会继续开发,功能也会越来越完整,希望所有人都能切换到linkET上来,忘了那个ggcor吧。