植物空间转录组分析2:STEEL+Seurat

植物空间转录组分析1:Seurat基本流程 - 简书 (jianshu.com)

植物空间转录组分析2:STEEL+Seurat - 简书 (jianshu.com)

植物空间转录组分析 3:hdWGCNA - 简书 (jianshu.com)

本文将继续使用兰花空间转录组的数据,同时运用文献中提到的STEEL聚类方法进行分析,该方法也是由戚继团队开发的,看文章感觉聚类效果不错。
不知道抽什么风,图片加载不出来,大家去博客看吧


聚类比较

目前该文章还未被接收,大家可以先用下软件,主要能提供聚类信息和每个聚类的marker基因,但个人认为可视化方面还有所欠缺,所以这个教程将结合STEEL的聚类方法与Seurat的可视化函数来完整复现文章的聚类图和拟时图

1. STEEL聚类分析

软件下载STEEL (sourceforge.io)
使用说明

image.png

主要的参数就是--beads --genes --pca --group

 ./steel filtered_feature_bc_matrix  spatial/tissue_positions_list.csv --pca=20  pca20out

输出结果

steel

genes文件里面包含的就是聚类特异基因,map文件就是聚类信息,我们使用pca20out.map.40的聚类信息进行后续的分析

3. Seurat聚类图

使用Seurat读取原始的数据,并将STEEL聚类信息读入

library(Seurat)
library(dplyr)
library(ggplot2)
library(magrittr)
library(cowplot)
library(gtools)
library(stringr)
library(Matrix)
library(tidyverse)
library(patchwork)
orc1<- Load10X_Spatial("Slide_1")
## 直接导入STEEL的聚类信息
STEEL<- read.delim("STEEL/Slide1.map.40",row.names = 1)
orc1[["seurat_clusters"]] <- NA

clusters<-data.frame(STEEL$Cluster)
rownames(clusters) <- rownames(STEEL)
orc1[["seurat_clusters"]][rownames(clusters),] <- clusters
## 去除NA值只保留有聚类的
orc1_new <- orc1[,rownames(clusters)]
Idents(orc1_new) <- 'seurat_clusters'
Idents(orc1_new) <- factor(Idents(orc1_new),levels=mixedsort(levels(Idents(orc1_new))))

接下来就是利用SpatialDimPlot绘制聚类图了

orc1_new <- SCTransform(orc1_new, assay = "Spatial", return.only.var.genes = FALSE, verbose = FALSE)
orc1_new <- RunPCA(orc1_new, features = VariableFeatures(orc1_new)) 
orc1_new <- RunTSNE(orc1_new, dims = 1:20)
p1 <- DimPlot(orc1_new, reduction = "tsne", label = TRUE)
p2 <- SpatialDimPlot(orc1_new, group.by = "seurat_clusters",label.size = 3, pt.size.factor = 1.3)
pearplot <- plot_grid(p1,p2)
ggsave("STEEL/tsne_Slide1_40.pdf", plot = pearplot, width = 6, height = 6)
聚类信息

这个结果其实已经和原文一模一样了,就是颜色不对应


原文

单看某个聚类对应关系,完全一致

p1<- SpatialDimPlot(orc1_new, cells.highlight = CellsByIdentities(object = orc1_new, idents = c(1:40)), facet.highlight = TRUE, ncol = 5)
ggsave("STEEL/cluster_Slide1all.pdf", plot = p1, width = 19, height = 12)
聚类对应

对应好聚类关系接下就是拟时分析了

4. 拟时分析

在文章中做了两次拟时分析,本次分析只以Fig2的组织进行分析,其他的大家也可以自尝试

library(monocle)
subdata <- subset(orc1_new, idents = c(19,21,37,38,39,40))

#选择要分析的亚群
expression_matrix = subdata@assays$Spatial@counts
cell_metadata <- data.frame(group = subdata[['orig.ident']],clusters = Idents(subdata))
gene_annotation <- data.frame(gene_short_name = rownames(expression_matrix), stringsAsFactors = F) 
rownames(gene_annotation) <- rownames(expression_matrix)
pd <- new("AnnotatedDataFrame", data = cell_metadata)
fd <- new("AnnotatedDataFrame", data = gene_annotation)
HSMM <- newCellDataSet(expression_matrix,
                       phenoData = pd,
                       featureData = fd,
                       expressionFamily=negbinomial.size())
HSMM <- detectGenes(HSMM,min_expr = 0.1)
HSMM_myo <- estimateSizeFactors(HSMM)
HSMM_myo <- estimateDispersions(HSMM_myo)
disp_table <- dispersionTable(HSMM_myo)
disp.genes <- subset(disp_table, mean_expression >= 0.1 )
disp.genes <- as.character(disp.genes$gene_id)

HSMM_myo <- reduceDimension(HSMM_myo, max_components = 2, method = 'DDRTree')

HSMM_myo <-orderCells(HSMM_myo,reverse = T)
#State轨迹分布图
plot1 <- plot_cell_trajectory(HSMM_myo, color_by = "State")
##Cluster轨迹分布图
plot2 <- plot_cell_trajectory(HSMM_myo, color_by = "clusters")
##Pseudotime轨迹图
plot3 <- plot_cell_trajectory(HSMM_myo, color_by = "Pseudotime")
plotc <- plot1|plot2|plot3
ggsave("STEEL/Combination1.pdf", plot = plotc, width = 18, height = 6.2)

#绘制拟时间
cell_Pseudotime <- data.frame(pData(HSMM_myo)$Pseudotime)
rownames(cell_Pseudotime) <- rownames(cell_metadata) 
#把拟时间对应到到组织切片位置上
orc1_new[['Pseudotime']] <- NA
orc1_new[['Pseudotime']][rownames(cell_Pseudotime),] <- cell_Pseudotime
p1 <- SpatialFeaturePlot(orc1_new, features = c("Pseudotime"),pt.size.factor = 1.3)
ggsave("STEEL/pseudotime_feature1.pdf", plot = p1, width = 8, height = 9)

主要的亮点就在于可以把拟时结果体现在我们的组织切片上,这样我们在orderCells这一步可以更加方便的判断每个spot的拟时间

拟时间结果

正文结果

体现在切片上

可以看到和文章里的是一模一样的,接下来就是复现文章中的基因拟时分布和BEAM结果

data_subset <- HSMM_myo['PAXXG054350',]
p1<-plot_genes_in_pseudotime(data_subset, color_by = "clusters")

data_subset <- HSMM_myo['PAXXG051950',]
p2<-plot_genes_in_pseudotime(data_subset, color_by = "clusters")

data_subset <- HSMM_myo['PAXXG086750',]
p3<-plot_genes_in_pseudotime(data_subset, color_by = "clusters")

data_subset <- HSMM_myo['PAXXG345890',]
p4<-plot_genes_in_pseudotime(data_subset, color_by = "clusters")

data_subset <- HSMM_myo['PAXXG010560',]
p5<-plot_genes_in_pseudotime(data_subset, color_by = "clusters")

data_subset <- HSMM_myo['PAXXG074500',]
p6<-plot_genes_in_pseudotime(data_subset, color_by = "clusters") #color_by可以换成state或者pseudotime
pearplot <- plot_grid(p1,p2,p3,p4,p5,p6,align = "v",axis = "b",ncol = 1)
ggsave("STEEL/gene_pseudotime1.pdf", plot = pearplot, width = 5, height = 15)

#拟时相关基因聚类热图   
disp_table <- dispersionTable(HSMM_myo)
disp.genes <- subset(disp_table, mean_expression >= 0.5&dispersion_empirical >= 1*dispersion_fit)
disp.genes <- as.character(disp.genes$gene_id)
mycds_sub <- HSMM_myo[disp.genes,]
diff_test <- differentialGeneTest(HSMM_myo[disp.genes,], cores = 4, 
                                  fullModelFormulaStr = "~sm.ns(Pseudotime)")
sig_gene_names <- row.names(subset(diff_test, qval < 1e-04))
p2 = plot_pseudotime_heatmap(HSMM_myo[sig_gene_names,], num_clusters=6,
                             show_rownames=F, return_heatmap=T)
ggsave("STEEL/pseudotime_heatmap1.pdf", plot = p2, width = 5, height = 10)
## BEAM分析
my_pseudotime_de <- differentialGeneTest(HSMM_myo, cores = 5)

BEAM_res <- BEAM(HSMM_myo, branch_point = 1, cores = 4)

BEAM_res <- BEAM_res[order(BEAM_res$qval),]
BEAM_res <- BEAM_res[,c("gene_short_name", "pval", "qval")]

mycds_sub_beam <- HSMM_myo[row.names(subset(BEAM_res, qval < 1e-4)),]
pdf("STEEL/BEAM1.pdf", width = 8, height = 12)
plot_genes_branched_heatmap(mycds_sub_beam, branch_point = 1, num_clusters = 6, cores = 4,show_rownames = FALSE)
dev.off()

可以看到BEAM不太相同,但除了这个以外其他的都是完全一致,这次分析达到了文章中的效果,比较满意

pseudotime

BEAM

总结

目前植物空间转录组刚刚起步,相信今年会有很多文章出现,到时候主要就是看创新点在哪,能解决什么问题

转载请注明>>>周小钊的博客, 打赏推荐博客

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

推荐阅读更多精彩内容