| name | bio-differential-splicing |
| description | Detects differential alternative splicing between conditions using rMATS-turbo (BAM-based) or SUPPA2 diffSplice (TPM-based). Reports events with FDR-corrected significance and delta PSI effect sizes. Use when comparing splicing patterns between treatment groups, tissues, or disease states. |
| tool_type | mixed |
| primary_tool | rMATS-turbo |
Differential Splicing
Detect differential alternative splicing events between experimental conditions.
Tool Comparison
| Tool | Input | Approach | Strengths |
|---|
| rMATS-turbo | BAM | Junction counting | Novel junctions, statistical model |
| SUPPA2 | TPM | Transcript ratios | Speed, isoform-aware |
| leafcutter | BAM | Intron clustering | Novel events, no annotation bias |
rMATS-turbo Analysis
rmats.py \
--b1 condition1_bams.txt \
--b2 condition2_bams.txt \
--gtf annotation.gtf \
-t paired \
--readLength 150 \
--nthread 8 \
--od rmats_output \
--tmp rmats_tmp
import pandas as pd
se = pd.read_csv('rmats_output/SE.MATS.JC.txt', sep='\t')
significant = se[
(se['FDR'] < 0.05) &
(se['IncLevelDifference'].abs() > 0.1)
].copy()
print(f'{len(significant)} significant SE events')
print(significant[['GeneID', 'geneSymbol', 'IncLevelDifference', 'FDR']].head(10))
significant = significant[
(significant['IJC_SAMPLE_1'].str.split(',').apply(lambda x: min(map(int, x))) >= 10) |
(significant['SJC_SAMPLE_1'].str.split(',').apply(lambda x: min(map(int, x))) >= 10)
]
SUPPA2 Differential Analysis
import subprocess
subprocess.run([
'suppa.py', 'diffSplice',
'-m', 'empirical',
'-i', 'events_SE_strict.ioe',
'-p', 'condition1.psi', 'condition2.psi',
'-e', 'condition1.tpm', 'condition2.tpm',
'-o', 'diff_SE'
], check=True)
import pandas as pd
diff = pd.read_csv('diff_SE.dpsi', sep='\t', index_col=0)
significant = diff[
(diff['p-value'] < 0.05) &
(diff['dPSI'].abs() > 0.1)
]
leafcutter Analysis
library(leafcutter)
system('for bam in *.bam; do
regtools junctions extract -a 8 -m 50 -s 0 $bam -o ${bam%.bam}.junc
done')
writeLines(list.files(pattern = '\\.junc$'), 'juncfiles.txt')
system('python leafcutter_cluster_regtools.py -j juncfiles.txt -o leafcutter')
groups <- data.frame(
sample = c('sample1', 'sample2', 'sample3', 'sample4'),
group = c('control', 'control', 'treatment', 'treatment')
)
write.table(groups, 'groups.txt', sep = row.names
system
Significance Thresholds
| Stringency | deltaPSI | FDR | Use Case |
|---|
| Lenient | > 0.1 | < 0.05 | Discovery, exploratory |
| Standard | > 0.15 | < 0.05 | Publication |
| Stringent | > 0.2 | < 0.01 | High-confidence set |
Result Prioritization
significant['score'] = -np.log10(significant['FDR']) * significant['IncLevelDifference'].abs()
top_events = significant.nlargest(50, 'score')
Related Skills
- splicing-quantification - Calculate PSI values first
- isoform-switching - Functional consequence analysis
- sashimi-plots - Visualize significant events
- read-alignment/star-alignment - STAR 2-pass alignment required