t-分布领域嵌入算法(t-distributed stochastic neighbor embedding,tSNE),是一种常用的非线性降维方法,非常适用于高维数据降维到2维或者3维,从而进行可视化。
比如我们在进行转录组数据分析的时候,每一个样本可以检测到3万个基因,如果有10个这样的样本,我们如何判断哪些样本之间的相似性能高。当然,通过层次聚类等方法,可以显示样本与样本之间的关系。
以一篇发表在Nature Genetics (IF = 25.455)上的文章为例,通过对RNA-seq表达谱数据进行tSNE分析,将疾病分为不同的亚型。
本次教程为大家带来是,是如何根据表达谱数据,通过运用tSNE分析的方法,显示样本与样本之间的差异性。
1. R包加载和数据入读
首先我们加载需要用到的R包,ggpubr和ggthemes包用于作图,Rtsne包用于计算tSNE。
读入表达谱数据并显示文件前6行,每一列为一个样本,每一行为一个基因。我们使用表达谱样本一共有10个,其中M1到M5为Case,M6-M10为control。
2. tSNE计算
使用Rtsne包中的Rtsne函数计算tSNE。通过计算结果前六行,可以看出最终的结算结果为一个矩阵,一共有2列10行,每一行为一个样本,两列分别为tSNE_1和tSNE_2。
接下来,我们就用这个计算结果,来看Case和Control这两组样本之间的差异。
我们建立一个data.frame,将绘图需要用到的数据都存入进来。
然后,便是绘图的时刻了~
3. 基础作图
ggpubr提供了非常多的作图函数,可以方便大家绘制更美观的科研做图。这里我们使用ggscatter这个函数,x轴为tSNE_1,y轴为tSNE_2。
这样,我们一张tSNE图就做完啦~
4. 中级美化
当然,这些图还有很多不足之处,比如我们想更直观的显示两组之间的差别,所以我们需要根据点的分布计算他们的置信区间。
另外,我们也可以修改图的样式和颜色,来对绘图结果进行提升。
5. 高级美化
当然,我们还不能仅仅满足于现有的成果,作图是一个细致的过程,我们需要精雕细琢。比如我们有时候需要直接在图上显示样本名称,从图上反映出样本之间的分布。
6. 终极美化
我们通过研究表达谱发现,CD52这个基因在Case和Control这两组之间有显著差异,那么我们如何将这种差异显示在图表中呢?另外如果样本数目比较多,比如有100个样本,我们并不想把所有的样本名称都显示在图表中,只想显示重要的2-4个样本,有没有什么更好的操作方法呢?
这里就到了我们终极作图美化的环节了~
点的形状代表不同的类型,是Case还是Control,点的颜色代表CD52这个基因表达量的高低,蓝色代表低表达,红色代表高表达。从图中可以非常清晰的看到,CD52基因在Control组中是高表达的,这个基因相关的疾病包括淋巴细胞白血病和复发缓解型多发性硬化,值得好好深入研究一下。