Github开源生信云平台 DEMO
Read , lines 1 to 400
Read , lines 400 to 800
Read , lines 800 to 1093
这个脚本是 William Rayner (牛津大学) 写的 GWAS 基因型数据质控/预处理工具,用于在把 PLINK 格式的数据拿去做 HRC (Haplotype Reference Consortium) 或 1000 Genomes 参考面板的填补 (imputation) 之前,对 .bim 文件逐位点与参考面板进行比对和修正。
.bim
把科研数据集的坐标、等位基因、链方向、ref/alt 都统一成参考面板的格式,使后续 imputation 服务器(如 Michigan Imputation Server / TOPMed)能够正确接受数据。
读取参考面板
-h
HRC.r1.GRCh37.autosomes.mac5.sites.tab
-g
1000GP_Phase3_combined.legend
逐行比对 .bim 文件里的每个 SNP,输出若干修正清单文件:
Exclude-*.txt
Chromosome-*.txt
Position-*.txt
ID-*.txt
Strand-Flip-*.txt
Force-Allele1-*.txt
LOG-*.txt
FreqPlot-*.txt
Run-plink.sh
链方向 (strand) 判定:判断数据集的等位基因与参考面板是正链一致、反链一致,还是 ref/alt 反了,分 4 种情况处理(该 flip 的 flip、该换 ref/alt 的换)
频率差质控:
-t
处理特殊位点:
生成 PLINK 执行脚本 Run-plink.sh,按顺序执行:排除 SNP → 改染色体 → 改位置 → 翻转链 → (可选)改 ID → 强制 ref 等位基因 → 按染色体拆分,最终产出与参考面板对齐的、可以直接提交 imputation 的 PLINK 数据。
perl HRC-1000G-check-bim.pl -b <bim> -f <frq> -r <参考面板> -h
-g -p <群体>
plink --freq
.frq
简单说:它就是 imputation 前必做的"strand/坐标/等位基因/频率对齐检查器",输出一组 plink 更新清单和一条可执行的 plink 命令脚本。
为什么最终生成的 bim 中存在位点 ilmnseq_1:754198在HRC.r1.GRCh37.autosomes.mac5.sites.tab 中不存在,这样正常吗
Searched for text ilmnseq_1:754198, no results
ilmnseq_1:754198
Searched for files matching **/*.bim, no matches
**/*.bim
Searched for files matching **/*sites.tab*, no matches
**/*sites.tab*
Searched for files matching **/*Exclude*, no matches
**/*Exclude*
Searched for files matching **/*ID-*, no matches
**/*ID-*
Read
正常情况下,这是预期行为,不一定是错误。关键在于这个脚本的匹配逻辑:优先按「染色体:位置」匹配,而不是按 ID 匹配。原因分两步解释:
脚本主循环里,每个 SNP 只有三种归宿(见 while (<IN>) 部分):
while (<IN>)
$id{$chrpos}
$rs{$temp[1]}
Exclude
ilmnseq_1:754198 这种 ID 在 HRC 里确实不存在(HRC 用的是 rs... 或 .)。但只要 HRC 在 chr1:754198 这个位置上有变异位点(ID 是 rs... 或 .),脚本就走第一分支:
rs...
.
$id{'1-754198'}
$idmismatch++
ilmnseq_1:754198 → HRC 的 ID
脚本默认关闭了 ID 更新这一步。在生成 Run-plink.sh 的代码里,--update-name 这 4 行是注释掉的:
--update-name
#update ids #remove the following 4 lines if you want don't want to update the SNP identifiers to match the HRC #print SH "$plink --bfile $tempfile --update-map $idfile --update-name --make-bed --out ";
所以后续 plink 流程只做了:排除 → 改染色体 → 改位置 → 翻转链 → 强制 ref 等位基因,而没有把 ID 换成 HRC 的 ID。最终 bim 里保留的仍是原始的 ilmnseq_1:754198 这个名字,尽管该位点在 HRC 里对应的是另一个 ID。
chr:pos:ref:alt
ID-<你的文件名>-HRC.txt
ilmnseq_1:754198 → rsXXXX
Exclude-<文件名>-HRC.txt
--exclude
plink --bfile ... --update-map ID-*.txt --update-name