美文网首页科研信息学
基因型数据与1000G merge后做PCA看人群分布

基因型数据与1000G merge后做PCA看人群分布

作者: 又是一只小菜鸟 | 来源:发表于2020-06-18 10:43 被阅读0次

写在前面,对于生信新手来说,不熟悉代码的基础,总是空中楼阁一般,想搜一条代码、做一些适合自己数据的运算更是难上加难,踩过的坑总要填,为了新手们不要像我一样浪费时间在这苦恼的代码上,我尽量用通俗的话让大家能检索到。


我目前要做的是想看下我的基因型数据人种(population)分布情况,是欧洲人?亚洲人?还是其他的?因为我要把非欧洲人去掉以进行后续研究。
因为1kg有population信息,所以我首先要把自己的基因型数据和1kg的merge到一起,再做PCA(MDS也可以),然后通过R包绘图,看我的基因型文件的样本落在了1kg人种的那一堆儿里。

总体思路是这样,我会引用一些其他推文的代码,因为毕竟不是自己写得,都是查啊查。感谢其他作者哦,我会写明出处。


下载并整理1000G基因型文件

这是地址http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/
自己下载吧。下载后的格式是vcf,要转成plink格式。

for num in {1..22}
do plink --vcf ALL.chr${num}.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz --recode --out chr${num}
done

for num in {1..22}
do plink --file chr${num} --make-bed --out chr${num}
done

for num in {1..22}
do plink --bfile chr${num} --exclude ./1000g_phase3-merge.missnp --make-bed --out ./chr${num}
done
#新建chr_merge_list文件,chr1-chr22,每行一个;
plink --bfile chr1 --merge-list ./chr_merge_list --make-bed --keep-allele-order --snps-only --out 1000g_phase3

1KG与自己的数据merge

这一步有点多,新手们千万别烦,照着代码贴上去做一遍就明白了。

#提取自己数据集的snp名称;
awk '{print$2}' hcp_qc.bim > hcp_SNPs.txt
#从1KG中提取与hcp数据集相同的snp;
plink --bfile 1000g_phase3 --extract hcp_SNPs.txt --make-bed --out 1kG_sameSNP_hcp
#同理,反配一遍;
awk '{print$2}' 1kG_sameSNP_hcp.bim > hcp_1KG_SNPs.txt
plink --bfile hcp_qc --extract hcp_1KG_SNPs.txt --make-bed --out hcp_sameSNP_1KG
#same build
awk '{print$2,$4}' hcp_sameSNP_1KG.bim > buildhcp.txt
plink --bfile 1kG_sameSNP_hcp --update-map buildhcp.txt --make-bed --out 1kG_sameSNP_hcp_same_build
#有相同allele1
awk '{print$2,$5}' 1kG_sameSNP_hcp_same_build.bim > 1kg_ref-list.txt
plink --bfile hcp_sameSNP_1KG --reference-allele 1kg_ref-list.txt --make-bed --out hcp_sameSNP_1KG-adj
#解决flip问题
awk '{print$2,$5,$6}' 1kG_sameSNP_hcp_same_build.bim > 1kG_sameSNP_hcp_same_build_tmp
awk '{print$2,$5,$6}' hcp_sameSNP_1KG-adj.bim > hcp_sameSNP_1KG-adj_tmp
sort 1kG_sameSNP_hcp_same_build_tmp hcp_sameSNP_1KG-adj_tmp |uniq -u > all_differences.txt
awk '{print$1}' all_differences.txt | sort -u > flip_list.txt
plink --bfile hcp_sameSNP_1KG-adj --flip flip_list.txt --reference-allele 1kg_ref-list.txt --make-bed --out corrected_hcp
#查看翻转后哪个还有问题
awk '{print$2,$5,$6}' corrected_hcp.bim > corrected_hcp_tmp
sort 1kG_sameSNP_hcp_same_build_tmp corrected_hcp_tmp |uniq -u  > uncorresponding_SNPs.txt
#去掉还是配不上的snp
awk '{print$1}' uncorresponding_SNPs.txt | sort -u > SNPs_for_exlusion.txt
plink --bfile corrected_hcp --exclude SNPs_for_exlusion.txt --make-bed --out HCP
plink --bfile 1kG_sameSNP_hcp_same_build --exclude SNPs_for_exlusion.txt --make-bed --out 1kG
#merge hcp and 1KG
plink --bfile HCP --bmerge 1kG.bed 1kG.bim 1kG.fam --allow-no-sex --make-bed --out hcp_merge_1KG

下载1KG panel文件

http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/
这里有人种信息,我们画图时就要以这个信息分组。

# Convert population codes into superpopulation codes (i.e., AFR,AMR,ASN, and EUR).
awk '{print$1,$1,$2}' integrated_call_samples_v3.20130502.ALL.panel > race_1kG.txt
sed 's/JPT/ASN/g' race_1kG.txt>race_1kG2.txt
sed 's/ASW/AFR/g' race_1kG2.txt>race_1kG3.txt
sed 's/CEU/EUR/g' race_1kG3.txt>race_1kG4.txt
sed 's/CHB/ASN/g' race_1kG4.txt>race_1kG5.txt
sed 's/CHD/ASN/g' race_1kG5.txt>race_1kG6.txt
sed 's/YRI/AFR/g' race_1kG6.txt>race_1kG7.txt
sed 's/LWK/AFR/g' race_1kG7.txt>race_1kG8.txt
sed 's/TSI/EUR/g' race_1kG8.txt>race_1kG9.txt
sed 's/MXL/AMR/g' race_1kG9.txt>race_1kG10.txt
sed 's/GBR/EUR/g' race_1kG10.txt>race_1kG11.txt
sed 's/FIN/EUR/g' race_1kG11.txt>race_1kG12.txt
sed 's/CHS/ASN/g' race_1kG12.txt>race_1kG13.txt
sed 's/PUR/AMR/g' race_1kG13.txt>race_1kG14.txt
# Create a racefile of your own data.
awk '{print$1,$2,"OWN"}' hcp_qc.fam>racefile_own.txt
cat race_1kG14.txt racefile_own.txt | sed -e '1i\
FID IID race' > racefile.txt

在R中画PCA图,以下都是在R中完成

setwd('D:/my_subject/PCA')
data<- read.table(file="hcp_merge_1KG_pca.eigenvec",header=FALSE)
names(data)=c("FID","IID","PC1","PC2","PC3","PC4","PC5","PC6","PC7","PC8","PC9","PC10","PC11","PC12","PC13","PC14","PC15","PC16","PC17","PC18","PC19","PC20")
race<- read.table(file="racefile.txt",header=TRUE)
datafile<- merge(data,race,by=c("IID","FID"))
head(datafile)

pdf("PCA.pdf",width=10,height=10)
for (i in 1:nrow(datafile))
{
  if (datafile[i,23]=="OWN") {plot(datafile[i,4],datafile[i,3],type="p",xlim=c(-0.04,0.03),ylim=c(-0.04,0.03),xlab="PC2",ylab="PC1",pch=1,cex=0.5,col="yellow")}
  par(new=T)
  if (datafile[i,23]=="EUR") {plot(datafile[i,4],datafile[i,3],type="p",xlim=c(-0.04,0.03),ylim=c(-0.04,0.03),xlab="PC2",ylab="PC1",pch=1,cex=0.5,col="green")}
  par(new=T)
  if (datafile[i,23]=="ASN") {plot(datafile[i,4],datafile[i,3],type="p",xlim=c(-0.04,0.03),ylim=c(-0.04,0.03),xlab="PC2",ylab="PC1",pch=1,cex=0.5,col="black")}
  par(new=T)
  if (datafile[i,23]=="AMR") {plot(datafile[i,4],datafile[i,3],type="p",xlim=c(-0.04,0.03),ylim=c(-0.04,0.03),xlab="PC2",ylab="PC1",pch=1,cex=0.5,col="blue")}
  par(new=T)
  if (datafile[i,23]=="AFR") {plot(datafile[i,4],datafile[i,3],type="p",xlim=c(-0.04,0.03),ylim=c(-0.04,0.03),xlab="PC2",ylab="PC1",pch=1,cex=0.5,col="red")}
  par(new=T)
}
legend("topright", pch=c(1,1,1,1,1),c("EUR","ASN","AMR","AFR","OWN"),col=c("green","black","blue","red","yellow"),bty="o",cex=1)
dev.off()
注意的几点:

datafile[i,23]=="EUR"这句的23要改一下,你的人种信息放到哪列的就要改成相应的列数;
xlim=c(-0.04,0.03)这句要根据你自己的PCA最大值最小值改一下范围;
datafile[i,4],datafile[i,3]这个要改一下,我的PC2是第4列,所以前面写4,看你画哪两列的图;
xlab="PC2",ylab="PC1"这句标签也改一下,对应你前面选好的列;

大功告成!图就做好了,我的数据人群分布太散了,就不贴上来了,以免误导大家。
参考推文:https://www.jianshu.com/p/286050959dbd
感谢作者哦,我只是要做他内容中的一小部分,所以当时找这块内容的时候太不容易了。还是生信网友推给我的。感谢各位在生信路上一起的小伙伴们。

相关文章

  • 基因型数据与1000G merge后做PCA看人群分布

    写在前面,对于生信新手来说,不熟悉代码的基础,总是空中楼阁一般,想搜一条代码、做一些适合自己数据的运算更是难上加难...

  • 使用 QTLtools 进行 PCA 分析

    3 使用 QTLtools 进行 PCA 分析 QTLtools 工具可以进行基因型的PCA分析,也可以进行表型的...

  • 单细胞数据分析之PCA再认识与ScaleData函数

    我们首先再认识一下PCA 数据做PCA分析的前提是1、主成分分析认为主元之间彼此正交,样本呈高斯分布;2、主成分分...

  • 从数据分析到数据建模

    一.数据可视化 1.数据分布情况 2.直方图 3.PCA(Principal Component Analysis...

  • 4.2 基因型数据描述性统计

    完成标记开发后,会得到基因型数据,首先要对基因型数据进行统计,用到的工具是plink,安装及基础用法见链接:pli...

  • admixture 群体结构分析

    tructure是与PCA、进化树相似的方法,就是利用分子标记的基因型信息对一组样本进行分类,分子标记可以是SNP...

  • PCA与LDA做数据降维

    1 PCA 主成分分析 理论 PCA(Principal Component Analysis) 具体使用代码 2...

  • 雄兵连之武神-76、曙光号

    “目标刑天,检索基因数据!” “数据检索中……数据检索分析完成!“ “代号:刑天,类盘古体生命; 超级基因型号:后...

  • 1.PCA

    先上例子: 图1根本看不出是什么分布,将图一的数据进行PCA分析,可以得到图二所示:PCA过程:1.特征值分解2....

  • 2018-07-12课程笔记(2):DIMENTION REDU

    【关键词:数据降维,PCA】 PCA(Principal Components Analytics)重要数据的定位...

网友评论

    本文标题:基因型数据与1000G merge后做PCA看人群分布

    本文链接:https://www.haomeiwen.com/subject/xudsxktx.html