Перекрытие между двойными диапазонами по сравнению с выборкой двойных диапазонов

Я нашел другие сообщения об общем поиске перекрывающихся диапазонов в R iRanges, но не могли бы вы помочь мне с этим дополнительным небольшим поворотом: у меня есть два диапазона, которые связаны (возможная геномная перестройка с начальным диапазоном и конечным диапазоном), и я хотел бы отфильтровать те же самые диапазоны в геноме матери

Я нашел диапазоны для остановки и начала, как показано ниже (номер chr, начало интервала, конец интервала), где 3 столбца слева показывают начало перестановки, а 3 столбца справа показывают конец перестановки (они вывод программы SVDetect, которая использует данные NGS для поиска пар спариваний, которые имеют ненормальное выравнивание с эталонным геномом). У меня есть два генома, материнский клон и дочерний, и я хотел бы найти перестройки, которые уникальны для дочери = я хотел бы отфильтровать строки, в которых оба диапазона перекрываются с ОДНОЙ строкой из двух диапазонов в другом. Диапазоны могут немного отличаться, но если оба диапазона перекрываются, это будет четко указывать на то, что перестройка уже присутствует у матери. iRanges в R позволяет вам легко увидеть, перекрывается ли диапазон с другими диапазонами, но я не смог найти решение, где он мог бы показать мне, С КАКИМ диапазоном он перекрывается, не будучи очень очень медленным циклом for.

Дочь:

1  1384138 1384862 - 1  516731  516918
2  3758860 3759278 - 2  879828  879966 # (filter away this line as overlap with below)
2  3940051 3940470 - 2  3940856 3941250

Мать:

2  3758858 3759282 - 2  879828  879966 # (overlap with this range)
1  1384138 1384862 - 3  116231  516918
2  3940051 3940470 - 3  1540856 3941250

person user2031910    schedule 21.07.2014    source источник


Ответы (1)


Уловка состоит в том, чтобы использовать два набора GRanges, один для начала перегруппировки, а другой - для конца перестановки, а затем объединить результаты следующим образом:

### Create GRanges for daughter - copied from example
daughterStart <- GRanges(c(1,2,2), IRanges(c(1384138,3758860,3940051), c(1384862,3759278,3940470)))
daughterEnd <- GRanges(c(1,2,2), IRanges(c(516731,879828,3940856), c(516918,879966,3941250)))

### Create GRanges for mother - copied from example
motherStart <- GRanges(c(2,1,2), IRanges(c(3758858,1384138,3940051), c(3759282,1384862,3940470)))
motherEnd <- GRanges(c(2,3,3), IRanges(c(879828,116231,1540856), c(879966,516918,3941250)))

Затем мы определяем, есть ли какие-либо перекрытия, используя функцию findOverlaps (), используя дочь в качестве запроса, поскольку мы спрашиваем, перекрывает ли перегруппировка дочерей перегруппировка матери (используется suppressWarnings (), потому что GRanges имеют разные уровни последовательности (хромосомы) и, таким образом, дает предупреждение) :

starOverlap <- suppressWarnings( findOverlaps(query = daughterStart, subject = motherStart) ) # suppressWarnings to ignore wanings about different chromosomes
endOverlap  <- suppressWarnings( findOverlaps(query = daughterEnd,   subject = motherEnd  ) )

И, наконец, мы определяем, есть ли какие-либо идентичные перекрытия в перекрытиях начала перестановки и конца перестановки:

> starOverlap %in% endOverlap
[1] FALSE  TRUE FALSE

Что можно использовать для получения индексов пар дочерей, которые НЕ перекрываются, просто добавив!

> starOverlap@queryHits[ ! (starOverlap %in% endOverlap) ]
[1] 1 3

И поскольку этот подход основан на findOverlaps и векторизован, он будет быстро выполнять миллионы перестановок.

person Kristoffer Vitting-Seerup    schedule 19.12.2014