小鼠全脑单细胞数据细胞类型鉴定

最近在处理小鼠全脑的单细胞数据,归纳总结下细胞类型鉴定的过程吧。我用的算法是Seurat label transfer function, 抽取了Tubula Muris部分已知数据,用这个算法进行了鉴定,准确率可以达到98%。后来我做细胞类型鉴定用的都是这个算法加已知marker双重验证的方法。

1.首先下载两个小鼠全脑的数据

a.Tabula Muris

下载的是Tabula Muris中脑的数据
facs_Brain_Non-Myeloid_seurat_tiss.Robj
facs_Brain_Myeloid_seurat_tiss.Robj
其中Myeloid主要是Microglia 以及Macrophage细胞类型
Non-Myeloid主要是Neuron, Astrocyte, Oligodendrocyte, Endothelial等

b.Mouse Cell Atlas

找这套数据的脑的数据找了我半天
后来发现可以在他们文章里找到数据的下载链接
数据存储在figshare
但是我的数据 我是从Tabula muris github网址上的data路径中下载下来的数据
从Tabula muris github网址中可以找到Seurat处理好的MCA的数据可以直接导入到R里面分析,很方便
这个压缩包里包含两个文件
MCA_CellAssignments.csv
MCA_All-batch-removed-assignments.csv

MCA_All-batch-removed-assignments.csv数据内容

我可纳闷了为啥不添加细胞类型信息 有毒
但是这个下载下来的数据是没有细胞类型的,需要自己到这个网址再下载一下,我下载的是MCA_CellAssignment.csv
MCA_CellAssignments.csv

,然后用R代码处理一下就可以得到对应的细胞类型。
代码如下

MCA_exp <- readRDS("MCA_merged_mat.rds")
MCA_celltypeinfo <- read.csv("MCA_CellAssignments.csv")
MCA_cellname <- read.csv("MCA_All-batch-removed-assignments.csv")
index <- match(MCA_cellname$Cell.name, MCA_celltypeinfo$Cell.name)
selected_cellname <- MCA_celltypeinfo[na.omit(index), ]
dim(selected_cellname)
brain_cellname <- selected_cellname[selected_cellname$Tissue=="Brain", ]
brain_exp <- MCA_exp[, as.character(brain_cellname$Cell.name)]

all.equal(as.character(brain_cellname$Cell.name), colnames(brain_exp))
MCA_brain_rds <- list()
MCA_brain_rds$exp <- brain_exp
MCA_brain_rds$meta.data <- brain_cellname
saveRDS(MCA_brain_rds, "MCA_brain_exp.rds")

2.构建Seurat Reference Object

这里遇到一个问题 就是用SCTtransform的时候 没办法运行成功 后来我用NormalizeData方法就可以的

a.Tabula Muris

load("facs_Brain_Non-Myeloid_seurat_tiss.Robj")
selected_cells <- rownames(tiss@meta.data)
Non_Myeloid_exp <- tiss@raw.data[, selected_cells]
Non_Myeloid_label <- tiss@meta.data$cell_ontology_class
all.equal(colnames(Non_Myeloid_exp), rownames(tiss@meta.data))
dim(Non_Myeloid_exp) #23341  3401
# write.csv(tiss@meta.data, "Tabula_Muris_Non_Myeloid_metadata1.csv")

load("facs_Brain_Myeloid_seurat_tiss.Robj")
selected_cells <- rownames(tiss@meta.data)
Myeloid_exp <- tiss@raw.data[, selected_cells]
Myeloid_label <- tiss@meta.data$cell_ontology_class
all.equal(colnames(Myeloid_exp), rownames(tiss@meta.data))
dim(Myeloid_exp) #23341  4455
# write.csv(tiss@meta.data, "Tabula_Muris_Myeloid_metadata1.csv")
## 我在表格中去掉了Rik结尾的基因 以及4-Sep这样子的基因 基因名字写在了"rownames.csv"
## 是因为这些基因感觉没什么实质性作用 可以跳过这里 不做任何处理

genes <- as.character(read.csv("rownames.csv", row.names= 1)$x)
Brain_exp <- cbind(Non_Myeloid_exp, Myeloid_exp)
Cell_ontology_class <- data.frame(celltype = c(Non_Myeloid_label, Myeloid_label))
rownames(Cell_ontology_class) <- colnames(Brain_exp)

Brain_exp <- Brain_exp[genes, ]
Brain_exp <- Brain_exp[rowSums(Brain_exp>5) >= 20 & rowSums(Brain_exp) >= 20, ]
Brain_exp <- na.omit(Brain_exp)

Tabula_Muris_rds <- list()
Tabula_Muris_rds$exp <- Brain_exp
Tabula_Muris_rds$celltype <- Cell_ontology_class$celltype
saveRDS(Tabula_Muris_rds, "Tabula_Muris_rawdata_with_cellinfo.rds")

# 2) 构建NormalizeData的ref.seurat用来做reference data
ref_exp <- Brain_exp
ref.seurat <- CreateSeuratObject(counts = ref_exp)
ref.seurat <- NormalizeData(ref.seurat, verbose = FALSE)
ref.seurat <- FindVariableFeatures(ref.seurat, selection.method = "vst", 
                                             nfeatures = 2000, verbose = FALSE)
ref.seurat <- ScaleData(ref.seurat)
ref.seurat <- RunPCA(object = ref.seurat, npcs = 30, verbose = FALSE)
ref.seurat$celltype <- Cell_ontology_class$celltype
saveRDS(ref.seurat, file = "Tabula_Muris_NormalizeData_ref_seurat.rds")

# 3) 选取了部分数据 做reference 推断 准确率可以达到98.8%
index <- sample(colnames(Brain_exp), 500)
test_data <- Brain_exp[, index]
test_celltype <- Cell_ontology_class[index, 1]
test.seurat <- CreateSeuratObject(counts = test_data)
test.seurat <- NormalizeData(test.seurat, verbose = FALSE)
test.seurat <- FindVariableFeatures(test.seurat, selection.method = "vst", 
                                   nfeatures = 2000, verbose = FALSE)
test.seurat <- ScaleData(test.seurat)
test.seurat <- RunPCA(object = test.seurat, npcs = 30, verbose = FALSE)
test.seurat$original_celltype <- test_celltype

test.anchors <- FindTransferAnchors(reference = ref.seurat, 
                                        query = test.seurat, 
                                        dims = 1:30)
predictions <- TransferData(anchorset = test.anchors, 
                            refdata = ref.seurat$celltype, 
                            dims = 1:30)
test.seurat <- AddMetaData(test.seurat, metadata = predictions)

b.Mouse Cell Atlas

MCA_exp <- readRDS("MCA_merged_mat.rds")
MCA_celltypeinfo <- read.csv("MCA_CellAssignments.csv")
MCA_cellname <- read.csv("MCA_All-batch-removed-assignments.csv")
index <- match(MCA_cellname$Cell.name, MCA_celltypeinfo$Cell.name)
selected_cellname <- MCA_celltypeinfo[na.omit(index), ]
dim(selected_cellname)
brain_cellname <- selected_cellname[selected_cellname$Tissue=="Brain", ]
brain_exp <- MCA_exp[, as.character(brain_cellname$Cell.name)]

all.equal(as.character(brain_cellname$Cell.name), colnames(brain_exp))
MCA_brain_rds <- list()
MCA_brain_rds$exp <- brain_exp
MCA_brain_rds$meta.data <- brain_cellname
saveRDS(MCA_brain_rds, "MCA_brain_exp.rds")

# 2.构建seurat reference 
library(Seurat)
ref_exp <- brain_exp
ref.seurat <- CreateSeuratObject(counts = ref_exp)
ref.seurat <- NormalizeData(ref.seurat, verbose = FALSE)
ref.seurat <- FindVariableFeatures(ref.seurat, selection.method = "vst", 
                                   nfeatures = 2000, verbose = FALSE)
ref.seurat <- ScaleData(ref.seurat)
ref.seurat <- RunPCA(object = ref.seurat, npcs = 30, verbose = FALSE)
ref.seurat$celltype <- as.character(brain_cellname$Annotation)
saveRDS(ref.seurat, file = "MCA_NormalizeData_ref_seurat.rds")

写在最后 佛系更文 很开心 终于有一百个粉丝了开心快乐的一天啊

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

推荐阅读更多精彩内容