QTLseqr包实战

偶然发现有个R包可以做相关的QTL 分析。拿来试试。

首先 安装,参考官方文档https://github.com/bmansfeld/QTLseqr.

第一步,如果没有安装devtools的话,install.packages("devtools"),有就直接调用,如果这个不会,就不用往下看了。

第二步,devtools::install_github("bmansfeld/QTLseqr")

从github加载QTLseqr。

拿他的论文实例来演练一次。

library("QTLseqr")

看一下输入文件,文档中说不仅可以识别GATK中VariantsToTable 功能下的table格式的文件,也能识别包含每个批量的等位基因读取深度的分隔文件。调用的功能是importFromGATK and mportFromTable。

我们先从GitHub下载一个Yang2013data 。

命令如下:devtools:: install_github("bmansfeld/Yang2013data")

library("Yang2013data") 

导入数据

rawData <-system.file(

"extdata",

"Yang_et_al_2013.table",

package ="Yang2013data",

mustWork =TRUE)


如果自己有数据table格式:

rawdata<-(file_to_path/my_table_rawData <-system.file(

"extdata",

"Yang_et_al_2013.table",

package ="Yang2013data",

mustWork =TRUE)

如果自己有数据

rawdata<-(file_to_path/my_table)

然后我们分别给高低池命名。写染色体编号。

HighBulk <-"SRR834931"

LowBulk <-"SRR834927"

Chroms <-paste0(rep("Chr",12),1: 12

用GATK call snp。table文件用线面这个命令转换。

java -jar GenomeAnalysisTK.jar \

-T VariantsToTable \

-R ${REF} \

-V ${NAME} \

-F CHROM -F POS -F REF -F ALT \

-GF AD -GF DP -GF GQ -GF PL \

-o ${NAME}.table

看看ImportFromGATK 功能

df <-

importFromGATK(

file =rawData,

highBulk =HighBulk,

lowBulk =LowBulk,

chromList =Chroms

)

会计算两个池的等位基因频率,snp-index,还有Δindex。

导入一下分隔文件。可以是csv, tsv或其他格式。格式表头如下。



如果有现成的table文件,也可以importFromTable

df <-importFromTable(file ="Yang2013.csv",

highBulk =HighBulk,lowBulk =LowBulk,

chromList =Chroms)

矩阵如下:## CHROM POS REF ALT AD_REF.LOW AD_ALT.LOW DP.LOW GQ.LOW PL.LOW

## 1 Chr1 31071 A G 34 36 70 99 897,0,855

## 2 Chr1 31478 C T 34 52 86 99 1363,0,844

## 3 Chr1 33667 A G 20 48 68 99 1331,0,438

## 4 Chr1 34057 C T 38 40 78 99 1059,0,996

## 5 Chr1 35239 A C 25 36 61 99 987,0,630

## 6 Chr1 38389 T C 36 42 78 99 1066,0,906

## SNPindex.LOW AD_REF.HIGH AD_ALT.HIGH DP.HIGH GQ.HIGH PL.HIGH

## 1 0.5142857 26 22 48 99 522,0,698

## 2 0.6046512 40 34 74 99 848,0,1099

## 3 0.7058824 24 29 53 99 765,0,599

## 4 0.5128205 29 26 55 99 673,0,772

## 5 0.5901639 40 60 100 99 1632,0,1015

## 6 0.5384615 42 40 82 99 984,0,1105

## SNPindex.HIGH REF_FRQ deltaSNP

## 1 0.4583333 0.5084746 -0.055952381

## 2 0.4594595 0.4625000 -0.145191703

## 3 0.5471698 0.3636364 -0.158712542

## 4 0.4727273 0.5037594 -0.040093240

## 5 0.6000000 0.4037267 0.009836066

## 6 0.4878049 0.4875000 -0.050656660

先来看看测序深度的直方图


QTLseqr包实战_第1张图片

再来看看参考基因组的频率分布


QTLseqr包实战_第2张图片

再来看一下每个混池的snp-index,对于F2群体,大部分位点再0.5.(非连锁位点)

过滤SNP位点

df_filt <-

filterSNPs(

SNPset =df,

refAlleleFreq =0.20,

minTotalDepth =100,

maxTotalDepth =400,

depthDifference =100,

minSampleDepth =40,

minGQ =99,

verbose =TRUE

)

QTLseq analysis

开始分析

df_filt <-runQTLseqAnalysis(df_filt,

windowSize =1e6,

popStruc ="F2",

bulkSize =c(385,430),

replications =10000,

intervals =c(95,99)

)

这里好像只适用于F2与RIL,这个世界总是对BIL充满了恶意。没关系,BIL亲测也适用,

G分析。

df_filt <-runGprimeAnalysis(df_filt,

windowSize =1e6,

outlierFilter ="deltaSNP",

filterThreshold =0.1)


现在开始QTL分析

现在我们对过滤后的数据感到满意,看起来G ’接近于对数正态分布,我们

可以绘制一些全基因组数据并最终尝试识别QTL。

p1 <-plotQTLStats(SNPset =df_filt,var ="nSNPs")

从p1图中,我们可以得到全基因组snp密度。

p2 <-plotQTLStats(SNPset =df_filt,var ="deltaSNP",plotIntervals =TRUE)


QTLseqr包实战_第3张图片

超过置信区间的有4个。其中红色p<0.05,绿色P<0.01.

我们再来看一下G'是否是显著的,并且FDR (q)<0.01

p3 <-plotQTLStats(SNPset =df_filt,var ="Gprime",plotThreshold =TRUE,q =0.01)


QTLseqr包实战_第4张图片


QTLplots <-plotQTLStats(

SNPset =df_filt,var ="negLog10Pval",

plotThreshold =TRUE,

q =0.01,

subset =c("Chr1","Chr8")

)

提取显著性区间的信息

QTL <-getSigRegions(SNPset =df_filt,alpha =0.01)

提取出csv格式的数据


results <-getQTLTable(SNPset =df_filt,method ="Gprime",alpha =0.01,export =FALSE)

你可能感兴趣的:(QTLseqr包实战)