前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单细胞数据分析1

单细胞数据分析1

原创
作者头像
Erics blog
发布2023-10-15 15:40:25
4300
发布2023-10-15 15:40:25
举报
文章被收录于专栏:R语言数据分析R语言数据分析

基础知识

单细胞数据的应用方向

单细胞数据的存放位置

单细胞数据的分析流程

高变基因:方差最大的2000个基因。

marker基因:每个细胞簇中表达显著的基因。

细胞类型注释:根据细胞标志基因进行分类。

具体流程


title: "Seurat"

output: html_document

editor_options:

chunk_output_type: console


代码语言:{r setup, include=FALSE}
复制
knitr::opts_chunk$set(echo = TRUE,warning = F,message = F,fig.width = 10)

1.数据和R包准备

代码:https://satijalab.org/seurat/v3.0/pbmc3k_tutorial.html

数据:https://s3-us-west-2.amazonaws.com/10x.files/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz

代码语言:text
复制
rm(list = ls())
library(dplyr)
library(Seurat)
library(patchwork)

2.读取数据

10X的输入数据是固定的三个文件,在工作目录下新建01_data/,把三个文件放进去。

代码语言:text
复制
pbmc.data <- Read10X(data.dir = "01_data/")
dim(pbmc.data)

pbmc <- CreateSeuratObject(counts = pbmc.data, 
                           project = "pbmc3k", 
                           min.cells = 3, 
                           min.features = 200)
pbmc
class(pbmc)
# 查看表达矩阵

exp = pbmc@assays$RNA@counts;dim(exp)

exp[30:34,1:4]
#dgCMatrix是稀疏矩阵,点号代表0
range(exp)
boxplot(as.matrix(exp[,1:20]))

3.质控

这里是对细胞进行的质控,指标是:

线粒体基因含量不能过高;

nFeature_RNA 不能过高或过低

为什么? nFeature_RNA是每个细胞中检测到的基因数量。nCount_RNA是细胞内检测到的分子总数。nFeature_RNA过低,表示该细胞可能已死/将死或是空液滴。太高的nCount_RNA和/或nFeature_RNA表明“细胞”实际上可以是两个或多个细胞。结合线粒体基因count数除去异常值,即可除去大多数双峰/死细胞/空液滴,因此它们过滤是常见的预处理步骤。 参考自:https://www.biostars.org/p/407036/

代码语言:text
复制
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")##符合要求的基因占的百分比;
#f=stringr::str_starts(rownames(pbmc),"MT-")
#rownames(pbmc)[f]
head(pbmc@meta.data)

VlnPlot(pbmc, 
        features = c("nFeature_RNA",
                     "nCount_RNA", 
                     "percent.mt"), 
        ncol = 3,pt.size = 0.5)

根据这个三个图,确定了这个数据的过滤标准:

nFeature_RNA在200~2500之间;线粒体基因占比在5%以下。

3.2 三个指标之间的相关性
代码语言:text
复制
plot1 <- FeatureScatter(pbmc, 
                        feature1 = "nCount_RNA", 
                        feature2 = "percent.mt")
plot2 <- FeatureScatter(pbmc, 
                        feature1 = "nCount_RNA", 
                        feature2 = "nFeature_RNA")

plot1 + plot2
3.4 过滤
代码语言:text
复制
pbmc <- subset(pbmc, 
               subset = nFeature_RNA > 200 & 
                        nFeature_RNA < 2500 & 
                        percent.mt < 5)
dim(pbmc)

4.找高变基因(HVG)

代码语言:text
复制
pbmc <- NormalizeData(pbmc)
pbmc <- FindVariableFeatures(pbmc)
top10 <- head(VariableFeatures(pbmc), 10);top10

这里选了2000个,把前十个在图上标记出来。

代码语言:text
复制
plot1 <- VariableFeaturePlot(pbmc)
plot2 <- LabelPoints(plot = plot1, 
                     points = top10, 
                     repel = TRUE)
plot1 + plot2

5. 标准化和降维

代码语言:text
复制
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)
pbmc[["RNA"]]@scale.data[30:34,1:3]
5.1 线性降维PCA
代码语言:text
复制
pbmc <- RunPCA(pbmc, features = VariableFeatures(pbmc))
##只选择了高变化基因分析;
# 查看前5个主成分由哪些feature组成
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)

VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
#每个主成分对应基因的热图
DimHeatmap(pbmc, dims = 1:15, cells = 500)
# 应该选多少个主成分进行后续分析
ElbowPlot(pbmc)
# 限速步骤
f = "jc.Rdata"
if(!file.exists(f)){
  pbmc <- JackStraw(pbmc, num.replicate = 100)
  pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
  save(pbmc,file = f)
}
load(f)
JackStrawPlot(pbmc, dims = 1:20)
代码语言:text
复制
#PC1和2
DimPlot(pbmc, reduction = "pca")+ NoLegend()
# 结合JackStrawPlot和ElbowPlot,挑选10个PC,所以这里dims定义为1:10
pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5) #分辨率
#分辨率约高,分的越细致,默认0.5;最大为1,最小为0.1
# 结果聚成几类,用Idents查看
length(levels(Idents(pbmc)))
5.2 UMAP 和t-sne

PCA是线性降维,这两个是非线性降维。

代码语言:text
复制
pbmc <- RunUMAP(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "umap")
#DimPlot(pbmc, reduction = "umap",label=T)

6.找marker基因

啥叫marker基因呢。和差异基因里面的上调基因有点类似,某个基因在某一簇细胞里表达量都很高,在其他簇表达量很低,那么这个基因就是这簇细胞的象征。

找全部cluster的maker基因

代码语言:text
复制
pbmc.markers <- FindAllMarkers(pbmc, 
                               only.pos = TRUE,  # 只返回positive基因
                               min.pct = 0.25) #只计算至少在(两簇细胞总数的)25%的细胞中有表达的基因
#默认参数
pbmc.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)
6.1 比较某个基因在几个cluster之间的表达量

小提琴图

代码语言:text
复制
VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
VlnPlot(pbmc, features = c("PPBP", "S100A9"))
代码语言:text
复制
#可以拿count数据画
VlnPlot(pbmc, features = c("NKG7", "PF4"), slot = "counts", log = TRUE)

在umap图上标记

代码语言:text
复制
FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))
top10 <- pbmc.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
6.2 marker基因的热图
代码语言:text
复制
DoHeatmap(pbmc, features = top10$gene) + NoLegend()

7. 根据marker基因确定细胞

如何去找每种细胞对应的marker基因

注释需要查文献

代码语言:text
复制
a = read.delim("../supp/markers.txt",header = F)
gt = split(a[,2],a[,1])

DotPlot(pbmc, features = gt,cols = "RdYlBu") +
  RotatedAxis()
代码语言:text
复制
new.cluster.ids <- c("Naive CD4 T", 
                     "CD14+ Mono", 
                     "Memory CD4 T",
                     "B", 
                     "CD8 T", 
                     "FCGR3A+ Mono", 
                     "NK", 
                     "DC", 
                     "Platelet")

names(new.cluster.ids) <- levels(pbmc)
seu.obj <- RenameIdents(pbmc, new.cluster.ids)
p1 <- DimPlot(seu.obj, 
        reduction = "umap", 
        label = TRUE, 
        pt.size = 0.5) + NoLegend()
p1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础知识
    • 单细胞数据的应用方向
      • 单细胞数据的存放位置
        • 单细胞数据的分析流程
          • 具体流程
            • 1.数据和R包准备
            • 2.读取数据
            • 3.质控
            • 4.找高变基因(HVG)
            • 5. 标准化和降维
            • 6.找marker基因
            • 7. 根据marker基因确定细胞
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档