在一群自然群体种,基因型个体的杂合度过高或者过低都是不正常的,我们需要根据杂合度来进行过滤。这里的偏差可能表明样品收到污染,或者近亲繁殖。
我们采取的做法是删除样品杂合率平均值中偏离±3 SD(sd就是标准差)的个体
非自然群体中,比如自交系,杂交种F1,这些群体不需要过滤杂合度
参数过滤合手动过滤:
plink有个特点,所有的过滤标准,都可以生成过滤之前的文件,然后可以手动过滤,也可以用参数进行过滤。
首先我们提取ID,然后用–remove来实现过滤
->计算杂合度:
plink --bfile HapMap_3_r3_9 --het --out R_check
杂合度=(N-O)/N
我们将杂合度可视化
# 先要设置工作路径
het = read.table("R_check.het", head=TRUE)
het$HET_RATE = (het$"N.NM." - het$"O.HOM.")/het$"N.NM."
hist(het$HET_RATE, xlab="Heterozygosity Rate", ylab="Frequency", main= "Heterozygosity Rate")
pdf("heterozygosity.pdf")
het$HET_RATE = (het$"N.NM." - het$"O.HOM.")/het$"N.NM."
hist(het$HET_RATE, xlab="Heterozygosity Rate", ylab="Frequency", main= "Heterozygosity Rate")
dev.off()
接着计算杂合度三倍标准差以外的个体
首先我们来查看哪些个体在3倍的标准差之外
# 先要设置工作路径
het = read.table("R_check.het", head=TRUE)
het$HET_RATE = (het$"N.NM." - het$"O.HOM.")/het$"N.NM."
het_fail = subset(het, (het$HET_RATE < mean(het$HET_RATE)-3*sd(het$HET_RATE)) | (het$HET_RATE > mean(het$HET_RATE)+3*sd(het$HET_RATE)));
het_fail$HET_DST = (het_fail$HET_RATE-mean(het$HET_RATE))/sd(het$HET_RATE);
write.table(het_fail, "fail-het-qc.txt", row.names=FALSE)
我们从结果可以看出,这两个个体杂合度在3倍标准差之外
去掉这两个个体之后,先对数据进行清洗,去掉引号,然后提取家系合个体ID
我们使用remove去掉这两个个体
plink --bfile HapMap_3_r3_9 --remove het_fail_ind.txt --make-bed --out HapMap_3_r3_10