hello,大家好,又是新的一周,我们今天来学习一些简单的内容,关于降维聚类的新的认识。说到底,降维聚类其实都是根本的问题,一切的分析都基于此,所以如何才能做好这个工作,其实需要很深的背景和积累。
先来第一个,scLINE,大家可以参考scLINE: A multi-network integration framework based on network embedding for representation of single-cell RNA-seq data。
scLINE 是一个 R 包,用于对单细胞 RNA-seq 数据进行降维。 scLINE 整合了单细胞 RNA-seq 数据和从公共数据库整理的多个基因网络,补充基因间的相互作用,解决了因 drop-out 事件导致信息缺失的问题。 说白了,利用现有大量的公共数据对单细胞drop-out事件进行填补,非常有意义的分析。
- 图注: (A) 基于 scRNA-seq 数据构建细胞-基因网络。 (B) 基于多个基因相互作用数据库整合和构建基因网络。 (C) 在每次迭代中,选择细胞-基因网络中的边,根据表达信息和整合的基因关系更新相应的细胞和基因的低维向量。 训练模型以获得细胞和基因的低维表示。
接下来我们看一下分析代码
1、安装与加载
install.packages("devtools")
library(devtools)
install_github("BMILAB/scLINE")
library(scLINE)
2、准备数据
2.1 单细胞转录组数据
scLINE 的输入是一个 scRNA-seq 数据矩阵,其中行对应于基因,列对应于细胞。 示例中,以来自人类神经元细胞的数据集 Usoskin 为例。
> load(system.file("data","Usoskin.Rdata",package = "scLINE"))
> exp_mat<-Usoskin$rawdata
> dim(exp_mat)
[1] 25334 622
> exp_mat[6:10,1:5]
L128_B01 L128_C01 L128_D01 L128_E01 L128_F01
AAMP 55.678 303.9 156.57 80.096 185.63
AANAT 0.000 0.0 0.00 0.000 0.00
AARS 83.517 303.9 156.57 0.000 0.00
ABAT 27.839 0.0 0.00 0.000 0.00
ABCA1 0.000 0.0 0.00 0.000 0.00
2.2 构建基因网络
这一步需要输入基因网络列表。 网络需要以三元组的形式表示,有以下三列:基因 ID、基因 ID、分数。 基因网络可以来源于现有的公共数据库或用户通过其他方式获得的基因间关系网络。 在示例中,我们以从公共数据库 String(v9.1)、HumanNet(v1) 和 IntPath(v2.0) 中集成的 3 个基因网络为例。
> load(system.file("data","string.Rdata",package = "scLINE"))
> load(system.file("data","ppi.Rdata",package = "scLINE"))
> load(system.file("data","humannet.Rdata",package = "scLINE"))
> gene_network<-list(string = string,ppi = ppi,humannet = humannet)
> str(gene_network)
List of 3
$ string :'data.frame': 11353056 obs. of 3 variables:
..$ V1: chr [1:11353056] "ARF5" "ARF5" "ARF5" "ARF5" ...
..$ V2: chr [1:11353056] "PRKCG" "ZNF148" "PRDX6" "KALRN" ...
..$ V3: int [1:11353056] 260 164 159 194 164 189 240 164 164 224 ...
$ ppi :'data.frame': 39240 obs. of 3 variables:
..$ X1: chr [1:39240] "ALDH1A1" "ITGA7" "PPP1R9A" "SRGN" ...
..$ X2: chr [1:39240] "ALDH1A1" "CHRNA1" "ACTG1" "CD44" ...
..$ X3: num [1:39240] 1 1 1 1 1 1 1 1 1 1 ...
$ humannet:'data.frame': 476399 obs. of 3 variables:
..$ V1: chr [1:476399] "DLST" "MCM2" "FEN1" "EIF4A2" ...
..$ V2: chr [1:476399] "OGDH" "MCM3" "PCNA" "EIF4G1" ...
..$ V3: num [1:476399] 4.26 4.25 4.24 4.24 4.24 ...
3、Standard analysis work-flow
可以通过函数 scLINE 获得单个细胞的低维表示矩阵。 需要指定低维向量维度L、迭代次数T、负样本数K、初始学习率rho,以及是否设置随机权重Random_weight的选择。
> lowdim_list<-scLINE(exp_mat, gene_network, L = 100, K = 5, T = 3e7, rho = 0.025, Random_weight = TRUE)
Mathching geneID...
Constructing mapping tables for sampling...
Start iterating...
Visualize the obtained low dimensional matrix in 2D through the function visualize.
visualize(lowdim_list$cell_low,Usoskin$label)
总结一下,这个软件虽然不错,但是输入的东西要求比较多,如果有条件的话,这个分析是不错的。
接下来第二个软件,ScCAEs,聚类分析,大家可以参考ScCAEs: Deep clustering single-cell RNA-seq via convolutional autoencoder embedding and soft K-means,ScCAEs首先通过卷积自编码器学习从原始scRNA-seq到低维特征的非线性映射,然后通过具有KL散度的正则化软Kmeans算法迭代完成细胞聚类。 Kmeans的聚类方式其实相对少见,因为需要人为指定聚类数的关系,很少有人用,不过这个算法有其优势,在一些特殊的情况下还是会用到。
我们来看一下代码
准备数据,运行数据集,首先应生成“data.csv”(基因计数矩阵,其中行代表细胞,列代表基因)和“label.csv”(真实标签)两个文件。 然后,可以将包含上述两个文件(“data.csv”和“label.csv”)的数据集文件夹放入“datasets”并运行以下代码:
python scCAEs.py --dataset folder_name
然后我们可以得到如下结果,In the following two images, the first image is colored with clustering results, and the second image is colored with true labels.
The inference of cellular trajectory
这个软件的分析倒是有点先入为主的嫌疑。
当然,方法都是人用的,我们要甄别,不能拿来就用。
生活很好,有你更好~~