之前我有测试过很多整合去批次的算法,例如CCA,RPCA,harmony,LIGER等:
也有用python做过BBKNN和harmony:
总体来说,在R语言环境下harmony相较其他算法还是比较优秀的,例如速度快,占内存小,整合的结果比较好。此外,python的BBKNN算法也是非常优秀的,丝毫不比R语言环境下的harmony弱,缺点就是需要用户会用python。我最近检索的时候发现bbknn居然出了R语言的版本,看时间戳也是近半年的更新,详见github:
安装:
#devtools::install_github("ycli1995/bbknnR")
install.packages("bbknnR")
我们开箱试用一下,使用之前的示例数据,方便比较:
library(bbknnR)
library(Seurat)
library(ggplot2)
library(dplyr)
library(SeuratData)
library(patchwork)
#### 1.load dataset
ifnb.data = LoadData("ifnb")
#### 2.normalize/HVG/scale三步走
ifnb.data <- ifnb.data %>% NormalizeData(verbose = F) %>%
FindVariableFeatures(selection.method = "vst", nfeatures = 2000, verbose = F) %>%
ScaleData(verbose = F) %>%
RunPCA(npcs = 50, verbose = F)
#### 3. bbknn
ifnb.data <- ifnb.data %>% RunBBKNN(reduction = "pca",
run_TSNE = F,
batch_key = "orig.ident")
ifnb.data <- ifnb.data %>% FindNeighbors(reduction = "pca", k.param = 10, dims = 1:30) %>%
FindClusters(resolution = 0.5, algorithm = 1, graph.name="bbknn")%>%
identity()
#### 5.umap可视化
p1 <- DimPlot(ifnb.data, reduction = "umap", group.by = "stim")
p2 <- DimPlot(ifnb.data, reduction = "umap",group.by = "seurat_annotations", label = TRUE)
P.total = wrap_plots(p1,p2)
P.total
然而,效果虽然有点翻车。。但是总体上还是把不同组别的相同细胞类型正确归类在一起了。
下面这个是harmony的结果:
- END -