保守AS的鉴定
参考: Identification and analysis of alternative splicing events in Phaseolus vulgaris and Glycine max
Genome-wide identification of evolutionarily conserved alternative splicing events in flowering plan
提取两端exon序列
分别对应5种保守的ASs
其中AltD
2^,1^; 1^,2^;发生AltD的转录本为2开头的那个,就提取开头为1的转录本
AltA
2-,1-; 1-,2- AltA发生在转录本为1开头的那个,提取转录本为2的
IntronR
1^2-,0 ; 0,1^2-提取转录本为1^2-的那个转录本
Exon
1-2^3-4^,0 提取转录本为0的,并且ExonS指定的是包含那个exon的intron范围
##内部经过筛选除了,选择两端长度大于20bp的
python ~/scripte/Alternative/module/extractFEST.py
-p PAcBio.gtf
-r reference.gtf
-AS end_third
-g genome.fasta
-IR 1 -ES 2 -AltA 3 -AltD 4
##统计sequence Tag范围
grep -v ">" 1 |awk '{print length($0)}'|sort -n|less
进行Blast
同一种类型的剪切、不同亚基因组之间建库
## A2 vs At 的intronR库
makeblastdb -dbtype nucl -in A2_At.fa -out A2_At
makeblastdb -dbtype nucl -in D5_Dt.fa -out D5_Dt
#区分At、Dt
grep "Ghir_A" -A1 4 |sed '/^--/d' >At4
##比对
blastn -query A2_At.fa -db A2_At -evalue 1e-5 -num_threads 2 -outfmt '6 qseqid sseqid qstart qend sstart send nident pident qcovs evalue bitscore' -out A2_At.blast
blastn -query D5_Dt.fa -db D5_Dt -evalue 1e-5 -num_threads 2 -outfmt '6 qseqid sseqid qstart qend sstart send nident pident qcovs evalue bitscore' -out D5_Dt.blast
sed -i 's/\.v2\.1//g' D5_Dt.blast
## 得到保守的AS
python ~/scripte/Alternative/module/homologBlast.py -homolog ~/work/Alternative/result/homologo/homologGene/A2_vs_At_collinearity.txt -Blast A2_At.blast -o 222
python ~/scripte/Alternative/module/homologBlast.py -homolog ~/work/Alternative/result/homologo/homologGene/D5_vs_Dt_collinearity.txt -Blast D5_Dt.blast -o 222
python ~/scripte/Alternative/module/homologBlast.py -homolog ~/work/Alternative/result/homologo/homologGene/A2_vs_D5_collinearity.txt -Blast A2_D5.blast -o 222
python ~/scripte/Alternative/module/homologBlast.py -homolog ~/work/Alternative/result/homologo/homologGene/At_vs_Dt_collinerity.txt -Blast At_Dt.blast -o 222
##多个AS时得到最保守的AS
# A2 vs At
cat 222|awk '$1~/^evm/&&$2~/^Gh/{print $0}$1~/^Gh/&&$2~/^evm/{print $2,$1,$3}' OFS="\t"|sort |uniq |awk '{print $2,$3,$1}' OFS="\t"|sort -k3 -k2,2nr|uniq -f2|awk '{print $3"\t"$2"\t"$1}'|sort -k3 -k2,2nr|uniq -f2 >A2_At_conserve_end
#D5 vs Dt
cat 222|awk '$1~/^Gor/&&$2~/^Gh/{print $0}$1~/^Gh/&&$2~/^Gor/{print $2,$1,$3}' OFS="\t"|sort |uniq |awk '{print $2,$3,$1}' OFS="\t"|sort -k3 -k2,2nr|uniq -f2|awk '{print $3"\t"$2"\t"$1}'|sort -k3 -k2,2nr|uniq -f2 >D5_Dt_conserve_end
# A2 vs D5
cat 222|awk '$1~/^evm/&&$2~/^G/{print $0}$1~/^Go/&&$2~/^evm/{print $2,$1,$3}' OFS="\t"|sort |uniq |awk '{print $2,$3,$1}' OFS="\t"|sort -k3 -k2,2nr|uniq -f2|awk '{print $3"\t"$2"\t"$1}'|sort -k3 -k2,2nr|uniq -f2 >A2_D5_conserve_end
#At vs Dt
cat 222|awk '$1~/^Ghir_A/&&$2~/^Ghir_D/{print $0}$1~/^Ghir_D/&&$2~/^Ghir_A/{print $2,$1,$3}' OFS="\t"|sort |uniq |awk '{print $2,$3,$1}' OFS="\t"|sort -k3 -k2,2nr|uniq -f2|awk '{print $3"\t"$2"\t"$1}'|sort -k3 -k2,2nr|uniq -f2 >At_Dt_conserve_end
同源基因间AS event数目统计
统计剪切事件在同源基因间发生的次数
#A2 vs At
python ~/scripte/Alternative/module/homologASeventCount.py -homolog ~/work/Alternative/result/homologo/homologGene/A2_vs_At_collinearity.txt -AS1 ~/work/Alternative/result/homologo/A2/end_third -AS2 ~/work/Alternative/result/homologo/TM-1/end_third -T IntronR -o A2_At_IR
# D5 vs Dt
python ~/scripte/Alternative/module/homologASeventCount.py -homolog ~/work/Alternative/result/homologo/homologGene/D5_vs_Dt_collinearity.txt -AS1 ~/work/Alternative/result/homologo/D5/end_third -AS2 ~/work/Alternative/result/homologo/TM-1/end_third -T IntronR -o D5_Dt_IR
##最后统一去重
tmp=`mktemp`
for i in `ls ./`; do sort ${i}|uniq >${tmp} && cp ${tmp} ${i}; done
只有同源基因都存在剪切事件,才会考虑保守性;如果仅仅只有一个同源基因存在,到时候可以看看对应的亚基因组有没有保守的事件
consevePairegenes目录
for i in `ls ./homologeventStatic`; do awk '$2>0&&$4>0{print $0}' ./homologeventStatic/${i} >./consevePairegenes/${i}; done
##对应的事件数目
for i in `ls ./`
do
printf $i"\t"
awk '{a+=$2+$4}END{print a}' ${i}
done
##保守的基因对和事件数目
相同亚基因组比较
比较
基因对数
事件数目
保守基因对
保守事件
IR A2 vs At
4508
31401
3075
11618
D5 vs Dt
5574
37375
3852
13812
ES A2 vs At
388
1285
256
542
724
2428
547
1192
AltA A2 vs At
1201
4239
610
1372
1661
5591
1031
2288
AltD A2 vs At
868
3041
430
948
1192
4000
713
1564
> >
在IR事件上,A基因组中共有4508对同源基因存在31401个IR事件,其中3075对基因表现出保守的IR,保守的IR事件占总共事件的36.99%;D基因组中共有5574对同源基因存在37375个IR事件,其中3852对占据13812件(36.95%)保守事件
在ES事件上,A基因组中388对同源基因有1285个事件,其中256对同源基因271(21.08%)为保守的;
D基因组中724对同源基因有2428个事件,其中547对同源基因1192(49.09%)为保守的
在AltA中,A基因组1201对同源基因有4239个事件,其中610对同源基因1372(32.37%)为保守的AltA
D基因组中1661对同源基因有5591个事件,其中1031对基因2288(40.9%)为保守的AltA
在AltD中,A基因组868对同源基因3041个事件,其中430对同源基因31.17%为保守的AltD
D基因组中1192对同源基因4000个事件,其中713对同源基因1564(39.1%)为保守的AltD
不同亚基因组之间进行比较看看
At vs Dt与A2 vs D5 在IR保留事件上
比较
基因对数
事件数目
保守基因对数
事件数目
IR A2 vs D5
4849
32875
2908
10110
At vs Dt
4737
31889
3219
11360
ES A2 vs D5
446
1521
233
494
At vs Dt
462
1502
297
638
AltA A2 vs D5
1136
3840
518
1122
At vs Dt
1527
5217
911
2036
AltD A2 vs D5
729
2409
317
682
At vs Dt
1220
4256
722
1632
IR 30.75%~35.62%
ES: 32.48%~42.48%
AltA:29.22%~39.03%
AltD:28.31%~38.35%
比较A2 D5在二倍体时期,保守的IR,与At、Dt四倍体时期保守的IR看看存在多少交集
使用画图脚本conserveAS.R

保守事件与非保守事件、总事件之间长度比较
python ~/scripte/Alternative/module/extractAsEventCoordiate.py
-p ~/work/Alternative/result/Ga_result/CO11_12_result/06_Alignment/all.collapsed.gtf
-r ~/work/Alternative/data/Ga_genome/G.arboreum.Chr.v1.0.gtf
-AS ~/work/Alternative/result/homologo/A2/end_third
-IR IR_length -ES ES_length -AltA AltA_length -AltD AltD_length
## 提取保守的与不保守的事件的长度
for i in ES IR AltA AltD; do
cat ../blastdb/${i}/A2_At_conserve_end ../blastdb/${i}/A2_D5_conserve_end |cut -f1|sort |uniq |awk '{print "-\t-\t-\t"$0}'|cat - ../A2/${i}_length|sort -k4|uniq -f3 -d >${i}/conserve_${i}.txt;
cat ../blastdb/${i}/A2_At_conserve_end ../blastdb/${i}/A2_D5_conserve_end |cut -f1|sort |uniq |awk '{print "-\t-\t-\t"$0}'|cat - ../A2/${i}_length|sort -k4|uniq -f3 -u >${i}/noconserve_${i}.txt;
done
## 绘图数据
for i in ES AltA AltD IR; do for j in conserve noconserve; do awk '{print "'$i'""_""'$j'""\t"$3-$2+1"\t""'$j'"}' ${i}/${j}_${i}.txt >>./plotData ; done; done

可以看到在AltA、AltD、IR中保守的剪切事件相比与不保守的剪切事件更长;这可能是由于在植物中剪切复合体通过识别intron,对前体mRNA进行剪切,因此intron越长不容易被剪切复合体识别,从在mRNA中被保留;但是由于保守的AS事件,可能存在一定的功能,受到选择压的作用,即使长度相比与不保守的AS仍旧不能够被剪切。
但是保守的ES与不保守的ES在长度上没有显著性的差别。
可参考 Genome-wide survey of Alternative Splicing in Sorghum Bicolor
保守事件中碱基数为3的比例
awk '{a=$3-$2+1;if(a%3==0){b+=1};}END{print b/NR}' conserve_IR.txt
事件
保守事件
不保守事件
IR
0.347536
0.335992
AltA
0.372501
0.340563
AltD
0.392737
0.334963
ES
0.408131
0.420226
基因保守率计算
(保守的事件数/A基因组事件数+保守事件数/B基因组事件数)/2
## 计算每对基因保守程度
python ~/scripte/Alternative/module/conservePrecentage.py -homolog ~/work/Alternative/result/homologo/homologGene/A2_vs_At_collinearity.txt -isform ../../homologeventStatic/A2_At_IR -AS A2_At_conserve_end -o conserve_precentage.txt
## 转换格式
awk 'NR%2!=0{printf $1"\t"$2"\t"}NR%2==0{print $1"\t"$2}' conserve_precentage.txt
## 平均保守率
cat conserve_precentage.txt|awk 'NR%2!=0{print $0}' |awk '{a+=$2}END{print a/NR}'
## A2_vs_D5 与At_vs_Dt中同源基因在AS保守性上的比较
0.533165 0.574669 也没有多大区别
存在保守剪切事件的基因中,ES事件的平均保守率为0.7856,AltA事件的平均保守率为0.7646,AltD事件的平均保守率为0.7636,IR事件的平均保守率为0.5841。
保守率的高低可能和对应事件碱基数是否是3的倍数有关
提取保守基因对对应的AS事件,在碱基为3的倍数的比例
## 转换一个保守率的格式
awk 'NR%2!=0{printf $1"\t"$2"\t"}NR%2==0{print $1"\t"$2}' AltA
## 运行脚本
python ~/scripte/Alternative/module/BaseConserve.py -length1 ../../A2/AltA_length -length2 ../../D5/AltA_length At_length -length4 ../../TM1/AltA_Dt_length -AsCount1 ../../homologeventStatic/A2_At_AltA -AsCount2 ../../homologeventStatic/A2_D5_AltA -AsCount3 ../../homologeventStatic/At_Dt_AltA -AsCount4 ../../homologeventStatic/D5_Dt_AltA -precentage ./111 -o 222
## 批量脚本
for i in AltA AltD ES IR; do awk 'NR%2!=0{printf $1"\t"$2"\t"}NR%2==0{print $1"\t"$2}' ${i} >111; python ~/scripte/Alternative/module/BaseConserve.py -length1 ../../A2/${i}_length -length2 ../../D5/${i}_length -length3 ../../TM1/${i}_At_length -length4 ../../TM1/${i}_Dt_length -AsCount1 ../../homologeventStatic/A2_At_${i} -AsCount2 ../../homologeventStatic/A2_D5_${i} -AsCount3 ../../homologeventStatic/At_Dt_${i} -AsCount4 ../../homologeventStatic/D5_Dt_${i} -precentage ./111 -o 222; paste ./111 ./222 >./Baseconserve/${i}; done
## 事件碱基数为3的比率和保守率
事件类型 事件保守率 碱基数为3的比率
AltA 0.764633 0.370251
AltD 0.763523 0.376887
ES 0.785635 0.376639
IR 0.584109 0.341613
可能是由于IR事件比较多的原因,所以只用那些一个基因里所有事件都保守的去看
保守事件在基因组的位置,所有的剪切事件在基因组的位置
提取gene坐标,制作bin,固定100个窗口
## 制作bin
~/software/bedtools2-2.29.0/bin/windowMaker -i winnum -n 100 -b A2_gene.bed >A2_window.bed
## 提取保守的剪切事件bed文件
cat ../../blastdb/IR/A2_At_conserve_end ../../blastdb/IR/A2_D5_conserve_end|cut -f1|sort |uniq |awk -F "-" '{print $2,$3,$4,$1}' OFS="\t"
## 取交集,统计每个bin所在总的百分比
awk '{if($5=="."){a[$4]+=0}else{a[$4]+=1}}END{for(i in a){print i"\t"a[i]}}' 1 >2
看文章好像gene是按照intron来分bin的
做了一下,确实是这样的。
## 提取转录本1的量化坐标
## 取交集
~/software/bedtools2-2.29.0/bin/intersectBed -loj -a ../genomeAnnotion/A2.bed -b ./A2_conserve.bed >1
awk '{if($6=="."){a[$4]+=0}else{a[$4]+=1}}END{for(i in a){print i"\t"a[i]}}' 1 >2
total=`wc -l A2_conserve.bed|awk '{print $1}'`
## 做出50个bin,并且计算占的比例
awk '{for(i=0;i<1;i+=0.02){if($1>=i&&$1<i+0.02){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total'"}}' 2 >3
## 20个bin
awk '{for(i=0;i<1;i+=0.05){if($1>=i&&$1<i+0.05){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total'"}}' 2 >3
## 不仅仅看保守的事件,还有整体趋势
cat ~/work/Alternative/result/homologo/A2/end_third |awk '$3~/IntronR/{print $1,$4,$5}' OFS="\t" |sort -k1,1 -k2,3n|uniq >A2_all.bed
## for 循环
for i in A2 D5 TM1; do ~/software/bedtools2-2.29.0/bin/intersectBed -loj -a ../genomeAnnotion/${i}_isform1.bed -b ./${i}_conserve.bed >1; ~/software/bedtools2-2.29.0/bin/intersectBed -loj -a ../genomeAnnotion/${i}_isform1.bed -b ./${i}_all.bed >2; awk '{if($6=="."){a[$4]+=0}else{a[$4]+=1}}END{for(i in a){print i"\t"a[i]}}' 1 >3; awk '{if($6=="."){a[$4]+=0}else{a[$4]+=1}}END{for(i in a){print i"\t"a[i]}}' 2 >4; total1=`wc -l ${i}_conserve.bed|awk '{print $1}'`; total2=`wc -l ${i}_all.bed|awk '{print $1}'`; awk '{for(i=0;i<1;i+=0.02){if($1>=i&&$1<i+0.02){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total1'"}}' 3 >${i}_conservePosition50.txt; awk '{for(i=0;i<1;i+=0.05){if($1>=i&&$1<i+0.05){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total1'"}}' 3 >${i}_conservePosition20.txt; awk '{for(i=0;i<1;i+=0.02){if($1>=i&&$1<i+0.02){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total2'"}}' 4 >${i}_allPosition50.txt; awk '{for(i=0;i<1;i+=0.05){if($1>=i&&$1<i+0.05){a[i]+=$2}}}END{for(i in a){print i"\t"a[i]"\t"a[i]/"'$total2'"}}' 4 >${i}_allPosition20.txt; done
## 合并画图数据
for i in A2 D5 TM1; do for j in AltA AltD ES IR; do awk '{print $0"\tconserve\t""'${j}'"}' ../${j}/${i}_conservePosition20.txt >>${i}; awk '{print $0"\tall\t""'${j}'"}' ../${j}/${i}_allPosition20.txt >>${i}; done; done
Last updated
Was this helpful?