由于可用的分子信息数量庞大,主成分分析(PCA)是一种降低数据维数以捕获个体基因或主体变异的方法。特别是,主成分(PCs)以前曾被用作从多重基因表达中提取的sample-specific的特征。然而,当通路中的基因数量较大时,与表型无关的基因可能会引入噪音,模糊基因集关联信号。通常,一个先验定义的通路中只有一个子集的基因参与与表型变异相关的细胞过程,其中子集中的每个基因贡献了一个适度的数量。因此,基因选择是通路分析中的一个重要问题。
之前,该团队开发了一种监督的PCA方法(SuperPCA)和一种非监督方法(Adaptive, elas- net, Sparse PCA或AES-PCA)用于基于PC的通路分析中的基因选择。这两种方法都是先进行基因选择,去除不相关的基因,然后再估计pathway-specific PCs,并证明与Fisher’s exact test 、 GSEA 和globalTest 等方法相比在分析基因表达、GWAS和甲基化数据方面性能优越。
本工作开发pathwayPCA分析工具,提供了基因选择、对sample-specific的通路的进行评估和可视化,以及性别特异性通路效应的分析。
(1)检验通路与二分类、连续或生存表型相关性。
(2)利用SuperPCA和AES-PCA方法提取通路中相关基因。
(3)根据所选基因计算主成分(PCs)。这些评估的潜在变量代表了个体受试者的通路活性,然后可以用于执行综合通路分析,如多组学分析。
(4)提取驱动通路显著性的相关基因以及这些相关基因对应的数据进行进一步深入分析。
(5)通过并行parallel计算提高计算效率,通过S4-类数据对象提高数据安全性。
(6)分析具有复杂实验设计、多协变量、交互效应的研究,如检验男性和女性受试者之间的临床表型通路相关性是否不同。
BiocManager::install("pathwayPCA")
library(pathwayPCA)
1. AESPCA_pVals 检验通路关联性
给定一个监督OmicsPath对象(OmicsSurv、OmicsReg或OmicsCateg之一),从组学分析设计矩阵的特征的通路子集中提取第一个k adaptive、elastic-net和sparse主成分(pc),从每个pathway-subset组学分析设计矩阵的特性,测试它们与响应矩阵的关联性,并返回一个每个通路校正后P值的数据框。
###加载示例数据
data("colonSurv_df")
data("colon_pathwayCollection")
colonSurv_df是结肠癌生存数据的一个子集,包含了250名患者的2022个基因中的656个。前两列是总生存时间(OS_time)和死亡指标(OS_event)。
colon_pathwayCollection是一个典型的通路基因子集的例子。包括两种元素:一个列表(colon_pathwayCollection$pathways)是15个通路及其对应的通路中基因;一个(colon_pathwayCollection$TERMS)是15个通路的名字。
###建立OmicsSurv对象
colon_Omics <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)], #删除2、3列
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:3], #生存数据
respType = "surv"
)
###计算通路P值
colonSurv_aespc <- AESPCA_pVals(
object = colon_Omics,
numReps = 0,
#估计p值需要多少次置换
#若numReps = 0,P值参数化;
#numReps > 0,非参数,返回基于指定随机抽样次数的置换P值
parallel = TRUE,
#是否并行完成计算
numCores = 2,
#parallel = TRUE的情况下,应该使用多少cores来进行计算
adjustpValues = TRUE,
#是否多重比价校正P值
adjustment = c("Hoch", "SidakSD")
#校正P值方法
)
结果输出类aespcOut的结果列表,包含三个组成:
(1)pVals_df:一个通路及P值、校正P值的数据框
(2)PCs_ls:每个通路的第一numPCs 打分向量
(3)loadings_ls:每个通路的第一numPCs特征loading 向量
2.CreateOmics对组学数据生成类对象
##建立OmicsPathway对象
#用于质谱分析或生物测定数据和基因通路列表的S4类
colon_OmicsPath <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection
)
##建立OmicsSurv对象(上面1.中使用的就是这个对象)
colon_OmicsSurv <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:3],
respType = "surv"
)
##建立OmicsReg对象
colon_OmicsReg <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:2],
respType = "reg"
)
##建立OmicsCateg对象
colon_OmicsCateg <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, c(1,3)],
respType = "cat"
)
3. CreateOmicsPath
CreateOmicsPath建立类OmicsPathway、OmicsSurv、OmicsReg或OmicsCateg的有效对象。
CreateOmicsPath(
assayData_df = colonSurv_df[, -(1:3)],
sampleIDs_char = colonSurv_df$sampleID,
pathwayCollection_ls = colon_pathwayCollection
#pathwayCollection_ls有已知2 - 3个元素的基因通路集合列表
)
CreateOmicsSurv(
assayData_df = colonSurv_df[, -(1:3)],
sampleIDs_char = colonSurv_df$sampleID,
pathwayCollection_ls = colon_pathwayCollection,
eventTime_num = colonSurv_df$OS_time,
#与最后一次观察时间对应的N个观测值的数值向量
eventObserved_lgl = as.logical(colonSurv_df$OS_event)
#N个观测值的结尾事件,eventObserved_lgl=FALSE,观测值删失
)
CreateOmicsReg(
assayData_df = colonSurv_df[, -(1:3)],
sampleIDs_char = colonSurv_df$sampleID,
pathwayCollection_ls = colon_pathwayCollection,
response_num = colonSurv_df$OS_time
#长度为N的factor向量,一般回归练习中的因变量
)
CreateOmicsCateg(
assayData_df = colonSurv_df[, -(1:3)],
sampleIDs_char = colonSurv_df$sampleID,
pathwayCollection_ls = colon_pathwayCollection,
response_fact = as.factor(colonSurv_df$OS_event)
#长度为N的factor向量,一个广义线性回归练习的因变量
)
4.CreatePathwayCollection
建立一个pathwayCollection-类对象
data("colon_pathwayCollection")
CreatePathwayCollection(
sets_ls = colon_pathwayCollection$pathways,
TERMS = colon_pathwayCollection$TERMS
)
5.getPathPCLs
#提取PCs和Loadings
getPathPCLs(
colon_superpc,
"KEGG_PENTOSE_PHOSPHATE_PATHWAY"
)
6. getPathpVals
#计算有监督PCA的通路P值
colon_superpc <- SuperPCA_pVals(
colon_Omics,
numPCs = 2,
#每个通路提取PCs数量
parallel = TRUE,
numCores = 2,
adjustment = "BH"
)
#提取Top 5通路P值
getPathpVals(
colon_superpc,
numPaths = 5
#Top通路数量
)
#提取 p-Values < 0.01通路
getPathpVals(
colon_superpc,
alpha = 0.01
)
7. LoadOntoPCs
LoadOntoPCs从训练集中加载向量的列表,计算测试数据集的PCs.
### Project Data onto Pathway First PCs ###
LoadOntoPCs(
design_df = colonSurv_df,
loadings_ls = colonSurv_aespc$loadings_ls
)
8. SE2Tidy整理总结实验分析
从 SummarizedExperiment-class-对象中提取实验信息,将其转置,并将其作为包含实验测量值、特征名称和样本id的整洁数据框返回。
#加载airway数据
BiocManager::install("airway")
library(airway)
library(SummarizedExperiment)
data(airway, package = "airway")
airway_df <- SE2Tidy(airway)
输出:
9. 获取和编辑数据
(1)SubsetOmicsPath
从OmicsPathway 中提取assayData_df、sampleIDs_char或pathwayCollection
data("colonSurv_df")
data("colon_pathwayCollection")
colon_Omics <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection
)
getAssay(colon_Omics)
getPathwayCollection(colon_Omics)
(2)SubsetOmicsResponse
从OmicsSurv中提取response_numh或response_fact
colon_Omics <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, c(1, 2)],
respType = "reg"
)
getResponse(colon_Omics)
(3)SubsetOmicsSurv
从OmicsSurv中提取 eventTime_num或eventObserved_lgl
colon_Omics <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:3],
respType = "survival"
)
getEventTime(colon_Omics)
getEvent(colon_Omics)
(4)SubsetPathwayCollection
按通路提取数据
data("colon_pathwayCollection")
colon_pathwayCollection[["KEGG_RETINOL_METABOLISM"]]
(5)SubsetPathwayData
提取Pathway-Specific 数据。给定 Omics 对象和通路名称,返回试验中的-omes和响应数据框
colon_Omics <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:3],
respType = "survival"
)
SubsetPathwayData(
colon_Omics,
"KEGG_RETINOL_METABOLISM"
)
10. SuperPCA_pVals有监督的PCA检验通路
给定一个监督的OmicsPath对象(OmicsSurv、OmicsReg或OmicsCateg中的一个),从组学试验设计矩阵的每个通路子集中提取前k个主成分(PCs),测试它们与响应矩阵的关联,并返回每个通路校正p值的数据框。
colon_OmicsSurv <- CreateOmics(
assayData_df = colonSurv_df[, -(2:3)],
pathwayCollection_ls = colon_pathwayCollection,
response = colonSurv_df[, 1:3],
respType = "surv"
)
colonSurv_superpc <- SuperPCA_pVals(
object = colon_OmicsSurv,
parallel = TRUE,
numCores = 2,
adjustpValues = TRUE,
adjustment = c("Hoch", "SidakSD")
)