Я работаю с PLINK для анализа данных чипа SNP.
Кто-нибудь знает, как удалить дублированные SNP (дублированные по положению)?
Я работаю с PLINK для анализа данных чипа SNP.
Кто-нибудь знает, как удалить дублированные SNP (дублированные по положению)?
Если у нас уже есть файлы в формате plink, то у нас должен быть .bim для двоичных файлов plink или .map для текстовых файлов plink. В любом случае должности указаны в 3-м столбце, а имена SNP — во 2-м столбце.
Нам нужно создать список SNP, которые дублируются:
sort -k3n myFile.map | uniq -f2 -D | cut -f2 > dupeSNP.txt
Затем запустите plink с флагом --exclude:
plink --file myFile --exclude dupeSNP.txt --out myFileSubset
вы также можете сделать это непосредственно в PLINK1.9, используя флаг --list-duplicate-vars
вместе с модификаторами <require-same-ref>
, <ids-only>
или <suppress-first>
в зависимости от того, что вы хотите сделать.
проверьте https://www.cog-genomics.org/plink/1.9/data#list_duplicate_vars подробнее
Если вы хотите удалить все вхождения варианта с дубликатами, вам придется использовать флаг --exclude
в выходном файле --list-duplicate-vars
, который должен иметь расширение .dupvar
.
Я должен предупредить, что два ответа, приведенные ниже, дают разные результаты. Это связано с тем, что метод sort | uniq
учитывает только SNP
и bp location
; тогда как метод PLINK
(--list-duplicate-vars
) также учитывает A1
и A2
.
Подобно sort | uniq
в файле .map
, мы могли бы использовать AWK
в файле .gen
, это выглядит так:
22 rs1 12 A G 1 0 0 1 0 0
22 rs1 12 G A 0 1 0 0 0 1
22 rs2 16 C A 1 0 0 0 1 0
22 rs2 16 C G 0 0 1 1 0 0
22 rs3 17 T CTA 0 0 1 0 1 0
22 rs3 17 CTA T 1 0 0 0 0 1
# Get list of duplicate rsXYZ ID's
awk -F' ' '{print $2}' chr22.gen |\
sort |\
uniq -d > chr22_rsid_duplicates.txt
# Get list of duplicated bp positions
awk -F' ' '{print $3}' chr22.gen |\
sort |\
uniq -d > chr22_location_duplicates.txt
# Now match this list of bp positions to gen file to get the rsid for these locations
awk 'NR==FNR{a[$1]=$2;next}$3 in a{print $2}' \
chr22_location_duplicates.txt \
chr22.gen |\
sort |\
uniq \
> chr22_rsidBylocation_duplicates.txt
cat chr22_rsid_duplicates.txt \
chr22_rsidBylocation_duplicates.txt \
> tmp
# Get list of duplicates (by location and/or rsid)
cat tmp | sort | uniq > chr22_duplicates.txt
plink --gen chr22.gen \
--sample chr22.sample \
--exclude chr22_duplicates.txt \
--recode oxford \
--out chr22_noDups
Это классифицирует rs2
как дубликат; однако метод rs2
для PLINK list-duplicate-vars
не будет помечен как дубликат.
Если вы хотите получить те же результаты, используя PLINK (нетривиальная задача для форматов файлов BGEN, поскольку awk
, sed
и т. д. не работают с двоичными файлами!), вы можете используйте команду --rm-dup
из PLINK2.0
. Список всех удаленных повторяющихся SNP можно зарегистрировать (в файл, оканчивающийся на .rmdup.list
), используя параметр list
, например:
plink2 --bgen chr22.bgen \
--sample chr22.sample \
--rm-dup exclude-all list \
--export bgen-1.1 \ # Export as bgen version 1.1
--out chr22_noDups
Примечание. Я сохраняю выходные данные как версию 1.1, поскольку в plink1.9 по-прежнему есть команды, недоступные в plink версии 2.0. Поэтому единственный способ использовать файлы bgen с plink1.9 (на данный момент) — это более старая версия 1.1.