如果(!requireNamespace(“BiocManager”,静静地=真正的))install.packages(“BiocManager”)::安装(“SpatialDecon”) BiocManager
这个小插图演示了在空间基因表达研究中使用SpatialDecon包来估计细胞丰度。
我们将分析一个来自肺肿瘤的小型GeoMx数据集,寻找丰富的不同免疫细胞类型。这个数据集有30个roi。在每个ROI中,肿瘤和微环境片段分别被分析。
首先,我们加载这个包:
图书馆(SpatialDecon)注册的S3方法被“GGally”覆盖:#>方法# > +。gg ggplot2
现在让我们加载我们的示例数据并检查它:
数据(“mini_geomx_dataset”)$归一化 规范=mini_geomx_dataset$生 生=mini_geomx_dataset$annot annot =mini_geomx_dataset昏暗的(原始)#> [1] 545 30头(annot)#> ROI AOI.name x y原子核# > ICP20th.L11.ICPKilo.ROI10.TME。B09 roi10 time 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 667seq_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 41#> adam12 12 12#> adora3 14 8# > 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#更好的段名:colnames(规范)=colnames(生)=rownames(annot) =paste0(annot$ROI, annot$AOI.name)
spatialdecon函数接受表达式data的3个参数:
我们从对应的观测结果中估计每个数据点来自阴性对照探针的预期背景:
#使用NegProbe来估计每个观测背景“NegProbe”,) per.observation.mean.neg =规范(#并定义一个背景矩阵,其中每一列(观察值)都是#每个观察背景的适当值:扫描(标准*0,2per.observation.mean.neg,“+”) bg =昏暗的(bg)#> [1] 545 30
背景估计注意:在使用两个探针集的研究中,来自每个探针集的基因将有不同的背景值,上面的代码应该使用每个探针集对应的NegProbe值分别运行。或者," derive_GeoMx_background "可以自动完成:
derive_GeoMx_background(规范=规范, bg2 =probepool =代表(1,nrow(标准)),negnames =“NegProbe”)
“细胞轮廓矩阵”是一个预先定义的矩阵,它指定了实验中每种细胞类型的预期表达轮廓。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#> 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衍生出来的细胞配置文件矩阵。
download_profile_matrix(物种=“鼠标”, mousespleen < -age_group =“成人”,matrixname =“Spleen_MCA”)昏暗的(mousespleen)#> [1] 111251:4,1:4] mousespleen [# > 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]“Granulocyte”# ># >美元巨噬细胞>[1]“巨噬细胞”# >#> $ '边缘区域B '#> [1] " margin .zone. b .cell"# ># >美元单核细胞“单核细胞”# ># > NK美元#> [1] "NK.cell" 元数据基质组织种类菌株年龄年龄组#> 33 MCA脾脏小鼠C57BL/6 6-10周成年# > URL#> 33 https://pubmed.ncbi.nlm.nih.gov/29474909/# >引用33 Han, 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”)$mtx@昏暗的#基因x细胞 mini_singleCell_dataset#> [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# > ACGGCCATCGTCTGAA。S66#> plekhn1 0#> perm1 0#> C1orf159 0#> ttll10 0头(mini_singleCell_dataset$annots)#> celllid LabeledCellType#> 2660 actgctcgtaagttcc。S90基质细胞#> 2162 tgaaagaaggcgctct。S66胶质细胞#> 368 agcttgagtttgggcc。S66内皮细胞#> 238 acggccatcgtctgaa。S66基质细胞#> 4158 tctctaacactgttag。S90基质细胞#> 2611 acgatgtgtgtggttt。S90基质细胞表格(mini_singleCell_dataset$annots$LabeledCellType)# >内皮细胞胶质细胞#> 14 12周细胞浆细胞#> 3 30结肠基质细胞平滑肌细胞#> 1 190
周皮细胞细胞而且结肠平滑肌细胞将从该矩阵中删除,因为单元格数低。返回一种类型的所有细胞的平均表达,因此一种类型的细胞越多,就越能反映真实的基因表达。可以使用minCellNum过滤器更改这些平均值的置信度。
create_profile_matrix(mtx =mini_singleCell_dataset$mtx,中#细胞x基因计数矩阵 custom_mtx < -cellAnnots =mini_singleCell_dataset$annots,以单元格类型和单元格名称作为列的# cell注释cellTypeCol =“LabeledCellType”,包含单元格类型的列cellNameCol =“CellID”,包含单元格ID/名称的列matrixName =“custom_mini_colon”,#最终配置文件矩阵的名称outDir =零,# path到所需的输出目录,如果不应该写入矩阵,则设置为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)#>附加sp数据(“mini_singleCell_dataset”)rownames(mini_singleCell_dataset$annots) < -mini_singleCell_dataset$annots$CellIDCreateSeuratObject(数=mini_singleCell_dataset$mtx,中 seuratObject < -元。数据=mini_singleCell_dataset$annots)鉴别(seuratObject) < -seuratObject$LabeledCellTyperm(mini_singleCell_dataset)data.frame(cbind(cellType =as.character(鉴别(seuratObject)), annots < -cellID =的名字(鉴别(seuratObject))))create_profile_matrix(mtx =seuratObject@化验$核糖核酸@计数, custom_mtx_seurat < -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))"custom_mtx and custom_mtx_seurat are identical TRUE"
现在我们的数据可以进行反褶积了。首先,我们将展示如何在基本设置下使用spatialdecon,省去可选的附加功能。
spatialdecon(规范=规范, res =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] 2.9734 -0.0203 -0.0168 -0.018 0.0122…# > . .- 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.58 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] 7.57e-07 6.22e-03 5.75e-01 9.29e-01 5.22e-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] 4.9461 2.7357 0.5601 0.0889 0.64…# > . .- 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.724 0.27 1.253 1.459 0.396…# > . .- 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.4078 0.0353 0.0336 0.0062 0.0121…# > . .- 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.4078 0.0353 0.0336 0.0062 0.0121…# > . .- 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" ...
我们最感兴趣的是“贝塔”,估计细胞丰度的矩阵。
的热图(res$β,cexCol =0.5,cexRow =0.7,利润=c(10,7))
除了基本的反褶积,Spatialdecon还有几个功能:
让我们看一个单元格匹配对象的例子:
str(safeTME.matches)#> 14个#巨噬细胞:CHR "macrophages"#> $ mast: CHR "mast"#> $ 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"# bb0 $ pDC: chr "pDCs"# $ mDCs: chr "mDCs"#> $ monocyte: chr [1:2] " moncells . c " " moncells . nc . i "#中性粒细胞:CHR "neutrophils"#> $ Treg: chr "Treg"#内皮细胞。cells: chr "endothelial.cells"#> $ fibroblasts: CHR "fibroblasts"
现在让我们运行spatialdecon:
#载体识别纯肿瘤片段:$istumor =(annot$AOI.name= =“肿瘤”) annot#运行spatialdecon所有的铃铛和口哨:spatialdecon(规范=规范,#规范化数据 restils =生=生,#原始数据,用于降低低计数观测的权重bg =bg,# norm中每个数据点的预期背景计数X =safeTME,# safeTME矩阵,默认使用cellmerges =safeTME.matches,# safeTME。匹配对象,默认使用cell_counts =annot$核,#细胞核计数,用于估计细胞总数is_pure_tumor =annot$istumor,#肿瘤片段的识别/观察结果n_tumor_clusters =5)#在safeTME上添加多少不同的肿瘤概况str(restils)#> 14个#> $ beta: num[1:14, 1:30] 4.9748 0.44963 0.00666 0 0.51277…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ yhat: num[1:544, 1:30] 26.66 2.55 23.19 1.59 2.55…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ resds: num[1:544, 1:30] -0.633 -0.316 0.167 -0.319 0.263…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:544] "A2M" "ABCB1" "ACP5" "ADAM12" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...# > $ p: num(一14,1:30)2.39 9.79 8.46 e-09 e-05 e-01 1.00 - 7.18 e-01……# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ t: num[1:14, 1:30] 5.9688 3.9311 0.0266 0 0.3609…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ se: num[1:14, 1:30] 0.833 0.114 0.25 0.149 1.421…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ beta。Granular: num[1:23, 1:30] 4.9748 0.44963 0.00666 00…# > . .- attr(*, "dimnames")= 2个列表#> .. ..$:chr [1:23] "macrophages" "mast" "B.naive" "B.memory" ...#> .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...#> $ sigma。Granular: num[1:23, 1:23, 1:30] 0.694663 -0.002567 -0.000412 0.002024 -0.00123…# > . .- 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] 0.69466 -0.00257 0.00161 -0.00123 0.05047…# > . .- 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.54558 0.04931 0.00073 0 0.05624…# > . .- 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.54558 0.04931 0.00073 0 0.05624…# > . .- 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] 20.211 1.827 0.027 0 2.083 ...#> .. ..- attr(*, "dimnames")= 2个列表#> .. .. ..$:chr [1:14] "macrophages" "mast" "B" "plasma" ...#> .. .. ..$:chr [1:30] "ROI10TME" "ROI10Tumor" "ROI11TME" "ROI11Tumor" ...# > . .$cell.counts:num [1:14, 1:30] 177.659 16.057 0.238 0 18.312 ...#> .. ..- 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] 20.211 1.827 0.027 0 0 ...#> .. ..- 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] 177.659 16.057 0.238 0 0 ...#> .. ..- 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输出的细胞轮廓矩阵:
的热图(扫描(restils$X,1,应用(restils$X,1max),“/”),labRow =NA,利润=c(10,5))
注意新的肿瘤特异性列。
最后,让我们比较一下附加肿瘤概况的基础和高级设置的反褶积结果(仅针对几种细胞类型):
票面价值(mfrow =c(2,3.))票面价值(3月=c(5,7,2,1))为(我在seq_len(6)) {rownames(res$β)[我] 细胞=情节(res$β[细胞,],静息器$β。颗粒细胞,,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$β[细胞,],静息器$β。颗粒(细胞))),ylim =范围(c(res$β[细胞,],静息器$β。颗粒(细胞))))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.naive B.memory plasma#>“深蓝色”“#000099”“#0000FF”“#3399CC”pDC pDCs巨噬细胞单核细胞#>“# 00ffff”“# 00ffff”“#006600”“# 33cc00”单核细胞是中性粒细胞#>“# 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)
第二个功能是“florets”,用于绘制二维投影上的细胞丰度。在这里,我们将在数据的前两个主成分上绘制细胞丰度图:
归一化数据的# PCA:prcomp(t(log2(pmax(规范,1))))$x (,c(1,2)] 电脑=#运行floret函数票面价值(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大致跟踪多免疫细胞和少免疫细胞,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函数中运行,如上所述。)
$AOI.name= =“肿瘤” pure.tumor.ids =annotmergeTumorIntoX(规范=规范, safeTME.with.tumor =bg =bg,pure_tumor_ids =pure.tumor.ids,X =safeTME,K =3.)的热图(扫描(safeTME.with.tumor1,应用(safeTME.with.tumor1max),“/”),labRow =NA,利润=c(10,5))
一旦估计出细胞类型丰度,我们可以翻转反褶积,将表达数据建模为细胞丰度的函数,从而得到:
函数“reversedecon”运行这个模型。
reverseDecon(规范=规范, rdecon =β=res$β)str(rdecon)#> 5个的列表#> $ coefs: num[1:545, 1:19] 1.443 1.312 0 0.683 0.976…# > . .- 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.47 2.44 32.39 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.0237 -0.2567 -0.3155 0.2016 0.0978…# > . .- 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.33 0.196…# > . .- attr(*,“名字”)=(1:545)从而向“A2M”种代号为ABCB1的“”“ACP5”“ADAM12”…#看残差:的热图(pmax(pmin(rdecon$残油,2),-2))
#看看适合度的两个指标:情节(rdecon$歌珥,rdecon$resid.sd,坳=0)c(“CXCL14”,“LYZ”,“NKG7”) showgenes =文本(rdecon$歌珥(setdiff(的名字(rdecon$歌珥)、showgenes)),$resid.sd [setdiff(的名字(rdecon$歌珥)、showgenes)), rdeconsetdiff(的名字(rdecon$歌珥),showgenes),cex =0.5)文本(rdecon$歌珥showgenes, rdecon$resid.sd [showgenes],cex =0.75,坳=2) showgenes,
从上面的图中,我们可以看到,像CXCL14这样的基因与细胞混合无关,像LYZ这样的基因与细胞混合相关,但仍然有可变的表达,而像NKG7这样的基因只是细胞混合的迟钝读数。
sessionInfo()开发中(不稳定)(22-10-25 r83175)x86_64-pc-linux-gnu(64位)#>运行在Ubuntu 22.04.1 LTS下# >#>矩阵产品:默认值#> BLAS: /home/biocbuild/bbs-3.17-bio /R/lib/libRblas.so . txt#> LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK / liblpack .so.3.10.0# ># >语言环境:#> [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_telephone = c#> [11] LC_MEASUREMENT=en_US。utf - 8 LC_IDENTIFICATION = C# >#>附加基础包:#> [1] stats graphics grDevices utils datasets methods base# >#>其他附件:SeuratObject_4.1.2 SpatialDecon_1.9.0# >#>通过命名空间加载(不附加):#> [1] DBI_1.1.3 bitops_1.0-7 rgeos_0.5-9#> [4] readxl_1.4.1 rlang_1.0.6 magrittr_2.0.3#>[7]编译器:systemfonts_1.0.4#>[10]重塑2_1.4.4 string_1 .4.1 pkgconfig_2.0.3# fastmap_1.1.0 XVector_0.39.0#> [16] utf8_1.2.2 rmarkdown_2.17 nloptr_2.0.3#> [19] ggbeeswarm_0.6.0 purrr_0.3.5 xfun_0.34#> [22] repmis_0.5 zlibbioc_1.45.0 cachem_1.0.6# GenomeInfoDb_1.35.0 jsonlite_1.8.3 EnvStats_2.7.0#> [28] highr_0.9 reshape_0.8.9 uuid_1.1-0#> [31] parallel_4.3.0 R6_2.5.1 bslib_0.4.0#> [34] stringi_1.7.8 rcolorbrewer_1 . 3 - GGally_2.1.2#> [37] parallelelly_1.32.1 boot_1.3-28 jquerylib_0.1.4#> [40]#> [43] assertthat_0.2.1 knitr_1.40 future.apply_1.9.1R.utils_2.12.1 IRanges_2.33.0 Matrix_1.5-1#> [49] splines_4.3.0 R.cache_0.16.0 tidyselect_1.2.0#> [52] yaml_2.3.6 codetools_0.2-18 curl_4.3.3#> [55] listenv_0.8.0 lattice_0.20-45 tibble_3.1.8#> [58] lmertest_1 . 3 -3 plyr_1.8.7 Biobase_2.59.0#> [61] evaluate_0.17 future_1.28.0 Biostrings_2.67.0#> [64] pillar_1.8.1 stats4_4.3.0 generics_0.1.3#> [67] RCurl_1.98-1.9 S4Vectors_0.37.0 ggplot_2 .3.6#> [70] munsell_1 .5.0 scales_1.2.1 minqa_1.2.5#> [73] globals_0.16.1 glue_1.6.2 pheatmap_1.0.12#> [76] tools_4.3.0 GeomxTools_3.3.0 data.table_1.14.4#> [79] lme4_1.1-31 ggiraph_0.8.3 grid_4.3.0#> [82] colorspace_2.0-3 nlme_1 .1-160 GenomeInfoDbData_1.2.9#> [85] beeswarm_0.4.0 logNormReg_0.5-0 vipor_0.4.5#> [88] cli_3.4.1 fansi_1.0.3 ggthemes_4.2.4#> [91] dplyr_1.0.10 gtable_0.3.1 R.methodsS3_1.8.2#> [94] NanoStringNCTools_1.7.0 sass_0.4.2 digest_0.6.30#> [97] progressr_0.11.0 BiocGenerics_0.45.0 rjson_0.2.21#> [100] htmlwidgets_1.5.4 htmltools_0.5.3 r.o oo_1.25.0#> [103] lifecycle_1.0.3 httr_1.4.4 MASS_7.3-58.1