GWAS分析练习(一) PCA

练习背景

我有一批患者WGS测序数据(100例患者),包括SNP和INDEL。患者是服用了一种药物的,想分析下患者的基因型是否和药物的疗效有关,或者与药物的不良反应有关。下面是测序公司返回的数据,和患者的表型信息。先做SNP的。


SNP and INDEL

患者表型信息

合并VCF

首先将100个患者的单独vcf文件合并成一个vcf。使用的工具是 bcftools
第一步,生成压缩文件

ls *snp.vcf | while read vcf;do bgzip -c -f -@ 10 $vcf > ../SNV_gz/${vcf}.gz;done

第二步,建立索引

ls | while read vcf;do bcftools index $vcf;done

第三步,合并

bcftools merge *gz -o ../SNP_merge.vcf

转换成 .map 和 .ped 或者二进制的 .bed .bim .fam

暂时没有发现有什么很大的区别,二进制的似乎处理速度更快。.ped和 .map 在后面的处理中也会生成二进制的,所以我倾向直接生成二进制文件。这里我写有生成 .map .ped 的方法 https://www.jianshu.com/p/adf7e0038c0f

plink --vcf SNP_merge.vcf --allow-extra-chr --make-bed --out SNP

生成三个文件,其中.bed 是 二进制,其他两个和 .map 和 .ped中差不多,具体可以看我上面网址里的也可以看官方文档里的详细介绍。

添加表型信息

我的数据中不包含父母信息,实验也与此无关,所以家庭编号和父母编号都设置为未知0,主要添加性别和表型信息。plink1.9 中修改要简单点,你可以直接使用 Unix tail, cut, paste 和sed等方式修改文件,也可以使用官方的 --update-chr, --update-cm, --update-map, and --update-name 等命令。我使用R修改表型文件(SNP.fam)。

过滤 VCF

call出的SNP位点总会存在假阳性等可能,所以要过滤下。总结几篇文章,可以过率的工具也很多,有 samtools,vcftools,plink 等。能过滤的选项也真的是多,如果扩展起来都能写几篇文章。下面是一些常主流的,过滤主要包括两方面,一是对单个样本SNP质控,包括以下(公司返回的数据已经进行了第一步的过滤)
http://www.cnblogs.com/chenwenyan/p/10563835.html
https://www.jianshu.com/p/cf7cd6b5e54a
https://www.cnblogs.com/leezx/p/9013615.html QC 部分

  • The mapping quality >30;
  • The depth of the variate position >4
  • The QUAL>20
    二是对所有样本根据生物意义和统计学进行过滤,包括以下
  • 次等位基因深度(minor allele count)不少于3
  • SNP在所有样本里缺失过多则删除此SNP
  • 样本缺失太多SNP则删除样本
  • 次等位基因频率(MAF)
    根据文献确定下面的简单过滤方式 。


--geno filters out all variants with missing call rates exceeding the provided value (default 0.1) to be removed, while --mind does the same for samples.
--maf filters out all variants with minor allele frequency below the provided threshold (default 0.01)
--hwe filters out all variants which have Hardy-Weinberg equilibrium exact test p-value below the provided threshold. We recommend setting a low threshold—serious genotyping errors often yield extreme p-values like 1e-50 which are detected by any reasonable configuration of this test, while genuine SNP-trait associations can be expected to deviate slightly from Hardy-Weinberg equilibrium (so it's dangerous to choose a threshold that filters out too many variants).

plink --bfile SNP --geno 0.1 --maf 0.05 --mind 0.05 --hwe 0.0001  --make-bed --out SNP_filter

这里过滤遇到一个问题,不清楚多个过滤选项的时候先后顺序是什么。例如其实去除 --geno>0.1 的SNP后,样本 --mind 是都小于 0.05的,但是提示我样本都不合格都被剔除了。所以我就分步进行了过滤。
过滤前100个样本,239091个SNP,过滤后只剩下11410个SNPs。

PCA 分析

https://www.jianshu.com/p/968c5cb911dd

plink --bfile SNP --pca -out SNP_pca

会生成 SNP_pca.eigenval 和 SNP_pca.eigenvec 文件。然后用R读取SNP_pca.eigenvec 文件分析。

pca<- read.table("SNP_filter/SNP_pca.eigenvec", header=F ,sep=" ")
pch <- trait[,8]
col=pch
#[1] 2 1 2 1 2 1 1 1 2 2 2 3 2 2 2 2 2 2 1 1 1 2 1 2 2 2 2 2 2 1 1 2 2 1 2 2 2
#[38] 1 2 2 1 2 2 2 2 2 2 1 1 1 2 2 2 2 2 3 1 2 2 2 1 2 2 1 2 3 3 1 2 2 2 1 1 1
#[75] 1 1 1 1 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 2 2
plot(pca$V3,pca$V4 ,pch=pch,col=col,main="pca",xlab="pc1",ylab="pc2")


根据此表型完全无法将样本分开, 同时又试了其他几个表型,也不行。所以是否是因为在遗传学上,这些样本并无太大差异,待考证。在其他文章中此方法用于 Population structure, 不同地域种群差异。
使用PC1、PC2、PC3 作图也一样。

其他参考文章

https://www.jianshu.com/p/286050959dbd
https://www.cnblogs.com/leezx/p/9013615.html
https://wenku.baidu.com/view/1b984c16482fb4daa58d4bfd.html?pn=51

你可能感兴趣的:(GWAS分析练习(一) PCA)