impulse sede2是一种针对RNA-seq、ChIP-seq、ATAC-seq、DNaseI-seq等测序实验中出现的纵向计数数据集的差分表达算法。impulse sede2基于DESeq2离散趋势平滑的负二项式噪声模型,利用脉冲模型约束每个基因的平均表达轨迹。impulse sede2可以校正批处理效果(来自多个混杂变量)和库深度。我们区分了只有病例和病例对照的差异表达分析:只有病例的差异表达分析测试基因的表达水平是否随时间变化。病例-对照差异表达分析测试基因随时间的表达轨迹在病例样本和对照条件样本之间是否不同。在这里,我们根据模拟数据演示了impulse sede2在不同场景中的使用。
要在批量测序计数数据上运行impulse ImpulseDE2,用户应该考虑包装器函数runimpulse sede2的最小参数集:
此外,还可以提供:
在这里,我们介绍了一个没有批处理效果的纯大小写差分表达式场景。我们从8个时间点(任意单位为1到8)模拟数据,每个时间点有3个重复(vecTimepointsA)。我们模拟了300个常量表达轨迹(scaNConst)、100个脉冲轨迹(scaNImp)、100个线性表达轨迹(scaNLin)和100个sigmoid表达轨迹(scaNSig)。模拟的完整结果存储在dirOurSimulation中。
整数计数矩阵(matCountData)和样例元数据表(dfAnnotation)由模拟函数创建,并直接传递给impulse sede2包装器(runimpulse sede2)。该分析是一个只区分大小写的差异表达式分析(boolCaseCtrl为FALSE)。我们假设没有批处理结构(vecBatchesA),因此不给ImpulseDE2任何混淆变量(vecConfounders)。可以通过允许多个线程用于runimpulse sede2 (scaNProc)来并行化impulse sede2。
差分表达式结果可以通过objectImpulseDE2$ dfimpulse sede2results作为输出对象中的数据帧访问。输出对象是impulse sede2object类的一个实例,它携带额外的内部数据,可以通过以“get_”开头的访问器函数访问这些数据。
library(ImpulseDE2) lsSimulatedData <- simulateDataSetImpulseDE2(vecTimePointsA = rep(seq(1,8),3), vecTimePointsB = NULL, vecBatchesA = NULL, vecBatchesB = NULL, scaNConst = 30, scaNImp = 10, scaNLin = 10, scaNSig = 10, scaMuBatchEffect = NULL, scaSDBatchEffect = NULL, dirOutSimulation = NULL)
lsSimulatedData dfAnnotation美元
批# # # #样品条件时间A_1_Rep1 A_1_Rep1案例1 B_NULL # # A_2_Rep1 A_2_Rep1案例2 B_NULL # # A_3_Rep1 A_3_Rep1情况3 B_NULL # # A_4_Rep1 A_4_Rep1案例4 B_NULL # # A_5_Rep1 A_5_Rep1案例5 B_NULL # # A_6_Rep1 A_6_Rep1案例6 B_NULL # # A_7_Rep1 A_7_Rep1案例7 B_NULL # # A_8_Rep1 A_8_Rep1案例8 B_NULL # # A_1_Rep2 A_1_Rep2案例1 B_NULL # # A_2_Rep2 A_2_Rep2案例2 B_NULL # # A_3_Rep2 A_3_Rep2情况3 B_NULL # # A_4_Rep2 A_4_Rep2案例4 B_NULL # # A_5_Rep2 A_5_Rep2案例5 B_NULL # # A_6_Rep2A_6_Rep2案例6 B_NULL ## A_7_Rep2 A_7_Rep2案例7 B_NULL ## A_8_Rep2 A_8_Rep3案例8 B_NULL ## A_2_Rep3 A_2_Rep3案例2 B_NULL ## A_3_Rep3 A_3_Rep3案例3 B_NULL ## A_4_Rep3 A_4_Rep3案例4 B_NULL ## A_5_Rep3 A_5_Rep3案例5 B_NULL ## A_7_Rep3 A_7_Rep3案例6 B_NULL ## A_8_Rep3 A_8_Rep3案例8 B_NULL ## A_8_Rep3 A_8_Rep3案例8
objectImpulseDE2 <- runImpulseDE2(matCountData = lsSimulatedData$ matobservvedcounts, dfAnnotation = lsSimulatedData$dfAnnotation, boolCaseCtrl = FALSE, vecConfounders = NULL, scaNProc = 1)
头(objectImpulseDE2 dfImpulseDE2Results美元)
## Gene p padj loglik_full loglik_red df_full df_red ## gene2 gene2 0.8858939 0.9325199 -141.4427 -143.3442 -146.8764 7 2 ## gene3 gene3 0.8344394 0.8945266 -158.0067 -159.0592 7 2 ## gene4 gene4 0.4712110 0.7641259 -162.9349 -165.2175 7 2 ## gene5 gene5 0.5801036 0.7863045 -135.3573 -137.2521 7 2 # gene6 gene6 0.4593621 0.7641259 -168.6884 -171.0161 7 2 # mean converge_impulse converge_const allZero ## gene1 274.7356 00 FALSE ## gene2 396.00950 0 FALSE ## gene3 560.7779 0 0 FALSE ## gene4 901.2443 0 0 FALSE ## gene5 222.8498 0 0 FALSE ## gene6 1073.7825 0 0 FALSE
在这里,我们介绍了一个具有批处理效果的只区分大小写的差分表达式场景。详细信息请参见“唯大小写差异表达式分析”。此外,我们模拟了批效应(vecBatchesA):在这里,我们假设对三个批次的重复进行采样,每个批次在每个时间点进行采样。如果在一段时间内对患者来源的细胞培养进行采样,则可能出现这样的批次结构,每批将是一个患者。另一种情况是,所有样本都来自同一细胞培养,但分别处理。
在元数据表(dfAnnotation)中,这个将批处理结构强加在表达式观察上的混合变量被称为“batch”。通过矢量vecConfounders将这个混杂变量交给impulse sede2,我们对这个混杂变量启用impulse sede2批量效果校正。
library(ImpulseDE2) lsSimulatedData <- simulateDataSetImpulseDE2(vecTimePointsA = rep(seq(1,8),3), vecTimePointsB = NULL, vecBatchesA = c(rep("B1",8), rep("B2",8), rep("B3",8)), vecBatchesB = NULL, scaNConst = 30, scaNImp = 10, scaNLin = 10, scaNSig = 10, scaMuBatchEffect = 1, scaSDBatchEffect = 0.2, dirOutSimulation = NULL)
lsSimulatedData dfAnnotation美元
批# # # #样品条件时间A_1_Rep1 A_1_Rep1案例1 B1 # # A_2_Rep1 A_2_Rep1案例2 B1 # # A_3_Rep1 A_3_Rep1情况3 B1 # # A_4_Rep1 A_4_Rep1案例4 B1 # # A_5_Rep1 A_5_Rep1案例5 B1 # # A_6_Rep1 A_6_Rep1案例6 B1 # # A_7_Rep1 A_7_Rep1案例7 B1 # # A_8_Rep1 A_8_Rep1案例8 B1 # # A_1_Rep2 A_1_Rep2案例1 B2 # # A_2_Rep2 A_2_Rep2案例2 B2 # # A_3_Rep2 A_3_Rep2情况3 B2 # # A_4_Rep2 A_4_Rep2案例4 B2 # # A_5_Rep2 A_5_Rep2案例5 B2 # # A_6_Rep2 A_6_Rep2案例6 B2 # # A_7_Rep2 A_7_Rep2 B2 7 # #A_8_Rep2 A_8_Rep2病例8 B2 ## A_1_Rep3 A_1_Rep3病例1 B3 ## A_2_Rep3 A_2_Rep3病例2 B3 ## A_3_Rep3 A_3_Rep3病例3 B3 ## A_4_Rep3 A_4_Rep3病例4 B3 ## A_5_Rep3 A_5_Rep3病例5 B3 ## A_6_Rep3 A_6_Rep3病例6 B3 ## A_7_Rep3 A_7_Rep3病例7 B3 ## A_8_Rep3 A_8_Rep3病例8 B3
objectImpulseDE2 <- runImpulseDE2(matCountData = lsSimulatedData$ matobservable counts, dfAnnotation = lsSimulatedData$dfAnnotation, boolCaseCtrl = FALSE, vecConfounders = c("Batch"), scaNProc = 1)
头(objectImpulseDE2 dfImpulseDE2Results美元)
## Gene p padj loglik_full loglik_red df_full df_red ## gene2 gene2 0.8984503 0.9294846 -144.5361 -146.7998 -149.6778 94 ## gene3 gene3 0.7755940 0.8461061 -159.2240 -160.4770 94 ## gene4 gene4 0.7044397 0.8453276 -166.4532 -167.9387 94 ## gene5 gene5 0.5833712 0.8274126 -137.0297 -138.9134 94 # gene6 gene6 0.4728468 0.8189169 -171.8352 -174.1116 94 # mean converge_impulse converge_const allZero ## gene1 329.0601 0 0 FALSE ## gene2 482.17620 0 FALSE ## gene3 709.0049 0 0 FALSE ## gene4 1070.8700 0 0 FALSE ## gene5 217.4998 0 0 FALSE ## gene6 1137.2637 0 0 FALSE
在这里,我们提出了可视化的基因表达轨迹拟合。有关数据和推断模型的详细信息,请参阅“批处理效应”。
用户可以决定是否绘制具有最低q值的表达轨迹(将轨迹的数量设置为plot, scaNTopIDs)或绘制特定的轨迹(通过vecGeneIDs提供基因标识符的向量,matCounts的行名)。plotGenes的中心输入是一个携带拟合和数据的impulse sede2输出对象(objectImpulseDE2)。用户可以指定是否绘制case和control fit (boolCaseCtrl)。
绘图可以用来自替代差分表达式算法的p值或q值进行注释:提供用matCounts的行名(基因标识符)命名的替代p值(vecrefval)的向量,并为plotGenes (strNameRefMethod)提供替代方法的名称。这些值将被添加到绘图标题中。
如果给出了输出目录(dirOut)和文件名(strFileName),绘图将被打印到.pdf。或者,用户还可以通过ggplot2图的输出列表直接访问用ggplot2生成的图对象。
注意,图中的观测值经过了尺寸因子标准化处理,以指导模型的评估。该模型不适用于规范化数据,但基于这里用于数据规范化的因素,模型本身是规范化的。
#继续脚本“批处理效果”库(ggplot2) lsgplotsGenes <- plotGenes(vecGeneIDs = NULL, scaNTopIDs = 10, objectImpulseDE2 = objectImpulseDE2, boolCaseCtrl = FALSE, dirOut = NULL, strFileName = NULL, vecRefPval = NULL, strNameRefMethod = NULL) print(lssgplotsgenes [[1]])
在这里,我们提出了一个具有批处理效果的大小写控制差分表达式场景。详情请参阅“批处理效果”。在前面介绍的场景的基础上,我们现在有来自两个条件的样本(vecTimePointsA(案例)和vecTimePointsB(控制)),每个条件有8个时间点和3个重复,每批1个重复。在这里,批与条件不重叠。
lsSimulatedData <- simulateDataSetImpulseDE2(vecTimePointsA = rep(seq(1,8),3), vecTimePointsB = rep(seq(1,8),3), vecBatchesA = c(rep("B1",8), rep("B2",8), rep("B3",8)), vecBatchesB = c(rep("C1",8), rep("C2",8), rep("C3",8)), scaNConst = 30, scaNImp = 10, scaNLin = 10, scaNSig = 10, scaMuBatchEffect = 1, scaSDBatchEffect = 0.1, dirOutSimulation = NULL)
lsSimulatedData dfAnnotation美元
批# # # #样品条件时间A_1_Rep1 A_1_Rep1案例1 B1 # # A_2_Rep1 A_2_Rep1案例2 B1 # # A_3_Rep1 A_3_Rep1情况3 B1 # # A_4_Rep1 A_4_Rep1案例4 B1 # # A_5_Rep1 A_5_Rep1案例5 B1 # # A_6_Rep1 A_6_Rep1案例6 B1 # # A_7_Rep1 A_7_Rep1案例7 B1 # # A_8_Rep1 A_8_Rep1案例8 B1 # # A_1_Rep2 A_1_Rep2案例1 B2 # # A_2_Rep2 A_2_Rep2案例2 B2 # # A_3_Rep2 A_3_Rep2情况3 B2 # # A_4_Rep2 A_4_Rep2案例4 B2 # # A_5_Rep2 A_5_Rep2案例5 B2 # # A_6_Rep2 A_6_Rep2案例6 B2 # # A_7_Rep2 A_7_Rep2 B2 7 # #A_8_Rep2 A_8_Rep2案例8 B2 # # A_1_Rep3 A_1_Rep3案例1 B3 # # A_2_Rep3 A_2_Rep3案例2 B3 # # A_3_Rep3 A_3_Rep3情况3 B3 # # A_4_Rep3 A_4_Rep3案例4 B3 # # A_5_Rep3 A_5_Rep3案例5 B3 # # A_6_Rep3 A_6_Rep3案例6 B3 # # A_7_Rep3 A_7_Rep3案例7 B3 # # A_8_Rep3 A_8_Rep3案例8 B3 # # B_1_Rep1 B_1_Rep1控制1 C1 # # B_2_Rep1 B_2_Rep1控制2 C1 # # B_3_Rep1 B_3_Rep1控制3 C1 # # B_4_Rep1 B_4_Rep1控制4 C1 # # B_5_Rep1 B_5_Rep1控制5 C1 # # B_6_Rep1 B_6_Rep1控制6 C1 # # B_7_Rep1 B_7_Rep1control 7 C1 ## B_8_Rep1 B_8_Rep1 control 8 C1 ## B_1_Rep2 B_1_Rep2 control 1 C2 ## B_2_Rep2 B_2_Rep2 control 2 C2 ## B_3_Rep2 B_3_Rep2 control 3 C2 ## B_4_Rep2 B_4_Rep2 control 4 C2 ## B_5_Rep2 B_5_Rep2 control 5 C2 ## B_6_Rep2 B_6_Rep2 control 6 C2 ## B_7_Rep2 B_7_Rep2 control 7 C2 ## B_8_Rep2 B_8_Rep2 control 8 C2 ## B_1_Rep3 B_1_Rep3 control 1 C3 ## B_2_Rep3 B_2_Rep3 control 2 C3 ## B_3_Rep3 B_3_Rep3 control 3 C3 ## B_4_Rep3 B_4_Rep3 control 4 C3 ## B_5_Rep3 B_5_Rep3 control 5 C3 ## B_6_Rep3 B_6_Rep3 control 6 C3 ## B_7_Rep3 B_7_Rep3 control 7 C3 ## B_8_Rep3 B_8_Rep3 control 8 C3
objectImpulseDE2 <- runImpulseDE2(matCountData = lsSimulatedData$ matobservable counts, dfAnnotation = lsSimulatedData$dfAnnotation, boolCaseCtrl = TRUE, vecConfounders = c("Batch"), scaNProc = 1)
头(objectImpulseDE2 dfImpulseDE2Results美元)
## gene1 gene1 0.5083166 0.9454768 -272.1727 -274.3182 17 12 ## gene3 gene3 0.5009423 0.9454768 -311.1775 -313.3497 17 12 ## gene4 gene4 1.0000000 1.0000000 -336.5281 -335.9455 17 12 ## gene5 gene5 0.0395501 0.1695004 -256.2735 -262.1101 17 12 ## gene6 gene6 0.4240348 0.9454768 -328.9031 -331.3700 17 mean converge_combined converge_case converge_control allZero ## gene1234.9687 0 0 0 0 FALSE ## gene2 364.3831 0 0 0 0 FALSE ## gene3 517.8059 0 0 0 FALSE ## gene4 1139.5563 0 0 0 FALSE ## gene5 193.6466 0 0 0 FALSE ## gene6 656.0563 0 0 0 0 FALSE
在这里,我们提出了瞬时调控基因的鉴定。详情请参阅“批处理效果”。设置boolIdentifyTransients = TRUE会导致包装器runimpulse sede2也适合sigmoid模型,并执行额外的模型选择,以获得瞬时和永久调控的基因。此分析的结果也在结果表objectImpulseDE2$ dfimpulse sede2results中。
库(ImpulseDE2) lsSimulatedData < - simulateDataSetImpulseDE2 (vecTimePointsA =代表(seq (8), 3), vecTimePointsB = NULL, vecBatchesA = c(代表(B1, 8),代表(B2, 8),代表(B3, 8)), vecBatchesB = NULL, scaNConst = 0, scaNImp = 100, scaNLin = 0, scaNSig = 0, scaMuBatchEffect = 1, scaSDBatchEffect = 0.2, dirOutSimulation = NULL) objectImpulseDE2 < runImpulseDE2 (matCountData = lsSimulatedData matObservedCounts美元,dfAnnotation = lsSimulatedData dfAnnotation美元,boolCaseCtrl = FALSE,vecConfounders = c("Batch"), boolIdentifyTransients = TRUE, scaNProc = 1)
头(objectImpulseDE2 dfImpulseDE2Results美元)
## Gene p padj loglik_full loglik_red df_full df_red ## gene1 gene1 6.166960e-03 1.258563e-02 9.079081e-01 -69.01662 -69.86324 9 4 ## gene3 gene3 2.508407e-04 5.972399e-04 -145.31655 -157.15324 9 4 ## gene4 gene4 2.873420e-08 1.512326e-07 -156.42709 -178.19642 9 4 ## gene6 gene6 1.674230e-04 4.185574e-04 -136.72009 -149.01335 9 4 ## mean converge_impulse converge_const0000 # gene4 670.21304 0000 # gene6 253.35891 000 # gene6 253.35891 000 # gene1 0.2879049778 0.648034883 3.252020e-03 # gene2 0.8761152011 0.977325267 6.988149e-01 # gene3 0.6416499141 0.812215081 4.475120e-05 ## gene5 0.1366720743 0.531200758 2.930061e-05 ## gene6 0.0000287201 0.0014360052.992884e-01 ## sigmoidTOconst_padj itransient is单调allZero ## gene1 6.919192e-03假假假## gene2 7.764610e-01假假假## gene3 1.243089e-04假真假## gene4 2.624463e-07假真假## gene5 8.371603e-05假真假## gene6 4.215330e-01假假假
在这里,我们通过热图展示了全局表达模式的可视化。我们基于瞬态调控方案对差异表达基因的分类进行了分析。详见“瞬时调控基因”。
plotHeatmap函数接受impulse sede2object类的输出对象。拟合sigmoid模型,结果表中包含暂态调节分析结果(即runimpulse sede2的输出boolIdentifyTransients = TRUE),则热图可根据暂态调节分析结果(boolIdentifyTransients = TRUE)进行分组。如果不进行瞬态调控分析,则创建全局表达谱的简单热图。必须指出乙状形拟合的条件以及瞬态分析所基于的条件(strCondition),这通常是情况条件。最后,通过scaQThres设置一个用于瞬态调节分析模型选择的假发现率修正p值阈值。
plotHeatmap的输出包括两个可以用draw()绘制的ComplexHeatmap类对象。
#“瞬变调节基因”库(ComplexHeatmap) lsHeatmaps <- plotHeatmap(objectImpulseDE2 = objectImpulseDE2, strCondition = "case", boolIdentifyTransients = TRUE, scaQThres = 0.01) draw(lsHeatmaps$complexHeatmapRaw) #基于正化计数的热图
sessionInfo ()