提高单细胞分析准确度的工具之一:Self-assembling manifolds
目前单细胞分析中使用Seurat的居多,该流程中可以影响下游分群的因素有很多,比如前期的质控、Feature select、PCA数量以及resolution的值等等,每一个环节研究者都可以通过多次的调试找到合适的参数值。
Feature select这一步对下游的影响很重要,seurat默认挑选前2000个高变异的Features作为下游PCA计算的输入数据,根据不同的data,我们可以尝试不同的Feature select数量,也可以将scanpy和seurat的var feature整合后进入下游分析,甚至有软件比如scry和M2Drop等专门用于Feature select这一步。但这里小编要说的是另一个软件Self-assembling manifolds(SAM),其可以独自完成一个完整的单细胞分析的流程。小编这里只挑出SAM的Feature select这一步的结果,整合到Seurat流程中做分析。
软件的开发者在文章《Self-assembling manifolds in single-cell RNA sequencing data》中说(下图),SAM在多项评估中得分最高,其次为SAM的top rank feature作为输入的Seurat的得分仅次于SAM,这两者和Seurat自身的默认参数(Seurat)和优化参数的Seurat分析(Seurat*)结果有明显的差距。
首先是SAM的安装,有两种方式,一是SAM被封装进scanpy中,可通过scanpy调用,二是独立使用安装使用SAM,这里写的是第二种,参考github地址:https://github.com/atarashansky/self-assembling-manifold
conda create -n SAM python=3.6
conda activate SAM
#pip安装
pip install sam-algorithm
#或者github上安装最新版
git clone https://github.com/atarashansky/self-assembling-manifold.git
cd self-assembling-manifold
python setup.py install
#其他安装
pip install matplotlib
conda install -c conda-forge -c plotly jupyter ipywidgets plotly=4.0.0 colorlover ipyevents
安装好之后,可以打开jupyter notebook进行交互式的分析,此部分读者可以查看github的教程。小编喜欢直接写成python脚本分析并导出feature select信息,最后整合到seurat流程中,脚本如下
import sys
from samalg import SAM
a=sys.argv[1]
sam=SAM()
sam.load_data(a)
sam.preprocess_data(sum_norm='cell_median',thresh=0.01)
sam.run(projection='tsne')
a= sam.adata.var
for i in range(len(a)) :
print(a[i-1:i])
执行脚本,输入为csv格式的表达矩阵,可以用seurat质控好后导出的count矩阵:
python sam.py count.from.seurat.csv | grep -E "False|True" >> top.var.feature.txt
将结果导入到R中,整合进seurat的流程中:
tmp.sam.genes<- read.table("top.var.feature.txt",header = F)
tmp.sam.genes<-tmp.sam.genes[order(tmp.sam.genes[,4],decreasing = T),]
tmp.sam.top500<- tmp.sam.genes[1:500,1]
#在seurat的RunPCA输入SAM选择的top 500 features
seu.obj <- RunPCA(seu.obj, features =tmp.sam.top500, npcs = 50, verbose = FALSE)
这里选取的top Features的数量也要根据具体的数据进行调试。
如果是喜欢用scanpy的同学,可以直接在scanpy里调用SAM:
import scanpy as sc
import scanpy.external as sce
sam = sce.tl.sam(adata, inplace=True) #adata is your AnnData object
有兴趣的同学可以用自己的数据试一下,最后附上这篇文章的地址:https://elifesciences.org/articles/48994
- Flask快速入门,知识整理
- python的reduce()函数
- 企业级memcached缓存数据库结合php使用与web管理memcached
- python中星号的意义(**字典,*列表或元组)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- 还没开始学Python之前,你要知道,Python程序员一定会的十件事
- zabbix-server端与zabbix-agent端部署与监控
- 比特币是什么?比特币从何而来?
- Django内置Admin
- Python内置函数property()使用实例
- 区块链技术的历史发展的不同阶段
- 微信力推搜一搜,培养用户微信搜索习惯,搜一搜直接给红包
- datetime
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 偏最小二乘回归(PLSR)和主成分回归(PCR)
- R语言使用特征工程泰坦尼克号数据分析应用案例
- Rust FFI 编程 - Rust导出共享库04
- 使用结构化的标头字段改善HTTP
- c语言直接读写ini配置文件
- Rust FFI 编程 - Rust导出共享库03
- 【crossbeam系列】2 crossbeam-epoch:基于epoch的无锁“垃圾收集”
- java调用JNI总结
- 【Rust日报】2020-07-30 fixed_vec减少Rust数组冗余边界检查
- 我的小工具,用C和python实现远程读卡器,远程读写消费卡片
- c语言实现TCP的socket通信
- 多文件目录Makefile的写法
- 一个有趣的例子带你入门canvas
- GitLab 12 跨版本 13 升级
- 【Rust日报】2020-07-28 SO:在命令行下浏览StackOverflow