这是一个开放性问题,旨在定义基因组中每个位置的状态(对应于“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
但我只对每个样本覆盖的归一化深度感到满意。
答案 0 :(得分:2)
问题的第一部分(规范化)
“计算深度调整的覆盖率值,将cpm函数直接应用于计数矩阵可能就足够了。这会将您的计数转换为每百万计数值,然后您可以在样本之间进行非正式比较”。 (Aaron Lun,剑桥,英国)
通过来自R的“edgeR”包的“cpm”标准化
{{1}}
归一化!
即使进行了归一化,我也有3个样本,其中有很多值等于零,因为它们的覆盖率很低。我想我必须从分析中删除它们。 我考虑过进行PCA测试,看看这些样本是如何分组的。
我想对用于规范化的方法有一些反馈 以及我问题的第二部分