凸分析的混合物(CAM)是一种完全无监督未知组成的计算方法来分析组织样本数量和不同比例的不同的亚种(王et al . 2016年)。凸轮假设测量表达水平是每个分组人口的加权和的表达式,从单一族群的贡献成正比的丰富和具体表达程序。这个线性混合模型可以作为制定\ (\ mathbf {X ' = '} \)。直接从原始凸轮可以识别分子标记混合矩阵表达式,\ (\ mathbf {X} \),进一步估计成分比例矩阵,\ (\ mathbf {} \),以及subpopulation-specific表达谱矩阵,\ (\ mathbf{年代}\)。
debCAM
是一个R包开发组织由凸轮异质性特征算法。它提供基本功能对混合物进行无监督反褶积表达谱由凸轮和一些辅助功能来帮助理解subpopulation-specific结果。debCAM
还实现了功能执行监督反褶积基于先验知识分子标记,S矩阵或矩阵。Semi-supervised反褶积也可以通过结合分子标记从凸轮和先验知识来分析混合表达式。
这个函数凸轮()
包括所有必要的步骤分解矩阵的混合表达谱。有一些可选的步骤的上游凸轮()
这对减少运行时间downsample矩阵。在每一步凸轮()
也可以单独执行如果你喜欢一个更灵活的工作流。更多细节将在下面部分。
开始你的分析凸轮()
,您需要指定的范围可能分组人口数量和低的百分比/ high-expressed分子被删除。通常,30% ~ 50% low-expressed基因可以从基因表达数据删除。更少low-expressed蛋白质移除,例如0% ~ 10%,由于数量有限的蛋白质蛋白质组学数据。移除high-expressed分子对结果的影响要小得多,通常将0% ~ 10%。
rCAM < -凸轮(数据、K = 2:5刺。低= 0.30,用力推。高= 0.95)
从理论上讲,debCAM
接受任何分子表达式的数据类型只要表达式遵循线性混合模型。我们已经验证凸轮在基因表达数据的可行性(微阵列,RNAseq),蛋白质组学数据和DNA甲基化数据。要求输入表达式的数据:
输入数据应该存储在一个矩阵表达式。数据帧,也接受SummarizedExperiment或ExpressionSet对象并将内部之前被迫矩阵格式分析。矩阵的每一列应该是一个组织样本。每一行应该是一个探针/基因/蛋白质/等。行名称应该提供这凸轮可以返回检测到标记的名称。否则,将被自动命名为行1,2,3,…
我们使用一个数据集downsampledGSE19830作为一个例子显示凸轮工作流程。这个数据集提供了纯组织的基因表达谱(脑、肝、肺)和他们的生物与不同比例的混合物。
库(debCAM)数据(ratMix3) # ratMix3 $ X: X包含混合矩阵表达谱分析#美元ratMix3:地面真值矩阵包含比例# ratMix3 $ S:地面实况S矩阵包含subpopulation-specific表达谱数据< - ratMix3 $ X基因* 21 # 10000 #组织满足输入数据的要求
可以实现无监督反褶积的函数凸轮()
用一个简单的设置部分2介绍了。其他重要参数dim.rdc
(降低数据维度)cluster.num
(集群)的数量。增加将带来更多的时间复杂性。我们也可以指定核
并行计算进行配置BiocParallel。核= 0
将禁用并行计算。没有核
为每个元素参数将调用一个核心K
。之前设置随机数生成器的种子凸轮可以产生可重复的结果。
set.seed(111) #设置种子内部集群rCAM < -凸轮产生可重复的结果(数据、K = 2:5刺。低= 0.30,用力推。高= 0.95)#CAM return three sub results: #rCAM@PrepResult contains details corresponding to data preprocessing. #rCAM@MGResult contains details corresponding to marker gene clusters detection. #rCAM@ASestResult contains details corresponding to A and S matrix estimation.
我们使用MDL,广泛采用的理论标准和一致的信息,指导模型选择。底层的族群数量可以决定通过最小化总描述代码长度:
情节(MDL (rCAM)数据。= TRUE)
凸轮和S矩阵估计的一个固定的分组人口数字,例如K = 3,可以得到的
司马义时间< - (rCAM, 3) s < - Smat (rCAM, 3)
标记基因检测到凸轮和用于矩阵估计可以获得的
MGlist < - MGsforA (rCAM K = 3) #三个亚种群
数据预处理过滤许多基因,其中也有一些biologically-meaningful标记基因。所以我们需要检查每个基因再次找到所有可能的标记。两个统计数据基于subpopulation-specific表达式是用来识别标记基因与特定的阈值。第一个是OVE-FC(一个对每个人都倍改变)(Yu et al . 2010年)。第二个是低信心的引导OVE-FC绑定\α(\ \)的水平。
MGstat < - MGstatistic(数据、时间、引导。α= 0.05,nboot MGlist = 1000)。FC < -拉普(seq_len(3)、功能(x) rownames (MGstat) [MGstat idx = = x & MGstat每一美元。FC MGlist > 10])。FCboot < -拉普(seq_len(3)、功能(x) rownames (MGstat) [MGstat idx = = x & MGstat OVE.FC美元。α> 10])
上面的阈值是任意设定,并将大大影响了标记的数量。每个分组人口也可以有不同的阈值。使阈值设置更加容易,我们也可以将阈值设置为分位数的褶皱变化和一个族群的输入标记的误差幅度。民意调查报告中可忽略的一个基因之间的距离,定义的单纯形矩阵的列向量(王et al . 2016年)。民意调查报告中可忽略的阈值可以放松一个值大于最大值。
MGlist。re < reselectMG(数据、MGlist fc.thres = q0.2, err.thres = q1.2) # q0.2: 0.2分位数# q1.2: 1-quantile(最大值)乘以1.2
它是可选的重新评估和S矩阵的基础上,新的标记列表和/或交替最小二乘(ALS)方法应用于进一步减少均方误差。注意,允许太多的迭代ALS可能带来的风险显著偏离初始值。甲基化数据的约束,\ (\ mathbf{在[0,1]}\ \)re-estimation期间,将实施。
MGlist rre < - redoASest(数据。再保险,麦克斯特= 2,甲基= FALSE) # rre给美元:重新评估一个矩阵# rre $ S:重新评估矩阵
基本成功的凸轮的散射单纯形混合表达式是一个旋转和压缩版本的散射单工的纯表情,标记基因是位于每个顶点。simplexplot ()
函数可以显示散射单工和检测到标记基因在一个二维图。高维单形的顶点仍然定位在低维单形的极端点。
布局(矩阵(c (1、2、3、4), 2, 2, byrow = TRUE)) simplexplot(数据、时间、MGlist主要= c(最初发现标记))simplexplot(数据、时间、MGlist。FC、主要= c (FC > 10)) simplexplot(数据、时间、MGlist。FCboot主要= c(表达式(粗体(粘贴(“fc(引导的,α= 0.05)> 10 ')))))simplexplot(数据、时间、MGlist。再保险公司主要= c (“fc > = q0.2,误差< = q1.2”))
颜色和顶点的顺序显示在2 d图可以改变
simplexplot(数据、时间、MGlist。FCboot data.extra = rbind (t (ratMix3一美元),t(当地时间),角落里。订单= c(2, 1, 3) =“蓝色”,上校毫克。坳= c(“红”、“橙色”,“绿色”),ex.col =“黑人”,ex.pch = c(17日,19日,19日,19日,17日,17))传说(“bottomright cex = 1.2,插图=。01 c(“真理”,“凸轮估计”),pch = c(19日17),坳=“黑色”)
我们也可以观察的凸锥和单纯形混合表达式利用主成分分析法(PCA)在3 d空间。注意,PCA不能保证顶点仍保留的极端点dimension-reduced单纯形。
代码显示凸锥:
库(rgl) Xp < -数据% * % t (PCAmat (rCAM)) plot3d (Xp[1:3],坳=“灰色”,大小= 3,xlim = (Xp [1]), ylim = (Xp [2:3]), zlim =范围(Xp [2:3])) abclines3d (0, 0, 0, a =诊断接头(3),坳=“黑色”),(我在seq_along (MGlist)) {points3d (Xp (MGlist[[我]],1:3),坳=彩虹(3)[我],大小= 8)}
代码显示单纯形:
库(rgl) clear3d () Xproj < - XWProj(数据,PCAmat (rCAM)) Xp < - Xproj [1] plot3d (Xp[1:3],坳=“灰色”,大小= 3,xlim = (Xp [1:3]), ylim = (Xp [1:3]), zlim =范围(Xp [1:3])) abclines3d (0, 0, 0, a =诊断接头(3),坳=“黑色”),(我在seq_along (MGlist)) {points3d (Xp (MGlist[[我]],1:3),坳=彩虹(3)[我],大小= 8)}
如果地面实况和S矩阵可用,估计从凸轮可以评估:
软木(当地时间,ratMix3一美元)# >肝肺脑# >[1]-0.3963187 0.9839210 -0.4898373 # >[2]0.9869012 -0.5991347 -0.4865204 # >[3]-0.4769864 -0.5245692 0.9856413软木(年代,ratMix3 $ S) # >肝肺脑# > [1]0.5047310 0.9752287 0.5648873 # > [2]0.9732946 0.2578350 0.3488423 # > [3]0.4680238 0.5741921 0.9935207
考虑中的许多基因的存在(管家基因)可能主导和地面真值之间的相关系数估计表达谱,最好是评估相关系数对标记基因。
unlist(拉普兰人(seq_len(3)、功能(k) {k。<——相匹配。马克斯(软木(东部[k], ratMix3一美元));埃及< - MGlist.FCboot [[k]];corr < -软木(S(埃及,k), ratMix3 $ S[埃及,k.match]);名(corr) < - colnames (ratMix3一美元)[k.match];corr})) # >脑肝肺# > 0.9982171 0.9950575 0.9984533
凸轮的主要步骤(数据预处理、标记基因簇检测和矩阵分解)也可以单独执行作为一种更灵活的选择。
set.seed(111) #数据preprocession rPrep < CAMPrep(数据,用力推。低= 0.30,用力推。高= 0.95)#> outlier cluster number: 0 #> convex hull cluster number: 48 #Marker gene cluster detection with a fixed K rMGC <- CAMMGCluster(3, rPrep) #A and S matrix estimation rASest <- CAMASest(rMGC, rPrep, data) #Obtain A and S matrix Aest <- Amat(rASest) Sest <- Smat(rASest) #obtain marker gene list detected by CAM and used for A estimation MGlist <- MGsforA(PrepResult = rPrep, MGResult = rMGC) #obtain a full list of marker genes MGstat <- MGstatistic(data, Aest, boot.alpha = 0.05, nboot = 1000) MGlist.FC <- lapply(seq_len(3), function(x) rownames(MGstat)[MGstat$idx == x & MGstat$OVE.FC > 10]) MGlist.FCboot <- lapply(seq_len(3), function(x) rownames(MGstat)[MGstat$idx == x & MGstat$OVE.FC.alpha > 10]) MGlist.re <- reselectMG(data, MGlist, fc.thres='q0.2', err.thres='q1.2')
我们实现了主成分分析凸轮()
/CAMPrep ()
降低数据维度。样本聚类,另一个数据降维方法,之前是可选的凸轮()
/CAMPrep ()
。
#聚类库(apcluster)然后< - apclusterK (negDistMat (r = 2), t(数据),K = 10) # >在p = -2427050 # >集群的数量:10 # >在p = -15246196 # >集群数量:7 # >在p = -8124448(没有二等分的一步。1)# >集群数量:7 # >在p = -4563575(没有二等分的一步。2)# >集群数量:8 # >在p = -2783138(没有二等分的一步。3)# >集群数量:9 # > # >集群数量:9 p = -2783138 #还可以使用apcluster(),但需要确保集群的数量比潜在的分组人口数量大。数据。clusterMean < -拉普(槽(然后,“集群”)、功能(x) rowMeans(数据下降[x,, = FALSE))的数据。clusterMean < -。调用(cbind data.clusterMean) set.seed (111) rCAM < - CAM(数据。clusterMean K = 2:5,用力推。低= 0.30,用力推。高= 0.95)# or rPrep <- CAMPrep(data.clusterMean, thres.low = 0.30, thres.high = 0.95)
我们仍然可以遵循的工作流程3.2或3.3获得标志基因列表和估计年代矩阵。然而,新数据的估计矩阵组成的集群中心。的一个矩阵可以得到原始数据
年代< - Smat (rCAM, 3) MGlist < - MGsforA (rCAM K = 3)当地时间< - AfromMarkers(数据、MGlist) #(可选)和S矩阵的替代re-estimation rre < - redoASest(数据、MGlist麦克斯特= 10)
GSE11058运行四个免疫细胞微阵列上的线以及它们不同的相对比例的混合物。下面的代码块展示了如何使用凸轮盲目四混合物分离成四个纯细胞系。注意,这个数据集包含54613探针/ probesets。我们可以减少运行时间将采样探针/ probesets或删除更多low-expressed基因(例如70%)。
#下载数据和表型库(GEOquery) gsm < - getGEO (GSE11058) # >警告:62解析失败。# >行坳预期实际文件# > 54614 SPOT_ID 1/0 / T / F /正确/错误,控制文字数据# > 54615 SPOT_ID 1/0 / T / F /正确/错误,控制文字数据# > 54616 SPOT_ID 1/0 / T / F /正确/错误,控制文字数据# > 54617 SPOT_ID 1/0 / T / F /正确/错误,控制文字数据# > 54618 SPOT_ID 1/0 / T / F /正确/错误——控制文字数据# > ..... ....... .................. ......... ............# >查看更多细节问题(…)。把< - pData (phenoData (gsm [[1]])) $ characteristics_ch1垫< - exprs (gsm[[1]])垫< -垫(grep (“^”AFFX, rownames(垫),]mat.aggre < -酸式焦磷酸钠(独特的(把),函数(x) rowMeans(垫(把= = x)))数据< - mat.aggre[8] #运行凸轮set.seed (111) rCAM < -凸轮(数据、K = 4刺。低= 0.70,用力推。高= 0.95)Aest <- Amat(rCAM, 4) Aest #> [,1] [,2] [,3] [,4] #> [1,] 0.3883538 0.2389400 0.1039654 0.26874070 #> [2,] 0.2171408 0.4881505 0.2075359 0.08717281 #> [3,] 0.3480010 0.1810097 0.4342633 0.03672609 #> [4,] 0.3795312 0.3204192 0.2752069 0.02484273 #Use ground truth A to validate CAM-estimated A matrix Atrue <- matrix(c(2.50, 0.50, 0.10, 0.02, 1.25, 3.17, 4.95, 3.33, 2.50, 4.75, 1.65, 3.33, 3.75, 1.58, 3.30, 3.33), 4,4, dimnames = list(c("MixA", "MixB", "MixC","MixD"), c("Jurkat", "IM-9", "Raji", "THP-1"))) Atrue <- Atrue / rowSums(Atrue) Atrue #> Jurkat IM-9 Raji THP-1 #> MixA 0.250000000 0.1250000 0.2500000 0.3750000 #> MixB 0.050000000 0.3170000 0.4750000 0.1580000 #> MixC 0.010000000 0.4950000 0.1650000 0.3300000 #> MixD 0.001998002 0.3326673 0.3326673 0.3326673 cor(Aest, Atrue) #> Jurkat IM-9 Raji THP-1 #> [1,] 0.2958875 -0.2006075 -0.7497038 0.98630126 #> [2,] -0.1976556 -0.1508022 0.9935143 -0.88675357 #> [3,] -0.7918492 0.9725408 -0.4427615 0.03629895 #> [4,] 0.9981488 -0.8746620 -0.1050113 0.31145418
GSE41826进行了调整实验通过混合神经元和神经胶质的DNA来自一个人从10% ~ 90%。下面的代码块展示了如何使用凸轮盲目9混合物分离成神经元和神经胶质的特定的CpG甲基化量化。额外的需求上运行凸轮的甲基化数据:
#下载数据库(GEOquery) gsm < - getGEO (GSE41826) mixtureId < - unlist(拉普兰人(paste0(“混合”,seq_len(9))、功能(x) gsm[[1]]美元geo_accession (gsm [[1]] $ title = = x]))数据< - gsm [[1]] [, mixtureId] #删除CpG网站性染色体从雄性和雌性#如果组织没有必要在这个例子中是混合物从同一话题# gpl < - getGEO (GPL13534) # annot < datatable (gpl) @ table (c(“名字”,“科”)]# rownames (annot) < - annot名字#美元annot < - annot [rownames(数据)]# < -数据(annot $空空! = ' x ' & annot $空空! = Y) # downsample CpG网站featureId <——样本(seq_len (nrow(数据),50000)#运行凸轮#当输入数据太多的探针,lof残疾人由于空间限制。#当集群。num很大,快。选择可以使增加速度rCAM < -凸轮(数据(featureId,), K = 2,用力推。低= 0.10,用力推。高= 0.60,集群。MG.num num = 100。lof刺= 10。用力推= 0,快。选择= 20)MGlist <- MGsforA(rCAM, K = 2) #Identify markers from all CpG sites MGlist.re <- reselectMG(data, MGlist, fc.thres='q0.2', err.thres='q1.2') #re-esitmation with methylation constraint rre <- redoASest(data, MGlist.re, maxIter = 20, methy = TRUE) #Validation using ground truth A matrix Atrue <- cbind(seq(0.1, 0.9, 0.1), seq(0.9, 0.1, -0.1)) cor(rre$Aest, Atrue)
我们也可以上运行凸轮unmethylated量化、1 -β,获得非常相似的结果,因为底层线性混合模型也适用于unmethylated探针强度。
rCAM < -凸轮(1 - exprs(数据[featureId,]), K = 2,用力推。低= 0.10,用力推。高= 0.60,集群。MG.num num = 100。lof刺= 10。用力推= 0,快。选择= 20)
凸轮算法可以估计基于盲目和S矩阵检测标记。因此,我们也可以使用凸轮的一部分算法来估计和S矩阵基于已知的标记。
这个包提供了AfromMarkers ()
从标记列表来估计一个矩阵。
点< - AfromMarkers(数据、MGlist) # MGlist是一个列向量,其中每个包含已知的标记为一个族群
或者我们可以使用redoASest ()
估计和S矩阵从标记列表,或者重新评估两个矩阵ALS进一步减小均方误差。注意,允许太多的迭代ALS可能带来的风险显著偏离初始值。甲基化数据的约束,\ (\ mathbf{在[0,1]}\ \)re-estimation期间,可以实施。
rre < - redoASest(数据、MGlist麦克斯特= 10)# MGlist是一个列向量,其中每个包含已知的标记#麦克斯特= 0:一群没有re-estimation ALS # rre给美元:估计矩阵# rre $ S:估计年代矩阵
许多数据集提供表达谱纯化细胞系,甚至每一个细胞,它可以被视为引用S矩阵。一些方法使用最小二乘技术或支持向量回归(纽曼等人。2015)估计基于已知的矩阵S矩阵。debCAM
将估计矩阵已知年代的识别标记矩阵,具有更好的性能与地面真值的相关系数矩阵。
数据< - ratMix3 $ X S < ratMix3 $ # #已知年代矩阵识别标记pMGstat < - MGstatistic(年代,c(“肝”、“大脑”、“肺”))pMGlist。FC < -拉普(c(“肝”、“大脑”、“肺”)、功能(x) rownames (pMGstat) [pMGstat idx = = x & pMGstat每一美元。FC > 10]) #一个矩阵估计时间< - AfromMarkers(数据、pMGlist.FC) #(可选)选择re-estimation rre < redoASest(数据,pMGlist。FC,麦克斯特= 10)
debCAM
还支持估计矩阵直接从已知年代矩阵使用最小二乘方法。标志识别仍然需要从S矩阵因为只有标记的平方误差将计算促进(1)更快的计算运行时间和(2)一个更大的信噪比由于标记的歧视性的权力(纽曼等人。2015)。
点< redoASest(数据,pMGlist。FC, S = S,麦克斯特= 0)点美国美元
与已知的一个矩阵,debCAM
估计矩阵使用非负最小二乘(NNLS)NMF,进一步识别标记。
数据< - ratMix3 $ X < - ratMix3 $ #已知矩阵#估计S矩阵S < - t (NMF::。fcnnls (t(数据))$系数)#识别标记pMGstat < - MGstatistic pMGlist(数据)。FC < -拉普(独特的(pMGstat idx美元),函数(x) rownames (pMGstat) [pMGstat idx = = x & pMGstat每一美元。FC > 10]) #(可选)选择re-estimation rre < redoASest(数据,pMGlist。FC, =,麦克斯特= 10)
之前的信息标记时,S矩阵和/或一个矩阵可用,semi-supervised反褶积相结合也可以由标记从先验信息和标记被凸轮。而监督反褶积不能处理底层的亚种群没有先验信息,无监督反褶积可能错过了分组人口没有足够的辨别能力。因此,semi-supervised反褶积可以利用这两种方法。
点< - AfromMarkers(数据、MGlist) # MGlist是一个列向量,其中每个已知的标记和/或CAM-detected标记包含一个程序
或
rre < - redoASest(数据、MGlist麦克斯特= 10)# MGlist是一个列向量,其中每个包含已知的标记和/或CAM-detected标记#麦克斯特= 0:一群没有re-estimation ALS # rre给美元:估计矩阵# rre $ S:估计年代矩阵
纽曼,亚伦。池玉兰长刘,迈克尔·r·格林,安德鲁j .叠成上海市,曰,Chuong d .黄平君马克西米利安Diehn,和火山灰Alizadeh。2015。“健壮的枚举的细胞从组织表达谱子集。”Nat冰毒12 (5):453 - 57。http://dx.doi.org/10.1038/nmeth.3337。
Niya,埃里克·p·霍夫曼露露Chen Li,甄张:刘,提供关于Yu David m . Herrington罗伯特·克拉克,和王曰。2016。小说转录异质性”数学模型的识别标记和亚种群在复杂的组织。”科学报告6:18909。http://dx.doi.org/10.1038/srep18909。