内容

这个描述是围绕的应用pipeComp(散装RNAseq)微分表达式分析(DEA)管道涉及多个步骤,如预滤器和估计技术或不必要的向量的变异。它将说明的整个过程指导创建一个新的PipelineDefinition与一个真实的例子。装饰图案假设的一般理解pipeComp(概述,请参阅pipeComp装饰图案)。



1介绍

我们将创建一个PipelineDefinition这始于一个SummarizedExperiment(更具体的要求见下文)和执行三个步骤:1)基因筛选,2)代理变量分析(上海广电)或类比(例如,删除不必要的变化),和3)差异表达分析。前两个步骤的输出将是一个(过滤和代理变量添加到),而第三步的输出将微分表达式。

我们可以执行多步评价,例如监测基因丢失在过滤步骤中,和在多大程度上SVA-corrected数据保留相关向量与技术的变异,但为了简单起见,我们只会运行一些评价指标在最后一步。

我们将建立PipelineDefinition这样的数据集将对象读计数试验(名为“计数”),条件colData与两个层面因素,rowData至少列expected.beta(预计log2-foldchange)和(逻辑表明基因差异表达- NA值是否接受)。我们已经准备了三个这样的结果部分中描述的数据集。



2建筑PipelineDefinition对象

2.1准备评价函数

我们先准备一个函数,给定DEA结果(作为data.frame),收益评价指标两种:1)相关性和平均绝对误差估计foldchanges对预期的,和2)敏感性,特异性,错误发现率等:

suppressPackageStartupMessages({库(pipeComp)库(S4Vectors)}) evaluateDEA < -函数(dea,真理= NULL, th = c(0.01, 0.05, 0.1)){# #我们确保列名的dea的标准:dea < - pipeComp::: .homogenizeDEA (dea) # #在pipeComp,真相应该传递与dea的对象,所以# #我们检索:如果(is.null(真理))真理< -元数据(dea) $ dea <——cbind (dea,真理(row.names (dea)]) # #我们摆脱基因未知的事实是:dea < - dea [! is.na expected.beta美元(dea)] # #比较估计和预期log2 folchanges: res < - c (logFC。皮尔森=软木(dea dea logFC美元,美元的预期。β=“成对”)使用,logFC。斯皮尔曼=软木(dea dea logFC美元,美元的预期。β,使用=“成对”方法=“枪兵”),logFC.mad =值(abs (dea logFC-dea expected.beta美元),na.rm = TRUE), ntested =总和(! is.na PValue美元(dea) & ! is.na罗斯福美元(dea))) # #重要性评价调用名称(th) < - th它< - t (vapp (th、有趣。VALUE =向量(模式=“数值”,长度= 6),有趣= function (x){# #为每个意义阈值,计算各种指标称为= (dea罗斯福美元和< x, na.rm = TRUE) P <——“美元(dea)和TP < - sum (dea罗斯福< x & dea“美元,美元na.rm = TRUE) c (TP = TP, FP = called-TP, TPR = TP / P, PPV = TP /,罗斯福= 1-TP /,玻璃钢= (P-TP) /笔(dea !“美元)}))它< - cbind(阈值= as.numeric (row.names(它),as.data.frame(它))row.names(它)< -空列表(logFC = res,意义=它)}

函数包含在pipeComp包中。它输出列表有两个插槽:1)logFC槽包含一个向量的相关性(皮尔森、斯皮尔曼和疯狂)预计logFCs,和2)意义槽包含data.frame精度指标在不同的阈值。我们可以用随机数据测试:

#我们建立一个随机DEA dataframe和真理:DEA < - data.frame (row.names = paste0(“基因”,1:10),logFC = rnorm (10)) DEA PValue < - DEA罗斯福<美元- c(2:8/100, 0.2, 0.5, 1)真理< - data.frame (row.names = paste0(“基因”,1:10),expected.beta = rnorm(10),“=代表(c(真的,假的,真的,假的),c (3、1、2、4))) evaluateDEA (DEA,真理)
# # # # logFC logFC美元。皮尔森logFC。斯皮尔曼logFC。疯狂ntested # # -0.3349034 - -0.2727273 1.5644874 - 10.0000000 # # # # # # $意义阈值TP FP TPR PPV罗斯福玻璃钢# # 1 0.01 0 0 0.05 0.0南南1.0 # # 2 3 0 0.10 0.6 1.0000000 0.0000000 0.4 # # 3 5 2 1.0 - 0.7142857 0.2857143 - 0.0

2.2组装PipelineDefinition

我们需要定义为每个步骤的基本功能,包括可能的参数。我们开始与过滤步骤:

的一步。filtering <- function(x, filt, minCount=10){ # we apply the function `filt` to `x` with the parameter `minCount` get(filt)(x, minCount=minCount) }

这意味着任何过滤函数,我们尝试(即。,选择的值filt)需要接受作为参数,这两个xminCount

接下来,我们定义了上海广电步骤以类似的方式,但是我们还需要GLM model.matrix:

的一步。上海广电< -函数(x,股东价值分析。法、k = 1){#我们创建模型。矩阵:mm < -统计数据::模型。矩阵(~条件,数据= as.data.frame (colData (x))) #我们应用函数的股东价值分析。方法的“x”的参数k的(sva.method) (x, k = k,毫米=毫米)}

DEA的一步,我们会做更多的不仅仅是应用功能:编写具体的包装方法简单,在这里我们将创建全球语言监测模型。矩阵,包括任何最终的代理变量(使用方法)。此外,由于评价函数需要真相,我们将复制它并将它附加到DEA结果的元数据:

step.dea < -函数(x, dea.method) {# DEA方法运行,并且将结果转换成DataFrame: x2 <——DataFrame (get (dea.method) (x)毫米))#把真相结果:元数据(x2)真理< -元数据(x)真理美元x2}

然后我们准备组装PipelineDefinition:

皮普< PipelineDefinition(列表(过滤=一步。过滤、上海广电=一步。上海广电,dea = step.dea))皮普
# # PipelineDefinition对象有以下步骤:# # -过滤(x, filt minCount) # # -上海广电(x,股东价值分析。法、k) # # - dea (x, dea.method)

最后,我们需要添加评价函数:

stepFn (pip一步=“dea type = "评价")< - evaluateDEA皮普
# # PipelineDefinition对象有以下步骤:# # -过滤(x, filt minCount) # # -上海广电(x,股东价值分析。法、k) # # - dea (x, dea.method) *

星表示dea步骤包括一些评估。



3运行的例子

3.1建立包装

为每个方法,我们想要测试,我们需要编写一个包装器函数,接受参数至少包括在步骤。下面是示例包装为每一个步骤:

def.filter < -函数(x, minCounts = 10){图书馆(磨边机)minCounts < as.numeric (minCounts) x [filterByExpr(化验(x), model.matrix (~ x美元条件),min.count = minCounts),]}股东价值分析。svaseq < -函数(x, k, mm) {k < - as.integer (k)如果(k = = 0)返回(x)库(上海广电)#运行上海广电sv <——svaseq(化验(x), mod = mm, n.sv = k)如果(sv n.sv = = 0美元)返回(x) #重命名的sv和将它们添加到colData“x”: colnames (sv sv美元)< - paste0 (sv, seq_len (ncol (sv sv)美元))colData (x) < - cbind (colData (x) sv美元sv) x dea}。磨边机< -函数(x, mm){图书馆(磨边机)dds < calcNormFactors (DGEList(化验(x))) dds < - estimateDisp (dds,毫米)符合<——glmFit (dds,毫米)as.data.frame (topTags (glmLRT(健康,“条件”),正))}#我们也定义一个函数不做任何事:没有< - x (x,…)函数

3.2定义替代参数值进行测试

我们定义的替代品(使用不同的参数参数(pip)看到管道的目的)命名列表:

选择< -列表(filt = c(“没有”,“def.filter”), minCount = 10, sva.method = c(“没有”,“sva.svaseq”), k = 1:2, dea.method = " dea。磨边机”)

每个参数(列表)的位置可以任意数量的标量值(如字符、数字、逻辑)。在这种情况下,一些参数(filt,sva.methoddea.method)期望函数的名称必须在环境中加载。runPipeline将运行所有的组合参数没有重复相同的步骤两次(或者,您也可以运行只有一个子集的组合)。

3.3基准数据集

为此我们创建三个基准数据集:

  • ipsc:10对10个随机样本GSE79636数据集,其中包含异类样本(背景遗传变异,一些批处理效果)。没有进一步的技术变化增加了,增加了foldchange 300个基因。
  • seqc:5对5的样品seqc混合物C和D,分别包括两个不同的混合激增。的样本选择与技术差异这两批有弱偏相关的混合物(3:2 vs 2:3)。因为混合物之间的真正差异并不完全知道,分析所有的基因但只有spike-ins被认为是为基准。
  • 模拟:8对8样本模拟使用聚酯和手段/分散GSE79636(限于单个批处理和生物组),500度和两个批处理的影响:1)一批技术部分与该集团(6:2)和影响1/3的基因,和2)的线性向量技术变化不相关的组织和影响1/3的基因。

可用的数据集在这里以及具体的代码用来准备它们。他们可以装载在以下方式:

数据集< -列表。文件(“路径/ /数据集”,模式=“rds美元”,full.names = TRUE)名称(数据)< - paste0(“数据集”,1:2)数据集< -拉普(数据集,readRDS)

注意,因为在这种情况下,数据集相对较小,他们通过他们我们只是负载runPipeline。然而,更好的实践与大型数据集是通过一个名为向量文件的路径。在这种情况下,我们可以通过设置一个初始化函数读取:

#没有运行stepFn (pip、类型=“起始”)< -函数(x){如果(is.character长度(x) & & (x) = = 1) x < - readRDS x (x)}

3.4运行的基准

最后,我们可以运行基准:

res < - runPipeline(数据集,选择,pipelineDef =皮普,nthreads = 4)拉普兰人(负责人res评价dea美元)
美元logFC数据集filt minCount股东价值分析。k dea方法。logFC方法。皮尔森logFC。斯皮尔曼logFC。疯狂ntested 1 dataset1没有10 1 dea。磨边机0.6271934 0.6801934 0.2549843 90 2 dataset1 dea 10没有2。磨边机0.6271934 0.6801934 0.2549843 90 3 dataset1没有10上海广电。dea svaseq 1。磨边机0.6287638 0.6725422 0.2814868 90 4 dataset1没有10上海广电。dea svaseq 2。磨边机0.6399500 0.6901400 0.2542854 90 5 dataset1 def.filter 10 1 dea。磨边机0.9294525 0.8948433 0.1946729 51 6 dataset1 def.filter 10没有2 dea。磨边机0.9294525 0.8948433 0.1946729 51美元意义数据集filt minCount股东价值分析。k dea方法。阈值方法TP FP TPR PPV罗斯福玻璃钢1 dataset1没有10 1 dea。磨边机0.01 26 1 0.3823529 0.9629630 0.03703704 1.909091 - 2 dataset1 dea 10没有2。磨边机0.05 31 2 0.4558824 0.9393939 0.06060606 1.681818 3 dataset1没有10股东价值分析。dea svaseq 1。edgeR 0.10 35 5 0.5147059 0.8750000 0.12500000 1.500000 4 dataset1 none 10 sva.svaseq 2 dea.edgeR 0.01 26 1 0.3823529 0.9629630 0.03703704 1.909091 5 dataset1 def.filter 10 none 1 dea.edgeR 0.05 31 2 0.4558824 0.9393939 0.06060606 1.681818 6 dataset1 def.filter 10 none 2 dea.edgeR 0.10 35 5 0.5147059 0.8750000 0.12500000 1.500000

结果可以很容易地绘制直接使用ggplot2,我们已经包括在pipeComp一些方便的绘图功能(下图所示)。概述的一般结构聚合管道的结果,看到了主要pipeComp装饰图案



3.5探索的结果

我们跑这管道在一个更有趣的替代方法,并包含结果的包:

数据(“exampleDEAresults”,包=“pipeComp”) res < - exampleDEAresults

我们可以使用默认pipeComp绘制方法与结果:

plotElapsed (res agg.by = " sva.method”)

evalHeatmap (res, = c (“TPR”、“罗斯福”、“logFC.pearson”), agg.by = c(“股东价值分析。法”、“dea.method”), row_split = "股东价值分析。方法”)

agg.by理由让你控制的参数显示的值应该为每个替代(值平均在其他参数的选择)。默认情况下,TRP,罗斯福在这里平均阈值用于评价意义,但我们可以使用一个特定的阈值过滤:

evalHeatmap (res, = c (“TPR”、“罗斯福”),agg.by = c(“股东价值分析。法”、“dea.method”), row_split = "股东价值分析。阈值法”,filterExpr = = = 0.05)

我们看到从之前的情节,使用SVA-based方法改善预期的相关性foldchange以及DEA的力量,同时确保错误控制(RUVr除外)。

我们也可以使用TPR-FDR曲线代表的准确性:

图书馆(ggplot2) dea_evalPlot_curve (res agg.by = c (“sva.method”、“dea.method”), colourBy = "股东价值分析。法”,shapeBy = " dea.method”)

dea_evalPlot_curve (res agg.by = c (“sva.method”)) + ggtitle(“股东价值分析方法、平均在DEA方法”)

曲线表明名义罗斯福的三分阈值为0.01,0.05和0.1分别(在第二个情节,填充点显示,观察到罗斯福低于或等于名义罗斯福)。

我们还可以看到,错误控制维护即使增加代理变量的数量:

evalHeatmap (res, = c (“TPR”、“罗斯福”),agg.by = c (“sva.method”、“k”), show_column_names = TRUE, anno_legend = FALSE, row_split = "股东价值分析。阈值法”,filterExpr = = = 0.05)