A subscription to JoVE is required to view this content. Sign in or start your free trial.
שחבור חלופי (AS) ופוליאדנילציה חלופית (APA) מרחיבים את מגוון האיזופורמים של שעתוק ותוצרים. כאן אנו מתארים פרוטוקולים ביואינפורמטיים לניתוח מבחני RNA-seq בתפזורת ו-3' של ריצוף קצה כדי לזהות ולהמחיש AS ו-APA המשתנים בין תנאי ניסוי.
בנוסף לניתוח הטיפוסי של RNA-Seq למדידת ביטוי גנים דיפרנציאלי (DGE) בתנאים ניסיוניים/ביולוגיים, ניתן להשתמש בנתוני RNA-seq גם כדי לחקור מנגנוני ויסות מורכבים אחרים ברמת האקסון. שחבור חלופי ופוליאדנילציה ממלאים תפקיד מכריע במגוון התפקודי של גן על ידי יצירת איזופורמים שונים כדי לווסת את ביטוי הגנים ברמה שלאחר השעתוק, והגבלת הניתוחים לרמת הגן כולה עלולה לפספס את שכבת הוויסות החשובה הזו. כאן, אנו מדגימים ניתוחים מפורטים צעד אחר צעד לזיהוי והדמיה של שימוש באקסון דיפרנציאלי ובאתר פוליאדנילציה בתנאים שונים, תוך שימוש ב- Bioconductor ובחבילות ופונקציות אחרות, כולל DEXSeq, diffSplice מחבילת לימה ו- rMATS.
RNA-seq היה בשימוש נרחב לאורך השנים בדרך כלל להערכת ביטוי גנים דיפרנציאליים וגילוי גנים1. בנוסף, ניתן להשתמש בו גם כדי להעריך שימוש משתנה ברמת אקסון עקב גנים המבטאים איזופורמים שונים, ובכך לתרום להבנה טובה יותר של ויסות גנים ברמה שלאחר השעתוק. רוב הגנים האאוקריוטים מייצרים איזופורמים שונים על ידי שחבור חלופי (AS) כדי להגדיל את המגוון של ביטוי mRNA. ניתן לחלק את אירועי AS לדפוסים שונים: דילוג על אקסונים שלמים (SE) שבהם אקסון ("קלטת") מוסר לחלוטין מהתמליל יחד עם האינטרונים האגפים שלו; בחירת אתר שחבור חלופי (תורם) 5' (A5SS) וחלופה 3' (מקבל) בחירת אתר שחבור (A3SS) כאשר שני אתרי שחבור או יותר נמצאים משני קצותיו של אקסון; שמירה של אינטרונים (RI) כאשר אינטרון נשמר בתוך תעתיק mRNA בוגר והדרה הדדית של שימוש באקסון (MXE) כאשר רק אחד משני האקסונים הזמינים יכול להישמר בכל פעם 2,3. פוליאדנילציה חלופית (APA) ממלאת גם תפקיד חשוב בוויסות ביטוי גנים באמצעות אתרי פולי (A) חלופיים ליצירת איזופורמים מרובים של mRNA מתעתיק יחיד4. רוב אתרי הפוליאדנילציה (pAs) ממוקמים באזור 3' לא מתורגם (3' UTRs), ומייצרים איזופורמים של mRNA עם אורכי UTR מגוונים של 3'. מכיוון שה-UTR 3' הוא הרכזת המרכזית לזיהוי אלמנטים רגולטוריים, אורכי UTR שונים של 3' יכולים להשפיע על לוקליזציה, יציבות ותרגוםmRNA 5. ישנם סוגים של מבחני רצף קצה 3 'הממוטבים לזיהוי APA השונים בפרטי הפרוטוקול6. הצינור המתואר כאן מיועד ל- PolyA-seq, אך ניתן להתאים אותו לפרוטוקולים אחרים כמתואר.
במחקר זה אנו מציגים צינור של שיטות ניתוח אקסון דיפרנציאליות7,8 (איור 1), שניתן לחלק לשתי קטגוריות רחבות: מבוססות אקסון (DEXSeq9, diffSplice 10) ומבוססות אירועים (ניתוח רב-משתני משוכפל של שחבור תעתיק (rMATS)11). השיטות המבוססות על אקסון משוות את שינוי הקיפול על פני תנאים של אקסונים בודדים, כנגד מידה של שינוי קיפול גנים כולל כדי לקרוא לשימוש באקסון המתבטא באופן דיפרנציאלי, ומתוך כך מחשבים מדידה ברמת הגן של פעילות AS. שיטות מבוססות אירועים משתמשות בקריאות צומת exon-intron-spanning כדי לזהות ולסווג אירועי שחבור ספציפיים כגון דילוג אקסון או שמירה של אינטרונים, ולהבחין בין סוגי AS אלה בפלט3. לפיכך, שיטות אלה מספקות תצוגות משלימות לניתוח מלא של AS12,13. בחרנו ב- DEXSeq (בהתבסס על חבילת DESeq214 DGE) ו- diffSplice (בהתבסס על חבילת Limma10 DGE) למחקר מכיוון שהם בין החבילות הנפוצות ביותר לניתוח שחבור דיפרנציאלי. rMATS נבחרה כשיטה פופולרית לניתוח מבוסס אירועים. שיטה פופולרית נוספת המבוססת על אירועים היא MISO (תערובת של איזופורמים)1. עבור APA אנו מתאימים את הגישה מבוססת exon.
איור 1. צינור ניתוח. תרשים זרימה של השלבים המשמשים בניתוח. השלבים כוללים: קבלת הנתונים, ביצוע בדיקות איכות ויישור קריאה ולאחר מכן ספירת קריאות באמצעות ביאורים עבור exons, introns ואתרי pA ידועים, סינון כדי להסיר ספירות נמוכות ונורמליזציה. נתוני PolyA-seq נותחו עבור אתרי pA חלופיים באמצעות שיטות diffSplice/DEXSeq, RNA-Seq בתפזורת נותח עבור שחבור חלופי ברמת האקסון בשיטות diffSplice/DEXseq, ואירועי AS נותחו עם rMATS. אנא לחץ כאן כדי להציג גרסה גדולה יותר של נתון זה.
נתוני ה-RNA-seq ששימשו בסקר זה נרכשו מביטוי גנים אומניבוס (GEO) (GSE138691)15. השתמשנו בנתוני RNA-seq של עכברים ממחקר זה עם שתי קבוצות מצב: נוקאאוט מסוג פראי (WT) ונוקאאוט דמוי שריר מסוג 1 (Mbnl1 KO) עם שלושה שכפולים כל אחד. כדי להדגים ניתוח שימוש באתר פוליאדנילציה דיפרנציאלית, השגנו נתוני פוליA-seq של עוברי עכברים (MEFs) (GEO Accession GSE60487)16. לנתונים יש ארבע קבוצות מצבים: סוג פראי (WT), דמוי שרירים מסוג 1/סוג 2 נוקאאוט כפול (Mbnl1/2 DKO), Mbnl 1/2 DKO עם נוקאאוט Mbnl3 (KD) ו- Mbnl1/2 DKO עם בקרת Mbnl3 (Ctrl). כל קבוצת תנאים מורכבת משני עותקים משוכפלים.
הצטרפות גיאוגרפית | מספר הפעלה של SRA | שם לדוגמה | תנאי | לשכפל | טישו | רצף | אורך קריאה | |
רנ"א-סק | GSM4116218 | SRR10261601 | Mbnl1KO_Thymus_1 | נוקאאוט Mbnl1 | נציג 1 | התימוס | סוף מזווג | 100 כ"ס |
GSM4116219 | SRR10261602 | Mbnl1KO_Thymus_2 | נוקאאוט Mbnl1 | חזרה 2 | התימוס | סוף מזווג | 100 כ"ס | |
GSM4116220 | SRR10261603 | Mbnl1KO_Thymus_3 | נוקאאוט Mbnl1 | חזרה 3 | התימוס | סוף מזווג | 100 כ"ס | |
GSM4116221 | SRR10261604 | WT_Thymus_1 | סוג פראי | נציג 1 | התימוס | סוף מזווג | 100 כ"ס | |
GSM4116222 | SRR10261605 | WT_Thymus_2 | סוג פראי | חזרה 2 | התימוס | סוף מזווג | 100 כ"ס | |
GSM4116223 | SRR10261606 | WT_Thymus_3 | סוג פראי | חזרה 3 | התימוס | סוף מזווג | 100 כ"ס | |
3P-Seq | GSM1480973 | SRR1553129 | WT_1 | סוג פראי (WT) | נציג 1 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp |
GSM1480974 | SRR1553130 | WT_2 | סוג פראי (WT) | חזרה 2 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp | |
GSM1480975 | SRR1553131 | DKO_1 | Mbnl 1/2 נוקאאוט כפול (DKO) | נציג 1 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp | |
GSM1480976 | SRR1553132 | DKO_2 | Mbnl 1/2 נוקאאוט כפול (DKO) | חזרה 2 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp | |
GSM1480977 | SRR1553133 | DKOsiRNA_1 | Mbnl 1/2 נוקאאוט כפול עם Mbnl 3 siRNA (KD) | נציג 1 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp | |
GSM1480978 | SRR1553134 | DKOsiRNA_2 | Mbnl 1/2 נוקאאוט כפול עם Mbnl 3 siRNA (KD) | חזרה 2 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 36 bp | |
GSM1480979 | SRR1553135 | DKONTsiRNA_1 | Mbnl 1/2 נוקאאוט כפול עם siRNA ללא מיקוד (Ctrl) | נציג 1 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp | |
GSM1480980 | SRR1553136 | DKONTsiRNA_2 | Mbnl 1/2 נוקאאוט כפול עם siRNA ללא מיקוד (Ctrl) | חזרה 2 | פיברובלסטים עובריים לעכבר (MEFs) | קצה יחיד | 40 bp |
טבלה 1. סיכום של מערכי נתונים של RNA-Seq ו- PolyA-seq המשמשים לניתוח.
1. התקנת כלים וחבילות R המשמשים בניתוח
conda install -c daler sratoolkit
conda install -c conda-forge parallel
conda install -c bioconda star bowtie fastqc rmats rmats2sashimiplot samtools fasterq-dump cutadapt bedtools deeptools
bioc_packages<- c("DEXSeq", "Rsubread", "EnhancedVolcano", "edgeR", "limma", "maser","GenomicRanges")
packages<- c("magrittr", "rtracklayer", "tidyverse", "openxlsx", "BiocManager")
#Install if not already installed
installed_packages<-packages%in% rownames(installed.packages())
installed_bioc_packages<-bioc_packages%in% rownames(installed.packages())
if(any(installed_packages==FALSE)) {
install.packages(packages[!installed_packages],dependencies=TRUE)
BiocManager::install(packages[!installed_bioc_packages], dependencies=TRUE)
}
2. ניתוח שחבור חלופי (AS) באמצעות RNA-seq
seq 10261601 10261606 | parallel prefetch SRR{}
parallel -j 3 fastq-dump --gzip --skip-technical --read-filter pass --dumpbase --split-e --clip --origfmt {} :::
wget -nv -O annotation.gtf.gz http://ftp.ensembl.org/pub/release-103/gtf/mus_musculus/Mus_musculus.GRCm39.103.gtf.gz \ && gunzip -f annotation.gtf.gz
wget -nv -O genome.fa.gz http://ftp.ensembl.org/pub/release-103/fasta/mus_musculus/dna/Mus_musculus.GRCm39.dna.primary_assembly.fa.gz \ && gunzip -f genome.fa.gz
GTF=$(readlink -f annotation.gtf)
GENOME=$(readlink -f genome.fa)
mkdir fastqc_out
parallel "fastqc {} -o fastqc_out" ::: $RAW_DATA/*.fastq.gz
#Build STAR index
GDIR=STAR_indices
mkdir $GDIR
STAR --runMode genomeGenerate --genomeFastaFiles $GENOME --sjdbGTFfile $GTF --runThreadN 8 --genomeDir $GDIR
ODIR=results/mapping
mkdir -p $ODIR
#Align reads to the genome
for fq1 in $RAW_DATA/*R1.fastq.gz;
do
fq2=$(echo $fq1| sed 's/1.fastq.gz/2.fastq.gz/g');
OUTPUT=$(basename ${fq1}| sed 's/R1.fastq.gz//g');
STAR --genomeDir $GDIR \
--runThreadN 12 \
--readFilesCommand zcat \
--readFilesIn ${fq1}${fq2}\
--outFileNamePrefix $ODIR\/${OUTPUT} \
--outSAMtype BAM SortedByCoordinate \
--outSAMunmapped Within \
--outSAMattributes Standard
Done
Rscript prepare_mm_exon_annotation.R annotation.gtf
packages<- c("Rsubread","tidyverse", "magrittr", "EnhancedVolcano", "edgeR","openxlsx")
invisible(lapply(packages, library, character.only=TRUE))
load("mm_exon_anno.RData")
countData <- dir("bams", pattern=".bam$", full.names=T) %>%
featureCounts(annot.ext=anno,
isGTFAnnotationFile=FALSE,
minMQS=0,useMetaFeatures=FALSE,
allowMultiOverlap=TRUE,
largestOverlap=TRUE,
countMultiMappingReads=FALSE,
primaryOnly=TRUE,
isPairedEnd=TRUE,
nthreads=12)
# Non-specific filtering: Remove the exons with low counts
isexpr<- rownames(countData$counts)[rowSums(cpm(countData$counts)>1) >=3]
countData$counts<-countData$counts[rownames(countData$counts) %in%isexpr, ]
anno<-anno%>% filter(GeneID%in% rownames(countData$counts))
# Remove genes with only 1 site and NA in geneIDs
dn<-anno%>%group_by(GeneID)%>%summarise(nsites=n())%>% filter(nsites>1&!is.na(GeneID))
anno<-anno%>% filter(GeneID%in%dn$GeneID)
countData$counts<-countData$counts[rownames(countData$counts) %in%anno$GeneID, ]
library(DEXSeq)
sampleTable<-data.frame(row.names= c("Mbnl1KO_Thymus_1", "Mbnl1KO_Thymus_2", "Mbnl1KO_Thymus_3", "WT_Thymus_1", "WT_Thymus_2", "WT_Thymus_3"), condition= rep(c("Mbnl1_KO", "WT"),c(3,3)), libType= rep(c("paired-end")))
exoninfo<-anno[anno$GeneID%in% rownames(countData$counts),]
exoninfo<-GRanges(seqnames=anno$Chr,
ranges=IRanges(start=anno$Start, end=anno$End, width=anno$Width),strand=Rle(anno$Strand))
mcols(exoninfo)$TranscriptIDs<-anno$TranscriptIDs
mcols(exoninfo)$Ticker<-anno$Ticker
mcols(exoninfo)$ExonID<-anno$ExonID
mcols(exoninfo)$n<-anno$n
mcols(exoninfo)$GeneID<-anno$GeneID
transcripts_l= strsplit(exoninfo$TranscriptIDs, "\\,")
save(countData, sampleTable, exoninfo, transcripts_l, file="AS_countdata.RData")
dxd<-DEXSeqDataSet(countData$counts,sampleData=sampleTable, design=~sample+exon+condition:exon,featureID=exoninfo$ExonID,groupID=exoninfo$GeneID,featureRanges=exoninfo, transcripts=transcripts_l)
dxd %<>% estimateSizeFactors %>% estimateDispersions %T>% plotDispEsts
dxd%<>%testForDEU%>%estimateExonFoldChanges(fitExpToVar=
"condition")#Estimate fold changes
dxr=DEXSeqResults(dxd)
plotDEXSeq(dxr,"Wnk1", displayTranscripts=TRUE, splicing=TRUE,legend
=TRUE,cex.axis=1.2,cex=1.3,lwd=2)
library(limma)
library(edgeR)
mycounts=countData$counts
#Change the rownames of the countdata to exon Ids instead of genes for unique rownames.
rownames(mycounts) = exoninfo$ExonID
dge<-DGEList(counts=mycounts)
#Filtering
isexpr<- rowSums(cpm(dge)>1) >=3
dge<-dge[isexpr,,keep.lib.sizes=FALSE]
#Extract the exon annotations for only transcripts meeting non-specific filter
exoninfo=anno%>% filter(ExonID%in% rownames(dge$counts))
#Convert the exoninfo into GRanges object
exoninfo1<-GRanges(seqnames=exoninfo$Chr,
ranges=IRanges(start=exoninfo$Start, end=exoninfo$End, width=exoninfo$Width),strand=Rle(exoninfo$Strand))
mcols(exoninfo1)$TranscriptIDs<-exoninfo$TranscriptIDs
mcols(exoninfo1)$Ticker<-exoninfo$Ticker
mcols(exoninfo1)$ExonID<-exoninfo$ExonID
mcols(exoninfo1)$n<-exoninfo$n
mcols(exoninfo1)$GeneID<-exoninfo$GeneID
transcripts_l= strsplit(exoninfo1$TranscriptIDs, "\\,")
dge<-calcNormFactors(dge)
Treat<- factor(sampleTable$condition)
design<- model.matrix(~0+Treat)
colnames(design) <- levels(Treat)
v<-voom(dge,design,plot=FALSE)
fit<-lmFit(v,design)
fit<-eBayes(fit)
colnames(fit)
cont.matrix<-makeContrasts(
Mbnl1_KO_WT=Mbnl1_KO-WT,
levels=design)
fit2<-contrasts.fit(fit,cont.matrix)
ex<-diffSplice(fit2,geneid=exoninfo$GeneID,exonid=exoninfo$ExonID)
ts<-topSplice(ex,n=Inf,FDR=0.1, test="t", sort.by="logFC")
tg<-topSplice(ex,n=Inf,FDR=0.1, test="simes")
plotSplice(ex,geneid="Wnk1", FDR=0.1)
#Volcano plot
EnhancedVolcano(ts,lab=ts$ExonID,selectLab= head((ts$ExonID),2000), xlab= bquote(~Log[2]~'fold change'), x='logFC', y='P.Value', title='Volcano Plot', subtitle='Mbnl1_KO vs WT (Limma_diffSplice)', FCcutoff=2, labSize=4,legendPosition="right", caption= bquote(~Log[2]~"Fold change cutoff, 2; FDR 10%"))
mkdir rMATS_analysis
cd bams/
ls -pd "$PWD"/*| grep "WT"| tr '\n'','> Wt.txt
ls -pd "$PWD"/*| grep "Mb"| tr '\n'','> KO.txt
mv *.txt ../rMATS_analysis
python rmats-turbo/rmats.py --b1 KO.txt --b2 Wt.txt --gtf annotation.gtf -t paired --readLength 50 --nthread 8 --od rmats_out/ --tmp rmats_tmp --task pos
library(maser)
mbnl1<-maser("/rmats_out/", c("WT","Mbnl1_KO"), ftype="JCEC")
#Filtering out events by coverage
mbnl1_filt<-filterByCoverage(mbnl1,avg_reads=5)
#Top splicing events at 10% FDR
mbnl1_top<-topEvents(mbnl1_filt,fdr=0.1, deltaPSI=0.1)
mbnl1_top
#Check the gene events for a particular gene
mbnl1_wnk1<-geneEvents(mbnl1_filt,geneS="Wnk1", fdr=0.1, deltaPSI=0.1)
maser::display(mbnl1_wnk1,"SE")
plotGenePSI(mbnl1_wnk1,type="SE", show_replicates
=TRUE)
volcano(mbnl1_filt,fdr=0.1, deltaPSI=0.1,type="SE")
+xlab("deltaPSI")+ylab("Log10 Adj. Pvalue")+ggtitle("Volcano Plot of exon skipping events")
python ./src/rmats2sashimiplot/rmats2sashimiplot.py --b1 ../bams/WT_Thymus_1.bam,../bams/WT_Thymus_2.bam,../bams/WT_Thymus_3.bam --b2 ../bams/Mbnl1KO_Thymus_1.bam,../bams/Mbnl1KO_Thymus_2.bam,../bams/Mbnl1KO_Thymus_3.bam -t SE -e ../rMATS_analysis/rmats_out/SE.MATS.JC.txt --l1 WT --l2 Mbnl1_KO --exon_s 1 --intron_s 5 -o ../rMATS_analysis/rmats2shasmi_output
3. ניתוח פוליאדנילציה חלופית (APA) באמצעות ריצוף קצה 3'
anno<- read.table(file= "flanking60added.pA_annotation.bed",
stringsAsFactors=FALSE, check.names=FALSE, header=FALSE, sep="")
colnames(anno) <- c("chrom", "chromStart", "chromEnd", "name", "score", "strand", "rep", "annotation", "gene_name", "gene_id")
anno<- dplyr::select(anno,name,chrom, chromStart,chromEnd, strand,gene_id,gene_name,rep)
colnames(anno) <- c("GeneID", "Chr", "Start", "End", "Strand", "Ensembl", "Symbol", "repID")
countData<- dir("bamfiles", pattern="sorted.bam$", full.names=TRUE) %>%
# Read all bam files as input for featureCounts
featureCounts(annot.ext=anno, isGTFAnnotationFile= FALSE,minMQS=0,useMetaFeatures= TRUE,allowMultiOverlap=TRUE, largestOverlap= TRUE,strandSpecific=1, countMultiMappingReads =TRUE,primaryOnly= TRUE,isPairedEnd= FALSE,nthreads=12)%T>%
save(file="APA_countData.Rdata")
load(file= "APA_countData.Rdata")# Skip this step if already loaded
# Non-specific filtering: Remove the pA sites not differentially expressed in the samples
countData<-countData$counts%>%as.data.frame%>% .[rowSums(edgeR::cpm(.)>1) >=2, ]
anno%<>% .[.$GeneID%in% rownames(countData), ]
# Remove genes with only 1 site and NA in geneIDs
dnsites<-anno%>%group_by(Symbol)%>%summarise(nsites=n())%>% filter(nsites>1&!is.na(Symbol))
anno<-anno%>% filter(Symbol%in%dnsites$Symbol)
countData<-countData[rownames(countData) %in%anno$GeneID, ]
c("DEXSeq", "GenomicRanges") %>% lapply(library, character.only=TRUE) %>%invisible
sampleTable1<- data.frame(row.names= c("WT_1","WT_2","DKO_1","DKO_2"),
condition= c(rep("WT", 2), rep("DKO", 2)),
libType= rep("single-end", 4))
# Prepare the GRanges object for DEXSeqDataSet object construction
PASinfo <- GRanges(seqnames = anno$Chr,
ranges = IRanges(start = anno$Start, end = anno$End),strand = Rle(anno$Strand))
mcols(PASinfo)$PASID<-anno$repID
mcols(PASinfo)$GeneEns<-anno$Ensembl
mcols(PASinfo)$GeneID<-anno$Symbol
# Prepare the new feature IDs, replace the strand information with letters to match the current pA site clusterID
new.featureID <- anno$Strand %>% as.character %>% replace(. %in% "+", "F") %>% replace(. %in% "-", "R") %>% paste0(as.character(anno$repID), .)
# Select the read counts of the condition WT and DKO
countData1<- dplyr::select(countData, SRR1553129.sorted.bam, SRR1553130.sorted.bam, SRR1553131.sorted.bam, SRR1553132.sorted.bam)
# Rename the columns of countData using sample names in sampleTable
colnames(countData1) <- rownames(sampleTable1)
dxd1<-DEXSeqDataSet(countData=countData1,
sampleData=sampleTable1,
design=~sample+exon+condition:exon,
featureID=new.featureID,
groupID=anno$Symbol,
featureRanges=PASinfo)
dxd1$condition<- factor(dxd1$condition, levels= c("WT", "DKO"))
# The contrast pair will be "DKO - WT"
dxd1 %<>% estimateSizeFactors %>% estimateDispersions %T>% plotDispEsts
dxd1 %<>% testForDEU %>% estimateExonFoldChanges(fitExpToVar = "condition")
dxr1 <- DEXSeqResults(dxd1)
dxr1
mcols(dxr1)$description
table(dxr1$padj<0.1) # Check the number of differential pA sites (FDR < 0.1)
table(tapply(dxr1$padj<0.1, dxr1$groupID, any)) # Check the number of gene overlapped with differential pA site
# Select the top 100 significant differential pA sites ranked by FDR
topdiff.PAS<- dxr1%>%as.data.frame%>%rownames_to_column%>%arrange(padj)%$%groupID[1:100]
# Apply plotDEXSeq for the visualization of differential polyA usage
plotDEXSeq(dxr1,"S100a7a", legend=TRUE, expression=FALSE,splicing=TRUE, cex.axis=1.2, cex=1.3,lwd=2)
# Apply perGeneQValue to check the top genes with differential polyA site usage
dxr1%<>% .[!is.na(.$padj), ]
dgene<- data.frame(perGeneQValue= perGeneQValue (dxr1)) %>%rownames_to_column("groupID")
dePAS_sig1<-dxr1%>% data.frame() %>%
dplyr::select(-matches("dispersion|stat|countData|genomicData"))%>%
inner_join(dgene)%>%arrange(perGeneQValue)%>%distinct()%>%
filter(padj<0.1)
# Apply EnhancedVolcano package to visualise differential polyA site usage
"EnhancedVolcano"%>% lapply(library, character.only=TRUE) %>%invisible
EnhancedVolcano(dePAS_sig1, lab=dePAS_sig1$groupID, x='log2fold_DKO_WT',
y='pvalue',title='Volcano Plot',subtitle='DKO vs WT',
FCcutoff=1,labSize=4, legendPosition="right",
caption= bquote(~Log[2]~"Fold change cutoff, 1; FDR 10%"))
contrast.matrix<-makeContrasts(DKO_vs_WT=DKO-
WT,Ctrl_vs_DKO=Ctrl-DKO,
KD_vs_Ctrl=KD-Ctrl,KD_vs_DKO=KD-DKO,levels=design)
fit2<-fit%>%contrasts.fit(contrast.matrix)%>%eBayes
summary(decideTests(fit2))
ex<-diffSplice(fit2,geneid=anno$Symbol,exonid=new.featureID)
topSplice(ex) #Check the top significant results with topSplice
sig1<-topSplice(ex,n=Inf,FDR=0.1,coef=1, test="t", sort.by="logFC")
sig1.genes<-topSplice(ex,n=Inf,FDR=0.1,coef=1, test="simes")
plotSplice(ex, coef=1,geneid="S100a7a", FDR = 0.1)
plotSplice(ex,coef=1,geneid="Tpm1", FDR = 0.1)
plotSplice(ex,coef=1,geneid="Smc6", FDR = 0.1)
EnhancedVolcano(sig1, lab=sig1$GeneID,xlab= bquote(~Log[2]~'fold change'),
x='logFC', y='P.Value', title='Volcano Plot', subtitle='DKO vs WT',
FCcutoff=1, labSize=6, legendPosition="right")
לאחר הפעלת זרימת העבודה שלב אחר שלב לעיל, פלטי הניתוח AS ו- APA והתוצאות המייצגות הם בצורה של טבלאות ומתווי נתונים, שנוצרו כדלקמן.
כפי:
התפוקה העיקרית של ניתוח AS (טבלה משלימה 1 עבור diffSplice; טבלה 2 עבור DEXSeq) היא רשימה של אקסונים המציגים שימוש דיפרנציאלי ...
במחקר זה, הערכנו גישות מבוססות אקסון ומבוססות אירועים לזיהוי AS ו-APA בנתוני RNA-Seq בתפזורת ובנתוני ריצוף קצה של 3'. גישות ה-AS המבוססות על אקסון מייצרות הן רשימה של אקסונים המבוטאים באופן דיפרנציאלי והן דירוג ברמת הגן המסודר לפי המובהקות הסטטיסטית של פעילות השחבור הדיפרנציאלית הכוללת ברמת הגן (...
למחברים אין מה לחשוף.
מחקר זה נתמך על ידי מלגת העתיד של מועצת המחקר האוסטרלית (ARC) (FT16010043) ותוכנית החוזים העתידיים של ANU.
Name | Company | Catalog Number | Comments |
Not relevent for computational study |
Request permission to reuse the text or figures of this JoVE article
Request PermissionExplore More Articles
This article has been published
Video Coming Soon
Copyright © 2025 MyJoVE Corporation. All rights reserved