规范样本中的深度覆盖范围

时间:2015-11-24 11:34:39

标签: r normalization edge sapply bioconductor

这是一个开放性问题,旨在定义基因组中每个位置的状态(对应于“CpG”位点),这些位置因样本而异。 这个问题的原因是可用的工具,定义了CpG窗口的状态,而不是单个CpG的状态。

我有这样一张桌子: 列为:感兴趣基数的染色体数(chr),初始(开始)和最终(结束)位置,预期覆盖度(深度),观察到的不同6只动物的覆盖度(深度1 - 深度6)。

data <- "chr start end depth depth1 depth2 depth3 depth4 depth5 depth6
chr1 3273 3273 7 200 35 1 200 850 0
chr1 3274 3274 3 50 25 5 300 1500 2
chr1 3275 3275 8 600 15 8 100 300 5
chr1 3276 3276 4 30 2 10 59 20 0
chr1 3277 3277 25 20 7 4 600 45 0"
data <- read.table(text=data, header=T)

我需要定义一个具有每行状态的列,状态为:未覆盖的区域,交替覆盖并经常覆盖。

要做到这一点,首先,我需要对样本之间的深度进行标准化,以获得可以在个体之间进行比较的值。 第二,我必须定义状态之间的范围(到目前为止,任何范围都是可以接受的);

我发现这个脚本做了类似于我需要的东西来规范化深度,但我还不能应用于我的情况(这个脚本设计为“CpG windows”并显示“C”和“G”的频率在每个窗口。

setMethod("normalizeCoverage", "methylRawList",

                        function(obj,method){

                          if(method=="median"){
                            x=sapply(obj,function(x) median(x$coverage) )
                          }else if(method=="mean"){
                            x=sapply(obj,function(x) mean(x$coverage) )
                          }else{
                            stop("method option should be either 'mean' or 'median'\n")
                          }
                          sc.fac=max(x)/x #get scaling factor
                          for(i in 1:length(obj)){
                            all.cov=obj[[i]]$coverage
                            fCs    =obj[[i]]$numCs/all.cov
                            fTs    =obj[[i]]$numT/all.cov
                            obj[[i]]$coverage=round(sc.fac[i]*obj[[i]]$coverage)
                            obj[[i]]$numCs   =round(obj[[i]]$coverage*fCs)
                            obj[[i]]$numTs   =round(obj[[i]]$coverage*fTs)
                          }
                          obj

    }) 

我还检查了R的这个“边缘包”函数,它用于RNAseq标准化数据,如下所示:

calcNormFactors(object, method=c("TMM","RLE","upperquartile","none"), refColumn = NULL,
      logratioTrim = .3, sumTrim = 0.05, doWeighting=TRUE, Acutoff=-1e10, p=0.75)

但我也无法申请我的数据。

我希望我的最终结果是这样的:

chr start State
chr1 3273 Often
chr1 3274 alternatively
chr1 3275 no
chr1 3276 often
chr1 3277 no

但我只对每个样本覆盖的归一化深度感到满意。

1 个答案:

答案 0 :(得分:2)

问题的第一部分(规范化)

“计算深度调整的覆盖率值,将cpm函数直接应用于计数矩阵可能就足够了。这会将您的计数转换为每百万计数值,然后您可以在样本之间进行非正式比较”。 (Aaron Lun,剑桥,英国)

通过来自R的“edgeR”包的“cpm”标准化

{{1}}

归一化!

即使进行了归一化,我也有3个样本,其中有很多值等于零,因为它们的覆盖率很低。我想我必须从分析中删除它们。 我考虑过进行PCA测试,看看这些样本是如何分组的。

我想对用于规范化的方法有一些反馈 以及我问题的第二部分