【R语言】单细胞——单样本分析流程

本期给大家解释介绍如何利用R语言对单个样本的单细胞数据进行分析。

一、单细胞分析流程——单样本

#####加载包#####
library(Seurat)
library(ggplot2)
library(dplyr)
#####00单样本10xGenomics(mtx、.tsv)数据加载及Seurat对象创建######
##加载数据##
remove(list = ls()) #清除Global Environment
getwd()  #查看当前工作路径
setwd("D:/Rdata/jc/单细胞演示数据/10xGenomics/")  #设置需要的工作路径
list.files()  #查看当前工作目录下的文件
seurat.date = Read10X(data.dir = "D:/Rdata/jc/单细胞演示数据/10xGenomics/单样本演示" )  #此步需要去除文件前缀方可正常运行,例如GSM8421890_2021_31_barcodes.tsv.gz,去除前缀变为barcodes.tsv.gz。
##创建seurat对象并初步过滤基因和细胞##
seurat.object = CreateSeuratObject(counts = seurat.date, 
                                   project = "GSM8421890_2021_31", #改成相应的样本名
                                   min.features = 200, #每个细胞至少表达的基因数(默认200-500),高质量数据可适当提高数值
                                   min.cells = 3 #每个基因至少在多少个细胞中表达(默认3-10)
                                   ) 
##查看数据##
seurat.object  #查看Seurat对象
dim(seurat.object) # 查看过滤后的基因数和细胞数
head(seurat.object@meta.data) # 查看元数据(默认包含 nCount_RNA, nFeature_RNA)

#####001质量控制(QC)#####
##计算线粒体基因比例##
seurat_obj <- PercentageFeatureSet(seurat.object, 
                                   pattern = "^MT-",  #^MT-人类;^mt-小鼠
                                   col.name = "percent.mt"
                                   )
 # pattern = "^RP[SL]")
##可视化QC指标##
VlnPlot(seurat_obj, 
        features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), 
        pt.size = 0.1,
        ncol = 3
        )

p1 <- FeatureScatter(seurat_obj,     #“features”间关系可视化
                        feature1 = "nCount_RNA", 
                        feature2 = "percent.mt",
                        pt.size = 0.1
                        )
p2 <- FeatureScatter(seurat_obj,    #“features”间关系可视化
                        feature1 = "nCount_RNA", 
                        feature2 = "nFeature_RNA",
                        pt.size = 0.1
                        )
p3 <- p1+p2 
p3

##过滤细胞##
seurat_obj_GL <- subset(seurat_obj, 
                        subset = nFeature_RNA > 200 & #避免低基因数的无效细胞。
                          nFeature_RNA < 6000 &   #避免双细胞或多细胞
                          nCount_RNA > 300 &      
                          nCount_RNA < 20000 &    
                          percent.mt < 10   #通常设置为5%-10%
                          )
##检查过滤后结果##
cat("过滤前细胞数:", ncol(seurat_obj), "\n")
cat("过滤后细胞数:", ncol(seurat_obj_GL), "\n")
cat("过滤比例:", round(ncol(seurat_obj_GL)/ncol(seurat_obj), 2), "\n")
##过滤细胞可视化##
VlnPlot(seurat_obj_GL, 
        features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), 
        ncol = 3
        )

P4 <- FeatureScatter(seurat_obj_GL, group.by="orig.ident",    #“features”间关系可视化
                        feature1 = "nCount_RNA",feature2 = "percent.mt",pt.size = 0.1)
P5 <- FeatureScatter(seurat_obj_GL, group.by="orig.ident",    #“features”间关系可视化
                        feature1 = "nCount_RNA",feature2 = "nFeature_RNA",pt.size = 0.1)
P <-P4+P5
P

##保存结果,可暂时不执行##
saveRDS(seurat_obj_GL, file = paste(GSM8421890_2021_31,"qc.RDS",sep="."))

数据标准化:校正技术偏差:由于测序深度不同,需标准化基因表达量。

##保存结果,可暂时不执行##
saveRDS(seurat_obj_GL, file = paste(GSM8421890_2021_31,"qc.RDS",sep="."))

#####002标准化与特征选择#####
##数据归一化(标准化)##
seurat_obj_GL <- NormalizeData(seurat_obj_GL,   # 对数归一化
                            normalization.method = "LogNormalize", 
                            scale.factor = 10000) 
##高变基因筛选##
seurat_obj_GL <- FindVariableFeatures(seurat_obj_GL, 
                                   selection.method = "vst", 
                                   nfeatures = 3000) #如果数据稀疏可减少
top10 <- head(VariableFeatures(seurat_obj_GL), 10) ##查看找到的前10个高变基因##
print(top10)  
#可视化top10高变基因
p4 <- VariableFeaturePlot(seurat_obj_GL)
p5 <- LabelPoints(plot = p4, 
                     points = top10, 
                     repel = TRUE)
p5
##保存高变基因列表(可选)##
write.csv(VariableFeatures(seurat_obj_GL), "highly_variable_genes.csv")

#####003数据缩放与PCA分析#####
##缩放数据##
high.var.genes <- VariableFeatures(seurat_obj_GL) #针对高变基因的缩放
#high.var.genes <- rownames(seurat_obj_GL)   #针对选择全部基因的缩放
seurat_obj_GL <- ScaleData(seurat_obj_GL, features = high.var.genes)
##PCA降维##
seurat_obj_GL <- RunPCA(seurat_obj_GL, 
                     features = VariableFeatures(object = seurat_obj_GL)
                     )
##查看PCA结果##
print(ElbowPlot(seurat_obj_GL)) #确认数据集的维度,选择“肘部”
#可视化PCA降维结果

#可视化PCA降维结果
VizDimLoadings(seurat_obj_GL, dims =1:2, reduction ="pca") 

DimPlot(seurat_obj_GL, reduction = "pca") #基于PCA降维的结果绘制散点图

DimHeatmap(seurat_obj_GL, dims =1:10, cells =500, balanced = TRUE) #绘制热图

#####006聚类分析#####
##基于选定的PCs进行聚类##
seurat_obj_GL <- FindNeighbors(seurat_obj_GL,
                            dims = 1:10) #指定了在计算邻居关系时使用的主成分范围。这里,dims = 1:10意味着将使用前10个主成分来构建最近邻图。
seurat_obj_GL <- FindClusters(seurat_obj_GL, 
                           resolution = 0.5) #根据需要调整resolution参数
head(Idents(seurat_obj_GL), 5) #请求只查看前5个细胞的身份标识。
##运行UMAP和tSNE##
#tSNE降维及可视化
seurat_obj_GL <- RunTSNE(seurat_obj_GL, dims = 1:10) #dims根据PCA的结果来决定使用多少个主成分。
p7 <- DimPlot(seurat_obj_GL, 
        reduction = "tsne", 
        group.by = "ident", #指定按照哪个元数据变量对点进行分组着色
        label = TRUE  #这个参数会在图上显示群集标签
         ) 
#UMAP降维及可视化
seurat_obj_GL<- RunUMAP(seurat_obj_GL, dims = 1:10)
p8 <-DimPlot(seurat_obj_GL, 
        reduction = "umap", 
        group.by = "ident", 
        label = TRUE
        )
p9<- p7 + p8
p9

#####007鉴定细胞簇间的差异表达基因#####
# 每个细胞簇找对比其他所有细胞簇的差异基因(1)
seurat_obj_markers <- FindAllMarkers(seurat_obj_GL,   #直接按参数进行筛选全部cluster间差异
                          only.pos = F,   #保留所有显著差异表达的基因;TRUE(只保留上调基因)
                          min.pct = 0.25, #  至少在25%的细胞中表达该基因才会被考虑。
                          logfc.threshold = 1
                          )
diff.markers <- seurat_obj_markers %>% filter(p_val_adj < 0.05) #筛选差异显著的基因
print(seurat_obj_markers)
# 对每个细胞簇找对比其他所有细胞簇的差异基因(2)#
#seurat_obj.all.markers <- FindAllMarkers(seurat_obj_GL, only.pos = F) #所有簇间的差异基因
#seurat_obj.markers <- seurat_obj.all.markers %>%   #根据参数再进行筛选
  #group_by(cluster) %>% 
  #dplyr::filter(abs(avg_log2FC) > 1)
  #diff.markers <- seurat_obj.markers  %>% filter(p_val_adj < 0.05) #筛选差异显著的基因
#print(seurat_obj.markers)
#识别cluster2相对于其他所有簇的特异性上调基因,但是roc,wilcox更适合区分两个群体#
cluster2.markers <- FindMarkers(seurat_obj_GL, 
                                ident.1 = 2,
                                logfc.threshold = 1, 
                                #test.use = "roc", #更适合寻找那些特异性高但 fold change 较小的 marker 基因,特别是在数据集不平衡的情况下
                                #test.use = "wilcox", #则更适合寻找表达差异显著的 marker 基因,并且能够提供统计显著性度量。
                                only.pos = TRUE #上调
                                )
#合并"roc"和"wilcox"结果看总体结果
#combined_markers <- merge(markers_roc, markers_wilcox, by = "gene", suffixes = c("_roc", "_wilcox"))
head(cluster2.markers, n = 5)
#找细胞簇5对比细胞簇0和3的差异基因#
cluster5.markers <- FindMarkers(seurat_obj_GL, 
                                ident.1 = 5, 
                                ident.2 = c(0, 3)
                                )
head(cluster5.markers, n = 5)

##可视化基因表达##
#小提琴图
VlnPlot(seurat_obj_GL, 
        features = c("KRT17","S100A2","KRT5","KRT6B","KRT14")
        )

#基因的细胞聚类分布图
FeaturePlot(seurat_obj_GL, 
            features = c("KRT17","S100A2","KRT5","KRT6B","KRT14")
            )

#查看top5DEGs的表达气泡图
top5 = seurat_obj_markers %>%
  group_by(cluster) %>%top_n(n = 5, wt = avg_log2FC) #需要包含所有基因及其在不同细胞簇间的表达差异信息的数据框
p <- DotPlot(
  seurat_obj_GL, 
  features = top5$gene,
  cols = c("lightblue", "blue"),  # 设置颜色渐变
  dot.scale = 4  # 调整点的大小(默认为6)
) + RotatedAxis() +  # 旋转y轴标签
  theme(
    panel.background = element_rect(fill = "white"),
    plot.background = element_rect(fill = "white"),
    axis.text.y = element_text(size = 12, color = "black"),  # 调整y轴标签字体大小和颜色
    axis.text.x = element_text(size = 6, color = "black")   # 调整x轴标签字体大小和颜色
  ) +
  labs(title = "Top 5 DEGs per Cluster")  # 添加标题
p

#热图
seurat_obj_markers %>%   
  group_by(cluster) %>%     #按照cluster列分组,即每个簇单独处理
  dplyr::filter(avg_log2FC > 1) %>%  #筛选出在该簇中log2 fold change > 1 的基因(即显著上调的基因)
  slice_head(n = 10) %>%    #对每个簇保留前10个差异最显著的基因(按默认排序,通常是按log2FC从高到低)
  ungroup() -> top10        #取消分组,恢复数据框为普通格式。将最终结果保存到变量 top10 中,它是一个包含每个簇前10个显著上调基因的列表。
DoHeatmap(seurat_obj_GL, features = top10$gene) + NoLegend()

#####008细胞类型注释#####
#已知各类型细胞后进行注释#
new.cluster.ids <- c("Dermal","Epidermis","melanocyte","B","DP","neural cell", "NK", "DC", "pericyte","Adipocytes","Endothelial","Schwann","T cell")
names(new.cluster.ids) <- levels(seurat_obj_GL)
seurat_obj_GL <- RenameIdents(seurat_obj_GL, new.cluster.ids)
my_colors <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2",#配色方案可根据多少个cluster而后去AI找
               "#D55E00", "#CC79A7", "#999999", "#FF99CC", "#66CCCC",
               "#FFCC99", "#CCFFCC", "#FFCCCC")
p10 <- DimPlot(seurat_obj_GL,   #可视化#
        reduction = "umap", 
        label = TRUE,
        pt.size = 0.5, 
        cols = my_colors) + NoLegend()
p11 <- DimPlot(seurat_obj_GL,   #可视化#
        reduction = "tsne", 
        label = TRUE,
        pt.size = 0.5, 
        cols = my_colors) + NoLegend()
p12 <- p10+p11
p12

好了本次分享就到这里,下期将有更精彩单细胞分析内容,敬请期待。

关注”在打豆豆的小潘学长“公众号,还有更精彩内容。

### 单细胞测序数据分析中的R语言应用 #### 准备工作环境 为了有效地处理和分析单细胞RNA测序(scRNA-seq)的数据,在启动具体项目前需配置合适的工作环境。Bioconductor是一个专门为生物信息学提供软件包的平台,对于scRNA-seq尤其重要。访问官方网站并按照指示安装必要的工具可以简化后续流程[^1]。 ```r if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install() ``` #### 导入Seurat所需文件 当准备利用`Seurat`这个强大的R包来进行单细胞数据探索时,确保拥有三个必需输入文件:`barcodes.tsv`, `genes.tsv`以及`matrix.mtx`. 这些文件共同构成了表达矩阵的基础结构,其中两个TSV文件分别定义了基因名称与样本条形码,而MTX则存储着实际测量到的表达量数值[^2]. ```r library(Seurat) # 假设这些路径指向上述提到的三个必要文件的位置 file_path <- system.file("extdata/pbmc3k_filtered_gene_bc_matrices/hg19/", package = "SeuratData") pbmc.data <- Read10X(data.dir = file_path) # 创建一个新的Seurat对象来容纳导入的数据集 pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200) ``` #### 数据预处理阶段 完成初步加载后,下一步是对原始计数矩阵执行标准化、归一化等一系列预处理措施。这一步骤旨在消除技术噪音的影响,并使得不同样品间具有可比性。通过调用内置函数如`NormalizeData()`,`FindVariableFeatures()`等实现自动化质量控制(QC),从而筛选出高质量的细胞用于进一步研究。 ```r pbmc <- NormalizeData(object = pbmc, normalization.method = "LogNorm", scale.factor = 1e4) pbmc <- FindVariableFeatures(object = pbmc, selection.method = "vst", nfeatures = 2000) ``` #### 构建降维表示 经过充分清理后的数据集通常会非常庞大且复杂,因此有必要采用诸如PCA(主成分分析)、t-SNE或UMAP这样的方法降低维度以便于可视化展示。此类操作不仅有助于直观理解整体趋势,也为聚类算法提供了基础支持。 ```r all.genes <- rownames(pbmc) pbmc <- ScaleData(object = pbmc, features = all.genes) pbmc <- RunPCA(object = pbmc, features = VariableFeatures(object = pbmc)) # 可视化PCA结果 DimPlot(object = pbmc, reduction = "pca") ``` #### 细胞分群与标记识别 最后一个重要环节是在低维空间内对相似类型的细胞实施分类聚合——即所谓的“聚类”。基于此过程获得的结果能够帮助研究人员发现潜在的新亚型或是验证已知群体的存在情况;与此同时,还可以借助特征选择找出每一群体特有的标志物。 ```r pbmc <- FindNeighbors(object = pbmc, dims = 1:10) pbmc <- FindClusters(object = pbmc, resolution = 0.5) # 查找每个簇内的高变基因作为可能的marker markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25) head(markers[, c("cluster", "gene", "avg_logFC")]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值