Seurat常见分析工作流程

目录

1. 加载数据集,创建Seurat对象

 2. 数据预处理

a. QC(质量控制)

b. 数据标准化

c. 高变基因(特征选择)

d. 归一化

e. 数据降维(PCA)

 3. 单细胞聚类

 4. 非线性降维

 5. 细胞类型标识分配给集群

 6. 结果保存为.rds文件


1. 加载数据集,创建Seurat对象

数据下载地址:https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz

Pbmc:外周血单核细胞,包括淋巴细胞(T细胞,B细胞和自然杀伤(NK)细胞)和单核细胞,一小部分的树突状细胞。

其中CreateSeuratObject()函数用来创建Seurat对象

counts:一个类似矩阵的对象;

project:Seurat对象的项目名称;

min.cells:包含至少在这么多细胞中检测到的特征;

min.features:包含至少可以检测到这些特征的单元格。

运行结果:

 2. 数据预处理

a. QC(质量控制)

三个标准

1. 每个细胞中检测到的唯一基因数(nFeature_RNA)

  • 低质量的细胞或空的droplet液滴通常含有很少的基因
  • Cell doubles 或 multiplets可能表现出异常高的基因计数

2. 每个细胞中检测到的总分子数(nCount_RNA)

3. 线粒体基因含量比例(percent.mt)

  • 低质量或者死亡细胞含有很高的线粒体基因
  • 使用PercentageFeatureSet()计算线粒体QC比例
  • MT-开头的基因是线粒体基因

 运行结果:

 

b. 数据标准化

默认标准化方法为LogNormalize,标准化后的数据存在pbmc[[“RNA”]]@data中

归一化 -> 乘以比例因子10000 -> 对数转换

c. 高变基因(特征选择)

选择数据集中高变异的特征子集(在某些cell中高表达,在某些cell中低表达)

通过FindVariableFeatures()函数,计算每一个基因的均值和方差,默认选择高变异的2000个基因用于下游分析

 运行结果:

 

d. 归一化

使用ScaleData()函数转化(“归一化”)数据,使每一个基因在所有cell中的表达均值为0,方差为1

结果在pbmc[[“RNA”]]@scale.data中,通过str()获取pbmc的数据结构

e. 数据降维(PCA)

 运行结果:

Positive和Negative就是PC轴的正负映射关系,正值为Positive,负值为Negative。返回的是正值和负值绝对值最大的top30。可以理解为对所有细胞区分度最大的基因。

运行完RunPCA后,得到两个分解矩阵,2000x50的权重矩阵,50x2000的系数矩阵,总共为50个PC

 结果可视化

 确定维度

ElbowPlot(pbmc)是确定用多少个PC进行分群的一种有效方法,直观地显示了每个PC的标准偏差,我们要找的就是标准偏差趋于平稳的位置

 3. 单细胞聚类

首先根据PCA空间中的欧氏距离构建KNN图,并根据其局部邻域中的共享重叠(jaccard相似性)细化任意两个单元之间的边权重。共分为9类

 前5个细胞所属的类别为:

 4. 非线性降维

首先下载UMAP算法,进行可视化

 运行结果:

 5. 细胞类型标识分配给集群

用新的标识替代原来的cluster0-8

运行结果:

 6. 结果保存为.rds文件

saveRDS(pbmc, file = "F:/Seurat/1_1.rds")

### 创建包含多个Seurat对象的列表 在R中,可以利用基础的数据结构`list()`来存储多个Seurat对象。以下是实现这一目标的具体方法: 通过将各个独立的Seurat对象作为元素传递给`list()`函数,即可创建一个包含这些对象的列表[^1]。例如,假设存在三个名为`seurat_obj1`、`seurat_obj2`和`seurat_obj3`的Seurat对象,则可以通过如下方式将其组合成一个列表: ```r seurat_list <- list(seurat_obj1, seurat_obj2, seurat_obj3) ``` 如果希望为列表中的每个Seurat对象指定名称以便于后续访问,可以在调用`list()`时提供命名参数: ```r seurat_list <- list(obj1 = seurat_obj1, obj2 = seurat_obj2, obj3 = seurat_obj3) ``` 这样做的好处在于能够通过名字直接提取特定的对象,例如使用`seurat_list$obj1`获取第一个Seurat对象。 此外,在处理批量数据集时,这种做法非常常见,尤其是在需要对多个样本执行相同分析流程的情况下。 ### 示例代码 以下是一个完整的示例,展示如何创建并操作包含多个Seurat对象的列表: ```r library(Seurat) # 假设已有的Seurat对象 data("pbmc_small") # 加载内置的小型PBMC数据集 seurat_obj1 <- pbmc_small seurat_obj2 <- CreateSeuratObject(counts = GetAssayData(pbmc_small, slot = "counts")) seurat_obj3 <- SubsetData(pbmc_small, subset.name = "RNA", features.deselected = NULL) # 将它们放入列表中 seurat_list <- list( sample_1 = seurat_obj1, sample_2 = seurat_obj2, sample_3 = seurat_obj3 ) # 查看列表内容 print(names(seurat_list)) # 显示列表中各对象的名字 # 访问其中一个对象 sample_one <- seurat_list$sample_1 ``` 上述代码不仅展示了如何构建这样的列表,还提供了基本的操作指南,比如查看列表内的对象名以及按需提取单个对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值