测序的PCR duplicates - II(转载)

这一次的资料给出了详细的计算公式,并且有R做模拟验证的code。

在我实际处理NGS data时候,从测序数据中自己写脚本remove PCR duplicates,常常是根据read的坐标。如果是single end read,就看5' 端read map 到reference上的位置,map到一模一样位置的reads集合会随机保留一条read信息,丢掉其他的。如果是paired end reads,看一对reads map到reference后,两个5’端坐标是不是完全一致,完全一致的那些read pairs,随机保留一对,其他的扔掉。

下面介绍的资料是用类似的思路,直接从fragment在基因组的坐标分布来计算duplication rate。

原文:Expected number of read duplicates

先直接来看公式,

设G为genome size,N为read 总数目,

For single end reads,

PCR duplicate rate = N - (sum(dpois(1:n, N/G/2) * G) * 2)

  • dpois(1:n, N/G/2) 是基因组上某一个位置,被1,2,... ,n条reads covered到的概率。
  • **dpois(1:n, N/G/2) * G **是基因组上,有多少位置被1条read cover到,多少个位置被2条reads cover到...
  • **sum(dpois(1:n, N/G/2) * G) **是基因组上总共有多少个位置被至少一条read读到。

For paired end reads,

如果打碎基因组DNA后,得到的fragment最小长度为a,最大为b,fragment长度服从[a,b]见的均匀分布,那么考虑到不同size的fragments,我们需要“延长”基因组:

G2<- G + G * (b - a)
PCR duplicate rate = N - (sum(dpois(1:n, N / G2 / 2) * G2) * 2

如果fragment长度服从类似泊松分布怎么办呢?下面通过模拟来估算duplicate rate。

library(data.table)
G<- 10000 #genome size
N<- 20000 #total read count
a<- 1 # Min fragment length
b<- 10 # Max fragment length
L<- 15 # Mean fragment length, if assume uniform fragment size distribution
n<- 10 # A number sufficiently large (ideally infinite)

set.seed(1)
# generate 5' coordinate of one mapped read
pos_fp1<- sample(1:G, size= N, replace= TRUE)

set.seed(2)
# pos_fp2<- pos_fp1 + rpois(n= N, lambda= L)
# generate 5' coordinate of the other read of the same fragment
pos_fp2<- pos_fp1 + sample(a:b, size= N, replace= TRUE)
pos_fp2<- ifelse(pos_fp2 > G, G, pos_fp2)

set.seed(3)
# generate '+' or '-' strand for each read
strand<- sample(c('-', '+'), size= N, replace= TRUE)
# make "reads", from small coord to large
reads<- data.table(pos_fp1, pos_fp2, strand)[order(pos_fp1, pos_fp2),]  

## Observed number of reads for SE:
## ================================
# for each 5' coordinate, count the number of reads as 'depth',
# make "depth_se", from small depth to large
depth_se<- reads[, list(depth= .N), by= list(pos_fp1, strand)][order(depth)]
dups<- table(depth_se$depth)
dups<- data.table(depth= as.numeric(names(dups)), n_pos=as.vector(dups))
dups$nreads<- dups$depth * dups$n_pos
dups$ndups<- (dups$depth - 1) * dups$n_pos
sum(dups$ndups)
7373

## Analytical way SE
## =================
N - (sum(dpois(1:n, N/G/2) * G) * 2)
7357.589

## Observed number of reads for PE:
## ================================
# for each pair of 5' coordinates, count the number of read pairs as 'depth',
depth_pe<- reads[, list(depth= .N), by= list(pos_fp1, pos_fp2, strand)][order(depth)]
N - nrow(depth_pe)
972

## Analytical way PE
## =================
G2<- G + G * (b - a)
N - (sum(dpois(1:n, N / G2 / 2) * G2) * 2)
967.4836

发布于 2018-03-16

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容