hello,大家好,今天给大家带来一个新的内容,针对10X空间转录组的降噪和imputation分析,这两部分的分析内容大家在10X单细胞的分析上应该是经常用到的,大家可以找一找我的公开课,专门讲过这一部分的内容。
针对10X空间转录组的降噪分析,其实跟单细胞差别还是很大的,我们需要借鉴文献的思路,主要的参考文献在SPCS: A Spatial and Pattern Combined Smoothing Method of Spatial Transcriptomic Expression,我们先分享文献,最后看看示例代码,其中主要关注针对10X空间转录组的分析特点。
Abstract
最近开发的空间转录组学 (ST) 技术使以高通量方式查看空间转录异质性成为可能。它基于高度多路复用的序列分析,并使用条形码将测序读数拆分为相应的组织位置。然而,这种类型的测序技术在数据中存在高噪声和丢失事件(基本上高通量的技术都有这个问题),这使得在执行下游分析之前进行平滑(smooth)是必要的步骤。在类似的单细胞 RNA 测序 (scRNA-seq) 数据中使用的传统平滑方法是单因素方法,只能利用转录组空间(这个空间值得表达值的距离空间)中的关联。由于它们没有考虑欧几里得空间中的关联,即 ST 载玻片上的组织位置距离,这些单因素方法无法充分利用 ST 数据中的所有知识。在这项研究中,作者(中国人哈)提出了一种新的双因子平滑技术,空间和模式组合平滑 (SPCS),它采用 k 最近邻技术来利用来自 ST 数据的转录组和欧几里得空间的关联。通过对来自胰腺导管腺癌 (PDAC) 的 10 个 ST 载玻片执行 SPCS,平滑的 ST 载玻片比通过预先存在的单因子平滑方法平滑的载玻片具有更好的可分离性、分区精度和生物可解释性。
Introduction
肿瘤和器官组织具有高度异质性,在整个组织中分布着不同的表型。 直到最近,还必须使用组织学图像分析或使用 scRNA-seq 来评估这种组织异质性。 组织学成像提供了空间组织异质性的视图,而 scRNA-seq 提供了对转录异质性的洞察。 免疫组织化学 (IHC) 标记的组织学载玻片等方法还允许研究人员查看组织图像中的蛋白质。 然而,IHC 一次只能捕获一种或几种蛋白质的蛋白质表达水平。 这些技术缺乏以高通量方式在空间上观察转录异质性的能力。
Fortunately,可以广泛归类为空间转录组学 (ST) 的革命性新技术最近已经可用,可以测量组织中不同位置的转录组谱。这些技术在理解肿瘤异质性和脑组织异质性方面已经非常有用。近年来,对这种新的 ST 技术的研究一直是prolific——2017 年 PubMed上只有五篇文章提到了“空间转录组学”,但到 2020 年有总共有 70 篇文章,是三年前的 14 倍。然而,ST 技术仍在大量方法学上进行研究,以改进空间转录组分析中使用的文库制备、测序技术和生物信息学分析pipeline。相比之下,scRNA-seq 分析现在已经在很大程度上建立了标准的实践protocols,因此实验之间的数据预处理和初始生物信息学分析是一致的。一旦 ST 技术确立了标准protocols,如单细胞技术,那么它们将广泛用于任何数量的疾病和正常组织。
迄今为止最常见的 ST 数据形式,与现在广泛丰富的 scRNA-seq 数据非常相似,基于highly multiplexed sequence analysis,其中使用条形码将测序读数分类到各自的细胞或组织位置。这种类型的测序在数据中受到广泛的噪声和丢失事件的影响,这些已经在 scRNA-seq 方法中得到了很好的研究。在基于条形码的单细胞数据中,由于测序过程中引入的噪声,单细胞的表达谱本身并不能完全代表该细胞的真实潜在 RNA 丰度。 Smart-seq2 和 CEL-seq2 等技术可为每个细胞提供更具代表性的表达谱,但这些技术的通量要低得多,导致细胞数量更少。As a result, a multitude of techniques have been developed to impute the missing expression values and smooth the noise that come directly from the barcode-based scRNA-seq.These techniques help to smooth the data by using similar cells to correct for technical errors in the sequencing data. 具体而言,转录组空间中的相关基因组和相对细胞相似性被用于估算丢失事件并通过机器学习技术消除其他类型的表达错误。其中一些工具包括 SAVER 和 MAGIC。应用时,处理后的表达值比原始读数计数更准确地表示真实的潜在 RNA 丰度。
由于大多数当前 ST 数据也是通过基于条形码的技术生成的,因此 ST 数据也遭受类似的噪声和丢失事件也就不足为奇了。 这意味着组织中基因表达的分布并不总是遵循高分辨率组织病理学图像中的相应表型差异。 对于drop-out events,可以假设零表达值有一些可能只是由于偶然而在读取中被虚假遗漏的可能性。 然而,与 scRNA-seq 不同,ST 数据不仅在转录组空间上具有相对相似性,而且在组织载玻片上的欧几里得空间中也具有相对相似性。 这意味着 ST 阵列中彼此相邻的位置可能是相似的组织,因此具有相似的转录组谱。 此外,如果 ST 阵列中的两个位置共享它们的大部分转录组谱,那么它们的转录差异可以部分解释为 drop-out。(这个分析之前一致有人研究过,是很好的分析点)。
在这里,作者提出了一种新的双因素 ST 平滑方法,该方法利用了转录组空间(表达模式知识)和欧几里德空间(空间知识)中空间位置的关联。 这与先前仅利用转录组空间中的关联的单因素 scRNA-seq 技术形成对比。 研究表明,通过使用给定 ST 点的空间位置及其转录组谱,我们可以更好地平滑数据,使其更好地代表组织中真实的潜在 RNA 丰度。
Method(关注一下重点部分)
Spatial and Pattern Combined Smoothing (SPCS) of Spatial Transcriptomic Expression
对于 ST 载玻片上的每个点,不仅存在基因表达,而且存在它们的空间位置。 这意味着我们可以基于 ST 载玻片上的表达模式和空间位置,使用与其他点的相对相似性来提高每个特定点内表达值的质量。 为了实现这个目标,我们提出了一种基于 KNN 的方法,空间和模式组合平滑 (SPCS),来执行平滑。
Pattern neighborhood
ST 数据是一种转录组数据,这意味着它包括类似于 scRNA-seq 的表达模式。 像一些 scRNA-seq 数据一样,细胞可以定位到组织的起源位置,具有相似表达模式的点更有可能属于组织中的同一区域。 因此,用相似表达点的表达来平滑一个点的表达可以提高数据质量,这在传统的单因素平滑方法中很常见。 基于点的“模式”表达的一组最相似的点可以定义为该点的“模式邻域”。 在这里,我们提供了 SPCS 方法使用的模式邻域的明确定义。
Spatial neighborhood
与 scRNA-seq 数据相比,ST 数据可以为幻灯片中的每个点提供空间位置。 组织病理学载玻片上邻近的区域通常是相同的组织类型。 除了斑点之间的模式关联,我们还可以使用空间关联来平滑表达作为第二个因素。 我们将空间上靠近给定点的一组点命名为该点的“空间邻域”,其定义如下。
Contribution of neighbors on smoothing
空间或模式邻域中的不同邻居将对给定点的平滑产生不同的影响,将其称为“贡献”。 由于空间和模式距离的定义不同,我们以不同的方式对相应的贡献进行建模。 空间和模式邻居的贡献仍然具有可比性,因为两者的范围是。 对于目标点邻域(空间和模式)之外的点,我们将它们对应的贡献赋值为 0,这意味着它们对目标点的平滑没有贡献。
Performance evaluation
为了评估我们提出的 SPCS 方法的有效性,我们首先在 PDAC ST 数据集上执行了 SPCS 和其他单因子平滑方法(SAVER 和 MAGIC)。然后我们使用 K-medoid 聚类方法对平滑后的 ST 幻灯片和原始未平滑幻灯片进行了划分,并通过对无监督聚类的内部和外部评估来判断多种平滑方法的有效性。内部验证是指聚类可以分离的程度,而外部评估是指聚类与来自相应图像的组织病理学标签的匹配程度。作为基因过滤器,我们在分析中只保留了少于 70% 的零表达点的基因。对于标准化,我们在使用 SPCS、SAVER 和 MAGIC 进行平滑之前执行了每百万对数计数 (CPM) 标准化。聚类过程中使用的距离度量是 Pearson 相关距离,如等式中所述。因为有四个组织病理学标签,我们将每个载玻片的点聚集成四个集群。在聚类之前进行PCA,然后我们选择特征值大于1的特征向量来减少表达矩阵的维数并增强聚类结果。
Internal evaluation
External evaluation
对于外部评估,我们获得了 ST 点的组织病理学标签,其中包括四种不同的标签:癌症区域、胰腺组织、导管上皮和基质。 在聚类水平和基因表达水平上评估平滑载玻片和组织病理学标签之间的对应关系。
Results
在这项工作中,应用了我们的双因素平滑方法 SPCS 和两种最先进的单因素平滑方法(MAGIC 和 SAVER)来平滑十张 PDAC ST 幻灯片。 为了比较不同平滑方法的性能,我们在对平滑和未平滑的表达进行 K-Medoids 无监督聚类后评估了生成集群的质量。 生成的cluster和标记基因表达的分布与预先标记的组织病理学分区进行比较,以检查平滑的表达是否更准确地反映了相应图像的病理特征。 此外,根据标记基因 TM4SF1 表达水平在不同区域鉴定了 DEG,并进行了 GOEA 以揭示平滑所揭示的生物学意义。
Internal Evaluation
轮廓分数表示幻灯片中聚类之间的平均距离。 对于不同的平滑方法,较大的轮廓分数通常表示平滑后的表情具有更好的可分离性。 在将斑点聚类为四个cluster后,我们计算了下图中每种平滑方法的十张幻灯片的轮廓分数。
- 注:The average silhouette score of ten PDAC ST slides without smoothing and with smoothing by different methods (MAGIC, SAVER and SPCS). Silhouette plot of unsmoothed and different method smoothed
作者新提出的 SPCS 方法在十分之六的幻灯片中优于其他平滑方法,并且在其他四张幻灯片中至少排名第二,表明 SPCS 平滑 ST 点具有更好的可分离性。 然而,由于数据质量不佳和组织结构不规则,执行我们测试的任何平滑方法都会降低两张幻灯片(即 PDACA3 和 PDACG)中 ST 点的可分离性。 这表明平滑通常会提高数据质量,尽管原始 ST 数据和底层组织结构的质量可能会影响平滑的效用。
作为 PDACA1 的一个例子,很明显平滑改善了轮廓分数(下图)
- 注: Clusters are arranged in descending order of size. Red dashed lines in each figure represent silhouette score of whole smoothed (or unsmoothed) expressions.
不同的平滑方法不同程度地提高了原始spot的可分离性。 在这种情况下,MAGIC只是适度改变了轮廓宽度的分布,对提高可分离性影响不大。 或者,其他两种方法在轮廓宽度分布方面提供了显著改善,并且在spot可分离性方面提供了更多改善。 由于存在较少数量的假聚集点,SPCS 平滑的表达得到最高的轮廓分数。 该结果表明,我们提出的 SPCS 平滑方法可以提供比现有平滑方法更好的可分离性。 我没有看到这个评估中涉及到 PCC 距离,但是在方法中提到了它。
External Evaluation
在外部评估中,基于无监督聚类与组织病理学标签的一致性来评估不同的平滑方法。 PDACA1 的结果如下图所示,因为组织病理学标记可用于 PDACA1。 从下图 中,我们观察到,与原始 ST 数据相比,平滑方法确实增加了由 ST 数据定义的cluster与组织病理学载玻片上 ST 点的原始标签之间的一致性。 此外,与两种现有的平滑方法相比,SPCS 平滑数据的聚类结果显示出与组织病理学标签的更高相关性,如 ARI 所示。
- 注:Influence of smoothing on clustering accuracy. (a) displays original ST slide of PDACA1 and its histopathological partitions, (b) illustrates results of K-Medoids clustering on expression smoothed by different methods. ARI score, which reflecting correlation between clusters and histopathological labels, is marked at bottom-right corner of each figure. Heatmap of smoothed expressions of two marker genes, (c) PRSS1 and (d) TM4SF1, are also shown. For demonstration purposes, expressions of genes are linear transformed into range of 0 to 1 as normalization.
在详细检查结果时,上图(b)显示,即使没有对 ST 数据进行平滑处理,癌细胞和结缔组织形成区域中的大多数 ST 点也可以与其他簇分离,但未能将导管上皮、间质和正常胰腺组织区域进行区分。 与此类似,MAGIC 也未能将这三个不同的组织病理学区域分开。 SPCS 和 SAVER 产生的结果可以分离导管上皮区域中的大多数 ST 点,间质和正常胰腺组织区域略有混合。 与 SAVER 相比,SPCS 产生了更清晰的边界,将位于正常胰腺组织内的间质分隔开,并由更高的 ARI 评分反映出来。
上图(c, d) 显示了不同平滑方法对两个标记基因表达的影响。 与其他平滑方法相比,SPCS 在不同的组织病理学区域之间产生了更好的标记基因对比度,这是由于 1) 通过执行平滑,标记基因表达显示出更少的丢失和更好地反映不同组织区域的表达模式与 SAVER 和 SPCS (MAGIC 不计算缺失的表达式); 2) 与 SAVER 相比,SPCS 估算缺失值并保持非缺失值的分布不变。 SPCS 的所有这些特性都有助于 SPCS 获得更高的 ARI 分数。
Biological Analysis
为了从生物学上验证 ST 平滑方法,比较了不同方法之间平滑结果的生物学可解释性。 当比较 TM4SF1 过表达和表达不足的区域时,显着的 DEG 数字显示在下图中。
- 注:Number of DEGs identified in each slide
在 PDACB2 和 PDACG 的任何平滑或未平滑的载玻片中都没有发现 DEG,而 SPCS 在其余八张 ST 载玻片中的六张中检测到更多的 DEG。 相应地,SPCS 中丰富的 GO terms数量也多于其他方法,如下图所示,下面将对其进行进一步检查。
- 注:the number of GO terms found from GOEA in each slide.
对于每种算法,在幻灯片 PDACA1 中发现的前十个最重要的 GO terms显示在图 (c) 中,用于上调的 DEG,图 (d) 中显示了用于下调的 DEG。 在不平滑载玻片的情况下,确定的上调 DEG 与白细胞介素 1 相关。 相反,SPCS 平滑发现的terms主要与细胞粘附、细胞外基质 (ECM) 组织和 MET 激活 PTK2 信号传导有关。 除 PDACB1 外,所有 SPCS 载玻片的上调富集terms与 PDACA1 相似。 其他方法的结果有少量似乎与 PDAC 无关的terms,除了载玻片 PDACF 包含细胞粘附和 ECM terms,用于无平滑和 MAGIC。
下调的 DEG 的丰富 GO terms(图 (d))显示了不同的情况。 在没有平滑的情况下,确定了与消化以及感染和自身免疫相关途径和补体级联成分(C3、C5)相关的 GO terms。 使用 SAVER 也可以看到与消化相关的 GO terms。 进行平滑后,我们发现更多与 ECM 相关的 GO terms、更多的补体结合以及细胞凋亡调节,但不存在感染和自身免疫相关通路。 应用 MAGIC 和 SPCS 还有助于找到其他补体级联成分,如 C1q 复合物结合。
上图 (e) 包含从先前在 PDAC 中报告的上调 DEG 的 SPCS 平滑数据中丰富的terms。 这些terms,例如细胞粘附、钙粘蛋白结合、PI3K-Akt 信号通路和粘着斑,都在来自 SPCS 平滑数据的 DEG 中显着富集(尽管不在前十名富集项中),但在未平滑数据中却没有, 通过执行我们新颖的 SPCS 平滑方法来反映生物可解释性的增强。
Discussion
Importance of smoothing on ST data
ST 数据基于highly multiplexed sequence analysis,其中使用条形码将测序读数分成各自的组织位置。然而,这种类型的排序会受到高噪声和丢失事件的影响。为了保持足够的基因进行生物分析,我们设置了一个宽松的过滤阈值(小于 70% 的零表达点)以在预处理步骤中过滤掉未表达的基因。即使有这个相当宽松的阈值,PDACA1 幻灯片中的 19738 个基因中也只剩下 485 个(2.5%),这表明 ST 数据集中的drop-out事件非常频繁。通过执行平滑方法,在一定程度上控制了缺失和噪声的表达值,从而大大提高了区域划分和下游分析。因此,平滑是分析 ST 数据的重要且必要的步骤
SPCS Improves Data Quality
与未平滑数据相比,平滑步骤提高了数据质量。 已经证明了各种平滑算法提高了 ST 点的可分离性和分割精度。 此外,通过进行内部和外部评估,我们确认与现有的两种单因素平滑方法 MAGIC 和 SAVER 相比,SPCS 平滑数据在两个方面都显示出更好的质量。 对于内部评估,从分析结果来看,SPCS 平滑方法比 MAGIC 和 SAVER 产生更高的轮廓分数和更低的错误聚类率,这意味着 SPCS 平滑的 ST 数据具有更好的可分离性。
我们的外部评估验证了平滑数据的分区准确性。 载玻片分区的一个主要目标是识别载玻片中的不同组织病理学区域。 因此,我们使用 ARI 测量了平滑数据上的无监督聚类与组织病理学分区之间的重叠程度。 由于同一组织病理学区域中的点通常是相连的,因此结合空间知识有望提高分区精度。 事实上,正如预期的那样,结果显示 SPCS 方法比现有的单因素方法产生更高的 ARI 分数,这意味着可以通过执行双因素 SPCS 方法获得更准确的组织病理学分区。 从标记基因分析来看,SPCS方法恢复了辍学事件并增强了相应区域中标记基因的表达。 该证据证明 SPCS 可以提高 ST 点分区的准确性。
SPCS Enhances Biological Interpretability
Determination of SPCS parameters
Conclusion
由于基于条形码的测序技术的局限性导致转录组学数据中的噪声和高丢失,平滑已成为对 ST 数据进行下游分析之前必不可少的数据处理步骤。在本文中,我们提出了一种新的双因子 ST 数据平滑方法 SPCS,它可以充分利用 ST 数据中包含的表达模式和空间模式。 与传统的单因子平滑方法相比,我们证明了 SPCS可以更好地恢复 ST 数据中缺失或错误的表达,提高可分离性、分区精度和生物学可解释性。这反映了我们提出的 SPCS 方法可以有效提高 ST 的数据质量,有助于获得更准确和更有意义的下游分析结果。 SPCS 平滑是最先进的 ST 平滑算法,对产生 ST 数据的多种疾病具有影响。
示例代码
Tutorial for SPCS
空间和模式组合平滑 (SPCS) 是一种新颖的双因素平滑技术,它采用 k 最近邻技术来利用来自空间转录组 (ST) 数据的转录组和欧几里得空间的关联。
Before the smoothing
Before performing the smoothing, we have to introduce the dependent packages and example data we will use.
Example Data
Data we used is PDACA1 slide in (Moncada R, et.al 2020). There are two tables, data table and coordinate table, for each slide. Data table is a matrix that each column is representing a spot and each row representing a gene, while coordinate table including spatial coordinate for each spot. We also provided histopathlogical labels as a reference.
data<-read.csv(file = "PDACA1.txt", sep=",")
coord<-read.csv(file = "PDACA1_coord.txt", sep="," )
data[1:10,1:7]
## ST1 ST2 ST3 ST4 ST5 ST6 ST7
## A1BG 0 0 0 0 0 0 0
## A1CF 0 0 0 0 0 0 0
## A2M 13 0 4 0 0 0 9
## A2ML1 0 0 0 0 0 0 0
## A3GALT2 0 0 0 0 0 0 0
## A4GALT 1 0 0 0 0 0 0
## A4GNT 0 0 1 0 0 0 0
## AAAS 0 0 0 0 0 0 0
## AACS 0 0 0 0 0 0 0
## AADAC 0 0 0 0 0 0 0
coord[1:7,]
## coord1 coord2
## ST1 10 10
## ST2 10 13
## ST3 10 14
## ST4 10 15
## ST5 10 16
## ST6 10 17
## ST7 10 19
Since ST expression is extremely sparse, we have to do gene filtering on expression data. In this project, we only kept genes with less than 70% zero expressed spots in our analysis. We also perform Count Per Million (CPM) normalization and logarithm transformation as all ST RNA-seq based analysis will do.
gene.zero.cutoff = 0.7
gene.var.cutoff = 0.0
filtered.genes <- selectGenes(data, gene.zero.cutoff, gene.var.cutoff)
data <- filtered.genes$data
coord <- coord[colnames(data),]
data <- NormalizeLibrarySize(data)
data <- log2(data+1)
data[1:10,1:7]
## ST1 ST2 ST3 ST4 ST5 ST6 ST7
## ABCC3 5.240812 4.519153 4.730248 0.000000 0.000000 0.000000 2.551839
## AC004556.1 0.000000 0.000000 0.000000 0.000000 0.000000 3.883147 2.551839
## ACADVL 3.822477 5.082989 3.783602 6.348425 0.000000 3.883147 5.318697
## ACTB 6.800112 6.280852 6.688896 8.036555 6.805612 4.833412 7.198832
## ACTG1 6.169857 0.000000 0.000000 4.400587 4.534370 6.794952 5.318697
## ACTN1 4.068414 0.000000 3.783602 5.366023 4.534370 4.833412 3.423259
## ACTN4 3.822477 5.082989 6.019190 7.148172 6.805612 6.794952 3.962682
## ADAR 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
## AEBP1 5.942012 0.000000 5.296978 0.000000 0.000000 0.000000 4.915659
## AES 4.068414 4.519153 3.783602 5.366023 0.000000 0.000000 5.318697
Performing SPCS Smoothing
SPCS smooths the ST expression date using both spatial position and expression pattern information. There are 4 hyper-parameters in the equation above, we determine them as followings:
tau.p=16
tau.s=2
alpha=0.6
beta=0.4
Hence, there are two steps before get the smoothed expression: finding neighbors and calculating smoothed expression.
Finding neighbors
For pattern neighbors, we first transform the expression of spots into a 10-dimensional principal component (PC) space (i.e. pattern space)and then select nearest neighbor spots as pattern neighbors for each spot. Last, for each neighbor of object spot, calculating its pattern contribution to the object spot.
For spatial neighbors, we can calculate their contributions according to its spatial coordinates.
To speed up the neighborhood detection step, we employed doParallel package as parallel calculating engine. The number of threads used to find neighbors is set to 8 in default and can be set according to the number of CPU cores.
nThreads=8
data.mat<-Matrix(as.matrix(data))
rpca.res <- calcRandPCA(t(data.mat))
pdist.mat <- calcPDist(rpca.res)
rmat <- calcPContribution(pdist.mat)
positions <- coord
colnames(positions) <- c("st.x","st.y")
positions$barcodes <- rownames(positions)
p.neighbors <- findPNeighbors(rmat, positions, tau.p, nThreads)
s.neighbors <- findSNeighbors(positions, tau.s, nThreads)
Calculating smoothed expression
After obatined all the pattern and spatial neighbors for each spot, we can calculate smoothed expression using the equation we provided.
data.combinedsmooth <- getCSmoothedExp(data.mat, s.neighbors, p.neighbors, alpha, beta, nThreads)
data.combinedsmooth <- as.data.frame(as.matrix(data.combinedsmooth))
One-step SPCS smoothing
For ease of use, we further provided an one-step smoothing function:
nThreads=8
data.combinedsmooth <- SPCS(data, coord, tau.p, tau.s, alpha, beta, nThreads)
data.combinedsmooth[1:10,1:7]
## ST1 ST2 ST3 ST4 ST5 ST6 ST7
## ABCC3 2.5779190 3.9695155 3.8595167 1.3628916 1.2578928 1.9193818 2.981912
## AC004556.1 0.9148087 0.7979809 0.6368954 0.2624510 0.3813050 2.3590790 2.056393
## ACADVL 3.0153712 4.0926595 3.5918232 4.0227667 1.4830451 3.5395401 4.188449
## ACTB 6.9431678 6.4961383 6.6606753 6.8408532 6.1897022 6.0293188 6.776505
## ACTG1 4.6120628 2.2392488 2.1856797 3.4641784 3.2047171 4.9142529 4.982735
## ACTN1 3.3222626 1.1208215 3.0313268 3.2411354 2.8409670 3.7509756 3.156533
## ACTN4 2.9270816 4.2051710 5.1258645 5.6093018 4.7290141 4.5223957 4.393630
## ADAR 0.9933134 1.3720080 0.9272210 0.3628613 0.3888164 0.9838539 1.536320
## AEBP1 4.7695336 1.4467837 3.4597273 2.0850280 1.2248232 1.0053940 3.093675
## AES 3.8656010 3.4119207 3.1890870 3.5477942 1.0710624 1.5261867 3.681295
Draw Expression heatmaps
To visualize the result of smoothing, we can draw heatmap of specific gene expression. We show the heatmap of an important oncogene TM4SF1 for example. To make heatmap of different genes comparable, expression of genes first linearly transformed into [0,1] by dividing each value by the maximum expression value.
gene<-"TM4SF1"
barcodes<-colnames(data.combinedsmooth)
data.norm<-as.data.frame(t(data.combinedsmooth)) %>% select(gene)
data.norm<-sweep(data.norm,2,apply(data.norm, 2, max),"/")
data.norm<-data.norm %>% mutate(barcode=barcodes)
coord.heatmap<-coord %>% mutate(barcode=rownames(coord))
data.using<-inner_join(x=coord.heatmap, y=data.norm, copy=T)
ggplot(data.using, aes(coord1, coord2, fill=!!sym(gene))) + ggtitle(gene) +
geom_tile() + coord_equal() +
scale_fill_viridis_c() +
theme_bw()+
theme(legend.position="bottom", plot.title=element_text(hjust = 0.5),
panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
axis.ticks = element_blank(),axis.text = element_blank(),axis.title = element_blank())
示例代码在SPCS
生活很好,有你更好