| name | bio-atac-seq-differential-accessibility |
| description | Find differentially accessible chromatin regions between conditions using DiffBind or DESeq2. Use when comparing chromatin accessibility between treatment groups, cell types, or developmental stages in ATAC-seq experiments. |
| tool_type | r |
| primary_tool | DiffBind |
Differential Accessibility
DiffBind Workflow
library(DiffBind)
samples <- data.frame(
SampleID = c('ctrl_1', 'ctrl_2', 'treat_1', 'treat_2'),
Condition = c('control', 'control', 'treated', 'treated'),
Replicate = c(1, 2, 1, 2),
bamReads = c('ctrl_1.bam', 'ctrl_2.bam', 'treat_1.bam', 'treat_2.bam'),
Peaks = c('ctrl_1.narrowPeak', 'ctrl_2.narrowPeak', 'treat_1.narrowPeak', 'treat_2.narrowPeak')
)
write.csv(samples, 'samples.csv', row.names=FALSE)
dba <- dba(sampleSheet='samples.csv')
dba <- dba.count(dba)
dba <- dba.normalize(dba)
dba <- dba.contrast(dba, contrast=c('Condition', 'treated', 'control'))
dba <- dba.analyze(dba)
results <- dba.report(dba)
DiffBind with Consensus Peaks
library(DiffBind)
dba <- dba(sampleSheet='samples.csv')
dba <- dba.count(dba,
summits=250,
minOverlap=2,
score=DBA_SCORE_NORMALIZED)
dba <- dba.normalize(dba, normalize=DBA_NORM_NATIVE)
dba <- dba.contrast(dba, contrast=c('Condition', 'treated', 'control'))
dba <- dba.analyze(dba, method=DBA_DESEQ2)
results <- dba.report(dba, th=0.05, bCounts
write.csvas.data.frameresults
DiffBind Visualizations
dba.plotPCA(dba, attributes=DBA_CONDITION)
dba.plotMA(dba)
dba.plotVolcano(dba)
dba.plotHeatmap(dba, contrast=1, correlations=FALSE)
dba.plotVenn(dba, contrast=1, bDB=TRUE, bGain=TRUE, bLoss=TRUE)
Using DESeq2 Directly
library(DESeq2)
library(GenomicRanges)
counts <- read.delim('peak_counts.txt', row.names=1)
coldata <- data.frame(
row.names = colnames(counts),
condition = factor(c('control', 'control', 'treated', 'treated'))
)
dds <- DESeqDataSetFromMatrix(countData=counts, colData=coldata, design=~condition)
dds <- dds[rowSums(counts(dds)) >= 10, ]
dds DESeqdds
res resultsdds contrast
res resorderrespadj
sig subsetres padj log2FoldChange
Count Reads in Peaks
awk 'BEGIN{OFS="\t"; print "GeneID\tChr\tStart\tEnd\tStrand"}
{print $1"_"$2"_"$3, $1, $2, $3, "."}' consensus_peaks.bed > peaks.saf
featureCounts \
-a peaks.saf \
-F SAF \
-o peak_counts.txt \
-p \
--countReadPairs \
-T 8 \
*.bam
Python Alternative
import pandas as pd
import numpy as np
from scipy import stats
def simple_differential(counts_file, groups):
'''Simple differential accessibility test.'''
counts = pd.read_csv(counts_file, sep='\t', index_col=0, comment='#')
cpm = counts.div(counts.sum()) * 1e6
log_cpm = np.log2(cpm + 1)
group1 = [c for c in counts.columns if groups[c] == 'control']
group2 = [c for c in counts.columns if groups[c] == 'treated']
results = []
for peak in counts.index:
g1_vals = log_cpm.loc[peak, group1]
g2_vals = log_cpm.loc[peak, group2]
log2fc = g2_vals.mean() - g1_vals.mean()
t_stat, pval = stats.ttest_ind(g1_vals, g2_vals)
results.append({
'peak': peak,
'log2FoldChange': log2fc,
'pvalue': pval
})
df = pd.DataFrame(results)
df['padj'] = stats.false_discovery_control(df['pvalue'])
return df
Annotate Differential Peaks
library(ChIPseeker)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
diff_peaks <- dba.report(dba)
peakAnno <- annotatePeak(diff_peaks, TxDb=TxDb.Hsapiens.UCSC.hg38.knownGene)
plotAnnoPie(peakAnno)
plotDistToTSS(peakAnno)
genes <- as.data.frame(peakAnno)$geneId
Filter Results
sig_peaks <- dba.report(dba, th=0.05, fold=1)
opened <- sig_peaks[sig_peaks$Fold > 0]
closed <- sig_peaks[sig_peaks$Fold < 0]
export.bed(opened, 'opened_peaks.bed')
export.bed(closed, 'closed_peaks.bed')
Multi-factor Designs
samples$Batch <- factor(c('A', 'B', 'A', 'B'))
dba <- dba(sampleSheet=samples)
dba <- dba.count(dba)
dba <- dba.normalize(dba)
dba <- dba.contrast(dba, design='~Batch + Condition')
dba <- dba.analyze(dba)
Related Skills
- atac-seq/atac-peak-calling - Generate input peaks
- differential-expression/deseq2-basics - DESeq2 methods
- chip-seq/differential-binding - Similar DiffBind workflow
- pathway-analysis/go-enrichment - Analyze differential genes