这一次的问题是:分析单细胞转录组一定要用R包吗?
之前在 差异分析及可视化 中使用monocle的plot_cell_clusters函数画出了PBMC的第4和第10群两种不同T细胞的差异。那么这个分析一定要用包装好的R包吗?不是的,即使不使用别人做的R包,自己也能利用作图原理画出来
图片
问题的重点不在使用什么包,而是做出这个图的原理是什么
就上面这个图而言,为了分群,首先要有一个表达矩阵,还要设置分群信息(例如上面我们就明确知道要分成两群),然后还要进行PCA的线性降维和tSNE进一步非线性降维。有了这些认识,那么首先使用普通的函数来尝试一下
第一种方式:不使用R包,使用常规函数
先加载表达矩阵和分群信息
1options(warn=-1)
2load('patient1.PBMC_RespD376_for_DEG.Rdata')
3# 其中保存了表达矩阵(count_matrix)和分群的信息(cluster)
4> count_matrix[1:4,1:4]
5 AAACCTGCAACGATGG.3 AAACCTGGTCTCCATC.3 AAACGGGAGCTCCTTC.3 AAAGCAATCATATCGG.3
6RP11-34P13.7 0 0 0 0
7FO538757.2 0 0 0 0
8AP006222.2 0 0 0 0
9RP4-669L17.10 0 0 0 0
10> table(cluster)
11cluster
12 4 10
13636 170
根据分群因子,赋予不同颜色
1# 根据分群因子,赋予不同颜色
2color <- cluster
3levels(color) <- rainbow(2)
4> table(color)
5color
6#FF0000FF #00FFFFFF
7 636 170
对表达矩阵过滤
1# 首先是对基因过滤,根据标准差将那些在细胞中的表达量没有变化的基因去掉
2choosed_count <- count_matrix
3choosed_count <- choosed_count[apply(choosed_count, 1, sd)>0,]
4# 看到过滤了5000多个基因
图片
1# 然后选择变化差异最明显的前1000个基因
2choosed_count <- choosed_count[names(head(sort(apply(choosed_count, 1, sd),decreasing = T),1000)),]
然后进行PCA分析
对行进行操作,因此需要转置,另外进行标准化
1pca_out <- prcomp(t(choosed_count),scale. = T)
2library(ggfortify)
3autoplot(pca_out, col=color) +theme_classic()+ggtitle('PCA plot')
图片
PCA的全部结果可以通过str(pca_out)了解,其中坐标的信息在pca_out$x
1> pca_out$x[1:3,1:3]
2 PC1 PC2 PC3
3AAACCTGCAACGATGG.3 -1.4940046 6.707691 -0.7655250
4AAA