本插图演示了在空间基因表达研究中使用SpatialDecon包来估计细胞丰度。
我们将分析一个来自肺部肿瘤的小型GeoMx数据集,寻找丰富的不同免疫细胞类型。这个数据集有30个roi。在每个ROI中,分别对肿瘤和微环境部分进行了分析。
首先,我们加载包:
现在让我们加载示例数据并检查它:
数据(“mini_geomx_dataset”)规范=mini_geomx_dataset$归一化生=mini_geomx_dataset$生annot =mini_geomx_dataset$annot昏暗的(原始)#> [1] 545 30头(annot)#> ROI AOI.name x y核# > ICP20th.L11.ICPKilo.ROI10.TME。B09 roi10 tme 5400 8000 879# > ICP20th.L11.ICPKilo.ROI10.Tumor。B08 ROI10肿瘤5400 8000 555# > ICP20th.L11.ICPKilo.ROI11.TME。B11 roi11 tme 6000 8000 631# > ICP20th.L11.ICPKilo.ROI11.Tumor。B10 ROI11肿瘤6000 8000 569# > ICP20th.L11.ICPKilo.ROI12.TME.C01ROI12 TME 6600 8000 703# > ICP20th.L11.ICPKilo.ROI12.Tumor。B12 ROI12肿瘤6600 8000 667生(seq_len(5),seq_len(5)]# > ICP20th.L11.ICPKilo.ROI10.TME。B09 ICP20th.L11.ICPKilo.ROI10.Tumor.B08#> a2m 76 20#> abcb1 9 15#> acp5 115#> adam12 12 12#> adora3 14# > ICP20th.L11.ICPKilo.ROI11.TME。B11 ICP20th.L11.ICPKilo.ROI11.Tumor.B10#> a2m 104 22#> abcb1 7 10#> acp5 176 56#> adam12 10 11#> adora3 10 13# > ICP20th.L11.ICPKilo.ROI12.TME.C01#> a2m#> abcb1#> acp5 120#> adam12#> adora3 11#更好的段名:colnames(规范)=colnames(生)=rownames(annot) =paste0(annot$ROI, annot$AOI.name)
spatialdecon函数接受3个表达式数据参数:
我们从对应的观察中估计出每个数据点的预期背景:
#使用NegProbe来估计每个观测背景per.observation.mean.neg =规范(“NegProbe”,)#并定义一个背景矩阵,其中每一列(观测值)都是#每个观测背景的适当值:bg =扫描(标准*0,2per.observation.mean.neg,“+”)昏暗的(bg)#> [1] 545 30
背景估计注意:在有两个探针集的研究中,来自每个探针集的基因将有不同的背景值,以上代码应使用对应的NegProbe值分别为每个探针集运行。或者," derive_GeoMx_background "可以自动完成:
“细胞轮廓矩阵”是一个预先定义的矩阵,它指定了实验中每种细胞类型的预期表达轮廓。SpatialDecon库附带了一个这样的矩阵,即“SafeTME”矩阵,用于估计肿瘤微环境中的免疫细胞和基质细胞。(这种基质的设计是为了避免癌细胞通常表达的基因;详情请参阅SpatialDecon手稿。)
让我们看一下safeTME矩阵:
数据(“safeTME”)数据(“safeTME.matches”)signif(safeTME [seq_len(3.),seq_len(3.)),2)#>巨噬细胞肥大B.naive#> a2m 0.8500 0.044 0.0043#> abcb1 0.0021 0.023 0.0250#> abcb4 0.0044 0.000 0.2200的热图(扫描(safeTME1,应用(safeTME1max),“/”),labRow =NA,利润=c(10,5))
对于其他组织类型的研究,我们提供了一个细胞轮廓矩阵库,可在Github上使用“download_profile_matrix”函数下载。
有关矩阵的完整列表,请参见CellProfileLibrary GitHub Page
下面我们下载从小鼠脾脏的scRNA-seq中获得的细胞配置文件矩阵。
mousespleen < -download_profile_matrix(物种=“鼠标”,age_group =“成人”,matrixname =“Spleen_MCA”)昏暗的(mousespleen)#> [1] 11125mousespleen [1:4,1:4]# > Dendritic.cell.S100a4。高Dendritic.cell.Siglech.high#> 0610009B22Rik 0.02985075 0.0000000#> 0610010F05Rik 0.00000000 0.0000000#> 0610010K14Rik 0.02985075 0.0000000#> 0610012G03Rik 0.08955224 0.1111111#>粒细胞巨噬细胞#> 0610009B22Rik 0.00000000 0.00000000#> 0610010F05Rik 0.00000000 0.00000000#> 0610010K14Rik 0.00000000 0.03846154#> 0610012G03Rik 0.08571429 0.03846154头(cellGroups)# >美元树突“树突状细胞。s100a4。”高Dendritic.cell.Siglech.high”# ># >美元粒细胞#>[1]“粒细胞”# ># >美元巨噬细胞#>[1]巨噬细胞# >#> $ '边缘区域B '#> [1] " margin .zone. b.b cell"# ># >美元单核细胞>[1]“单核细胞”# ># > NK美元#>[1]“NK.cell”元数据基质组织种类菌株年龄年龄组#> 33 MCA脾小鼠C57BL/6 6-10周成年# > URL#> 33 https://pubmed.ncbi.nlm.nih.gov/29474909/# >引用33韩,X.等人。用Microwell-Seq绘制小鼠细胞图谱。Cell172, 1091 - 1107。e17(2018)。的热图(扫描(mousespleen1,应用(mousespleen1max),“/”),labRow =NA,利润=c(10,5),cexCol =0.7)
对于提供的单元格概要矩阵不充分的研究,或者如果需要特定的单个单元格数据集,我们可以使用create_profile_matrix()函数创建一个自定义的概要矩阵。
这个迷你单细胞数据集是Kinchen, J.等人的数据的一小部分。炎症性肠病中人类结肠间质的结构重塑。175号,372-386号。e17(2018)。
数据(“mini_singleCell_dataset”)mini_singleCell_dataset$mtx@昏暗的#基因x细胞#> [1] 1814 250as.matrix(mini_singleCell_dataset$mtx) (1:4,1:4]# > ACTGCTCGTAAGTTCC。S90 TGAAAGAAGGCGCTCT。S66 AGCTTGAGTTTGGGCC。S66#> plekhn1 0 0 0#> perm1 0 0 0#> C1orf159 0 0 0#> ttll10 0 0 0 0# > ACGGCCATCGTCTGAA。S66#> plekhn10#> perm1 0#> C1orf159 0#> ttll10 0头(mini_singleCell_dataset$annots)#> CellID LabeledCellType#> 2660 actgctcgtaagttcc。S90基质细胞#> 2162 tgaaagaaggcgctct。S66胶质细胞#> 368 agcttgagtttgggcc。S66内皮细胞#> 238 acggccatcgtctgaa。S66基质细胞#> 4158 tccttaacactgttag。S90基质细胞#> 2611 acgatgtgtgggttt。S90基质细胞表格(mini_singleCell_dataset$annots$LabeledCellType)# >内皮细胞胶质细胞#> 14 12周细胞浆细胞#> 3 30#>结肠间质细胞平滑肌细胞#> 1 190
周皮细胞细胞而且结肠平滑肌细胞将从这个矩阵中删除,因为低单元格数。返回一种类型的所有细胞的平均表达,因此一种类型的细胞越多,就越能反映真实的基因表达。可以使用minCellNum过滤器更改这些平均值的置信度。
custom_mtx < -create_profile_matrix(mtx =mini_singleCell_dataset$mtx,中#细胞x基因计数矩阵cellAnnots =mini_singleCell_dataset$annots,以单元格类型和单元格名称为列的# cell注释cellTypeCol =“LabeledCellType”,#包含单元格类型的列cellNameCol =“CellID”,#包含单元格ID/名称的列matrixName =“custom_mini_colon”,#最终配置文件矩阵的名称outDir =零,#输出目录的路径,如果不需要写入矩阵,则设置为NULL正常化=假,数据应该规范化吗?minCellNum =5,#创建配置文件所需的一种类型的最小单元格数量,独占minGenes =10,在一个细胞中表达的最小基因数量scalingFactor =5,#所有的值应该乘以最终矩阵discardCellTypes =真正的)#是否应该过滤细胞类型,如有丝分裂,双峰,低质量,未知等。#>[1]“创建Atlas”#>[1] "1 / 6:基质细胞"#>[1] "2 / 6:胶质细胞"#>[1] "3 / 6:内皮细胞"#>[1] "4 / 6:浆细胞"#>[1] "5 / 6:周细胞"#>在create_profile_matrix(mtx = mini_singleCell_dataset$mtx, cellAnnots = mini_singleCell_dataset$annots,:#>周细胞从基质中删除,因为根据当前的过滤阈值,它没有足够的活细胞。如果这个单元格类型是必要的,可以考虑改变minCellNum或minGenes#>[1] "6 / 6:结肠平滑肌细胞"#>在create_profile_matrix(mtx = mini_singleCell_dataset$mtx, cellAnnots = mini_singleCell_dataset$annots,:#>结肠平滑肌细胞根据目前的过滤阈值从基质中删除,因为没有足够的活细胞。如果这个单元格类型是必要的,可以考虑改变minCellNum或minGenes头(custom_mtx)基质细胞胶质细胞内皮细胞浆细胞#> plekhn1 0.0000000 0 0.0000000 0.05787067#> perm1 0.1167131 0 0.0000000 0.00000000#> C1orf159 0.0000000 0 0.0000000 0.07922668#> ttll10 0.00000000 0.1853931 0.00000000#> tas1r3 0.0000000 0 0.0000000 0.07039008#> atad3c 0.1219237 0 0.0000000 0.07922668的热图(扫描(custom_mtx1,应用(custom_mtx1max),“/”),labRow =NA,利润=c(10,5),cexCol =0.7)
只要可以将计数矩阵和单元格注释传递给函数,就可以从所有单个单元格数据类创建自定义矩阵。下面是一个使用Seurat对象创建矩阵的例子。
图书馆(SeuratObject)数据(“mini_singleCell_dataset”)rownames(mini_singleCell_dataset$annots) < -mini_singleCell_dataset$annots$CellIDseuratObject < -CreateSeuratObject(数=mini_singleCell_dataset$mtx,中元。数据=mini_singleCell_dataset$annots)鉴别(seuratObject) < -seuratObject$LabeledCellTyperm(mini_singleCell_dataset)annots < -data.frame(cbind(cellType =as.character(鉴别(seuratObject)),cellID =的名字(鉴别(seuratObject))))custom_mtx_seurat < -create_profile_matrix(mtx =seuratObject@化验$核糖核酸@计数,cellAnnots =annots,cellTypeCol =“cellType”,cellNameCol =“cellID”,matrixName =“custom_mini_colon”,outDir =零,正常化=假,minCellNum =5,minGenes =10)#>[1]“创建Atlas”#>[1] "1 / 6:基质细胞"#>[1] "2 / 6:胶质细胞"#>[1] "3 / 6:内皮细胞"#>[1] "4 / 6:浆细胞"#>[1] "5 / 6:周细胞"#>警告在create_profile_matrix(mtx = seuratObject@assays$RNA@counts, cellAnnots = annots,:#>周细胞从基质中删除,因为根据当前的过滤阈值,它没有足够的活细胞。如果这个单元格类型是必要的,可以考虑改变minCellNum或minGenes#>[1] "6 / 6:结肠平滑肌细胞"#>警告在create_profile_matrix(mtx = seuratObject@assays$RNA@counts, cellAnnots = annots,:#>结肠平滑肌细胞根据目前的过滤阈值从基质中删除,因为没有足够的活细胞。如果这个单元格类型是必要的,可以考虑改变minCellNum或minGenes头(custom_mtx_seurat)基质细胞胶质细胞内皮细胞浆细胞#> plekhn1 0.0000000 0 0.0000000 0.05787067#> perm1 0.1167131 0 0.0000000 0.00000000#> C1orf159 0.0000000 0 0.0000000 0.07922668#> ttll10 0.00000000 0.1853931 0.00000000#> tas1r3 0.0000000 0 0.0000000 0.07039008#> atad3c 0.1219237 0 0.0000000 0.07922668粘贴("custom_mtx和custom_mtx_seurat是相同的",所有(custom_mtx= =custom_mtx_seurat))#> [1] "custom_mtx和custom_mtx_seurat是相同的TRUE"
现在我们的数据可以进行反褶积了。首先,我们将展示如何在基本设置下使用spatialdecon,省略可选的附加功能。
res =spatialdecon(规范=规范,bg =bg,X =safeTME,align_genes =真正的)str(res)#> 10个#> $ beta: num[1:18, 1:30] 8.529 0.738 0.702 0.13 0.253…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ sigmas: num[1:18, 1:18, 1:30] 1.48662 -0.01016 -0.0084 -0.00902 0.00612…# > . .- attr(*, "dimnames")= 3个列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ yhat: num[1:544, 1:30] 59.59 1.68 29.7 2.35 2.15…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...# > $渣油:num[1:544, 1:30) -1.794 0.287 -0.19 -0.879 0.51……# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ p: num [1:18, 1:30] 2.65e-12 1.09e-04 4.28e-01 9.00e-01 3.66e-01…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ t: num[1:18, 1:30] 6.995 3.869 0.792 0.126 0.905…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ se: num[1:18, 1:30] 1.219 0.191 0.886 1.032 0.28…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ prop_of_all: num[1:18, 1:30] 0.40777 0.03528 0.03355 0.00622 0.01211…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ prop_of_nontumor: num[1:18, 1:30] 0.40777 0.03528 0.03355 0.00622 0.01211…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ X: num[1:544, 1:18] 0.74124 0.00185 3.09289 0.01374 0.11294…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...
我们最感兴趣的是“贝塔”,即估算细胞丰度的矩阵。
Spatialdecon除了基本的反褶积之外还有几个功能:
让我们看一个单元格匹配对象的例子:
str(safeTME.matches)#> 14人的列表#> $巨噬细胞:CHR“巨噬细胞”#> $桅杆:CHR“桅杆”#> $ B: chr [1:2] "B.naive" "B.memory"#> $ plasma: CHR“plasma”#> $ cd4.t。cells : chr [1:2] "T.CD4.naive" "T.CD4.memory"#> $ cd8.t。cells : chr [1:2] "T.CD8.naive" "T.CD8.memory"#> $ NK: chr“NK”#> $ pDC: chr "pDC "#> $ mDCs: chr "mDCs"#> $ monocyte: chr [1:2] "monocyte . c " "monocyte . nci "#> $中性粒细胞:CHR“中性粒细胞”#> $ Treg: chr“Treg”#> $内皮细胞。cells: chr "endothelial.cells"#> $ fibroblasts: CHR“成纤维细胞”
现在让我们运行spatialdecon:
#载体鉴定纯肿瘤片段:annot$istumor =(annot$AOI.name= =“肿瘤”)#运行spatialdecon和所有的铃铛和口哨:restils =spatialdecon(规范=规范,#规范化数据生=生,#原始数据,用于降低低计数观测的权重bg =bg,#预期的背景计数为规范中的每个数据点X =safeTME,# safeTME矩阵,默认使用cellmerges =safeTME.matches,# safeTME。匹配对象,默认使用cell_counts =annot$核,#细胞核计数,用于估计细胞总数is_pure_tumor =annot$istumor,肿瘤段的特征/观察结果n_tumor_clusters =5)#有多少不同的肿瘤档案附加到safeTMEstr(restils)#> 14人的列表#> $ beta: num[1:14, 1:30] 4.20133 0.38159 0.00503 0.00291 0.44685…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ yhat: num[1:544, 1:30] 25.42 2.45 20.4 1.55 2.4…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $: num[1:544, 1:30] -0.565 -0.261 0.351 -0.278 0.35…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ p: num [1:14, 1:30] 2.69e-05 4.89e-03 9.86e-01 7.79e-01…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ t: num[1:14, 1:30] 4.1985 2.8144 0.0172 0.0175 0.281…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ se: num[1:14, 1:30] 1.001 0.136 0.292 0.167 1.59…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ beta。粒度:num[1:23, 1:30] 4.20133 0.38159 0.00503 0 0.00291…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:23] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ sigma。粒度:num[1:23, 1:23, 1:30] 1.00133 -0.00398 0.00631 -0.00259 -0.00177…# > . .- attr(*, "dimnames")= 3个列表#> .. ..$:chr [1:23] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:23] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ sigma: num[1:14, 1:14, 1:30] 1.00133 -0.00398 0.00372 -0.00177 0.08592…# > . .- attr(*, "dimnames")= 3个列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ prop_of_all: num[1:14, 1:30] 0.504884 0.045857 0.000605 0.000349 0.053699…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ prop_of_nontumor: num[1:14, 1:30] 0.504884 0.045857 0.000605 0.000349 0.053699…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ cell。counts :List of 2# > . .$cells.per.100: num [1:14, 1:30] 18.8815 1.715 0.0226 0.0131 2.0082 ...#> .. ..- attr(*, "dimnames")= 2的列表#> .. .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...# > . .$cell.counts:num [1:14, 1:30] 165.969 15.074 0.199 0.115 17.652 ...#> .. ..- attr(*, "dimnames")= 2的列表#> .. .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ cell.counts。粒度:2# > . .$cells.per.100: num [1:18, 1:30] 18.8815 1.715 0.0226 0 0.0131 ...#> .. ..- attr(*, "dimnames")= 2的列表#> .. .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...# > . .$cell.counts:num [1:18, 1:30] 165.969 15.074 0.199 0 0.115 ...#> .. ..- attr(*, "dimnames")= 2的列表#> .. .. ..$:chr [1:18] "macrophages" "mast" "B.naive" "B.memory" ...#> .. .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ X: num[1:544, 1:23] 0.74124 0.00185 3.09289 0.01374 0.11294…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:23] "macrophages" "mast" "B.naive" "B.memory" ...
这里有很多读数。让我们来回顾一下重要的几点:
为了说明肿瘤轮廓的推导,让我们看看spatialdecon输出的细胞轮廓矩阵:
注意新的肿瘤特异性列。
最后,让我们比较基本的反褶积结果与附加肿瘤轮廓的高级设置的反褶积结果(仅针对几种细胞类型):
票面价值(mfrow =c(2,3.))票面价值(3月=c(5,7,2,1))为(我在seq_len(6)) {细胞=rownames(res$β)[我]情节(res$Beta[细胞,],静止$β。颗粒细胞,,xlab =paste0(细胞,“基础设置下的分数”),ylab =paste0(细胞,肿瘤时评分\ n细胞被建模了"),pch =16,坳=c(rgb(0,0,1,0.5),rgb(1,0,0,0.5)) (1+annot$istumor),xlim =范围(c(res$Beta[细胞,],静止$β。颗粒(细胞))),ylim =范围(c(res$Beta[细胞,],静止$β。颗粒(细胞))))abline(0,1)如果(我= =1) {传说(“topleft”,pch =16,坳=c(rgb(0,0,1,0.5),rgb(1,0,0,0.5)),传说=c(“microenv。”,“肿瘤”))}}
所以肿瘤建模的影响是双重的:
SpatialDecon包包含两个专门的绘图功能,以及用于safeTME矩阵的默认调色板。
第一个函数是“TIL_barplot”,这只是一种绘制细胞类型丰度barplot的方便方法。
#作为参考,显示绘图函数使用的TILs颜色数据对象#当使用safeTME时:数据(“cellcols”)cellcols# > CD4.T。cells CD8.T.cells Treg T.CD4.naive#>“红色”“耐火砖”“#FF66FF”“#CC0000”# > T.CD4。内存T.CD8。天真T.CD8。内存NK#>“#FF0000”“#FF6633”“#FF9900”“grey10”#> B B.naive B.memory等离子体#> "深蓝" "#000099" "#0000FF" "#3399CC"#> pDC pDC巨噬细胞单核细胞#> "# 00ffff " "# 00ffff " "#006600" "# 33cc00 "#>单核细胞c单核细胞nci mDCs中性粒细胞#>“# 66cc66”“# 33cc00”“# 00ff00”“# 9966cc”肥大成纤维细胞是内皮细胞。细胞肿瘤#> "# ffff00 " "#999999" "#996633" "#333333"#只显示TME片段,因为这是免疫细胞所在的位置:布局(垫=(矩阵(c(1,2),1)),宽度=c(7,3.))TIL_barplot(restils$cell.counts$cell.counts,draw_legend =真正的,cex.names =0.5)
#或单元的比例:TIL_barplot(restils$prop_of_nontumor [, annot$AOI.name= =“开心”],draw_legend =真正的,cex.names =0.75)
第二个功能是“小花”,用于在一些二维投影上绘制细胞丰度。在这里,我们将在数据的前两个主要成分上绘制细胞丰度:
#归一化数据的PCA:电脑=prcomp(t(log2(pmax(规范,1))))$x (,c(1,2)]#运行小花函数:票面价值(3月=c(5,5,1,1))布局(垫=(矩阵(c(1,2),1)),宽度=c(6,2))小花(x =个人电脑(1],y =个人电脑(2],b =restils$β,cex =2,xlab =“PC1”,ylab =“PC2”)票面价值(3月=c(0,0,0,0))框架()传说(“中心”,填补=cellcols [rownames(restils$β),传说=rownames(restils$β),cex =0.7)
因此,我们可以看到PC1大致跟踪多免疫细胞vs.少免疫细胞,而PC2跟踪淋巴/髓细胞种群的相对丰度。
SpatialDecon库包括几个有用的函数,用于进一步分析/微调反褶积结果。
当两种细胞类型太相似时,对它们丰度的估计就不稳定了。然而,它们的总数仍然很容易估计。函数" collapseCellTypes "接受一个反褶积结果对象,并折叠你告诉它的任何紧密相关的单元格类型:
匹配的=列表()匹配$骨髓=c(“巨噬细胞”,“单核细胞”,“mDCs”)匹配$T.NK =c(“CD4.T.cells”,“CD8.T.cells”,“Treg”,“朝鲜”)匹配$B =c(“B”)匹配$桅杆=c(“桅杆”)匹配$中性粒细胞=c(“中性粒细胞”)匹配$基质=c(“endothelial.cells”,“成纤维细胞”)崩溃=collapseCellTypes(适合=restils,匹配的=匹配)的热图(崩溃$β,cexRow =0.85,cexCol =0.75)
有时,细胞剖面矩阵会省略组织中已知的细胞类型。如果您的数据包括任何纯这种未建模的单元格类型的区域——例如,因为您已经使用了GeoMx平台的分割功能来专门选择它们——那么您可以推断该单元格类型的配置文件,并将其与您的单元格配置文件矩阵合并。该算法将你指定的所有观察结果聚类为纯未建模的单元格类型,并将这些聚类分解为你所希望的该单元格类型的任意多个配置文件。对于癌细胞,可能适合指定10个或更多簇;对于高度正常的健康细胞,一簇就足够了。
(注意:此功能也可以在spatialdecon函数中运行,如上所述。)
pure.tumor.ids =annot$AOI.name= =“肿瘤”safeTME.with.tumor =mergeTumorIntoX(规范=规范,bg =bg,pure_tumor_ids =pure.tumor.ids,X =safeTME,K =3.)的热图(扫描(safeTME.with.tumor1,应用(safeTME.with.tumor1max),“/”),labRow =NA,利润=c(10,5))
一旦估算出细胞类型丰度,我们就可以反转反褶积,将表达数据建模为细胞丰度的函数,从而得出:
函数“reversedecon”运行这个模型。
rdecon =reverseDecon(规范=规范,β=res$β)str(rdecon)#> 5个列表#> $ coefs: num[1:545, 1:19] 1.438 1.312 0 0.683 0.975…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:545] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:19] "(Intercept)" "macrophages" "mast" "B.naive" ...#> $ yhat: num[1:545, 1:30] 17.46 2.44 32.4 1.11 2.86…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:545] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $: num[1:545, 1:30] -0.0231 -0.2565 -0.3158 0.2016 0.0985…# > . .- attr(*, "dimnames")= 2的列表#> .. ..$:chr [1:545] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ cors: Named num[1:545] 0.869 0.552 0.961 0.916 0.909…# > . .- attr(*,“名字”)=(1:545)从而向“A2M”种代号为ABCB1的“”“ACP5”“ADAM12”…#> $残留物。sd: Named num[1:545] 0.364 0.233 0.386 0.329 0.196…# > . .- attr(*,“名字”)=(1:545)从而向“A2M”种代号为ABCB1的“”“ACP5”“ADAM12”…#看残差:的热图(pmax(pmin(rdecon$残油,2),-2))
#看看拟合优度的两个指标:情节(rdecon$歌珥,rdecon$resid.sd,坳=0)showgenes =c(“CXCL14”,“LYZ”,“NKG7”)文本(rdecon$歌珥(setdiff(的名字(rdecon$歌珥)、showgenes)),rdecon$resid.sd [setdiff(的名字(rdecon$歌珥)、showgenes)),setdiff(的名字(rdecon$歌珥),showgenes),cex =0.5)文本(rdecon$歌珥showgenes, rdecon$resid.sd [showgenes],showgenes,cex =0.75,坳=2)
从上面的图中,我们可以看到,像CXCL14这样的基因独立于细胞混合而变化,像LYZ这样的基因与细胞混合相关,但仍然有可变的表达,而像NKG7这样的基因只是细胞混合的钝角读数。
sessionInfo()#> R版本4.2.0 RC (2022-04-19 r82224)#>平台:x86_64-pc-linux-gnu(64位)运行在Ubuntu 20.04.4 LTS下# >矩阵产品:默认值#> BLAS: /home/biocbuild/bbs-3.15-bioc/R/lib/libRblas.so#> LAPACK: /home/biocbuild/bbs-3.15-bioc/R/lib/libRlapack.so# ># >语言环境:#> [1] LC_CTYPE=en_US。utf - 8 LC_NUMERIC = C#> [3] LC_TIME=en_GB LC_COLLATE=C#> [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。utf - 8#> [7] LC_PAPER=en_US。utf - 8 LC_NAME = C#> [9] lc_address = c lc_phone = c#> [11] LC_MEASUREMENT=en_US。utf - 8 LC_IDENTIFICATION = C# >#>附加基础包:#>[1]统计图形grDevices utils数据集方法基础# >#>其他附加包:#> [1] SeuratObject_4.0.4 SpatialDecon_1.6.0# >#>通过命名空间加载(并且没有附加):#> [1] Biobase_2.56.0 httr_1.4.2 sass_0.4.1#> [4] splines_4.2.0 jsonlite_1.8.0 r . utis_2.11.0 . ##> [7] bslib_0.3.1 assertthat_0.2.1 highr_0.9#> [10] stats4_4.2.0 GenomeInfoDbData_1.2.8 vipor_0.4.5#> [13] cellranger_1.1.0 yaml_2.3.5 numderivative _2016.8-1.1#> [16] pillar_1.7.0 lattice_0.20-45 glue_1.6.2#> [19] uuid_1.1-0 digest_0.6.29 RColorBrewer_1.1-3#> [22] XVector_0.36.0 minqa_1.2.4 colorspace_2.0-3#> [25] htmltools_0.5.2 Matrix_1.4-1 . R.oo_1.24.0#> [28] plyr_1.8.7 pkgconfig_2.0.3 pheatmap_1.0.12#> [31] zlibbioc_1.42.0 purrr_0.3.4 scales_1.2.0#> [34] lme4_1.1-29 tibble_1 .1.6 generics_0.1.2 . ##> [37] IRanges_2.30.0 ggplot2_3.3.5 ellipsis_0.3.2#> [40] GeomxTools_3.0.0 BiocGenerics_0.42.0 cli_3.3.0#> [43] magrittr_2.0.3 crayon_1.5.1 readxl_1.4.0#> [46] evaluate_0.15 GGally_2.1.2 R.methodsS3_1.8.1#> [49] fansi_1.0.3 nlme_1 .1-157 MASS_7.3-57#> [52] R.cache_0.15.0 beeswarm_0.4.0 ggthemes_4.2.4#> [55] repmis_0.5 tools_4.2.0 data.table_1.14.2#> [58] lifecycle_1.0.1 string_1 .4.0 S4Vectors_0.34.0#> [61] munsell_0.5.0 EnvStats_2.7.0 Biostrings_2.64.0#> [64] compiler_4.2.0 jquerylib_0.1.4 GenomeInfoDb_1.32.0#> [67] systemfonts_1.0.4 rlang_1.0.2 NanoStringNCTools_1.4.0#> [70] nloptr_2.0.0 grid_4.2.0 RCurl_1.98-1.6#> [73] rjson_0.2.21 htmlwidgets_1.5.4 bitops_1.0-7#> [76] rmarkdown_2.14 boot_1.3-28 gtable_0.3.0#> [79] lmertest_1 .3 -3 curl_4.3.2 reshape_0.8.9#> [82] DBI_1.1.2 reshape2_1.4.4 R6_2.5.1 . ##> [85] knitr_1.38 dplyr_1.0.8 ggiraph_0.8.2#> [88] fastmap_1.1.0 utf8_1.2.2 stringi_1.7.6#> [91] ggbeeswarm_0.6.0 parallel_4.2.0 Rcpp_1.0.8.3#> [94] vctrs_0.4.1 tidyselect_1.1.2 xfun_0.30