2021-12-24 单细胞入门

Seurat应用笔记 数据为Seurat官网示范数据

library(Seurat)
library(dplyr)
library(magrittr)

每次重新进入R都要重新library包

每次得到什么中间结果可以

save.image("保存路径")

或者直接点environment左上方的保存按钮
(当然可以一开始用setwd设定好工作位置,然后调用save.image的时候就可以直接用“文件名+.RData”的形式),就可以对每次的数据分开保存。
load的作用就是把一个RData类型文件载入到environment中,这样变量就全部在当前环境下,可以直接使用

setwd("运行环境位置")

单细胞数据文件分类:
由单细胞得的10x数据,怎么处理?
code1:

matrix <- Read10X_h5("filtered_gene_bc_matrices_h5.h5")

该函数直接读取10x的h5文件,并且得到一个matrix矩阵

code2:

matrix <- Read10X("data/matrix_dir")

默认读取运行环境中的 data/matrix_dir目录下包含文件,如果要读取运行环境之外的文件,就要从头什么盘开始输入位置。

包括matrix.mtx, genes.tsv, and barcodes.tsv 把他们都放到matrix中

导入文件后用Seurat包处理

pbmc <-CreateSeuratObject(raw.data = matrix,min.cells = 3,
min.genes = 200, project = "NAME")

创建一个叫做"pbmc"的东西,是SeuratObject。

其中命名raw.data为以上matrix(有的代码中命名不同,或者一开始导入的时候不以matrix形式导入,而以counts形式,总之这里raw.data = matrix可写“你要创建的文件的名字”=“你前面导入东西的名字”);基因至少在min.cells个细胞中表达;每个细胞中至少表达min.genes个基因,可以自己设定;project的命名自己定义就好。

之后Seurat将数据保存在不同的slot中,如pbmc@raw.data, pbmc@data, pbmc@meta.data, pbmc@ident,其中raw.data存放的是每个细胞中每个gene的原始UMI数据,data存放的是gene的表达量,meta.data存放的是每个细胞的统计数据如UMI数目,gene数目等,ident此时存放的是project信息。

由于技术原因,一个GEM(单细胞测试的油包水滴)中可能会包含2个或多个细胞,也可能不包含细胞,这时候可以通过观察每个barcode中的基因数目或UMI数目来判断。

处理筛掉异常GEM的方法:

  1. 可以计算每个barcode中的线粒体基因含量等,从而更加仔细的观察数据的质量。
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^mt-")

mt-开头的是线粒体基因,这里将其进行标记并统计其分布频率

VlnPlot(object = pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")+ NoLegend()
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")+ NoLegend()
CombinePlots(plots = list(plot1, plot2))

以上对 pbmc 对象做小提琴图,分别为基因数,细胞数和线粒体占比

以上根据图片中基因数和线粒体数,分别设置过滤参数,这里基因数200-2500,线粒体百分比为小于 5%(常用的过滤参数)

作图,直观地看一下数据的质量。要输入代码plot或者Combineplot,才可以在右边出现图

标准化

pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

鉴定高变基因,之后就关注这些基因进行研究

pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
top10 <- head(VariableFeatures(pbmc), 10)

使用默认参数,用vst方法选取2000个高变基因。

然后选取top10变化的

plot3 <- VariableFeaturePlot(pbmc)
plot4 <- LabelPoints(plot = plot3, points = top10, repel = TRUE,xnudge=0,ynudge=0)
plot3+plot4

得到图,看到变化最大的前2000个和10个的图

接下来进行数据归一化
1.线性姜维
有一堆细胞,但是你需要将这些细胞进行分群,但是你又不知道这些细胞如果进行分群的话是按照什么依据进行分群,就要先使用PCA 降维找到细胞分群的主要特点,这也就是我们常说的主成分分析

all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc,features = all.genes,vars.to.regress = "percent.mt")
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

数据归一化,对所有基因进行标准化,默认只是标准化高变基因( 2000 ),速度更快,不影响 PCA 和分群,但影响热图的绘制。

线性降维(PCA),默认用前面得到的2000个高变基因集,但也可通过 features 参数自己指定 需要挺长时间的,从1%开始加载

定义可视化细胞和功能的几种有用的方式PCA,包括VizDimReduction,DimPlot,和DimHeatmap 得到一堆positive negative基因

VizDimLoadings(object = pbmc, dims = 1:2, reduction = "pca")
DimPlot(pbmc, reduction = "pca")+ NoLegend()
DimHeatmap(pbmc, dims = 1:2, cells = 500, balanced = TRUE)

以上三行得到三个图,定义可视化细胞和功能,还不知道有啥用?

鉴定数据集的可用维度,确定哪些主成分所代表的基因可以进入下游分析用于后续细胞分类。

这里可以使用JackStraw做重抽样分析。可以用JackStrawPlot可视化看看哪些主成分可以进行下游分析。

pbmc <- JackStraw(pbmc, num.replicate = 100)
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
JackStrawPlot(pbmc, dims = 1:15)
ElbowPlot(object = pbmc)

第一步需要一定计算时间最后得到图JackStrawPlot和Elbowplot,后者比较直观。

第二行,得到JackStrawPlot。是彩色的,虚线以上的为可用维度,dim是展示多少个。可以调节dim,画出不同数量的 pca 查看。

也就是:基于每个主成分对方差解释率的排名。建议尝试选择多个主成分个数做下游分析,对整体影响不大;在选择此参数时,建议选择偏高的数字( “宁滥勿缺”,为了获取更多的稀有分群);有些亚群很罕见,如果没有先验知识,很难将这种大小的数据集与背景噪声区分开来。

第三行,得到Elbowplot,点图。比较直观地看到,前面的几个点分得比较开。

image.png

之后就可以决定选取多少主成分用于细胞分类。从上到下,从p-value最小的开始选择top few。

尊重官网的建议,这里选取top 10

  1. 非线性降维( UMAP/tSNE)
    TSNE降维与PCA降维并不相同,TSNE降维主要是非线性降维。
    TSNE优势:使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。它将多维数据映射到适合于人类观察的两个或多个维度,广泛应用于图像处理。
    一般情况下,在进行细胞分群时:先进行PCA主成分分析,再进行TSNE降维分析进行细胞分群,这样的分群结果可靠度更高。

Seurat 提供了几种非线性降维的方法进行数据可视化(在低维空间把相似的细胞聚在一起),比如 UMAP 和 t-SNE,运行 UMAP 需要先安装'umap-learn'包,两种方法都可以使用,但不要混用,这样,后面的结算结果会将先前的聚类覆盖掉,只能保留一个。

2.1 umap
umap优于tsne:
UMAP 与 t-SNE 均是非线性降维,多用于数据可视化
UMAP 结构与t-SNE一致
UMAP 计算更快
UMAP 能更好地反映高纬结构,比t-SNE有着更好的连续性
这种连续性反映到单细胞分析中就是能更好滴可视化细胞的分化状态(UMAP better represents the multi-branched continuous trajectory of hematopoietic development)

umap安装包如下:

install(packages = 'umap-learn')

基于PCA 空间中的欧氏距离计算 nearest neighbor graph,优化任意两个细胞间的距离权重(输入上一步得到的 PC 维数)

pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)

resolution 参数决定下游聚类分析得到的分群数,对于 3K 左右的细胞,设为 0.4-1.2 能得到较好的结果(官方说明);如果数据量增大,该参数也应该适当增大;增加的值会导致更多的群集。

使用 Idents()函数可查看不同细胞的分群;查看每一类有多少个细胞

head(Idents(pbmc), 8)
table(pbmc@active.ident) 

得到前8个细胞分群的table

pbmc <- RunUMAP(object = pbmc, dims = 1:10)
DimPlot(object = pbmc, reduction = "umap")
umapplot<-UMAPPlot(pbmc,label = TRUE, pt.size = 1.5)+ NoLegend()

这里用 DimPlot()函数绘制散点图。如果只做tsne,参数reduction = "tsne";如果不设定reduction,默认先从搜索 umap, 然后 tsne, 再然后 pca;

也可以直接使用这 3 个函数 PCAPlot()、 TSNEPlot()、UMAPPlot(); cols, pt.size 分别调整分组颜色和点的大小;

image.png

2.2 TSNE

pbmc <- RunTSNE(pbmc, dims = 1:10)
DimPlot(object = pbmc, reduction = "tsne")
tsneplot<-TSNEPlot(pbmc,label = TRUE, pt.size = 1.5)+ NoLegend()
image.png

做完以上降维处理保存数据

saveRDS(pbmc, file = "pbmc_tutorial.rds")
save(pbmc,file="pbmc.RData")
load(file = "pbmc.RData")

保存在了工作路径下文件夹中,并且下次用的时候直接load就好

寻找差异表达的特征(聚类生物标志物)

寻找某个聚类和其他所有聚类显著表达的基因

cluster1.markers <- FindMarkers(object = pbmc, ident.1 = 1, min.pct = 0.25)
head(x = cluster1.markers, n = 5)

find all markers distinguishing cluster 5 from clusters 0 and 3

cluster5.markers <- FindMarkers(object = pbmc, ident.1 = 5, ident.2 = c(0,3), min.pct = 0.25)
write.table(as.data.frame(cluster5.markers), file="cluster1vs2.xls", sep="\t", quote = F)

find markers for every cluster compared to all remaining cells, report only the positive ones

pbmc.markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

pbmc.markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25, return.thresh = 0.01)
library(dplyr)
top10 <- pbmc.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_logFC)
DoHeatmap(object = pbmc, features = top10$gene) + NoLegend()

画图

VlnPlot(object = pbmc, features = c("MS4A1", "CD79A"))
FeaturePlot(object = pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))

you can plot raw UMI counts as well

VlnPlot(object = pbmc, features.plot = c("NKG7", "PF4"), use.raw = TRUE, y.log = TRUE)
FeaturePlot(object = pbmc, features = c("hbaa1","hbaa2","ighv1-4","cd79a","cd79b","cd4-1","cd8a","cd8b","itga2b"), cols = c("grey", "blue"), reduction = "tsne")

将单元类型标识分配给集群

new.cluster.ids <- c("1", "3", "4", "2", "5", "6", "7", "8")
names(x = new.cluster.ids) <- levels(x = pbmc)
pbmc <- RenameIdents(object = pbmc, new.cluster.ids)
DimPlot(object = pbmc, label = TRUE, pt.size = 1.5) + NoLegend()

气泡图

markers.to.plot <- c("cd74a", "cd74b")
DotPlot(pbmc, features = markers.to.plot) + RotatedAxis()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 今天下午去参加了三元思维的IP会。龙先生首先讲了一下2021年发生的重要的大事,2022年会继续延续的事。我对他讲...
    小杨梅Yami阅读 235评论 0 1
  • 明天就是致知班最后一天学习了,今天小组内我还要再写一次家书。 两天前日更的时候我就开始做准备了,所以即便500字的...
    陪你今生来世阅读 286评论 1 4
  • 投射我儿能适应大学生活,越来越会调节自己的情绪和压力,情绪平和稳定,对自己的未来有清晰的目标,并为此不断努力。 投...
    花开生两面阅读 121评论 0 0
  • 遇到这样一些人,她们叫人做事总是趾高气昂的,对待我们这些新进来的同事,态度傲慢。我对此,内心很不满意。已经有过两次...
    再见Sarah1992阅读 174评论 0 0
  • 武法友阅读 133评论 0 0