# R处理单细胞RNA测序
在R语言中进行单细胞RNA测序(scRNA-seq)数据分析时,**Seurat** 和 **SingleCellExperiment** 是常用的工具包。Seurat特别适合处理、分析和可视化scRNA-seq数据。下面将介绍如何使用这些R包进行单细胞RNA测序的基本分析,包括数据读取、预处理、降维、聚类和差异表达分析等步骤。

### 1. 安装和加载所需的R包
如果还没有安装`Seurat`包,可以使用以下命令安装。还会用到`ggplot2`包用于可视化。
```R
install.packages("Seurat")
install.packages("ggplot2")
```
加载Seurat和ggplot2库:
```R
library(Seurat)
library(ggplot2)
```
### 2. 导入数据
Seurat支持多种格式的数据读取,例如10X Genomics的h5格式和CSV文件等。
```R
# 从10X Genomics的h5文件读取数据
data <- Read10X_h5("filtered_feature_bc_matrix.h5")
# 创建Seurat对象
seurat_obj <- CreateSeuratObject(counts = data, project = "scRNAseq", min.cells = 3, min.features = 200)
```
### 3. 数据预处理
预处理包括过滤低质量细胞和低表达基因、标准化、对数变换和高变基因的识别。
#### 3.1 过滤低质量细胞和基因
过滤出在200个以上基因中有表达的细胞,以及至少在3个细胞中表达的基因。
```R
seurat_obj <- subset(seurat_obj, subset = nFeature_RNA > 200 & nCount_RNA < 2500)
```
#### 3.2 计算线粒体基因比例
在过滤过程中,可以计算线粒体基因的比例以去除线粒体基因含量较高的细胞(可能为低质量或死亡细胞)。
```R
seurat_obj[["percent.mt"]] <- PercentageFeatureSet(seurat_obj, pattern = "^MT-")
seurat_obj <- subset(seurat_obj, subset = percent.mt < 5)
```
#### 3.3 数据标准化和对数变换
将数据进行标准化和对数变换,以便进行下游分析。
```R
seurat_obj <- NormalizeData(seurat_obj, normalization.method = "LogNormalize", scale.factor = 10000)
```
#### 3.4 识别高变基因
识别高变基因有助于在降维时关注于生物学上更重要的信息。
```R
seurat_obj <- FindVariableFeatures(seurat_obj, selection.method = "vst", nfeatures = 2000)
```
### 4. 数据降维
降维步骤将数据从高维空间映射到较低维度,以便于可视化和聚类。
#### 4.1 线性降维(PCA)
首先进行PCA分析,计算细胞之间的主成分。
```R
seurat_obj <- ScaleData(seurat_obj, features = rownames(seurat_obj))
seurat_obj <- RunPCA(seurat_obj, features = VariableFeatures(object = seurat_obj))
ElbowPlot(seurat_obj) # 查看前几个主成分的解释程度
```
#### 4.2 非线性降维(UMAP或t-SNE)
使用UMAP或t-SNE方法进一步降维,以便可视化细胞簇。
```R
# 构建基于PCA的邻近图
seurat_obj <- FindNeighbors(seurat_obj, dims = 1:10)
# 使用UMAP降维
seurat_obj <- RunUMAP(seurat_obj, dims = 1:10)
DimPlot(seurat_obj, reduction = "umap", group.by = "orig.ident") # 根据样本分组可视化
```
### 5. 聚类分析
聚类用于识别具有相似表达特征的细胞群体。Seurat支持基于图的Louvain或Leiden聚类算法。
```R
seurat_obj <- FindClusters(seurat_obj, resolution = 0.5)
DimPlot(seurat_obj, reduction = "umap", label = TRUE, pt.size = 0.5) # 根据聚类结果标注
```
### 6. 差异表达分析
差异表达分析用于找到不同簇之间的特异性基因(标志基因)。
```R
# 对每个簇进行差异表达分析
cluster_markers <- FindAllMarkers(seurat_obj, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
head(cluster_markers) # 查看每个簇的前几个差异表达基因
# 可视化标志基因
VlnPlot(seurat_obj, features = c("GeneA", "GeneB"), group.by = "seurat_clusters")
FeaturePlot(seurat_obj, features = c("GeneA", "GeneB"))
```
### 7. 可视化
Seurat提供多种可视化方法,可以展示聚类、UMAP/t-SNE降维结果、特定基因的表达分布等。
```R
# 展示UMAP降维和聚类结果
DimPlot(seurat_obj, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()
# 热图展示不同簇的差异表达基因
top10 <- cluster_markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
DoHeatmap(seurat_obj, features = top10$gene) + NoLegend()
```
### 8. 保存与导出数据
可以将Seurat对象或差异表达结果导出,以便后续分析或共享。
```R
# 保存Seurat对象
saveRDS(seurat_obj, file = "scRNA_seurat_obj.rds")
# 保存差异表达基因列表
write.csv(cluster_markers, file = "cluster_markers.csv")
```
### 完整代码示例
以下是从导入数据到聚类和差异表达分析的完整代码示例:
```R
library(Seurat)
library(ggplot2)
# 读取数据并创建Seurat对象
data <- Read10X_h5("filtered_feature_bc_matrix.h5")
seurat_obj <- CreateSeuratObject(counts = data, project = "scRNAseq", min.cells = 3, min.features = 200)
# 预处理
seurat_obj[["percent.mt"]] <- PercentageFeatureSet(seurat_obj, pattern = "^MT-")
seurat_obj <- subset(seurat_obj, subset = nFeature_RNA > 200 & nCount_RNA < 2500 & percent.mt < 5)
seurat_obj <- NormalizeData(seurat_obj)
seurat_obj <- FindVariableFeatures(seurat_obj, selection.method = "vst", nfeatures = 2000)
# 数据降维
seurat_obj <- ScaleData(seurat_obj, features = rownames(seurat_obj))
seurat_obj <- RunPCA(seurat_obj, features = VariableFeatures(object = seurat_obj))
seurat_obj <- FindNeighbors(seurat_obj, dims = 1:10)
seurat_obj <- RunUMAP(seurat_obj, dims = 1:10)
# 聚类分析
seurat_obj <- FindClusters(seurat_obj, resolution = 0.5)
DimPlot(seurat_obj, reduction = "umap", label = TRUE)
# 差异表达分析
cluster_markers <- FindAllMarkers(seurat_obj, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
# 可视化
VlnPlot(seurat_obj, features = c("GeneA", "GeneB"), group.by = "seurat_clusters")
FeaturePlot(seurat_obj, features = c("GeneA", "GeneB"))
# 保存结果
saveRDS(seurat_obj, file = "scRNA_seurat_obj.rds")
write.csv(cluster_markers, file = "cluster_markers.csv")
```
### 总结
R语言中的**Seurat**包提供了强大的scRNA-seq数据分析功能,从数据预处理、降维、聚类到差异表达分析和可视化,适用于单细胞数据的全面分析。如果需要进行更加复杂的分析或整合不同数据集,Seurat也提供了许多高级功能。
### :point_right:[亞圖跨際-視角](https://viadean.notion.site/R-RNA-1361ae7b9a32808cb07ec42f433ea16b?pvs=4)