现在GWAS更多使用LMM模型,这个模型plink没法做,下面介绍GEMMA软件。学习plink软件做GWAS,更多的是学习数据质控和GWAS原理,真正应用广泛的还要是混合线性模型LMM或MLM,GEMMA是一个明星软件,当然也有其它软件,比如GAPIT、FamCPU、rMVP、GCTA,最近又新出了一个fastGWS软件,后面的教程都要包含在内。 GEMMA名称来源: - G:Genome-wide - E:Efficient - MM:Mixed-model - A:Association GEMMAX主要特点:快
就是它跑3.3h,其它软件跑27年的那种!!!
GEMMA语法特点 相对于plink的语法,GEMMA语法更简练,一个杠,一个字母。比如: GEMMA支持plink的二进制文件: GEMMA生成G矩阵: gemma-0.98.1-linux-static -bfile c -gk 2 -p p.txt GEMMA分析MLM模型: gemma-0.98.1-linux-static -bfile c -k output/result.sXX.txt -lmm 1 -p p.txt 结果查看:
干货来了:
GEMMA软件默认是没有PVE的(snp解释表型变异百分比),根据PVE的公式:
分子分母都有MAF*(1-MAF),可以删除,剩下的公式为:
PVE = 2* beta^2 /( 2*beta^2 + 2*N*se^2) 这里写了一个代码脚本,输入结果文件和样本个数,就可以生成pve的结果和显著性位点。
代码如下:
$ cat ~/bin/add_pve_from_gemma_result_and_tiqu_sig.R #! /home/dengfei/bin/Rscript
args = commandArgs(T)
if(length(args) == 0){ cat("\n\n\tRscript add_pve_from_gemma_result_and_tiqu_sig.R result.assoc.txt N,geaam的gwas结果, N为分析的样本数\n 结果生成文件:添加pve的文件:result.assoc_add_pve.txt,还有显著性文件:result_signals.csv\n") quit("no") }
library(data.table) library(tidyverse)
N = as.numeric(args[2]) # d1 = fread("output/result.assoc.txt") dd = fread(args[1]) head(dd)
dd$pve = 2*dd$beta^2/(2*dd$beta^2+dd$se^2 * 2 * (N-dd$n_miss)) head(dd) fwrite(dd,"result.assoc_add_pve.txt",sep=" ",quote=F)
# 导出显著性的SNP位点
dat1 = dd %>% dplyr::select(SNP = rs, CHROM = chr, POS = ps,REF=allele1, ALT=allele0, maf = af,Effect = beta, SE=se, pvalue = p_wald,pve) %>% drop_na(pvalue) head(dat1)
p_th = 1/nrow(dat1)
dat2 = dat1 %>% filter(pvalue <p_th) fwrite(dat2,"result_signals.csv")
代码调用说明: $ add_pve_from_gemma_result_and_tiqu_sig.R
Rscript add_pve_from_gemma_result_and_tiqu_sig.R result.assoc.txt N,geaam的gwas结果, N为分析的样本数
结果生成文件:添加pve的文件:result.assoc_add_pve.txt,还有显著性文件:result_signals.csv
代码调用演示: 结果文件: result.assoc_add_pve.txt result_signals.csv
|