From 17a1d4ab559f8d327e2070696366d7c9177e6130 Mon Sep 17 00:00:00 2001 From: Jay Hesselberth Date: Thu, 9 Oct 2025 05:24:45 -0600 Subject: [PATCH] Use auto-dark for website --- .github/workflows/quarto.yaml | 11 ++++----- .../exercises/ex-19/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-20/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-21/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-22/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-23/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-24/execute-results/html.json | 15 +++++++++++++ .../exercises/ex-25/execute-results/html.json | 15 +++++++++++++ .../ps-key-15/execute-results/html.json | 17 ++++++++++++++ .../figure-html/clustering correlations-1.png | Bin 0 -> 74153 bytes .../figure-html/unnamed-chunk-3-1.png | Bin 0 -> 74153 bytes .../figure-html/unnamed-chunk-4-1.png | Bin 0 -> 94492 bytes .../ps-23/execute-results/html.json | 15 +++++++++++++ .../ps-24/execute-results/html.json | 15 +++++++++++++ .../ps-25/execute-results/html.json | 15 +++++++++++++ .../slides-17/execute-results/html.json | 4 ++-- .../slides-21/execute-results/html.json | 4 ++-- .../slides-22/execute-results/html.json | 2 +- .../slides-24/execute-results/html.json | 4 ++-- .../slides-24/figure-revealjs/plot-tpms-1.png | Bin 94622 -> 94307 bytes .../slides-25/execute-results/html.json | 21 ++++++++++++++++++ .../figure-revealjs/heatmap-psis-1.png | Bin 0 -> 85571 bytes .../slides-25/figure-revealjs/pca-psis-1.png | Bin 0 -> 82692 bytes .../figure-revealjs/plot-psis-2-1.png | Bin 0 -> 120148 bytes _quarto.yml | 5 +++-- 25 files changed, 204 insertions(+), 14 deletions(-) create mode 100644 _freeze/exercises/ex-19/execute-results/html.json create mode 100644 _freeze/exercises/ex-20/execute-results/html.json create mode 100644 _freeze/exercises/ex-21/execute-results/html.json create mode 100644 _freeze/exercises/ex-22/execute-results/html.json create mode 100644 _freeze/exercises/ex-23/execute-results/html.json create mode 100644 _freeze/exercises/ex-24/execute-results/html.json create mode 100644 _freeze/exercises/ex-25/execute-results/html.json create mode 100644 _freeze/problem-set-keys/ps-key-15/execute-results/html.json create mode 100644 _freeze/problem-set-keys/ps-key-15/figure-html/clustering correlations-1.png create mode 100644 _freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-3-1.png create mode 100644 _freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-4-1.png create mode 100644 _freeze/problem-sets/ps-23/execute-results/html.json create mode 100644 _freeze/problem-sets/ps-24/execute-results/html.json create mode 100644 _freeze/problem-sets/ps-25/execute-results/html.json create mode 100644 _freeze/slides/slides-25/execute-results/html.json create mode 100644 _freeze/slides/slides-25/figure-revealjs/heatmap-psis-1.png create mode 100644 _freeze/slides/slides-25/figure-revealjs/pca-psis-1.png create mode 100644 _freeze/slides/slides-25/figure-revealjs/plot-psis-2-1.png diff --git a/.github/workflows/quarto.yaml b/.github/workflows/quarto.yaml index 4f96045a..6aa7bf80 100644 --- a/.github/workflows/quarto.yaml +++ b/.github/workflows/quarto.yaml @@ -23,15 +23,16 @@ jobs: run: | quarto add --no-prompt quarto-ext/fontawesome quarto add --no-prompt sellorm/quarto-social-embeds - quarto add --no-prompt r-wasm/quarto-drop + # quarto add --no-prompt r-wasm/quarto-drop quarto add --no-prompt quarto-ext/pointer - quarto add --no-prompt r-wasm/quarto-live + # quarto add --no-prompt r-wasm/quarto-live + quarto add --no-prompt gadenbuie/quarto-auto-dark - name: 🔧 Install R uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true - r-version: 'renv' + r-version: "renv" - name: 🔁 Install system dependencies run: | @@ -63,10 +64,10 @@ jobs: if: github.event_name == 'pull_request' uses: nwtgck/actions-netlify@v3.0 with: - publish-dir: './_site' + publish-dir: "./_site" production-branch: main github-token: ${{ secrets.GITHUB_TOKEN }} - deploy-message: 'Deploy from GHA: ${{ github.event.pull_request.title || github.event.head_commit.message }} (${{ github.sha }})' + deploy-message: "Deploy from GHA: ${{ github.event.pull_request.title || github.event.head_commit.message }} (${{ github.sha }})" enable-commit-comment: false enable-github-deployment: false env: diff --git a/_freeze/exercises/ex-19/execute-results/html.json b/_freeze/exercises/ex-19/execute-results/html.json new file mode 100644 index 00000000..e067ca9a --- /dev/null +++ b/_freeze/exercises/ex-19/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "2736eeed9e0c9e19f4078f987cc5121a", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Chromatin accessibility II\"\nsubtitle: \"Meta-plots and heatmaps\"\nauthor: \"{{< var instructor.block.dna >}}\"\ndate: last-modified\n---\n\n## Genomewide chromatin analysis with meta-plots and heatmaps\n\nLast class we saw what the different methods to profile chromatin\naccessibility can tell us about general chromatin structure and possible regulation\nat specific regions in a small portion of a chromosome.\n\nWe also want to make sure these conclusions are valid throughout the genome.\nSince we want to keep the file sizes small, we will ask if they are valid across\nan entire chromosome.\n\n## Load libraries {.smaller}\n\nFirst we will plot the profiles of all our data sets relative to the\ntranscription start site (TSS), where all the action seems to be happening.\n\n\n::: {.cell}\n\n:::\n\n\n## Load data {.smaller}\n\nFirst, we need to load relevant files:\n\n- `yeast_tss_chrII.bed.gz` contains transcription start sites (TSS) for genes on yeast chromosome 2.\n- `sacCer3.chrom.sizes` contains the sizes of all yeast chromosomes, needed for some of the calculations we'll do. We'll grab this from the UCSC download site.\n\n`read_bed()` and `read_genom()` are valr functions.\n\n\n::: {.cell}\n\n:::\n\n\n## Load signals {.smaller}\n\nNext we'll load bigWigs for the ATAC and MNase experiments, containing either short or long fragments.\n\nRecall that the information encoded in short and long fragments should be reflected in our interpretations.\n\nFirst, we make a tibble of file paths and metadata.\n\n::: {.cell}\n\n:::\n\n\n---\n\nNext, we need to read in the bigWig files. We use `purrr::map` to apply `read_bigwig()`\nto each of the bigWig files, and store the results in a new column called `big_wig`.\n\n\n::: {.cell}\n\n:::\n\n\n# Meta-plots\n\n## WHY meta-plots and heatmaps?\n\nMeta-plots and heatmaps are useful for visualizing patterns of signal across many\nloci at the same time.\n\nThis is particularly useful for chromatin data, where we often want to\nunderstand how chromatin structure varies across many genes or regulatory elements\nthat share a common reference point, like transcription start sites (TSS) or\nnucleosomal midpoints.\n\n## Setting up regions for a meta-plot\n\nNext, we need to set up some windows for analyzing signal relative to each TSS.\nThis is an important step that will ultimately impact our interpretations.\n\nIn genomic meta-plots, you first decide on a window size relevant to the\nfeatures you are measuring, and then make \"windows\" around a reference point,\nspanning some distance both up- and downstream. If the features involve gene\nfeatures, we also need to take strand into account.\n\n## Setting up regions for a meta-plot\n\nReference points could be:\n\n- transcription start or end sites\n- boundaries of exons and introns\n- enhancers\n- centromeres and telomeres\n\n## Setting up regions for a meta-plot\n\nThe window size should be relevant the reference points, such that small- or\nlarge-scale features are emphasized in the plot. Moreover, the window typically\nspans some distance both up- and downstream of the reference points.\n\n## Setting up regions for a meta-plot\n\nOnce the window size has been decided, the next step is to make \"sub-windows\"\naround a reference point. If gene features are involved, we also need to take\nstrand into account.\n\n## Setting up regions for a meta-plot\n\nFor small features like transcription factor binding sites (8-20 bp), you might\nset up smaller windows (maybe 1 bp) at a distance \\~20 bp up- and downstream of\na reference point.\n\nFor larger features like nucleosome positions or chromatin domains, you might\nset up larger windows (\\~200 bp) at distances up to \\~10 kbp up- and downstream\nof a set of reference points.\n\n## Metaplot workflow\n\n![Metaplot workflow overview](../img/block-dna/metaplot-workflow.png)\n\n## Chromatin accessibility around transcription start sites (TSSs) {.smaller}\n\n\n::: {.cell output-location='column'}\n\n:::\n\n\n## Chromatin accessibility around transcription start sites (TSSs) {.smaller}\n\nNext, we'll use two valr functions to expand the window of the reference\npoint (`bed_slop()`) and then break those windows into evenly spaced intervals\n(`bed_makewindows()`).\n\n\n::: {.cell output-location='column'}\n\n:::\n\n\n## Chromatin accessibility around transcription start sites (TSSs)\n\nAt this point, we also address the fact that the TSS data are stranded. Can someone describe what the issue is here, based on the figure above?\n\n\n::: {.cell}\n\n:::\n\n\n## Chromatin accessibility around transcription start sites (TSSs) {.smaller}\n\nThis next step uses valr `bed_map()`, to calculate the total signal for each\nwindow by intersecting signals from the bigWig files.\n\n\n::: {.cell output-location='column'}\n\n:::\n\n\n## Chromatin accessibility around transcription start sites (TSSs) {.smaller}\n\nOnce we have the values from `bed_map()`, we can group by `win_coord` and\ncalculate a summary statistic for each window.\n\nRemember that `win_coord` is the same relative position for each TSS, so these\nnumbers represent a composite signal a the same position across all TSS.\n\n\n::: {.cell output-location='column'}\n\n:::\n\n\n## Meta-plot of signals around TSSs {.smaller}\n\nFinally, let's plot the data relative to TSS for each of the windows.\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Interpreting the meta-plots\n\n- What is the direction of transcription in these meta-plots?\n\n- What are the features of chromatin near TSS measured by these different experimental conditions?\n\n- How do you interpret the increased signal of the +1 nucleosome in the \"MNase_Long\" condition, relative to e.g. -1, +2, +3, etc.?\n\n- What are the differences in ATAC and MNase treatments that lead to these distinctive patterns?\n\n# Heatmaps\n\n## Heatmap of signals around TSSs\n\nTo generate a heatmap, we need to reformat our data slightly.\n\nTake a look at `acc_tbl` and think about how you might reorganize the following way:\n\n- rows contain the data for individual loci (i.e., each TSS)\n- columns are ordered positions relative to the TSS (i.e., most upstream to most downstream)\n\n## Heatmap of signals around TSSs {.smaller}\n\nWe're going to plot a heatmap of the \"MNase_Long\" data. There are two ways\nto get these data\n\n\n::: {.cell}\n\n:::\n\n\n## Or, using dplyr / tidyr: {.smaller}\n\n\n::: {.cell output-location='column'}\n\n:::\n\n\n## Heatmap of signals around TSSs {.smaller}\n\nEither way, now we need to reformat the data.\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Heatmap of signals around TSSs\n\nOnce we have the data reformatted, we just convert to a matrix and feed it to\n`ComplexHeatmap::Heatmap()`.\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Interpreting meta-plots and heatmaps\n\nIt's worth considering what meta-plots and heatmaps *can* and *can't* tell you.\n\n1. What are the similarities and differences between heatmaps and meta-plots?\n\n2. What types of conclusions can you draw from each type of plot?\n\n3. What are some features of MNase-seq and ATAC-seq that become more clear when\nlooking across many loci at the same time?\n\n4. What are some hypotheses you can generate based on these plots?\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-20/execute-results/html.json b/_freeze/exercises/ex-20/execute-results/html.json new file mode 100644 index 00000000..d592e49d --- /dev/null +++ b/_freeze/exercises/ex-20/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "e5211f049067d5b8a126a6577c2baccd", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Where do proteins bind in the genome?\"\nauthor: \"{{< var instructor.block.dna >}}\"\ndate: last-modified\n---\n\n## What to map and how to map it?\n\n::: columns\n::: {.column width=\"50%\"}\n**Targets**\n\n- Transcription factors\n- Histone modifications\n- Chromatin remodelers\n- RNA polymerases\n- Other factors that bind chromatin\n:::\n\n::: {.column width=\"50%\"}\n**Methods**\n\n- ChIP-seq\n- MNase-ChIP-seq\n- CUT&RUN\n- CUT&TAG\n:::\n:::\n\n##\n\n![](../img/block-dna/ChIPseq_2.png){fig-align=\"center\"}\n\n##\n\n![](../img/block-dna/ChIP_Data.png){fig-align=\"center\"}\n\n##\n\n![](../img/block-dna/cut-and-run.png){fig-align=\"center\"}\n\n##\n\n![](../img/block-dna/chip-resolution-comparison.png) {fig-align=\"center\"}\n\n## Comparison of factor-centric methods {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n![](../img/block-dna/chip-comparison-overview.png)\n:::\n\n::: {.column width=\"50%\"}\n| Method | Resolution | Sequencing cost |\n|:--------------:|:----------:|:---------------:|\n| ChIP-seq | Low | High |\n| MNase-ChIP-seq | High | High |\n| CUT&RUN | High | Low |\n:::\n:::\n\n# Workflow\n\n### FASTQ files\n\n- Adapter trimming\n\n- Aligning to the genome\n\n### Bed files\n\n- Generate read density genome-wide\n\n### Read density (wig/bedgraph)\n\n- Call peaks\n\n- Meta analysis\n\n- Identify motifs\n\n- Compare perturbations to control, compare to other datasets\n\n## Example data: CTCF CUT&RUN in K562 cells\n\n![](../img/block-dna/ctcf_cut_run_track.png){fig-align=\"center\" width=\"800\"}\n\n## Example data: CTCF CUT&RUN in K562 cells\n\n![](../img/block-dna/ctcf_cut_run_meta.png){fig-align=\"center\" width=\"106\"}\n\n(from Skene and Henikoff, eLIFE 2017)\n\n## Where do transcription factors bind in the genome?\n\nToday we'll look at where two yeast transcription factors bind in the genome using CUT&RUN.\n\n## Where do transcription factors bind in the genome? {.smaller}\n\nTechniques like CUT&RUN require an affinity reagent (e.g., an antibody) that uniquely recognizes a transcription factor in the cell.\n\n1. Antibody is added to permeabilized cells, and the antibody associates with the epitope.\n1. A separate reagent, a fusion of Protein A (which binds IgG) and micrococcal nuclease (MNase) then associates with the antibody.\n1. Addition of calcium activates MNase, and nearby DNA is digested.\n1. These DNA fragments are then isolated and sequenced to identify sites of TF association in the genome.\n\n## Where do transcription factors bind in the genome?\n\n![Fig 1a, Skene et al.](../img/block-dna/skene-fig-1a.png)\n\n## Data download and pre-processing {.smaller}\n\nCUT&RUN data were downloaded from the [NCBI GEO page](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE84474) for Skene et al.\n\nI selected the 16 second time point for *S. cerevisiae* Abf1 and Reb1 (note the paper combined data from the 1-32 second time points).\n\nBED files containing mapped DNA fragments were separated by size and converted to bigWig with:\n\n``` bash\n# separate fragments by size\nawk '($3 - $2 <= 120)' Abf1.bed > CutRun_Abf1_lt120.bed\nawk '($3 - $2 => 150)' Abf1.bed > CutRun_Abf1_gt150.bed\n\n# for each file with the different sizes\nbedtools genomecov -i Abf1.bed -g sacCer3.chrom.sizes -bg > Abf1.bg\nbedGraphToBigWig Abf1.bg sacCer3.chrom.sizes Abf1.bw\n```\n\nThe bigWig files are available here in the `data/` directory.\n\n## Questions\n\n1. How do you ensure your antibody recognizes what you think it recognizes? What are important controls for ensuring it recognizes a specific epitope?\n\n2. What are some good controls for CUT&RUN experiments?\n\n# CUT&RUN analysis\n\n## Set up libraries\n\n\n::: {.cell}\n\n:::\n\n\n## Examine genome coverage\n\n\n::: {.cell}\n\n:::\n\n\n\n## Examine genome coverage {.smaller}\n\n\n::: {.cell}\n\n:::\n\n\n## Examine genome coverage\n\n\n::: {.cell}\n\n:::\n\n\n## Examine genome coverage\nNow that we have tracks loaded, we can make a plot.\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Questions\n\n1. What features stand out in the above tracks? What is different between Reb1 and Abf1? Between the short and long fragments?\n\n2. Where are the major signals with respect to genes?\n\n## Peak calling\n\nA conceptually simple approach to identification of regions containing \"peaks\" where a transcription factor was bound is available in the MACS software ([paper](), [github]()). There's also a nice [blog post](https://hbctraining.github.io/Intro-to-ChIPseq/lessons/05_peak_calling_macs.html) covering the main ideas.\n\n## Theory\n\nThe Poisson distribution is a discrete probability distribution of the form:\n\n$$ P_\\lambda (X=k) = \\frac{ \\lambda^k }{ k! * e^{-\\lambda} } $$\n\nwhere $\\lambda$ captures both the mean and variance of the distribution.\n\nThe R functions `dpois()`, `ppois()`, and `rpois()` provide access to the density, distribution, and random generation for the Poisson distribution.\n\nLook over the `?dpois` documentation.\n\n## Theory\n\n\n::: {.cell}\n\n:::\n\n\n## Practice\n\nHere, we model read coverage using the Poisson distribution. Given some genome size $G$ and and a number of reads collected $N$, we can approximate $\\lambda$ from $N/G$.\n\nMACS uses this value (the \"genomewide\" lambda) and also calculates several \"local\" lambda values to account for variation among genomic regions. We'll just use the genomewide lambda, which provides a conservative threshold for peak calling.\n\nUsing the genomewide lambda, we can use the Poisson distribution to address the question: **How surprised should I be to see** $k$ reads at position X?\n\n---\n\n\n::: {.cell}\n\n:::\n\n\n## P-values\n\nLet's take a look at a plot of the p-value across a chromosome. What do you notice about this plot, when compared to the coverage of the CUT&RUN coverage above?\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Peaks\n\nHow many peaks are called in this region?\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Visualize\n\nLet's visualize these peaks in the context of genomic CUT&RUN signal. We need to define an `AnnotationTrack` with the peak intervals, which we can plot against the CUT&RUN coverage we defined above.\n\nLet us load the data:\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Visualize\n\nAnd plot:\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Questions\n\n1. How many peaks were called throughout the genome? How wide are the called peaks, on average?\n\n2. How else might we define a significance threshold for identifying peaks?\n\n3. What might the relative heights of the peaks indicate? What types of technical or biological variables might influence peak heights?\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-21/execute-results/html.json b/_freeze/exercises/ex-21/execute-results/html.json new file mode 100644 index 00000000..41b9dca7 --- /dev/null +++ b/_freeze/exercises/ex-21/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "02f649f452c9cf8c221d63d6871f0a61", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Factor-centric chromatin analysis\"\nauthor: \"{{< var instructor.block.dna >}}\"\n---\n\n## Where do transcription factors bind in the genome?\n\nToday we'll look at where two yeast transcription factors bind in the genome using CUT&RUN.\n\n## Where do transcription factors bind in the genome?\n\nTechniques like CUT&RUN require an affinity reagent (e.g., an antibody) that uniquely recognizes a transcription factor in the cell.\n\nThis antibody is added to permeabilized cells, and the antibody associates with the epitope. A separate reagent, a fusion of Protein A (which binds IgG) and micrococcal nuclease (MNase) then associates with the antibody. Addition of calcium activates MNase, and nearby DNA is digested. These DNA fragments are then isolated and sequenced to identify sites of TF association in the genome.\n\n## Where do transcription factors bind in the genome?\n\n![Fig 1a, Skene et al.](../img/block-dna/skene-fig-1a.png)\n\n## Data download and pre-processing\n\nCUT&RUN data were downloaded from the [NCBI GEO page](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE84474) for Skene et al.\n\nI selected the 16 second time point for *S. cerevisiae* Abf1 and Reb1 (note the paper combined data from the 1-32 second time points).\n\nBED files containing mapped DNA fragments were separated by size and converted to bigWig with:\n\n``` bash\n# separate fragments by size\nawk '($3 - $2 <= 120)' Abf1.bed > CutRun_Abf1_lt120.bed\nawk '($3 - $2 => 150)' Abf1.bed > CutRun_Abf1_gt150.bed\n\n# for each file with the different sizes\nbedtools genomecov -i Abf1.bed -g sacCer3.chrom.sizes -bg > Abf1.bg\nbedGraphToBigWig Abf1.bg sacCer3.chrom.sizes Abf1.bw\n```\n\nThe bigWig files are available here in the `data/` directory.\n\n# CUT&RUN analysis\n\n\n::: {.cell}\n\n:::\n\n\n\n::: {.cell}\n\n:::\n\n\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## How do proteins recognize specific locations in the genome to bind?\n\n## Motif discovery\n\n## Theory\n\nThere are two major approaches to defining sequence motifs enriched in a sample: enumerative and probabilistic approaches.\n\n## Theory\n\nHere we'll apply a probabilistic approach (MEME) to discover motifs in a collection of DNA sequences. During the RNA block, you'll learn about k-mer analysis, which is a form of enumerative approach.\n\nIn each case, the goal is to define a set of sequence motifs that are encriched in a set of provided sequences (i.e., peaks from CUT&RUN data) relative to a genomic background.\n\n## Theory\n\nMotifs are expressed in a [Position Weight Matrix](https://en.wikipedia.org/wiki/Position_weight_matrix), which captures the propensities for a position to be a particular nucleotide in a sequence motif.\n\nThese PWMs can be represented as sequence logos, visually represent the amount of information provided by the motif, typically using \"information content\", expressed in bits.\n\n## Theory\n\n![LexA sequence motif](../img/block-dna/lexa-motif.png)\n\n## Practice\n\nWe'll use the [memes](https://bioconductor.org/packages/release/bioc/html/memes.html) package from Bioconductor to derive sequence motifs from the peaks we called above. This is a straightforward process:\n\n1. Collect the DNA sequences within the peak windows using the BSgenome for *S. cerevisiae*\n2. Provide those sequences and the genomic background to `runDreme()`, which runs uses an Expectation-Maximization (EM) approach to identify and refine motifs.\n3. Examine the discovered motifs, and plot as a logo using `ggseqlogo`.\n\n. . .\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\nNow let's look at the sequence logo for the top hit.\n\n\n::: {.cell output-location='slide'}\n\n:::\n\n\n## Questions\n\n1. Does this motif make sense, based on what you know about the requirements and specificity of DNA binding by transcription factors?\n\n2. How might you confirm that a specific sequence (that conforms to a motif) is bound directly by a transcription factor?\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-22/execute-results/html.json b/_freeze/exercises/ex-22/execute-results/html.json new file mode 100644 index 00000000..50919fc1 --- /dev/null +++ b/_freeze/exercises/ex-22/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "272b2f1d8cdb89cc3559e166c1eea0d6", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"ex 22\"\nsubtitle: \"RNA-sequencing intro\"\nauthor: \"Neelanjan Mukherjee\"\n---\n\n\n\n\n\n## Examine count data {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\nd <- read_csv(here(\"data\",\"unfilt_counts.csv.gz\")) |> as.matrix()\n\n\ndf <- tibble(variance=??,\n mean=??)\n\nggplot(??) +\n geom_point(aes(x=??, y=??)) +\n scale_y_log10(limits = c(1,1e9)) +\n scale_x_log10(limits = c(1,1e9)) +\n geom_abline(intercept = 0, slope = 1, color=\"red\") +\n theme_cowplot()\n```\n:::\n\n\n## estimateSizeFactors {.smaller}\n\n\n\n::: {.cell output-location='fragment'}\n\n```{.r .cell-code}\nd <- read_csv(here(\"data\",\"unfilt_counts.csv.gz\")) |> as.matrix()\n\n# estimate size factors\n```\n:::\n\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-23/execute-results/html.json b/_freeze/exercises/ex-23/execute-results/html.json new file mode 100644 index 00000000..c6a2612c --- /dev/null +++ b/_freeze/exercises/ex-23/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "1a6dc5cf3cec0462f89e7d2a4af014f5", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"RNAseq QC\"\nauthor: \"Matthew Taliaferro\"\n---\n\n\n\n## Relating genes and transcripts {.smaller}\n\nWe can get this relationships between *transcripts* and *genes* through `biomaRt`.\n\n`biomaRt` has many tables that relate genes, transcripts, and other useful data include gene biotypes and gene ontology categories, even across species. Let's use it here to get a table of genes and transcripts for the mouse genome.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# First we need to define a 'mart' to use.\n# There are a handful of them that\n# you can see here:\nlistMarts(\n mart = NULL,\n host = \"www.ensembl.org\"\n)\n```\n:::\n\n\nI encourage you to see what is in each mart, but for now we are only going to use ENSEMBL_MART_ENSEMBL.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmart <- biomaRt::useMart(\"??\", host = \"https://www.ensembl.org\")\n```\n:::\n\n\n## Using biomaRt {.smaller}\n\nAlright, we've chosen our mart. What data sets are available in this mart?\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndatasets <- listDatasets(mart)\ngt(datasets)\n```\n:::\n\n\nA lot of stuff for a lot of species! Perhaps we want to limit it to see which ones are relevant to mouse.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmousedatasets <- filter(datasets, grepl(\"??\", dataset))\n\ngt(mousedatasets)\n```\n:::\n\n\n## Using biomaRt {.smaller}\n\nAh so we probably want the dataset called 'mmusculus_gene_ensembl'!\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"??\",\n host = \"https://www.ensembl.org\"\n)\n```\n:::\n\n\n## Using biomaRt {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\ngoodies <- listAttributes(mart)\ngt(goodies[1:20,])\n```\n:::\n\n\n## Using biomaRt {.smaller}\n\nSo there are 2885 rows of goodies about the mouse genome and its relationship to *many* other genomes. However, you can probably see that the ones that are most useful to us right now are right at the top: 'ensembl_transcript_id' and 'ensembl_gene_id'. We can use those attributes in our mart to make a table relating genes and transcripts.\n\nI'm going to through one more attribute in: external_gene_name. Those are usually more informative than ensembl IDs.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nt2g <- biomaRt::getBM(attributes = c(\"??\", \"??\", \"??\"), mart = mart)\n\n# write_tsv(x = t2g, file = here(\"data\",\"block-rna\",\"t2g.tsv.gz\"))\n# t2g <- read_tsv(here(\"data\",\"block-rna\",\"t2g.tsv.gz\"))\n\ngt(t2g[1:20, ])\n```\n:::\n\n\n## Using biomaRt {.smaller}\n\nAlright this looks good! We are going to split this into two tables. One that contains transcript ID and gene ID, and the other that contains gene ID and gene name.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nt2g <- t2g |> dplyr::select(??, ??)\n```\n:::\n\n\n## Getting gene level expression data with `tximport` {.smaller}\n\nNow that we have our table relating transcripts and genes, we can give it to tximport to have it calculate gene-level expression data from our transcript-level expression data.\n\nFirst, we have to tell it where the salmon quantification files (the `quant.sf.gz` files) are. Here's what our directory structure that contains these files looks like:\n\n![](/img/block-rna/salmondirstructure.png)\n\n## Gene expression data with `tximport` {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# The directory where all of the sample-specific salmon subdirectories live\n\n# list.files(here(\"data/block-rna/differentiation_salmonouts\"), pattern = \"quant.sf\")\n\nmetadata <- data.frame(sample_id = ??, # sample id\n salmon_dirs = ?? # path to files\n\n ) |>\n separate(col = sample_id, into = c(\"samp\",\"rep\"), sep = \"\\\\.\", remove = F)\n\nmetadata$rep <- gsub(pattern = \"Rep\", replacement = \"\", metadata$rep)\n\n\n## add sample id to rownames\nrownames(metadata) <- metadata$sample_id\n```\n:::\n\n\n## Gene expression data with `tximport` {.smaller}\n\nYou can see that we got a list of sample names and the absolute path to each sample's quantification file.\n\nNow we are ready to run `tximport`\n\n`tximport` is going to want paths to all the quantification files (salm_dirs) and a table that relates transcripts to genes (t2g). Luckily, we happen to have those exact two things.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# create a list containg paths\nsalmdir <- ??\n\n# add names\nnames(salmdir) <- ??\n\n\ntxi <- tximport(files = salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n```\n:::\n\n\n## Gene expression data with `tximport` {.smaller}\n\nNotice how we chose *lengthscaledTPM* for our abundance measurement. This is going to give us TPM values (transcripts per million) for expression in the \\$abundance slot. Let's check out what we have now.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntpms <- txi$abundance |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_gene_id\")\n\ngt(tpms[1:50, ])\n```\n:::\n\n\n## TPM as an expression metric {.smaller}\n\nAlright, not bad!\n\nLet's stop and think for a minute about what `tximport` did and the metric we are using (TPM). What does *transcripts per million* mean? Well, it means pretty much what it sounds like. For every million transcripts in the cell, X of them are this particular transcript. Importantly, this means when this TPM value was calculated from the number of *counts* a transcript received, this number had to be adjusted for both the total number of counts in the library and the length of a transcript.\n\nIf sample A had twice the number of total counts as sample B (i.e. was sequenced twice as deeply), then you would expect every transcript to have approximately twice the number of counts in sample A as it has in sample B. Similarly, if transcript X is twice as long as transcript Y, then you would expect that if they were equally expressed (i.e. the same number of transcript X and transcript Y molecules were present in the sample) that X would have approximately twice the counts that Y does. Working with expression units of TPM incorporates both of these normalizations.\n\nSo, if a TPM of X means that for every million transcripts in the sample that X of them were the transcript of interest, then the sum of TPM values across all species should equal one million, right?\n\nLet's check and see if that's true.\n\n## TPM as an expression metric {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\ncolSums(tpms[,-1])\nsum(tpms$??)\nsum(tpms$??)\nsum(tpms$??)\n```\n:::\n\n\nOK, not quite one million, but pretty darn close.\n\nThis notion that TPMs represent proportions of a whole also leads to another interesting insight into what `tximport` is doing here. If all transcripts belong to genes, then the TPM for a gene must be the sum of the TPMs of its transcripts. Can we verify that that is true?\n\n## TPM as an expression metric {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Redefine for clarity in comparisons\ntpms.genes <- tpms\n\n# Make a new tximport object, but this time instead\n# of giving gene expression values, give transcript expression values\n\n# This is controlled by the `txOut` argument\ntxi.transcripts <- tximport(\n salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\",\n txOut = TRUE\n)\n\n# Make a table of tpm values for every transcript\ntpms.txs <- ?? |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_transcript_id\") |>\n inner_join(t2g, ., by = \"ensembl_transcript_id\")\n\ngt(tpms.txs[1:20, ])\n```\n:::\n\n\nOK so lets look at the expression of ENSMUSG00000020634 in the first sample (DIVminus8.Rep1).\n\n## TPM as an expression metric {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Get sum of tpm values for transcripts that belong to ENSMUSG00000020634\ntpms.tx.ENSMUSG00000020634 <- filter(tpms.txs, ensembl_gene_id == \"ENSMUSG00000020634\")\nsumoftxtpm <- sum(tpms.tx.ENSMUSG00000020634$DIVminus8.Rep1)\n\n# Get gene level tpm value of ENSMUSG00000020634\ngenetpm <- filter(tpms.genes, ensembl_gene_id == \"ENSMUSG00000020634\")$DIVminus8.Rep1\n\n# Are they the same?\nsumoftxtpm\ngenetpm\n```\n:::\n\n\n## Basic RNAseq QC {.smaller}\n\nOK now that we've got expression values for all genes, we now might want to use these expression values to learn a little bit about our samples. One simple question is \\> Are replicates similar to each other, or at least more similar to each other than to other samples?\n\nIf our data is worth anything at all, we would hope that differences between replicates, which are supposed to be drawn from the same condition, are smaller than differences between samples drawn from different conditions. If that's not true, it could indicate that one replicate is very different from other replciates (in which case we might want to remove it), or that the data in general is of poor quality.\n\nAnother question is:\n\n> How similar is each sample to every other sample?\n\nIn our timecourse, we might expect that samples drawn from adjacent timepoints might be more similar to each other than samples from more distant timepoints.\n\n## Hierarchical clustering {.smaller}\n\nA simple way to think about this is to simply correlate TPM values for genes between samples. For plotting purposes here, let's plot the log(TPM) of two samples against each other. However, for the actual correlation coefficient we are going to be using the *Spearman* correlation method, which uses ranks, not absolute values. This means that whether or not you take the log will have no effect on the Spearman correlation coefficient.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# DIVminus8.Rep1 vs DIVminus8.Rep2\n\nr.spearman <- cor(tpms$DIVminus8.Rep1, tpms$DIVminus8.Rep2,\n method = \"spearman\")\n\nr.spearman <- signif(r.spearman, 2)\n\n# plot adding pseudocount + log\nggplot(tpms, aes(x = log??(DIVminus8.Rep1 + ??), y = log??(DIVminus8.Rep2 + ??))) +\n geom_point() +\n theme_classic() +\n annotate(\"text\", x = 2, y = 0, label = paste0(\"R = \", r.spearman))\n```\n:::\n\n\n## Hierarchical clustering {.smaller}\n\nWith RNAseq data, the variance of a gene's expression increases as the expression increases. However, using a pseudocount and taking the log of the expression value actually reverses this trend. Now, genes with the lowest expression have the most variance. Why is this a problem? Well, the genes with the most variance are going to be the ones that contribute the most to intersample differences. Ideally, we would like to therefore remove the relationship between expression and variance.\n\nThere are transformations, notably `rlog` and `vst`, that are made to deal with this, but they are best used when dealing with normalized **count** data, while here we are dealing with TPMs. We will talk about counts later, but not here.\n\nSo, for now, we will take another approach of simply using an expression threshold. Any gene that does not meet our threshold will be excluded from the analysis. Obviously where to set this threshold is a bit subjective. For now, we will set this cutoff at 1 TPM.\n\n## Hierarchical clustering {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# DIVminus8.Rep1 vs DIVminus8.Rep2\n\n# Since we are plotting log TPM values we will only keep for genes that have expression of at least 1 TPM in both samples\ntpms_filt <- tpms |>\n dplyr::select(ensembl_gene_id, DIVminus8.Rep1, DIVminus8.Rep2) |>\n filter(?? >= ?? & ?? >= ??)\n\n# pull the correlation coefficient\nr.spearman <- cor(\n tpms_filt$DIVminus8.Rep1,\n tpms_filt$DIVminus8.Rep2,\n method = \"spearman\"\n)\n\n# round/set sig digits\nr.spearman <- signif(r.spearman, 2)\n\n# plot adding pseudocount + log\nggplot(tpms_filt, aes(x = log10(DIVminus8.Rep1 + 1e-3), y = log10(DIVminus8.Rep2 + 1e-3))) +\n geom_point() +\n theme_classic() +\n annotate(\"text\", x = 2, y = 1, label = paste0(\"R = \", r.spearman))\n```\n:::\n\n\n## Filtering lowly expressed genes {.smaller}\n\nOK that's two samples compared to each other, but now we want to see how **all** samples compare to **all** other samples. Before we do this we need to decide how to apply our expression cutoff across many samples. Should a gene have to meet the cutoff in only one sample? In all samples? Let's start by saying it has to meet the cutoff in at least half of the 30 samples.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a new column in tpms that is the number of samples in which the value is at least 1\ntpms.cutoff <-\n mutate(tpms, nSamples = rowSums(tpms[, ??] > 1)) |>\n # Now filter for rows where nSamples is at least 15\n # Meaning that at least 15 samples passed the threshold\n filter(nSamples >= ??) |>\n # Get rid of the nSamples column\n dplyr::select(-nSamples)\n\nnrow(tpms)\nnrow(tpms.cutoff)\n```\n:::\n\n\n## Correlating gene expression values {.smaller}\n\nNow we can use the `cor` function to calculate pairwise correlations in a .red\\[*matrix*\\] of TPM values.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntpms.cutoff.matrix <- tpms.cutoff |>\n dplyr::select(-ensembl_gene_id) |>\n as.matrix() # some functions just take matrices\n\ntpms.cor <- cor(??, method = \"spearman\")\n\nhead(tpms.cor)\n```\n:::\n\n\n## Hierarchical clustering {.smaller}\n\nNow we need to plot these and have similar samples (i.e. those that are highly correlated with each other) be clustered near to each other. We will use `pheatmap` to do this.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# let's pull information that we want to add as categories\npheatmap(\n tpms.cor,\n annotation_col = ??,\n fontsize = 7,\n show_colnames = FALSE\n)\n```\n:::\n\n\nThis looks pretty good! There are two main points to takeaway here. First, all replicates for a given timepoint are clustering with each other. Second, you can kind of derive the order of the timepoints from the clustering. The biggest separation is between early (DIVminus8 to DIV1) and late (DIV7 to DIV28). After that you can then see finer-grained structure.\n\n## PCA analysis {.smaller}\n\nAnother way to visualize relationships is using a dimensionality reduction technique called Principal Component Analysis (PCA). Let's watch this short video. It focuses more on how to interpret them rather than the math behind their creation.\n\n{{< video https://www.youtube.com/embed/HMOI_lkzW08 >}}\n\n## PCA analysis {.smaller}\n\nPCA works best when values are approximately normally distributed, so we will first take the log of our expression values.\n\nWith our cutoff as it is now (genes have to have expression of at least 1 TPM in half the samples), it is possible that we will have some 0 values. Taking the log of 0 might cause a problem, so we will add a pseudocount.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntpms.cutoff.matrix <-\n dplyr::select(tpms.cutoff, -ensembl_gene_id) |>\n as.matrix()\n\n# Add pseudocount and take log2\ntpms.cutoff.matrix <- log2(tpms.cutoff.matrix + 1e-3)\n\n# scale - annoying double transpose\ntpms.cutoff.matrix <- t(scale(t(tpms.cutoff.matrix)))\n```\n:::\n\n\n## PCA analysis {.smaller}\n\nVery similar interpretation as before (heatmap of correlation).\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# prcomp expects samples to be rownames, right now they are columns\n# so we need to transpose the matrix using `t`\ntpms.pca <- prcomp(t(tpms.cutoff.matrix))\n\n# The coordinates of samples on the principle components are stored in the $x slot\n# These are what we are going to use to plot\n# We can also also some data about the samples here so that our plot is a little more interesting\n\n\n\n### Tricky piping!!\ntpms.pca.pc <- tpms.pca$x %>%\n as.data.frame() %>%\n rownames_to_column(var = \"sample_id\") %>%\n left_join(., metadata[,1:3], by = \"sample_id\")\n\n\n\n# We can see how much of the total variance is explained by each PC using the summary function\ntpms.pca.summary <- summary(tpms.pca)$importance\n\n# The amount of variance explained by PC1 is the second row, first column of this table\n# It's given as a fraction of 1, so we multiply it by 100 to get a percentage\npc1var <- round(tpms.pca.summary[2, 1] * 100, 1)\n\n# The amount of variance explained by PC2 is the second row, second column of this table\npc2var <- round(tpms.pca.summary[2, 2] * 100, 1)\n\n# Reorder timepoints explicitly for plotting purposes\n\ntpms.pca.pc$samp <-\n factor(\n tpms.pca.pc$samp,\n levels = c(\n \"DIVminus8\", \"DIVminus4\", \"DIV0\",\n \"DIV1\", \"DIV7\", \"DIV16\", \"DIV21\", \"DIV28\"\n )\n )\n\n# Plot results\nggplot(data = tpms.pca.pc,\n aes(\n x = PC1, y = PC2,\n color = samp, label = sample_id\n )\n) +\n geom_point(size = 5) +\n scale_color_brewer(palette = \"Set1\") +\n theme_cowplot(16) +\n labs(\n x = paste(\"PC1,\", pc1var, \"% explained var.\"),\n y = paste(\"PC2,\", pc2var, \"% explained var.\")\n ) +\n geom_text_repel()\n```\n:::\n\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-24/execute-results/html.json b/_freeze/exercises/ex-24/execute-results/html.json new file mode 100644 index 00000000..7d3d7775 --- /dev/null +++ b/_freeze/exercises/ex-24/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "31dbe455a7c47f8f563c73cb591430a8", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"RNAseq DE\"\nauthor: \"Matthew Taliaferro\"\n---\n\n\n\n\n## Prepare `t2g` {.smaller}\n\nWe are going to imagine that we have only two conditions: DIV0 and DIV7 with `DESeq2`.\n\nThe first thing we need to do is read in the data again and move from transcript-level expression values to gene-level expression values with `tximport`. Let's use `biomaRt` to get a table that relates gene and transcript IDs.\n\n::: {.cell}\n\n```{.r .cell-code}\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"mmusculus_gene_ensembl\"\n)\n\nt2g <- biomaRt::getBM(\n attributes = c(\n \"ensembl_transcript_id\",\n \"ensembl_gene_id\",\n \"external_gene_name\"\n ),\n mart = mart\n) |>\n as_tibble()\n\n# maps systematic to common gene names\ngene_name_map <- t2g |>\n dplyr::select(-ensembl_transcript_id) |>\n ??() # kill redundant\n```\n:::\n\n\n## Prepare `metdata` and import {.smaller}\n\nNow we can read in the transcript-level data and collapse to gene-level data with `tximport`\n\n::: {.cell}\n\n```{.r .cell-code}\nmetadata <- data.frame(\n sample_id = list.files(here(\"??\"),\n pattern = \"quant.sf\"),\n salmon_dirs = list.files(here(\"??\"),\n recursive = T,\n pattern = \".gz$\",\n full.names = T)\n ) |>\n separate(col = sample_id, into = c(\"timepoint\",\"rep\"), sep = \"\\\\.\", remove = F)\n\nmetadata$rep <- gsub(pattern = \"Rep\", replacement = \"\", metadata$rep)\n\nrownames(metadata) <- metadata$sample_id\n\n#keep only samples we want\nmetadata <- metadata |>\n filter(timepoint %in% c(\"??\",\"??\"))\n\nsalmdir <- metadata$??\nnames(salmdir) <- metadata$??\n\ntxi <- tximport(\n files = salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n```\n:::\n\n\n## Filter lowly expressed genes\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# examine distribution of TPMs\nhist(log2(1 + rowSums(txi$abundance)), breaks = 40)\n\n# decide a cutoff\nkeepG <- txi$abundance[log2(1 + rowSums(txi$abundance)) > 4.5,] |>\n rownames()\n```\n:::\n\n\n## Create DESeq object {.smaller}\n\nThere are essentially two steps to using `DESeq2`. The first involves creating a `DESeqDataSet` from your data. Luckily, if you have a `tximport` object, which we do in the form of `txi`, then this becomes easy.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# metadata$timepoint <- as.factor(metadata$timepoint)\n\nddsTxi <- DESeqDataSetFromTximport(\n ??,\n colData = metadata,\n design = ~??\n)\n\n# keep genes with sufficient expession\nddsTxi <- ddsTxi[??,]\n```\n:::\n\n\n## Design formula {.smaller}\n\nYou can see that `DESeqDataSetFromTximport` wants three things. The first is our `tximport` object. The second is the dataframe we made that relates samples and conditions (or in this case timepoints). The last is something called a **design formula**. A design formula contains all of the variables that will go into `DESeq2`'s model. The formula starts with a tilde and then has variables separated by a plus sign think `lm()`. It is common practice, and in fact basically required with `DESeq2`, to put the variable of interest last. In our case, that's trivial because we only have one: timepoint. So our design formula is very simple:\n\n design = ~ timepoint\n\nYour design formula should ideally include **all of the sources of variation in your data**. For example, let's say that here we thought there was a batch effect with the replicates. Maybe all of the Rep1 samples were prepped and sequenced on a different day than the Rep2 samples and so on. We could potentially account for this in `DESeq2`'s model with the following forumula:\n\n design = ~ rep + timepoint\n\nHere, timepoint is still the variable of interest, but we are controlling for differences that arise due to differences in replicates.\n\n\n## Run `DESeq2` {.smaller}\n\nWe can see here that `DESeq2` is taking the counts produced by `tximport` for gene quantifications. There are 52346 genes (rows) here and 7 samples (columns). Now using this ddsTxi object, we can run `DESeq2`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndds <- DESeq(??)\n```\n:::\n\n\nThere are many useful things in this `dds` object. Take a look at the [vignette](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) for a full explanation. Including info on many more tests and analyses that can be done with `DESeq2`.\n\nThe results can be accessed using the `results()` function. We will use the `contrast` argument here. `DESeq2` reports changes in RNA abundance between two samples as a `log2FoldChange`. But, it's often not clear what the numerator and denominator of that fold change ratio...it could be either DIV7/DIV0 or DIV0/DIV7.\n\nThe lexographically first condition will be the numerator. I find it easier to explicitly specify what the numerator and denominator of this ratio are using the `contrast` argument. The `contrast` argument can be used to implement more complicated design formula. Remember our design formula that accounted for potential differences due to Replicate batch effects:\n\n ~ replicate + timepoint\n\n`DESeq2` will account for differences between replicates here to find differences between timepoints.\n\n## Contrasts to get results {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# For contrast, we give three strings: the factor we are interested in, the numerator, and the denominator\nresults(dds, contrast = c(\"timepoint\", \"??\", \"??\"))\n```\n:::\n\n\nThe columns we are most interested in are **log2FoldChange** and **padj**.\n\nlog2FoldChange is self-explanatory. padj is the Benjamini-Hochberg corrected pvalue for a test asking if the expression of this gene is different between the two conditions.\n\n## Cleanup results {.smaller}\n\nLet's do a little work on this data frame to make it slightly cleaner and more informative.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff <-\n results(\n dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\")\n ) |>\n # Change this into a dataframe\n ??() |>\n # Move ensembl gene IDs into their own column\n ??(var = \"ensembl_gene_id\") |>\n # drop unused columns\n dplyr::select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene symbols\n inner_join(??) |>\n # Rename external_gene_name column\n dplyr::rename(gene = external_gene_name) |>\n as_tibble()\n```\n:::\n\n\n## How many are significant {.smaller}\n\nOK now we have a table of gene expression results. How many genes are significantly up/down regulated between these two timepoints?\nWe will use 0.01 as an FDR (p.adj) cutoff.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# number of upregulated genes\nnrow(filter(diff, padj < ?? & log2FoldChange > ??))\n\n# number of downregulated genes\nnrow(filter(diff, padj < ?? & log2FoldChange < ??))\n```\n:::\n\n\n## Volcano plot of differential expression results {.smaller}\n\nLet's make a volcano plot of these results.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# meets the FDR cutoff\ndiff_sig <-\n mutate(\n diff,\n sig = case_when(\n padj < ?? ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n # if a gene did not meet expression cutoffs that DESeq2 automatically does, it gets a pvalue of NA\n drop_na()\n\nggplot(\n diff_sig,\n aes(\n x = ??,\n y = ??,\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n:::\n\n\n## Change the LFC threshold {.smaller}\n\nIn addition to an FDR cutoff, let's also apply a log2FoldChange cutoff. This will of course be more conservative, but will probably give you a more confident set of genes.\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\n# Is the expression of the gene at least 3-fold different?\ndiff_lfc <-\n results(dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\"),\n lfcThreshold = log2(??)\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n # drop unused columns\n dplyr::select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n dplyr::rename(gene = external_gene_name) |>\n as_tibble()\n\n# number of upregulated genes\nnrow(\n filter(\n diff_lfc, padj < 0.01 & log2FoldChange > 0\n )\n )\n\n# number of downregulated genes\nnrow(\n filter(\n diff_lfc, padj < 0.01 & log2FoldChange < 0\n )\n )\n```\n:::\n\n\n## Change the LFC threshold {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\ndiff_lfc_sig <-\n mutate(\n diff_lfc,\n sig = case_when(\n padj < 0.01 ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n drop_na()\n\n\n# look at some specific genes\ndiff_lfc_sig |>\n filter(?? %in%\nc(\"Bdnf\",\"Dlg4\",\"Klf4\",\"Sox2\")) |>\n gt()\n```\n:::\n\n\n## Filtered Volcano {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n diff_lfc_sig,\n aes(\n x = log2FoldChange,\n y = -log10(padj),\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n:::\n\n\n\n## Plotting the expression of single genes {.smaller}\n\nSometimes we will have particular marker genes that we might want to highlight to give confidence that the experiment worked as expected. We can plot the expression of these genes in each replicate. Let's plot the expression of two pluripotency genes (which we expect to decrease) and two neuronal genes (which we expect to increase).\n\nSo what is the value that we would plot? We could use the 'normalized counts' value provided by `DESeq2`. However, remember there is not length calculation so it is difficult to compare accross genes.\n\nA more interpretable value to plot might be TPM, since TPM is length-normalized. Let's say a gene was expressed at 500 TPM. Right off the bat, I know generally what kind of expression that reflects (pretty high).\n\n\n::: {.cell}\n\n:::\n\n\n## Get TPMs {.smaller}\nLet's plot the expression of Klf4, Sox2, Bdnf, and Dlg4 in our samples.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\ntpms <- txi$abundance |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_gene_id\") |>\n inner_join(??) |> # add symbols\n dplyr::rename(gene = external_gene_name) |>\n # Filter for genes we are interested in\n filter(gene %in% c(\"Klf4\", \"Sox2\", \"Bdnf\", \"Dlg4\")) |>\n pivot_longer(-c(ensembl_gene_id, gene)) |>\n separate(col = name, into = c(\"condition\",\"rep\"), sep = \"\\\\.\")\n\ngt(tpms)\n```\n:::\n\n\n\n## Now plot {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\nggplot(\n tpms,\n aes(\n x = ??,\n y = ??,\n color = ??\n )\n) +\n geom_jitter(size = 2, width = .25) +\n labs(\n x = \"\",\n y = \"TPM\"\n ) +\n theme_cowplot() +\n scale_color_manual(values = c(\"blue\", \"red\")) +\n facet_wrap(~gene, scales = \"free_y\")\n```\n:::\n\n\n\n## How about pathways? {.smaller}\n\nSay that instead of plotting individual genes we wanted to ask whether a whole class of genes are going up or down. We can do that by retrieving all genes that belong to a particular gene ontology term.\n\nThere are three classes of genes we will look at here:\n\n - Maintenance of pluripotency (GO:0019827)\n - Positive regulation of the cell cycle (GO:0045787)\n - Neuronal differentitaion (GO:0030182)\n\n## Retrieve pathway information {.smaller}\nWe can use `biomaRt` to get all genes that belong to each of these categories. Think of it like doing a gene ontology enrichment analysis in reverse.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npluripotencygenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0019827\"),\n mart = mart\n)\n\ncellcyclegenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0045787\"),\n mart = mart\n)\n\nneurongenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0030182\"),\n mart = mart\n)\n\n\n# pathway <- bind_rows(pluripotencygenes,\n# cellcyclegenes,\n# neurongenes\n# )\n#\n# pathway$path <- c(\n# rep(\"pluri\",nrow(pluripotencygenes)),\n# rep(\"cellcycle\",nrow(cellcyclegenes)),\n# rep(\"neuron\",nrow(neurongenes))\n# )\n#\n# write_csv(x = pathway, file = here(\"data\",\"block-rna\",\"pathwaygenes.csv.gz\"))\n```\n:::\n\n\n\n## Add pathway information to results {.smaller}\n\nYou can see that these items are one-column dataframes that have the column name 'ensembl_gene_id'. We can now go through our results dataframe and add an annotation column that marks whether the gene is in any of these categories.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff_paths <-\n diff_lfc |>\n mutate(\n annot = case_when(\n ?? %in% pluripotencygenes$ensembl_gene_id ~ \"pluripotency\",\n ?? %in% cellcyclegenes$ensembl_gene_id ~ \"cellcycle\",\n ?? %in% neurongenes$ensembl_gene_id ~ \"neurondiff\",\n .default = \"none\"\n )\n ) |>\n drop_na() # drop na\n\n# Reorder these for plotting purposes\ndiff_paths$annot <-\n factor(\n diff_paths$annot,\n levels = c(\"none\", \"cellcycle\",\n \"pluripotency\", \"neurondiff\")\n )\n```\n:::\n\n\n\n## Are there significant differences? {.smaller}\n\nOK we've got our table, now we are going to ask if the log2FoldChange values for the genes in each of these classes are different that what we would expect. So what is the expected value? Well, we have a distribution of log2 fold changes for all the genes that are **not** in any of these categories. So we will ask if the distribution of log2 fold changes for each gene category is different than that null distribution.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npvals <- rstatix::wilcox_test(data = ??,\n ?? ~ ??, ref.group = \"none\")\n\n\np.pluripotency <- pvals |>\n filter(group2 == \"pluripotency\") |>\n pull(p.adj)\n\np.cellcycle <- pvals |>\n filter(group2 == \"cellcycle\") |>\n pull(p.adj)\n\n\np.neurondiff <- pvals |>\n filter(group2 == \"neurondiff\") |>\n pull(p.adj)\n```\n:::\n\n\n\n\n## plot pathway differences {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n ??,\n aes(\n x = ??,\n y = ??,\n fill = ??\n )\n) +\n labs(\n x = \"Gene class\",\n y = \"DIV7/DIV0, log2\"\n ) +\n geom_hline(\n yintercept = 0,\n color = \"gray\",\n linetype = \"dashed\"\n ) +\n geom_boxplot(\n notch = TRUE,\n outlier.shape = NA\n ) +\n theme_cowplot() +\n scale_fill_manual(values = c(\"gray\", \"red\", \"blue\", \"purple\"), guide = F) +\n scale_x_discrete(\n labels = c(\n \"none\", \"Cell cycle\", \"Pluripotency\", \"Neuron\\ndifferentiation\"\n )\n ) +\n ylim(-5, 7) +\n # hacky significance bars\n annotate(\"segment\", x = 1, xend = 2, y = 4, yend = 4) +\n annotate(\"segment\", x = 1, xend = 3, y = 5, yend = 5) +\n annotate(\"segment\", x = 1, xend = 4, y = 6, yend = 6) +\n annotate(\"text\", x = 1.5, y = 4.4, label = paste0(\"p = \", p.cellcycle)) +\n annotate(\"text\", x = 2, y = 5.4, label = paste0(\"p = \", p.pluripotency)) +\n annotate(\"text\", x = 2.5, y = 6.4, label = paste0(\"p = \", p.neurondiff))\n```\n:::\n\n\n\n## What if we want to look at pathways in an unbiased way? {.smaller}\n\nWe will use Gene Set Enrichment Analysis (GSEA) to determine if pre-defined gene sets (pathways, GO terms, experimentally defined genes) are coordinately up-regulated or down-regulated between the two conditions you are comparing. To run gsea you need 2 things. 1. You list of expressed genes ranked by fold change. 2. Pre-defined gene sets. See [MSigDb](https://www.gsea-msigdb.org/gsea/msigdb/index.jsp)\n\n![](/img/block-rna/gsea_overview.png)\n\nPMID: 12808457, 16199517\n\n## GSEA examples {.smaller}\nTop = upregulated\n\n![](/img/block-rna/gsea_examples.png){width=\"3in\"}\n\nBottom = downregulated\n\n## Prep GSEA {.smaller}\n\n1. We need to make a list of all genes and their LFC.\n\n2. We need to find interesting gene sets.\n\n3. Run GSEA\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# retrieve hallmark gene set from msigdb\nmouse_hallmark <- msigdbr(species = \"??\") %>%\n filter(gs_cat == \"?\") %>% ## halmark\n dplyr::select(gs_name, gene_symbol)\n\n# create a list of gene LFCs\nrankedgenes <- diff_lfc %>% pull(??)\n\n# add symbols as names of the list\nnames(rankedgenes) <- diff$??\n\n# sort by LFC\nrankedgenes <- sort(rankedgenes, decreasing = TRUE)\n\n# deduplicate\nrankedgenes <- rankedgenes[!duplicated(names(rankedgenes))]\n```\n:::\n\n\n## Run GSEA {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# rankedgenes[!names(rankedgenes) == \"\"]\n\n# run gsea\ndiv7vs0 <- GSEA(geneList = ??,\n eps = 0,\n pAdjustMethod = \"fdr\",\n pvalueCutoff = .05,\n minGSSize = 20,\n maxGSSize = 1000,\n TERM2GENE = ??)\n\ndiv7vs0@result |>\n select(??,??,??) |>\n gt()\n```\n:::\n\n\n## Plot GSEA {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# plot \"HALLMARK_G2M_CHECKPOINT\"\ngseaplot(x = div7vs0, geneSetID = \"HALLMARK_G2M_CHECKPOINT\")\n```\n:::\n\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/exercises/ex-25/execute-results/html.json b/_freeze/exercises/ex-25/execute-results/html.json new file mode 100644 index 00000000..31324712 --- /dev/null +++ b/_freeze/exercises/ex-25/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "dab274288b8c6acffafb3daad2d1fb04", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Alternative splicing\"\nauthor: \"Matthew Taliaferro\"\neditor:\n markdown:\n wrap: 72\n---\n\n\n\n## Overview {.smaller}\n\nIn this lecture, we are going focus on analyzing the regulation of\nalternative splicing using RNAseq approaches.As we learned last week,\n`salmon` quantifies a fastq file of sequencing reads against a fasta\nfile of all transcripts present in the sample. At the end of this\nanalysis, we end up with quantifications for each transcript in our\nfasta file. However, for splicing you may be able to see how this\nstrategy may need to be tweaked. `salmon` gave us transcript-level data,\nbut for looking at splicing, we often want to measure how the inclusion\nof individual **exons** within transcripts differs between conditions.\nThus, transcript-level quantifications are not directly useful here.\n\n> Small aside: Actually, transcript level quantifications could work,\n> because you could ask how the relative abundances of two different\n> transcripts (one that has the exon in question and one that doesn't)\n> vary across conditions. See also `suppa2`.\n\n## Split alignments {.smaller}\n\nWe need exon-level quantifications. So we want to count reads that\neither support the inclusion or exclusion of an exon.\n\nBelow are examples of some RNAseq reads mapped along a transcript. This\ntranscript contains exons (yellow) and introns (gray). Let's say that\nthere are two isoforms of this gene: one where `exon2` is included and\none where it is exlcuded. Reads have been \"aligned\" to this transcript\nto give a graphical representation of where they came from. You can see\nthat the orange, purple, blue, and teal reads all *support* the\ninclusion of `exon2`.\n\n![Kim et al, Nat Methods, 2015](/img/block-rna/junc_read.png)\n\n## Split alignments {.smaller}\n\nAnother way to think about this is that the orange, purple, blue, and\nteal reads came from RNA molecules in which the transcript was included.\n\nWe know this because each of those reads cross a **splice junction**\nthat is either `exon1-exon2` or `exon2-exon3`. These reads tell us,\n**unambiguously**, that `exon2` was included in the RNA molecule that\nthese reads came from.\n\n![Kim et al, Nat Methods, 2015](/img/block-rna/junc_read.png)\n\n> What does the red read tell us? What would a read that unambiguously\n> told us that exon2 was *excluded* look like?\n\n## Strategy in action {.smaller}\n\nExample of reads mapped to the area surrounding an alternative exon (the\nmiddle exon). The height of the red and blue area corresponds to the\nnumber of read coverage. The red and blue lines connecting exons\nrepresent the number of reads that span that junction. So for the blue\ncondition, there are 347 reads (91 + 256) that support the inclusion of\nthis exon, while 81 reads support its exclusion. In the red condition,\nthis exon is less often excluded as 296 reads (65 + 231) support its\ninclusion while 130 support its exclusion. *Think about how often an\nexon was included in a sample as a ratio between the inclusion- and\nexclusion-supporting reads*.\n\n![](/img/block-rna/sashimi.png){width=\"50%\"}\n\n## Workflow {.smaller}\n\nWe will focus on the right side of the flowchart that relies on\n[`STAR`](https://github.com/alexdobin/STAR), a splice-aware read\naligner, and [`rMATS`](https://rnaseq-mats.sourceforge.io/), an\nalternative splicing analysis tool.\n\n![](/img/block-rna/flowchart.png)\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nSTAR begins by finding matches (either unique or nonunique) between a\nportion of a read and the reference. This matching region of the query\nis extended along the reference until the two start to disagree. If this\nmatch extends all the way through to the end of the read, then the read\nlies completely within one exon (or intron, or I guess intergenic region\nif you are bad at making RNAseq libraries) and we are done. If the match\nends before the end of the read, the part that has matched so far\ndefines one *seed*.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/seed1.png)\n:::\n:::\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nSTAR then takes the rest of the query and uses it to find the best match\nto its sequence in the reference, defining another seed.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/seed2.png)\n:::\n:::\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nIf, during the extension of a match a small region of mismatch or\ndiscontinuity occurs, these can be identified as mutations or indels if\nhigh-quality matches between the query and reference resume later in the\nread.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/indel.png){width=\"50%\" height=\"100%\"}\n:::\n:::\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nAfter aligning seeds, they can be stitched together. The stitching of\nseeds with high alignment quality (low number of indels, mismatches) is\nprefered over the stitching of seeds with low alignment quality (high\nnumber of indels, mismatches).\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/stitch.png)\n:::\n:::\n\n## Running STAR {.smaller}\n\nTo align reads, we first need to create an **index** of the genome (see\nSTAR manual\n[here](https://physiology.med.cornell.edu/faculty/skrabanek/lab/angsd/lecture_notes/STARmanual.pdf).\nTo do this, `STAR` will require the sequence of the genome (in fasta\nformat), and an annotation that tells it where exons and introns are. It\nneeds the annotation to be able to see if seeds that it stitches\ntogether make sense with what we know about exon/intron structures that\nexist in the transcriptome. Let's take a look at one of these genome\nannotation files.\n\n## Annotation files {.smaller}\n\nThe most common annotation files are `GTF` and `GFF` files. Here's an\nexample of a `GFF`.\n\n![](/img/block-rna/gff.png)\n\nEach line corresponds to one feature. This is a tab-delimited text file.\nThere are only a few columns that we care about:\n\n- Column 1: chromosome\n- Column 2: source\n- Column 3: feature type\n- Column 4: feature start\n- Column 5: feature end\n- Column 7: strand (you aren't in DNA land anymore...strand matters)\n\n## Annotation files {.smaller}\n\n![](/img/block-rna/gff.png)\n\nColumn 8 contains various information about the feature. Perhaps the\nmost important one tells you about the hierarchy that defines the\nrelationship between features. For example, genes contain *children*\ntranscripts within them, and each transcript contains *children* exons.\nTranscripts will therefore belong to *parent* genes and exons will\nbelong to *parent* transcripts. Biologically, this should make sense to\nyou. These relationships are indicated by the **Parent** attribute\nwithin column 8.\n\n## Make STAR index {.smaller}\n\nOK now we are ready to make our index. There relevant options we will\nneed to pay attention to when doing this are shown below:\n\n- **--runMode** genomeGenerate (we are making an index, not aligning\n reads)\n- **--genomeDir** /path/to/genomeDir (where you want STAR to put this\n index we are making)\n- **--genomeFastaFiles** /path/to/genomesequence (genome sequence as\n fasta, either one file or multiple)\n- **--sjdbGTFfile** /path/to/annotations.gff (yes it says gtf, but we\n are going to use a gff format)\n- **--sjdbOverhang** 100 (100 will usually be a good value here, the\n recommended value is readLength - 1)\n- **--sjdbGTFtagExonParentTranscript** Parent (we have to specify this\n because we are using a gff annotation and this is how gff files\n denote relationships)\n- **--genomeSAindexNbases** 11 (don't worry about this one, we are\n specifying it because we are using an artificially small genome in\n this example)\n\n## Make STAR index {.smaller}\n\n> STAR --runMode genomeGenerate --genomeDir {path-to}/mySTARindex\n> --genomeFastaFiles {path-to}/genome.fasta --sjdbGTFfile\n> {path-to}/MOLB7950.gff3 --sjdbOverhang 100\n> --sjdbGTFtagExonParentTranscript Parent --genomeSAindexNbases 11\n\n![](/img/block-rna/star_index_out.png)\n\n## STAR: align reads {.smaller}\n\nNow that we have our index we are ready to align our reads. The options\nwe need to pay attention to here are:\n\n- **--runMode** alignReads (we are aligning this time)\n- **--genomeDir** /path/to/genomeDir (a path to the index we made in\n the previous step)\n- **--readFilesIn** /path/to/forwardreads /path/to/reversereads (paths\n to our fastqs, separated by a space)\n- **--readFilesCommand** gunzip -c (our reads our gzipped so we need\n to tell STAR how to read them)\n- **--outFileNamePrefix** path/to/outputdir (where to put the results)\n- **--outSAMtype** BAM SortedByCoordinate (the format of the alignment\n output, more on this later)\n\nNow we are ready to align our reads.\n\n## STAR: align reads {.smaller}\n\n> STAR --runMode alignReads --genomeDir {path-to}/mySTARindex/\n> --readFilesIn {path-to}/MOLB7950_1.fastq.gz\n> {path-to}/MOLB7950_2.fastq.gz --readFilesCommand gunzip -c\n> --outFileNamePrefix {path-to}/myalignments --outSAMtype BAM\n> SortedByCoordinate\n\n![](/img/block-rna/read_align_status.png)\n\n## Mapping stats produced by STAR {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nWell so how did it go? Check the log file. We can see that we put in\nalmost 100k read pairs and 96.7k of these could be uniquely assigned to\na single genomic position. 95.6k of these had a splice junction. This is\nexpected for paired end reads against a genome with many introns and\nshort exons.\n\nAs an aside, any read that aligns more times than is allowed by the flag\n**--outFilterMultimapNmax** is not reported in the alignments. As a\ndefault, this value is set to 10. Libraries that are made from low\ncomplexity RNA samples and those that deal with repetitive genomic\nregions can be sensitive to this. Also, if you wanted to, you can use\nthis flag to restrict your alignment file to those that only *uniquely*\naligned by setting this value to 1.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/star_out.png)\n:::\n:::\n\n## Investigating alignment files {.smaller}\n\nOur alignment output file is `dummyAligned.sortedByCoord.out.bam`. `BAM`\nfiles are binary files and need to be converted to plain text using\n`samtools view` for us to read it.\n\n> samtools view dummyAligned.sortedByCoord.out.bam \\> dummyAligned.sam\n\n## Alignments {.smaller}\n\nSAM files can be a little confusing, but it's worth taking the time to\nget to know them. The full SAM format specification can be found\n[here](https://samtools.github.io/hts-specs/SAMv1.pdf).\n\nLet's take a look at our SAM file and see what we see. I'm going to pick\n2 lines out.\n\n![](/img/block-rna/sam_example.png)\n\nHere we are looking at 2 lines from this file. These two lines\ncorrespond to two paired reads. I know that because the first field in\nthis file is the read ID as it came off the sequencer. You can see that\nthese two reads have the same ID (it's the thing I grepped for).\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **second** field is a bitwise flag. It is a sum of integers where\neach integer tells us something about the read. Every possible value of\nthis flag is a unique combination of the informative integers. You can\nsee what each of these integers are and what they mean in the [SAM\nformat specification](https://samtools.github.io/hts-specs/SAMv1.pdf).\nThere is also a handy calculator that you can plug your value into and\nit will tell you what your flag means\n[here](https://www.samformat.info/sam-format-flag). If we put our first\nflag, 163, in there it tell us that this read is:\n\n- The second read in a mate pair (128)\n- On the opposite strand of its mate pair (32)\n- Is mapped and properly paired (2)\n- Is paired (1)\n\nIf you put the flag value for the second read into the calculator, what\ndo you get?\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **third** field is obviously the reference name. No big mystery\nthere. This read maps to chromosome 19.\n\nThe **fourth** field is the position on the reference that corresponds\nto the beginning of the query. This read starts to map to chr19\nbeginning at position 3371611. As a aside, positions reported in SAM\nfiles are 1-based, not 0-based.\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **sixth** field is called the CIGAR string. This is a string of\ncharacters that tells you a little bit about *how* the query aligns to\nthe reference. Again, details can be found in the [SAM format\nspecification](https://samtools.github.io/hts-specs/SAMv1.pdf). The\nCIGAR string for the first read can be interpreted as follows:\n\n- The first 67 bases in the query align to the reference.\n- There is then a gap in the reference of 3415 nt.\n- Then the query starts to match again, and does so for the next 84\n nt.\n\nThese are paired end 151 nt reads, so it makes sense that 67 + 84 = 151.\n\nIn not so shocking news, the top read's mate (the second read) also has\na gap in the reference of 3415 nt. As you might have guessed, these\nreads are spanning the same intron, which you would expect reads from\nthe same mate pair to do.\n\n## Alignments {.smaller}\n\nThe **ninth** field is the *template length*, abbreviated TLEN. This is\nthe distance, in nt, from the beginning of one read in a pair to the end\nof it's mate.\n\n![](/img/block-rna/tlen.png)\n\nIf you know a little bit about how RNAseq libraries are made, you might\nknow that transcripts are fragmented, usually to lengths of 200-500 nt.\nGiven that this read is stretching over 3 kb along the reference\nsequence, it's a good bet that it is spanning an intron that is present\nin the reference but had been removed in the RNA molecule i.e. it was\nspliced out!\n\n## Workflow {.smaller}\n\nNow that we have aligned with `STAR`, we can calculate exon inclusion\nwith `rMATS`. As is often the case with bioinformatic tools, `rMATS` is\nnot the only tool that you can use to look at alternative splicing, but\nit has been around for a while and has been thoroughly tested.\n\n![](/img/block-rna/flowchart.png)\n\n## PSI ($\\psi$) values {.smaller}\n\nIn many scenarios, splicing is quantified using a metric called PSI\n(Percent Spliced In), often shown as the greek letter $\\psi$, is a\nmetric that asks what fraction of transcripts *contain* the exon or RNA\nsequence in question. Thus, $\\psi$ values range from 0 (which would\nindicate that the exon is never included) to 1 (which would indicate\nthat the exon is always included). $\\psi$ can be estimated by counting\nthe number of reads that unambiguously support the inclusion of the exon\nand the number of reads that unambiguously support exclusion of the\nexon.\n\nFor skipped \"cassette\" exons, these reads are diagrammed below:\n\n![Shen et al, (2014). PNAS](/img/block-rna/sepsi.jpg)\n\n## PSI ($\\psi$) values {.smaller}\n\nIn this diagram, the exon in gray can either be included or skipped to\nproduced two different transcript isoforms. Reads in red (I for\ninclusion) unambiguously argue for the inclusion of the exon while reads\nin green (S for skipping) unambiguously argue for skipping of the exon.\nKeep in mind that the reads drawn over splice junctions indicate the the\nread spans the splice junction.\n\n![Shen et al, (2014). PNAS](/img/block-rna/sepsi.jpg)\n\n> Note: Red reads that do not cross a junction but lie totally within\n> the gray exon are often used in splicing analysis, but do not formally\n> unambiguously show exon inclusion. It is safer to rely **only** on\n> splice-junction spanning reads for splicing quantitation. The downside\n> of this is that you will lose read counts that came from non-junction\n> reads. Fewer read counts means less statistical power.\n\n## Types of alternative splicing {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n![Shen et al, (2014). PNAS](/img/block-rna/astypes_1.png)\n:::\n\n::: {.column width=\"50%\"}\nThere are other types of alternative splicing besides skipped exons. In\neach case, $\\psi$ is defined as the fraction of transcript in which the\nwhite sequence is included.\n\nSince we have already determined where in the genome RNAseq reads came\nfrom using `STAR`, we will now use `rMATS` to take those locations and\ncombine it with information about the locations of alternative exons to\nquantify the inclusion of each alternative exon.\n:::\n:::\n\n## Running rMATS {.smaller}\n\nTo quantify alternative splicing, `rMATS` needs two things: the\nlocations of the reads in the genome (bam files) and the locations of\nalternative exons in the genome (GTF annotation file).\n\n> Note: You may remember that when we ran STAR, we used a different type\n> of genome annotaiton file: GFF. GTFs and GFFs contain essentially the\n> same information and it is possible to interconvert between the two. I\n> chose to introduce you to GFFs because, to my mind, they are more\n> intuitive to and readable by humans. STAR could handle both GTF and\n> GFF formats. rMATS requires GTFs.\n\nHere are the most relevant options when running `rMATS`. See the\ndocumentation\n[here](https://github.com/Xinglab/rmats-turbo/blob/v4.1.0/README.md).\n\n- **--b1** /path/to/b1.txt (path to a text file that contains paths to\n all BAM files for samples in condition 1)\n- **--b2** /path/to/b2.txt (path to a text file that contains paths to\n all BAM files for samples in condition 2)\n- **--gtf** /path/to/gtf (path to the gtf genome annotation)\n- **-t** readtype (single or paired)\n- **--readlength** readlength\n- **--od** /path/to/output (output directory)\n\n## Looking at rMATS output {.smaller}\n\nIn this example, the authors were interested in the splicing regulatory\nactivity of the RNA-binding protein RBFOX2. They sequenced RNA from\ncells that had been treated with either shRNA against RBFOX2 or a\ncontrol, non-targeting shRNA. Each condition was performed in\nquadruplicate, meaning we have 4 replicates for each condition. I\ndownloaded their data, aligned it against the mouse genome using `STAR`,\nand then quantified alternative splicing using `rMATS`.\n\nWe won't run `rMATS` here because we would need multiple large bam files\nto do anything meaningful, and honestly, it's just copying things from\nthe documentation and putting them into the command line. What we will\ndo though, is look at the output produced by `rMATS`.\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\nYou can see that there are many files here, and that each type of\nalternative splicing (A3SS, A5SS, MXE, RI, and SE) has files associated\nwith it. Specifically each event type has 2 files: one that ends in\n'JC.txt' and one that ends in 'JCEC.txt'. The 'JC.txt' files only use\nreads that cross splice junctions to quantify splicing (JC = junction\ncounts) while the 'JCEC.txt' files use both junction reads *and* reads\nthat map to the alternative exon (EC = exon counts). We are going to use\nthe files ending in `*JC.txt`.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/rmats_dir.png)\n:::\n:::\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"40%\"}\nIf we look at `SE.MATS.JC.txt` file the column names are at the top.\nLet's go through some of the more important columns:\n\n- **ID** A unique identifier for this event.\n- **chr** chromosome\n- **strand** strand (+ or -)\n- **exonStart_0base** the coordinate of the beginning of the\n alternative exon (using 0-based coordinates)\n- **exonEnd** the coordinate of the end of the alternative exon\n:::\n\n::: {.column width=\"60%\"}\n![](/img/block-rna/rmats_out.png)\n:::\n:::\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"40%\"}\n- **upstreamES** the coordinate of the beginning of the exon\n immediately upstream of the alternative exon\n- **upstreamEE** the coordinate of the end of the exon immediately\n upstream of the alternative exon\n- **downstreamES** the coordinate of the beginning of the exon\n immediately downstream of the alternative exon\n- **downstreamEE** the coordinate of the end of the exon immediately\n downstream of the alternative exon\n:::\n\n::: {.column width=\"60%\"}\n![](/img/block-rna/rmats_out.png)\n:::\n:::\n\n## rMATS output {.smaller}\n\nNotice that with these coordinates and the sequence of the genome, you\ncould derive the sequences flanking each of these exons. That could be\nuseful, perhaps, if you wanted to ask if there were short sequences\n(kmers) enriched near exons whose inclusion was sensitive to RBFOX2 loss\nversus exons whose inclusion was insensitive.\n\n- **IJC_SAMPLE_X** the number of read counts that support inclusion of\n the exon is sample X (four numbers, one for each replicate, each\n separated by a comma)\n- **SJC_SAMPLE_X** same thing, but for read counts that support the\n exclusion of the exon\n\n## rMATS output {.smaller}\n\nThe numbers from `[S|I]JC_SAMPLE_X` could be useful for filtering events\nbased on coverage. Say, for example, that we were looking at an event\nthat when we combined IJC and SJC counts for each replicate we got\nsomething like 2,4,1,5. That would mean that in the replicates for this\ncondition, we only had 2, 4, 1, and 5 reads that tell us anything about\nthe status of this exon. That's pretty low, so I would argue that we\nreally wouldn't want to consider this event at all since we don't have\nmuch confidence that we know anything about its inclusion.\n\n- **PValue** The pvalue asking if the PSI values for this event\n between the two conditions is statistically significantly different\n- **FDR** The p value, after it has been corrected for multiple\n hypothesis testing. This is the significance value you would want to\n filter on.\n- **IncLevel1** PSI values for the replicates in condition 1 (in this\n case, condition 1 is RBFOX shRNA).\n- **IncLevel2** PSI values for the replicates in condition 2 (in this\n case, condition 2 is Control shRNA).\n- **IncLevelDifference** Difference in PSI values between conditions\n (Condition 1 - Condition 2).\n\n## rMATS output {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\npsis <- read.table(here(\"data/block-rna/rMATS/SE.MATS.JC.txt.gz\"), header = T) %>%\n #Get rid of columns we aren't really going to use.\n dplyr::select(., c('ID', 'geneSymbol', 'IJC_SAMPLE_1', 'SJC_SAMPLE_1', 'IJC_SAMPLE_2', 'SJC_SAMPLE_2', 'FDR', 'IncLevel1', 'IncLevel2', 'IncLevelDifference'))\n\nhead(psis)\n```\n:::\n\n\nWe will only consider events where there are *at least* 20 informative\nreads that tell us about the inclusion of the exon `IJC + SJC > 20` in\n**every replicate**. For example, for event '5' (gene Neil1) above,\nSample 1 replicates have 12, 6, 9, and 5 reads while Sample 2 replicates\nhave 10, 8, 14, and 0 reads. I would want to require that all of 12, 6,\n9, 5, 10, 8, 14, and 0 are greater than 20 in order to worry about this\nevent. Otherwise, I conclude that we don't have enough data to\naccurately conclude anything about this event.\n\n## tidy rMATS output {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\npsis <- psis %>%\n #Split the replicate read counts that are separated by commas into different columns\n separate(., col = IJC_SAMPLE_1, into = c('IJC_S1R1', 'IJC_S1R2', 'IJC_S1R3', 'IJC_S1R4'), sep = ',', remove = T, convert = T) %>%\n separate(., col = SJC_SAMPLE_1, into = c('SJC_S1R1', 'SJC_S1R2', 'SJC_S1R3', 'SJC_S1R4'), sep = ',', remove = T, convert = T) %>%\n separate(., col = IJC_SAMPLE_2, into = c('IJC_S2R1', 'IJC_S2R2', 'IJC_S2R3', 'IJC_S2R4'), sep = ',', remove = T, convert = T) %>%\n separate(., col = SJC_SAMPLE_2, into = c('SJC_S2R1', 'SJC_S2R2', 'SJC_S2R3', 'SJC_S2R4'), sep = ',', remove = T, convert = T)\n\nhead(psis)\n```\n:::\n\n\n## filter rMATS output {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\nthresh <- ??\n\npsis_filt <- psis %>%\n mutate(., S1R1counts = ?? + ??) %>%\n mutate(., S1R2counts = ?? + ??) %>%\n mutate(., S1R3counts = IJC_S1R3 + SJC_S1R3) %>%\n mutate(., S1R4counts = IJC_S1R4 + SJC_S1R4) %>%\n mutate(., S2R1counts = ?? + ??) %>%\n mutate(., S2R2counts = ?? + ??) %>%\n mutate(., S2R3counts = IJC_S2R3 + SJC_S2R3) %>%\n mutate(., S2R4counts = IJC_S2R4 + SJC_S2R4) %>%\n #Filter on read counts\n filter(., S1R1counts >= thresh & S1R2counts >= thresh & S1R3counts >= thresh & S1R4counts >= thresh &\n S2R1counts >= thresh & S2R2counts >= thresh & S2R3counts >= thresh & S2R4counts >= thresh)\n\nhead(psis_filt)\n```\n:::\n\n\n## Plot distribution of PSI values {.smaller}\n\nExons whose inclusion is not regulated tend to have PSI values that are\neither very close to 0 or very close to 1 (i.e. these exons are pretty\nmuch always included or always skipped). Exons whose inclusion is\nregulated tend to have PSI values that are more evenly spread between 0\nand 1. Do see this in our data?\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\npsis_filt_psi <- psis_filt %>%\n #Separate psi value replicates into individual columns\n separate(., col = ??, into = c('PSI_S1R1', 'PSI_S1R2', 'PSI_S1R3', 'PSI_S1R4'), sep = ',', remove = T, convert = T) %>%\n separate(., col = ??, into = c('PSI_S2R1', 'PSI_S2R2', 'PSI_S2R3', 'PSI_S2R4'), sep = ',', remove = T, convert = T) %>%\n #Select the columns we want\n dplyr::select(., c(contains('PSI'), FDR))\n\n#Turn data from wide format into long format for plotting purposes\n\npsis_filt_psi_long <- gather(psis_filt_psi,\n key = sample,\n value = psi,\n PSI_S1R1:PSI_S2R4) %>%\n #For each row, mark whether that replicate came from Condition 1 (RBFOXkd) or Condition2 (Controlkd)\n #We can tell that by asking if the substring 'S1' is somewhere in 'sample'\n mutate(., condition = ifelse(grepl('S1', sample), 'RBFOX2kd', 'Controlkd')) %>%\n #Make a column indicating whether the FDR in this row is significant\n mutate(., sig = ifelse(FDR < 0.05, 'yes', 'no'))\n\n#Plot\ncolors <- c('DarkOrange', 'DarkViolet')\n\nggplot(psis_filt_psi_long,\n aes(x = ??, linetype = ??, color = sig)) +\n geom_density() +\n theme_cowplot() +\n facet_wrap(~sig, scales = \"free_y\", nrow = 2) +\n scale_color_manual(values = colors)\n```\n:::\n\n\n## PCA of PSI values {.smaller}\n\nJust as we did with gene expression values, we can monitor the quality\nof this data using principle components analysis. We would expect that\nreplicates within a condition would be clustered next to each other in\nthis analysis and that PC1, the principal component along which the\nmajority of the variance lies, would separate the conditions.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n#Make a matrix of psi values\npsis.matrix <- dplyr::select(psis_filt_psi, -??) %>% na.omit(.)\n\n#Use prcomp() to derive principle component coordinants of PSI values\npsi.pca <- prcomp(t(psis.matrix))\n\n#Add annotations of the conditions to the samples\npsi.pca.pc <- data.frame(psi.pca$x, sample = colnames(psis.matrix)) %>%\n mutate(., condition = ifelse(grepl('S1', sample), 'RBFOX2kd', 'Controlkd'))\n\n#Get the amount of variances contained within PC1 and PC2\npsi.pca.summary <- summary(psi.pca)$importance\npc1var = round(psi.pca.summary[2,1] * 100, 1)\npc2var = round(psi.pca.summary[2,2] * 100, 1)\n\n#Plot PCA data\nggplot(psi.pca.pc, aes(x = ??, y = ??, shape = ??, color = ??)) +\n geom_point(size = 5) +\n scale_color_manual(values = colors) +\n xlab(paste('PC1,', pc1var, '% explained var.')) +\n ylab(paste('PC2,', pc2var, '% explained var.')) +\n theme_cowplot()\n```\n:::\n\n\n## heatmap of psi events\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# Filter only significant events\npsi_sig <- psis_filt_psi %>%\n filter(?? < 0.05) %>%\n select(-??)\n\n# row scaled heatmap\npheatmap(mat = psi_sig,\n clustering_method = \"ward.D2\",\n scale = \"??\",\n show_rownames = F\n )\n```\n:::\n\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/problem-set-keys/ps-key-15/execute-results/html.json b/_freeze/problem-set-keys/ps-key-15/execute-results/html.json new file mode 100644 index 00000000..c0577b7f --- /dev/null +++ b/_freeze/problem-set-keys/ps-key-15/execute-results/html.json @@ -0,0 +1,17 @@ +{ + "hash": "5a782a653eb52d21c1404eced3f5fac9", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Problem Set Stats Bootcamp - class 15\"\nsubtitle: \"Dealing with big data\"\nauthor: \"Neelanjan Mukherjee\"\neditor: visual\n---\n\n\n::: {.cell}\n::: {.cell-output .cell-output-stderr}\n\n```\n── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──\n✔ dplyr 1.1.4 ✔ readr 2.1.5\n✔ forcats 1.0.0 ✔ stringr 1.5.1\n✔ ggplot2 3.5.2 ✔ tibble 3.3.0\n✔ lubridate 1.9.4 ✔ tidyr 1.3.1\n✔ purrr 1.1.0 \n── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──\n✖ dplyr::filter() masks stats::filter()\n✖ dplyr::lag() masks stats::lag()\nℹ Use the conflicted package () to force all conflicts to become errors\n\nAttaching package: 'rstatix'\n\n\nThe following object is masked from 'package:stats':\n\n filter\n\n\n\nAttaching package: 'janitor'\n\n\nThe following object is masked from 'package:rstatix':\n\n make_clean_names\n\n\nThe following objects are masked from 'package:stats':\n\n chisq.test, fisher.test\n\n\nhere() starts at /Users/jayhesselberth/devel/rnabioco/molb-7950\n\n\nAttaching package: 'cowplot'\n\n\nThe following object is masked from 'package:lubridate':\n\n stamp\n```\n\n\n:::\n:::\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nang <- read_csv(here(\"data/bootcamp/edger.csv.gz\")) |>\n clean_names() |>\n filter(fdr < 0.05) |>\n select(log_fc_time0_25:log_fc_time8) |>\n as.matrix()\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nRows: 17942 Columns: 17\n── Column specification ────────────────────────────────────────────────────────\nDelimiter: \",\"\nchr (1): gene\ndbl (16): FDR, maxabsfc, logFC.Time0.25, logFC.Time0.5, logFC.Time0.75, logF...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n```\n\n\n:::\n\n```{.r .cell-code}\ncolnames(ang) <- gsub(pattern = \"log_fc_\", \"\", colnames(ang))\n```\n:::\n\n\n## Problem \\# 1\n\nMake sure to run the chunk above. The data represent the avg fold change in gene expression for an angiotensin II time course (.25, .5, .75, 1, 1.5, 2, 3, 4, 6, 8, 24 hrs) compared to unstimulated.\n\n## correlation --- (7 pts)\n\nCreate hierarchical clustering heatmap of pairwise pearson correlation coefficients. And provide 1-2 observations.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# scale ang (remember the transpose trick)\nang <- t(scale(t(ang)))\n\n# pairwise pearson correlation\np_ang <- cor(ang, method = \"pearson\")\n\n# make heatmap\npheatmap(\n mat = p_ang,\n clustering_distance_rows = \"euclidean\",\n clustering_distance_cols = \"euclidean\",\n clustering_method = \"ward.D2\"\n)\n```\n\n::: {.cell-output-display}\n![](ps-key-15_files/figure-html/clustering correlations-1.png){width=672}\n:::\n:::\n\n\nTimepoints close to each other tend to correlate strongly with each other. The 4,6, and 8 hr time points are the most different from all others.\n\n## PCA --- (7 pts)\n\nPerform PCA and visualize PC1 vs PC2.Provide 1-2 observations.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npc_ang <- prcomp(ang)\n\n# gather info from summary\npca_data_info <- summary(pc_ang)$importance |> as.data.frame()\n\npca_data_info <- round(x = pca_data_info, digits = 3)\n\n# we make a dataframe out of the rotations and will use this to plot\npca_plot_data <- pc_ang$rotation |>\n as.data.frame() |>\n rownames_to_column(var = \"ID\")\n\n# plot\nggplot(data = pca_plot_data, mapping = aes(x = PC1, y = PC2, color = ID)) +\n geom_point(size = 3) +\n labs(\n x = paste(\"PC1, %\", 100 * pca_data_info[\"Proportion of Variance\", \"PC1\"]),\n y = paste(\"PC2, %\", 100 * pca_data_info[\"Proportion of Variance\", \"PC2\"]),\n title = \"PCA for angII timecourse\"\n ) +\n theme_cowplot()\n```\n:::\n\n\nThere is a a circular patter that seems to correspond to the timepoints. Interestingly, 24 appears to group back with 0.25 indicating the system is resetting w/respect to RNA levels.\n\n## Calculate the empirical p-value of the cluster most enriched for DUX4 targets by sampling --- (6 pts) {.smaller}\n\nstep 1:\n\n- identify which cluster is the most enriched for DUX4 targets using `Geneoverlap`.\n- assign the cluster number as a variable named `c` to use later.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# read in data\ncd <- read_tsv(here(\"data\", \"dux4_clustering_results.csv.gz\"))\n\n# list of genes by dux4 targeting\nduxList <- split(cd$gene_symbol, cd$target)\n\n# list of genes by clustering\nclustList <- split(cd$gene_symbol, as.factor(cd$Cluster))\n\n# calculate all overlaps between lists\ngom.duxclust <- newGOM(duxList,\n clustList,\n genome.size = nrow(cd)\n )\n\n# retrieve p-values for each cluster and sort\ngetMatrix(gom.duxclust, \"pval\") |>\n t() |>\n as.data.frame() |>\n rownames_to_column(var = \"clust\") |>\n as.tibble() |>\n arrange(target)\n\n# which cluster has the lowest p-value?\nc <- 5\n```\n:::\n\n\nstep 2:\n\n- determine the number of total genes in that cluster. save this as a variable named `cN` to use later. you will need to know this to figure out how many genes to sample from the whole data set. the size matching will make it so the random samples in your null distribution is better matched to your observation specific to the cluster of interest.\n\n- determine the number of DUX4 targets in the cluster. save this as a variable named `cNt` to use later. this is the number that you are interested in comparing between the null distribution and your observation. remember, the p-value tells you the probability that the null hypothesis could generate an equal or more extreme observation.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# how many genes are in cluster 5?\ncN <- cd |>\n filter(Cluster == \"5\") |>\n nrow()\n\n# how many dux targets are in cluster 5?\ncNt <- cd |>\n filter(Cluster == \"5\" & target == \"target\") |>\n nrow()\n```\n:::\n\n\nstep 3:\n\ngenerate 1000 random sample of the size `cN` from all genes in the data set, and for each random sample save the number of genes that are DUX4 targets. this is your null distribution.\n\nvisualize the distribution of the \\# of DUX4 targets in these 1000 random (your null distribution) and overlay the number of DUX4 targets you observed in the cluster that was most enriched for DUX4 targets, `cNt`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# first simplify the problem by figuring out the # of DUX4 targets for 1 random sample\nsample_n(tbl = cd, size = cN) |>\n filter(target == \"target\") |>\n nrow()\n \n\n# create an empty vector for storing the # dux targets for each iteration. call this `sampled_targets`\nsampled_targets <- vector()\n\n\n# then use a for loop to do it 1000 times and save the results in `sampled_targets`\n\nfor (i in 1:1000) {\n sampled_targets[i] <- sample_n(tbl = cd, size = cN) |>\n filter(target == \"target\") |>\n nrow()\n}\n\nggplot(n, aes(x = sampled_targets)) +\n geom_density() +\n geom_vline(xintercept = cNt, color = \"red\") +\n theme_cowplot()\n\n# how many times did a simulation have more dux4 targets than `cNt`\nsampled_targets[sampled_targets > cNt] |>\n length()\n```\n:::\n\n\n### What is the p-value?\n\np \\< 0.001\n\n### What is your interpretation?\n\nThe null hypothesis that the number of DUX4 targets in cluster 5 IS NOT WELL SUPPORTED.\n\nThe number of DUX4 targets in c5 is very unlikely to be explained by chance.\n", + "supporting": [ + "ps-key-15_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/problem-set-keys/ps-key-15/figure-html/clustering correlations-1.png b/_freeze/problem-set-keys/ps-key-15/figure-html/clustering correlations-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7129a3013a6951046cd8dbe24bafb7149ec86ed1 GIT binary patch literal 74153 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 lApg%_{T!D67e)i+5e*vif1N;C0 literal 0 HcmV?d00001 diff --git a/_freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-3-1.png b/_freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-3-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7129a3013a6951046cd8dbe24bafb7149ec86ed1 GIT binary patch literal 74153 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 lApg%_{T!D67e)i+5e*vif1N;C0 literal 0 HcmV?d00001 diff --git a/_freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-4-1.png b/_freeze/problem-set-keys/ps-key-15/figure-html/unnamed-chunk-4-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd06e761776a4ffc74ca79e60473ed7844ac65e GIT binary patch literal 94492 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 MN=Y*9vf;!34~@JL2mk;8 literal 0 HcmV?d00001 diff --git a/_freeze/problem-sets/ps-23/execute-results/html.json b/_freeze/problem-sets/ps-23/execute-results/html.json new file mode 100644 index 00000000..f0879e6c --- /dev/null +++ b/_freeze/problem-sets/ps-23/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "ef8f519500ba6488cd1271f12e8c9d4a", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"RNA Block - Problem Set 23\"\n---\n\n## Problem Set\n\nTotal points: 20. First problem is worth 10 points, second and third problems are worth 5 points.\n\n## Load libraries\n\nStart by loading libraries you need analysis in the code chunk below.\n\n\n\nWe have an experiment where we can take neuronal cells and mechanically separate them into soma and neurite fractions. By sequencing RNA from both of these fractions and comparing the relative abundances of RNAs, we can get a sense of how neurite-localized every RNA is. We can also combine this approach with knockouts of specific RBPs. If we have an RBP that we think is involved in this process, we can do this subcellular fractionation in sequencing in both WT and RBP-knockout (KO) cells. Transcripts that depend upon the RBP for transcript to the neurite should be less neurite-enriched in the KO samples than the WT samples.\n\nWe recently completed this process in mouse cells that lack the RBP TDP-43. We have RNA sequence data for 4 conditions: WT soma, WT neurite, KO soma, and KO neurite with 3 replicates of each condition. These samples have been quantified with `salmon`.\n\nRead in this data, collapse `salmon`'s transcript-level quantification to gene-level quantification with `tximport`. Then assess the quality of this data by performing hierarchical clustering of pairwise spearman correlation values and PCA analysis of TPM expression values.\n\nThe salmon data lives in `data/block-rna/salmon_tdp43`. In that directory, you will find one `salmon` output directory for each sample.\n\n## Q1: read in salmon data (10 pts)\n\n\n::: {.cell}\n\n```{.r .cell-code}\n#There are some hints to help you get started\n\n#Use biomaRt to get a table of transcript/gene relationships\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"??\",\n host = \"https://www.ensembl.org\"\n)\n\nt2g <- biomaRt::getBM(attributes = c(\"ensembl_transcript_id\", \"ensembl_gene_id\", \"external_gene_name\"), mart = mart) |>\n dplyr::select(??, ??)\n\n\n\n#Read in salmon quantification files\n\nmetadata <- data.frame(sample_id = list.files(here(\"??\")),\n salmon_dirs = list.files(here(\"??\"),recursive = T,pattern = \"quant.sf\", full.names = T)\n\n ) |> \n separate(col = ??,\n into = c(\"cell\",\"loc\",\"geno\",\"rep\"),\n sep = \"??\",\n remove = F)\n\nmetadata$rep <- gsub(pattern = \"Rep\", replacement = \"\", metadata$rep) \n\nrownames(metadata) <- metadata$sample_id\n\n\n#Get gene-level TPM values with tximport\n\nsalmdir <- metadata$??\nnames(salmdir) <- metadata$??\n\n\ntxi <- tximport(files = ??,\n type = \"salmon\",\n tx2gene = ??,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n\n# Only keep genes that have a sum of TPMs across all samples > 1\ntpms <- txi$?? |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_gene_id\")\n\n\ntpms.cutoff <-\n mutate(tpms, nSamples = rowSums(tpms[, 2:??] > 1)) |>\n filter(nSamples >= ??) |>\n \n dplyr::select(-nSamples)\n```\n:::\n\n\n\n## Q2: make correlation heatmap (5 pts)\n\n\n::: {.cell}\n\n```{.r .cell-code}\n#Use cor() to get a matrix of pairwise correlations between samples\ntpms.cor <- cor(??, method = \"??\")\n\n#Use pheatmap() to plot correlation matrix\n\npheatmap(\n ??,\n annotation_col = metadata[,??], # what would be interesting to add as colored categories\n fontsize = 7,\n show_colnames = FALSE\n)\n```\n:::\n\n\n![HINT: what your answer should look like](/img/block-rna/tdp43_heatmap.png){width=\"75%\"}\n\n> Provide 1-2 sentences of interpretation of the similarity of the samples based on the heatmap.\n\n## Q3: make PCA plot (5 pts)\n\n\n::: {.cell}\n\n```{.r .cell-code}\n#Start with the filtered TPM table from above\ntpms.cutoff.matrix <- tpms.cutoff |>\n dplyr::select(-??) |>\n as.??()\n\n\n#Use prcomp() to derive principle component coordinants of *LOGGED* and *Scaled* TPM values\ntpms.cutoff.matrix <- log??(tpms.cutoff.matrix + ??)\n\n# scale\ntpms.cutoff.matrix <- ??(scale(??(tpms.cutoff.matrix)))\n\n\n# principle components\ntpms.pca <- prcomp(t(tpms.cutoff.matrix))\n\n#Add annotations of the cell compartment (soma / neurite) and TDP-43 status (WT / KO) of the samples\ntpms.pca.pc <- tpms.pca$x %>%\n as.data.frame() %>%\n rownames_to_column(var = \"sample_id\") %>% \n left_join(., metadata[,c(1,??)], by = \"??\")\n\n## \n\ntpms.pca.summary <- summary(tpms.pca)$importance\npc1var <- round(tpms.pca.summary[2, 1] * 100, 1)\npc2var <- round(tpms.pca.summary[2, 2] * 100, 1)\n\n#Plot PCA data\n\nggplot(data = tpms.pca.pc,\n aes(\n x = PC1, y = PC2,\n color = paste(??,??), label = sample_id\n )\n) +\n geom_point(size = 5) +\n scale_color_brewer(palette = \"Set1\") +\n theme_cowplot(16) +\n labs(\n x = paste(\"PC1,\", pc1var, \"% explained var.\"),\n y = paste(\"PC2,\", pc2var, \"% explained var.\")\n ) +\n geom_text_repel()\n```\n:::\n\n\n![HINT: what your answer should look like](/img/block-rna/tdp43_pca.png){width=\"75%\"}\n\n> Provide 1-2 sentences of interpretation of the similarity of the samples based on the heatmap.\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/problem-sets/ps-24/execute-results/html.json b/_freeze/problem-sets/ps-24/execute-results/html.json new file mode 100644 index 00000000..afb91c05 --- /dev/null +++ b/_freeze/problem-sets/ps-24/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "035ec3258bca95f82aa537db27e4ae96", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"RNA Block - Problem Set 24\"\n---\n\n## Problem Set\n\nTotal points: 20. Q1 - 10 pts, Q2,3 - 5 points each.\n\n1. Perform differential expression analysis comparing DIV28 vs DIV0 (10 pts)\n\n2. Are axonogenesis and cell cycle genes significantly differentially expressed? If so, in what direction (up/down-regulated)? (5 pts)\n\n3. Perform GSEA analysis using the Hallmark gene set. Make enrichment plot of `HALLMARK_G2M_CHECKPOINT` geneset. (5 pts)\n\n\n## Load libraries and generate gene information files (0 pts)\n\nMake sure to run the code chunk below to load required libraries and generate `t2g` (file for `tximport`) and gene id to symbol mapping file.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(biomaRt)\nlibrary(tximport)\nlibrary(tidyverse)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──\n✔ dplyr 1.1.4 ✔ readr 2.1.5\n✔ forcats 1.0.0 ✔ stringr 1.5.1\n✔ ggplot2 3.5.2 ✔ tibble 3.3.0\n✔ lubridate 1.9.4 ✔ tidyr 1.3.1\n✔ purrr 1.1.0 \n── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──\n✖ dplyr::filter() masks stats::filter()\n✖ dplyr::lag() masks stats::lag()\n✖ dplyr::select() masks biomaRt::select()\nℹ Use the conflicted package () to force all conflicts to become errors\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(DESeq2)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nLoading required package: S4Vectors\nLoading required package: stats4\nLoading required package: BiocGenerics\nLoading required package: generics\n\nAttaching package: 'generics'\n\nThe following object is masked from 'package:lubridate':\n\n as.difftime\n\nThe following object is masked from 'package:dplyr':\n\n explain\n\nThe following objects are masked from 'package:base':\n\n as.difftime, as.factor, as.ordered, intersect, is.element, setdiff,\n setequal, union\n\n\nAttaching package: 'BiocGenerics'\n\nThe following object is masked from 'package:dplyr':\n\n combine\n\nThe following objects are masked from 'package:stats':\n\n IQR, mad, sd, var, xtabs\n\nThe following objects are masked from 'package:base':\n\n anyDuplicated, aperm, append, as.data.frame, basename, cbind,\n colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,\n get, grep, grepl, is.unsorted, lapply, Map, mapply, match, mget,\n order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,\n rbind, Reduce, rownames, sapply, saveRDS, table, tapply, unique,\n unsplit, which.max, which.min\n\n\nAttaching package: 'S4Vectors'\n\nThe following objects are masked from 'package:lubridate':\n\n second, second<-\n\nThe following objects are masked from 'package:dplyr':\n\n first, rename\n\nThe following object is masked from 'package:tidyr':\n\n expand\n\nThe following object is masked from 'package:utils':\n\n findMatches\n\nThe following objects are masked from 'package:base':\n\n expand.grid, I, unname\n\nLoading required package: IRanges\n\nAttaching package: 'IRanges'\n\nThe following object is masked from 'package:lubridate':\n\n %within%\n\nThe following objects are masked from 'package:dplyr':\n\n collapse, desc, slice\n\nThe following object is masked from 'package:purrr':\n\n reduce\n\nLoading required package: GenomicRanges\nLoading required package: GenomeInfoDb\nLoading required package: SummarizedExperiment\nLoading required package: MatrixGenerics\nLoading required package: matrixStats\n\nAttaching package: 'matrixStats'\n\nThe following object is masked from 'package:dplyr':\n\n count\n\n\nAttaching package: 'MatrixGenerics'\n\nThe following objects are masked from 'package:matrixStats':\n\n colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,\n colCounts, colCummaxs, colCummins, colCumprods, colCumsums,\n colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,\n colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,\n colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,\n colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,\n colWeightedMeans, colWeightedMedians, colWeightedSds,\n colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,\n rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,\n rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,\n rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,\n rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,\n rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,\n rowWeightedMads, rowWeightedMeans, rowWeightedMedians,\n rowWeightedSds, rowWeightedVars\n\nLoading required package: Biobase\nWelcome to Bioconductor\n\n Vignettes contain introductory material; view with\n 'browseVignettes()'. To cite Bioconductor, see\n 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'.\n\n\nAttaching package: 'Biobase'\n\nThe following object is masked from 'package:MatrixGenerics':\n\n rowMedians\n\nThe following objects are masked from 'package:matrixStats':\n\n anyMissing, rowMedians\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(ggrepel)\nlibrary(here)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nhere() starts at /Users/jayhesselberth/devel/rnabioco/molb-7950\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(cowplot)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n\nAttaching package: 'cowplot'\n\nThe following object is masked from 'package:lubridate':\n\n stamp\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(rstatix)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n\nAttaching package: 'rstatix'\n\nThe following object is masked from 'package:IRanges':\n\n desc\n\nThe following object is masked from 'package:biomaRt':\n\n select\n\nThe following object is masked from 'package:stats':\n\n filter\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(clusterProfiler)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n\nclusterProfiler v4.16.0 Learn more at https://yulab-smu.top/contribution-knowledge-mining/\n\nPlease cite:\n\nT Wu, E Hu, S Xu, M Chen, P Guo, Z Dai, T Feng, L Zhou, W Tang, L Zhan,\nX Fu, S Liu, X Bo, and G Yu. clusterProfiler 4.0: A universal\nenrichment tool for interpreting omics data. The Innovation. 2021,\n2(3):100141\n\nAttaching package: 'clusterProfiler'\n\nThe following object is masked from 'package:IRanges':\n\n slice\n\nThe following object is masked from 'package:S4Vectors':\n\n rename\n\nThe following object is masked from 'package:purrr':\n\n simplify\n\nThe following object is masked from 'package:biomaRt':\n\n select\n\nThe following object is masked from 'package:stats':\n\n filter\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(enrichplot)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nenrichplot v1.28.4 Learn more at https://yulab-smu.top/contribution-knowledge-mining/\n\nPlease cite:\n\nT Wu, E Hu, S Xu, M Chen, P Guo, Z Dai, T Feng, L Zhou, W Tang, L Zhan,\nX Fu, S Liu, X Bo, and G Yu. clusterProfiler 4.0: A universal\nenrichment tool for interpreting omics data. The Innovation. 2021,\n2(3):100141\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(msigdbr)\n# run the code below to generate t2g file and gene id-symbol mapping file\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"mmusculus_gene_ensembl\"\n)\n\nt2g <- biomaRt::getBM(\n attributes = c(\n \"ensembl_transcript_id\",\n \"ensembl_gene_id\",\n \"external_gene_name\"\n ),\n mart = mart\n) |>\n as_tibble()\n\n# maps systematic to common gene names\ngene_name_map <- t2g |>\n dplyr::select(-ensembl_transcript_id) |>\n unique()\n```\n:::\n\n\n\n## Q1 Perform differential expression analysis comparing DIV28 vs DIV0\n\n### Prepare `metadata` and use `tximport` {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmetadata <- data.frame(\n sample_id = list.files(here(\"??\"),\n pattern = \"^DIV\"),\n salmon_dirs = list.files(here(\"??\"),\n recursive = ??,\n pattern = \"quant.sf\",\n full.names = ??)\n ) |>\n separate(col = sample_id, into = c(\"timepoint\",\"rep\"), sep = \"\\\\.\", remove = F)\n\nmetadata$rep <- gsub(pattern = \"Rep\", replacement = \"\", metadata$rep) \n\nrownames(metadata) <- metadata$sample_id\n\nmetadata <- metadata |> \n filter(timepoint %in% c(\"??\",\"??\")) \n\nsalmdir <- metadata$salmon_dirs\nnames(salmdir) <- metadata$sample_id\n\ntxi <- tximport(\n files = salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n```\n:::\n\n\n### Filter genes and perform `DESeq2` {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# examine distribution of TPMs\nhist(log2(1 + rowSums(txi$??)), breaks = 40)\n\n# decide a cutoff\nkeepG <- txi$abundance[log2(1 + rowSums(txi$abundance)) > ??,] |>\n rownames()\n\nddsTxi <- DESeqDataSetFromTximport(\n ??,\n colData = metadata,\n design = ~??\n)\n\n# keep genes with sufficient expession\nddsTxi <- ??\n\n# run DESeq2\ndds <- ??\n\n# create a dataframe containing results and join w/gene symbols\ndiff <-\n results(\n dds,\n contrast = c(\"timepoint\", \"??\", \"??\")\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n # drop unused columns\n dplyr::select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n dplyr::rename(gene = external_gene_name) |>\n as_tibble()\n```\n:::\n\n\n## Q2. Are axonogenesis and cell cycle genes significantly differentially expressed? If so, in what direction (up/down-regulated)?\n\n\n::: {.cell}\n\n```{.r .cell-code}\ncellcyclegenes <- ??(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0045787\"),\n mart = mart\n)\n\n\naxongenes <- ??(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0007409\"),\n mart = mart\n)\n\ndiff_paths <-\n diff |>\n mutate(\n annot = case_when(\n ensembl_gene_id %in% axongenes$ensembl_gene_id ~ \"??\",\n ensembl_gene_id %in% cellcyclegenes$ensembl_gene_id ~ \"??\",\n .default = \"none\"\n )\n ) |>\n drop_na() # drop na\n\n# Reorder these for plotting purposes\ndiff_paths$annot <-\n factor(\n diff_paths$annot,\n levels = c(\"none\",\n \"axonogenesis\",\n \"cellcycle\")\n )\n\n# calculate and report p-value using wilcox test\npvals <- wilcox_test(data = diff_paths,\n ?? ~ ??,\n ref.group = \"??\")\n\n# make a plot of the LFC (y-axis) ~ pathways (x-axis)\nggplot(\n diff_paths,\n aes(\n x = ??,\n y = ??,\n fill = ??\n )\n) +\n labs(\n x = \"Gene class\",\n y = \"DIV28/DIV0, log2\"\n ) +\n geom_hline(\n yintercept = 0,\n color = \"gray\",\n linetype = \"dashed\"\n ) +\n geom_boxplot(\n notch = TRUE,\n outlier.shape = NA\n ) +\n ylim(-5,5) +\n theme_cowplot() \n```\n:::\n\n\n\n\n## Q3. Perform GSEA analysis using the Hallmark gene set.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# retrieve mouse hallmark gene set from msigdb\nmouse_hallmark <- msigdbr(species = \"??\") %>%\n filter(gs_cat == \"??\") %>% \n dplyr::select(gs_name, gene_symbol)\n\n\n# create a list of gene LFCs\nrankedgenes <- diff %>% pull(??)\n\n# add symbols as names of the list\nnames(rankedgenes) <- diff$??\n\n# sort by LFC\nrankedgenes <- sort(??, decreasing = TRUE)\n\n# deduplicate\nrankedgenes <- rankedgenes[!duplicated(names(rankedgenes))]\n\n\n# run gsea\n?? <- GSEA(geneList = ??,\n eps = 0,\n pAdjustMethod = \"fdr\",\n pvalueCutoff = .05,\n minGSSize = 20,\n maxGSSize = 1000,\n TERM2GENE = ??)\n\n\n# plot \"HALLMARK_G2M_CHECKPOINT\"\ngseaplot(x = ??, geneSetID = \"??\")\n```\n:::\n\n\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/problem-sets/ps-25/execute-results/html.json b/_freeze/problem-sets/ps-25/execute-results/html.json new file mode 100644 index 00000000..8108a94f --- /dev/null +++ b/_freeze/problem-sets/ps-25/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "d4f347e1bd5e68a00bc9b007974fad0d", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"RNA Block - Problem Set 25\"\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──\n✔ dplyr 1.1.4 ✔ readr 2.1.5\n✔ forcats 1.0.0 ✔ stringr 1.5.1\n✔ ggplot2 3.5.2 ✔ tibble 3.3.0\n✔ lubridate 1.9.4 ✔ tidyr 1.3.1\n✔ purrr 1.1.0 \n── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──\n✖ dplyr::filter() masks stats::filter()\n✖ dplyr::lag() masks stats::lag()\nℹ Use the conflicted package () to force all conflicts to become errors\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(cowplot)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n\nAttaching package: 'cowplot'\n\nThe following object is masked from 'package:lubridate':\n\n stamp\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(here)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nhere() starts at /Users/jayhesselberth/devel/rnabioco/molb-7950\n```\n\n\n:::\n\n```{.r .cell-code}\nlibrary(ggrepel)\nlibrary(pheatmap)\nlibrary(RColorBrewer)\n```\n:::\n\n\n## Problem Set\n\nTotal points: 20. Q1 - 10 pts, Q2 - 10 points each.\n\nExercises: Take rMATS SE output, apply filters, and make a volcano plot. Also, make a heatmap of the significant PSI for each sample using all replicates. NOTE: this analysis will be performed for the **mutually exclusive exons**.\n\n# Exercises\n\nWe worked with an rMATS output file from an experiment in which mouse embryonic stem cells had been treated with either an shRNA against RBFOX2 or a control, nontargeting shRNA. We applied filters to remove any event from consideration in which the number of informative reads for that event (IJC + SJC) was less than 20 in **any** sample.\n\n# Q1 make volcano plot\n\nRead in the rMATS output for **mutually exclusive exons**. Apply a new read coverage filter such that any event with less than **10** informative junction reads in **any** sample is removed. Then make a volcano plot where each dot is an event, the x-axis is the difference in PSI between the two conditions (aka `IncLevelDifference`) and the y axis is -log10 of the `FDR`. Color dots that pass a significance threshold (FDR \\< 0.05) in red. Label the 4 most significant events (i.e. 4 lowest FDR values) with the name of the gene they are in.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Read in table\n\n\n# Split the replicate read counts that are separated by commas into different columns\n\n\n# filter events (reads >= 10)\n\n\n# Separate the inclusion levels for each sample and replicte (you will need this later)\n\n\n\n# Add another column to table that says whether or not this event is significant (FDR < 0.05)\n\n\n\n\n# Volcano Plot with sig events in red\n```\n:::\n\n\n![explosion](/img/block-rna/psi_volcano.png)\n\n# Exercise 2\n\nTake your skipped exon data and make a heatmap where the rows are events, columns are samples (each replicate separately, 4 replicates per condition), and the color of the cell is a scaled PSI value. Only plot significant (FDR \\< 0.05) events.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Filter for those that are significant (FDR < 0.05) and only keep columns with inclusion differences\n\n\n# Plot with pheatmap(), using scale = 'row' to plot scaled PSI values\n```\n:::\n\n\n![you don't need to have the gene symbols](/img/block-rna/psi_heatmap.png)\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/slides/slides-17/execute-results/html.json b/_freeze/slides/slides-17/execute-results/html.json index b0c768f4..d5dde58a 100644 --- a/_freeze/slides/slides-17/execute-results/html.json +++ b/_freeze/slides/slides-17/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "1859c1634293e146a9560eeac343ea3e", + "hash": "021ec2250fea5188577dfe7b90c301fe", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"Chromatin accessibility I\"\nsubtitle: \"Chromatin-centric measurement of genomic features\"\nauthor: \"{{< var instructor.block.dna >}}\"\ndate: last-modified\n---\n\n## Chromatin accessbility patterns and genome function\n\nThis class we'll examine chromatin accessibility patterns and begin to get a sense of what they mean, both at the fine-scale (single base-pair) and across the genome.\n\n## Load the libraries\n\nThese are libraries we've used before.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse)\nlibrary(cowplot)\nlibrary(here)\nlibrary(patchwork)\n```\n:::\n\n\n---\n\nThese are new libraries specifically for genome analysis. You learned about valr and Gviz for your homework.\n\n`TxDb.Scerevisiae.UCSC.sacCer3.sgdGene` provides gene annotations for the *S. cerevisiae* genome.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(valr)\nlibrary(Gviz)\nlibrary(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)\n```\n:::\n\n\n## Load the data {.smaller}\n\nIn this and the next class we will analyze ATAC-seq and MNase-seq data sets from budding yeast. Here are the references for the two data set:\n\n#### ATAC-seq\n\n> Schep AN, Buenrostro JD, Denny SK, Schwartz K, Sherlock G, Greenleaf WJ. Structured nucleosome fingerprints enable high-resolution mapping of chromatin architecture within regulatory regions. Genome Res. 2015 PMID: 26314830; PMCID: PMC4617971. [\\[Link\\]](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4617971/) [\\[Data\\]](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE66386)\n\n#### MNase-seq\n\n> Zentner GE, Henikoff S. Mot1 redistributes TBP from TATA-containing to TATA-less promoters. Mol Cell Biol. 2013 PMID: 24144978; PMCID: PMC3889552. [\\[Link\\]](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3889552/) [\\[Data\\]](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE44200)\n\n## Experimental consideration\n\nIn a standard MNase-seq experiment, DNA around \\~150 bp is extracted to look closely at nucleosome occupancy & positioning. However, the above study *did not* perform size selection. This is important as now we can look at both transcription factor binding sites and nucleosome positions.\n\n## Fragment size distributions are informative\n\nFirst, we will determine the fragment size distributions obtained from the two experiments. These sizes are the fingerprints of particles that were protecting nuclear DNA from digestion.\n\nI have performed the alignment of paired-end reads and converted all reads into a bed file where each line of the bed file denotes a single fragment from start to end.\n\n## First, load the ATAC-seq reads:\n\n\n::: {.cell}\n\n```{.r .cell-code}\natac_tbl <- read_bed(\n here(\"data/block-dna/yeast_atac_chrII.bed.gz\"),\n)\n\natac_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 409,870 × 3\n chrom start end\n \n 1 chrII 0 42\n 2 chrII 0 52\n 3 chrII 0 71\n 4 chrII 0 75\n 5 chrII 0 82\n 6 chrII 0 83\n 7 chrII 0 83\n 8 chrII 0 83\n 9 chrII 0 122\n10 chrII 0 135\n# ℹ 409,860 more rows\n```\n\n\n:::\n:::\n\n\n## Next, load the MNase reads. {.smaller}\n\nWorking with a small genome is a huge advantage -- we can study the whole chromosome in this class.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_tbl <- read_bed(\n here(\"data/block-dna/yeast_mnase_chrII.bed.gz\")\n)\n\nmnase_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,236,334 × 3\n chrom start end\n \n 1 chrII 1 228\n 2 chrII 2 80\n 3 chrII 3 226\n 4 chrII 4 60\n 5 chrII 4 66\n 6 chrII 4 77\n 7 chrII 4 81\n 8 chrII 5 56\n 9 chrII 5 60\n10 chrII 5 60\n# ℹ 1,236,324 more rows\n```\n\n\n:::\n:::\n\n\n\n## Expectations for chromatin fragment lengths\n\nLet's remind ourselves of the expectations for chromatin fragment lengths from MNase-seq and ATAC-seq experiments.\n\n## MNase-seq\n\n![](../img/block-dna/mnase-overview.png)\n\n## ATAC-seq\n\n![](../img/block-dna/atac-explain.png)\n\n## Length distributions of chromatin-derived DNA fragments\n\nFor the MNase-seq BED file, you see that there are only three columns: `chrom`, `start`, and `end`.\n\nCalculating fragment length is simple:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmutate(mnase_tbl, frag_len = end - start)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,236,334 × 4\n chrom start end frag_len\n \n 1 chrII 1 228 227\n 2 chrII 2 80 78\n 3 chrII 3 226 223\n 4 chrII 4 60 56\n 5 chrII 4 66 62\n 6 chrII 4 77 73\n 7 chrII 4 81 77\n 8 chrII 5 56 51\n 9 chrII 5 60 55\n10 chrII 5 60 55\n# ℹ 1,236,324 more rows\n```\n\n\n:::\n:::\n\n\n## Let's use this approach to examine the fragment length distribution.\n\nFirst, we will combine the two data sets into a single tibble, adding a new column to indicate the type of experiment.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nacc_tbl <-\n bind_rows(\n mutate(mnase_tbl, type = \"mnase\"),\n mutate(atac_tbl, type = \"atac\")\n )\n\nacc_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,646,204 × 4\n chrom start end type \n \n 1 chrII 1 228 mnase\n 2 chrII 2 80 mnase\n 3 chrII 3 226 mnase\n 4 chrII 4 60 mnase\n 5 chrII 4 66 mnase\n 6 chrII 4 77 mnase\n 7 chrII 4 81 mnase\n 8 chrII 5 56 mnase\n 9 chrII 5 60 mnase\n10 chrII 5 60 mnase\n# ℹ 1,646,194 more rows\n```\n\n\n:::\n:::\n\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n acc_tbl,\n # \"end - start\" is fragment length\n aes(x = end - start)\n) +\n geom_histogram(\n # single base-pair resolution\n binwidth = 1\n ) +\n facet_grid(\n rows = vars(type),\n scales = \"free_y\"\n ) +\n xlim(30, 500) +\n labs(\n x = \"fragment length (bp)\",\n title = \"Histogram of fragment lengths\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-frag-len-1.png){width=960}\n:::\n:::\n\n\n## Interpretations\n\n1. How would you describe the two fragment length distributions? Are they similar?\n\n2. Can you make any biological conclusions based on the length distributions?\n\n## Periodicity in the fragment lengths\n\nThe ATAC data seems to be periodic. How can we test that hypothesis? We can calculate the autocorrelation of the length distribution. Can someone explain what [autocorrelation](https://en.wikipedia.org/wiki/Autocorrelation) means?\n\nWe'll use the base `hist` function to calculate the densities of the above histogram. Let's write a function we can use to analyze fragment lengths.\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\nfragment_len_hist <- function(tbl) {\n frag_lens <-\n mutate(\n tbl,\n frag_len = end - start\n ) |>\n filter(\n frag_len >= 30 &\n frag_len <= 500\n ) |>\n pull(frag_len)\n\n hist(\n frag_lens,\n breaks = seq(30, 500, 1),\n plot = FALSE\n )\n}\n\n# inspect the this value in the console\natac_frag_lens <- fragment_len_hist(atac_tbl)\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\natac_frag_lens\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n$breaks\n [1] 30 31 32 33 34 35 36 37 38 39 40 41 42\n [14] 43 44 45 46 47 48 49 50 51 52 53 54 55\n [27] 56 57 58 59 60 61 62 63 64 65 66 67 68\n [40] 69 70 71 72 73 74 75 76 77 78 79 80 81\n [53] 82 83 84 85 86 87 88 89 90 91 92 93 94\n [66] 95 96 97 98 99 100 101 102 103 104 105 106 107\n [79] 108 109 110 111 112 113 114 115 116 117 118 119 120\n [92] 121 122 123 124 125 126 127 128 129 130 131 132 133\n[105] 134 135 136 137 138 139 140 141 142 143 144 145 146\n[118] 147 148 149 150 151 152 153 154 155 156 157 158 159\n[131] 160 161 162 163 164 165 166 167 168 169 170 171 172\n[144] 173 174 175 176 177 178 179 180 181 182 183 184 185\n[157] 186 187 188 189 190 191 192 193 194 195 196 197 198\n[170] 199 200 201 202 203 204 205 206 207 208 209 210 211\n[183] 212 213 214 215 216 217 218 219 220 221 222 223 224\n[196] 225 226 227 228 229 230 231 232 233 234 235 236 237\n[209] 238 239 240 241 242 243 244 245 246 247 248 249 250\n[222] 251 252 253 254 255 256 257 258 259 260 261 262 263\n[235] 264 265 266 267 268 269 270 271 272 273 274 275 276\n[248] 277 278 279 280 281 282 283 284 285 286 287 288 289\n[261] 290 291 292 293 294 295 296 297 298 299 300 301 302\n[274] 303 304 305 306 307 308 309 310 311 312 313 314 315\n[287] 316 317 318 319 320 321 322 323 324 325 326 327 328\n[300] 329 330 331 332 333 334 335 336 337 338 339 340 341\n[313] 342 343 344 345 346 347 348 349 350 351 352 353 354\n[326] 355 356 357 358 359 360 361 362 363 364 365 366 367\n[339] 368 369 370 371 372 373 374 375 376 377 378 379 380\n[352] 381 382 383 384 385 386 387 388 389 390 391 392 393\n[365] 394 395 396 397 398 399 400 401 402 403 404 405 406\n[378] 407 408 409 410 411 412 413 414 415 416 417 418 419\n[391] 420 421 422 423 424 425 426 427 428 429 430 431 432\n[404] 433 434 435 436 437 438 439 440 441 442 443 444 445\n[417] 446 447 448 449 450 451 452 453 454 455 456 457 458\n[430] 459 460 461 462 463 464 465 466 467 468 469 470 471\n[443] 472 473 474 475 476 477 478 479 480 481 482 483 484\n[456] 485 486 487 488 489 490 491 492 493 494 495 496 497\n[469] 498 499 500\n\n$counts\n [1] 244 34 27 76 183 297 360 431 927 2006 1994\n [12] 1019 931 1081 1218 1331 1182 1192 1621 4702 5604 3897\n [23] 2960 3005 3227 2969 2917 3037 3031 3886 4729 4140 3616\n [34] 3207 3241 3248 3256 3252 3050 3305 3483 3634 3343 3088\n [45] 3142 3207 3189 2986 2787 2962 2895 3079 3037 2659 2857\n [56] 2529 2669 2529 2523 2519 2476 2516 2396 2431 2496 2352\n [67] 2175 2143 2144 2140 2060 2028 2042 2065 1993 1996 2003\n [78] 1811 1875 1935 1733 1697 1642 1791 1644 1685 1745 1622\n [89] 1573 1445 1546 1445 1555 1668 1659 1479 1329 1343 1277\n[100] 1186 1310 1247 1181 1211 1283 1382 1642 1922 1661 1312\n[111] 1187 1046 1096 942 1023 1075 1135 1287 1329 1473 1641\n[122] 1537 1248 1073 1007 1031 1120 1260 1381 1357 1271 1138\n[133] 1111 1091 1161 1162 1311 1499 1631 1668 1472 1372 1221\n[144] 1164 1312 1397 1489 1533 1573 1475 1479 1419 1345 1380\n[155] 1409 1475 1480 1506 1438 1432 1404 1307 1401 1404 1549\n[166] 1568 1469 1428 1382 1417 1414 1274 1390 1474 1492 1479\n[177] 1401 1380 1332 1274 1213 1264 1205 1298 1242 1194 1143\n[188] 1177 1115 1057 1045 1101 1080 945 1006 1008 904 932\n[199] 872 878 892 897 814 821 782 781 842 771 742\n[210] 710 653 664 680 641 638 702 612 614 593 602\n[221] 580 520 530 540 518 547 494 455 471 450 458\n[232] 437 441 426 465 436 417 430 444 421 400 390\n[243] 357 386 367 386 349 377 340 373 353 335 329\n[254] 319 305 347 323 340 349 352 308 318 330 292\n[265] 288 297 295 291 297 327 314 287 264 285 253\n[276] 284 256 284 284 292 292 273 284 279 220 236\n[287] 246 254 262 244 271 291 278 256 244 249 259\n[298] 240 231 218 264 264 213 242 251 231 196 211\n[309] 232 205 208 216 217 191 227 234 183 155 198\n[320] 196 201 180 194 175 185 167 163 178 175 166\n[331] 176 138 145 137 155 136 153 139 161 142 122\n[342] 127 130 135 134 118 126 126 122 136 120 117\n[353] 121 88 100 107 89 84 93 102 76 105 100\n[364] 95 76 82 74 77 88 71 68 79 77 73\n[375] 73 58 74 61 66 51 57 73 57 64 56\n[386] 60 42 47 55 46 57 40 46 48 36 50\n[397] 35 60 46 34 39 49 38 39 30 37 33\n[408] 37 25 40 35 44 39 30 29 23 28 31\n[419] 39 39 33 18 37 24 39 34 24 32 24\n[430] 34 23 30 31 21 31 34 25 29 17 21\n[441] 25 23 23 31 22 35 21 26 22 20 17\n[452] 19 19 16 27 14 19 21 23 23 18 25\n[463] 20 23 22 15 21 18 16 12\n\n$density\n [1] 5.955083e-04 8.298067e-05 6.589641e-05 1.854862e-04\n [5] 4.466312e-04 7.248605e-04 8.786188e-04 1.051902e-03\n [9] 2.262443e-03 4.895859e-03 4.866572e-03 2.486979e-03\n [13] 2.272206e-03 2.638297e-03 2.972660e-03 3.248449e-03\n [17] 2.884798e-03 2.909205e-03 3.956225e-03 1.147574e-02\n [21] 1.367717e-02 9.511049e-03 7.224199e-03 7.334026e-03\n [25] 7.875841e-03 7.246165e-03 7.119253e-03 7.412126e-03\n [29] 7.397482e-03 9.484202e-03 1.154163e-02 1.010412e-02\n [33] 8.825238e-03 7.827029e-03 7.910010e-03 7.927094e-03\n [37] 7.946619e-03 7.936857e-03 7.443854e-03 8.066209e-03\n [41] 8.500637e-03 8.869169e-03 8.158952e-03 7.536597e-03\n [45] 7.668390e-03 7.827029e-03 7.783098e-03 7.287655e-03\n [49] 6.801974e-03 7.229080e-03 7.065560e-03 7.514631e-03\n [53] 7.412126e-03 6.489576e-03 6.972817e-03 6.172297e-03\n [57] 6.513982e-03 6.172297e-03 6.157654e-03 6.147891e-03\n [61] 6.042945e-03 6.140569e-03 5.847696e-03 5.933118e-03\n [65] 6.091757e-03 5.740310e-03 5.308322e-03 5.230223e-03\n [69] 5.232663e-03 5.222901e-03 5.027652e-03 4.949553e-03\n [73] 4.983721e-03 5.039855e-03 4.864131e-03 4.871453e-03\n [77] 4.888537e-03 4.419941e-03 4.576140e-03 4.722576e-03\n [81] 4.229573e-03 4.141711e-03 4.007478e-03 4.371129e-03\n [85] 4.012359e-03 4.112424e-03 4.258861e-03 3.958666e-03\n [89] 3.839076e-03 3.526678e-03 3.773180e-03 3.526678e-03\n [93] 3.795145e-03 4.070934e-03 4.048968e-03 3.609659e-03\n [97] 3.243568e-03 3.277736e-03 3.116656e-03 2.894561e-03\n[101] 3.197196e-03 3.043438e-03 2.882358e-03 2.955576e-03\n[105] 3.131300e-03 3.372920e-03 4.007478e-03 4.690848e-03\n[109] 4.053850e-03 3.202077e-03 2.897001e-03 2.552876e-03\n[113] 2.674906e-03 2.299053e-03 2.496742e-03 2.623653e-03\n[117] 2.770090e-03 3.141062e-03 3.243568e-03 3.595015e-03\n[121] 4.005037e-03 3.751214e-03 3.045879e-03 2.618772e-03\n[125] 2.457692e-03 2.516267e-03 2.733481e-03 3.075166e-03\n[129] 3.370479e-03 3.311905e-03 3.102013e-03 2.777412e-03\n[133] 2.711515e-03 2.662703e-03 2.833546e-03 2.835986e-03\n[137] 3.199637e-03 3.658471e-03 3.980631e-03 4.070934e-03\n[141] 3.592575e-03 3.348514e-03 2.979982e-03 2.840867e-03\n[145] 3.202077e-03 3.409529e-03 3.634065e-03 3.741452e-03\n[149] 3.839076e-03 3.599897e-03 3.609659e-03 3.463222e-03\n[153] 3.282618e-03 3.368039e-03 3.438816e-03 3.599897e-03\n[157] 3.612100e-03 3.675555e-03 3.509594e-03 3.494950e-03\n[161] 3.426613e-03 3.189874e-03 3.419292e-03 3.426613e-03\n[165] 3.780501e-03 3.826873e-03 3.585253e-03 3.485188e-03\n[169] 3.372920e-03 3.458341e-03 3.451019e-03 3.109334e-03\n[173] 3.392445e-03 3.597456e-03 3.641387e-03 3.609659e-03\n[177] 3.419292e-03 3.368039e-03 3.250890e-03 3.109334e-03\n[181] 2.960457e-03 3.084928e-03 2.940932e-03 3.167909e-03\n[185] 3.031235e-03 2.914086e-03 2.789615e-03 2.872595e-03\n[189] 2.721278e-03 2.579722e-03 2.550435e-03 2.687109e-03\n[193] 2.635856e-03 2.306374e-03 2.455251e-03 2.460133e-03\n[197] 2.206309e-03 2.274646e-03 2.128210e-03 2.142854e-03\n[201] 2.177022e-03 2.189225e-03 1.986655e-03 2.003739e-03\n[205] 1.908555e-03 1.906115e-03 2.054992e-03 1.881709e-03\n[209] 1.810931e-03 1.732832e-03 1.593717e-03 1.620564e-03\n[213] 1.659613e-03 1.564430e-03 1.557108e-03 1.713307e-03\n[217] 1.493652e-03 1.498533e-03 1.447280e-03 1.469246e-03\n[221] 1.415553e-03 1.269116e-03 1.293522e-03 1.317928e-03\n[225] 1.264235e-03 1.335012e-03 1.205660e-03 1.110477e-03\n[229] 1.149526e-03 1.098274e-03 1.117798e-03 1.066546e-03\n[233] 1.076308e-03 1.039699e-03 1.134883e-03 1.064105e-03\n[237] 1.017733e-03 1.049461e-03 1.083630e-03 1.027496e-03\n[241] 9.762431e-04 9.518370e-04 8.712970e-04 9.420746e-04\n[245] 8.957031e-04 9.420746e-04 8.517721e-04 9.201091e-04\n[249] 8.298067e-04 9.103467e-04 8.615346e-04 8.176036e-04\n[253] 8.029600e-04 7.785539e-04 7.443854e-04 8.468909e-04\n[257] 7.883163e-04 8.298067e-04 8.517721e-04 8.590939e-04\n[261] 7.517072e-04 7.761133e-04 8.054006e-04 7.126575e-04\n[265] 7.028950e-04 7.248605e-04 7.199793e-04 7.102169e-04\n[269] 7.248605e-04 7.980788e-04 7.663509e-04 7.004544e-04\n[273] 6.443205e-04 6.955732e-04 6.174738e-04 6.931326e-04\n[277] 6.247956e-04 6.931326e-04 6.931326e-04 7.126575e-04\n[281] 7.126575e-04 6.662859e-04 6.931326e-04 6.809296e-04\n[285] 5.369337e-04 5.759834e-04 6.003895e-04 6.199144e-04\n[289] 6.394392e-04 5.955083e-04 6.614047e-04 7.102169e-04\n[293] 6.784890e-04 6.247956e-04 5.955083e-04 6.077113e-04\n[297] 6.321174e-04 5.857459e-04 5.637804e-04 5.320525e-04\n[301] 6.443205e-04 6.443205e-04 5.198495e-04 5.906271e-04\n[305] 6.125926e-04 5.637804e-04 4.783591e-04 5.149682e-04\n[309] 5.662210e-04 5.003246e-04 5.076464e-04 5.271713e-04\n[313] 5.296119e-04 4.661561e-04 5.540180e-04 5.711022e-04\n[317] 4.466312e-04 3.782942e-04 4.832403e-04 4.783591e-04\n[321] 4.905622e-04 4.393094e-04 4.734779e-04 4.271064e-04\n[325] 4.515124e-04 4.075815e-04 3.978191e-04 4.344282e-04\n[329] 4.271064e-04 4.051409e-04 4.295470e-04 3.368039e-04\n[333] 3.538881e-04 3.343633e-04 3.782942e-04 3.319227e-04\n[337] 3.734130e-04 3.392445e-04 3.929379e-04 3.465663e-04\n[341] 2.977542e-04 3.099572e-04 3.172790e-04 3.294821e-04\n[345] 3.270414e-04 2.879917e-04 3.075166e-04 3.075166e-04\n[349] 2.977542e-04 3.319227e-04 2.928729e-04 2.855511e-04\n[353] 2.953135e-04 2.147735e-04 2.440608e-04 2.611450e-04\n[357] 2.172141e-04 2.050111e-04 2.269765e-04 2.489420e-04\n[361] 1.854862e-04 2.562638e-04 2.440608e-04 2.318577e-04\n[365] 1.854862e-04 2.001298e-04 1.806050e-04 1.879268e-04\n[369] 2.147735e-04 1.732832e-04 1.659613e-04 1.928080e-04\n[373] 1.879268e-04 1.781644e-04 1.781644e-04 1.415553e-04\n[377] 1.806050e-04 1.488771e-04 1.610801e-04 1.244710e-04\n[381] 1.391146e-04 1.781644e-04 1.391146e-04 1.561989e-04\n[385] 1.366740e-04 1.464365e-04 1.025055e-04 1.147086e-04\n[389] 1.342334e-04 1.122680e-04 1.391146e-04 9.762431e-05\n[393] 1.122680e-04 1.171492e-04 8.786188e-05 1.220304e-04\n[397] 8.542127e-05 1.464365e-04 1.122680e-04 8.298067e-05\n[401] 9.518370e-05 1.195898e-04 9.274310e-05 9.518370e-05\n[405] 7.321823e-05 9.030249e-05 8.054006e-05 9.030249e-05\n[409] 6.101520e-05 9.762431e-05 8.542127e-05 1.073867e-04\n[413] 9.518370e-05 7.321823e-05 7.077763e-05 5.613398e-05\n[417] 6.833702e-05 7.565884e-05 9.518370e-05 9.518370e-05\n[421] 8.054006e-05 4.393094e-05 9.030249e-05 5.857459e-05\n[425] 9.518370e-05 8.298067e-05 5.857459e-05 7.809945e-05\n[429] 5.857459e-05 8.298067e-05 5.613398e-05 7.321823e-05\n[433] 7.565884e-05 5.125276e-05 7.565884e-05 8.298067e-05\n[437] 6.101520e-05 7.077763e-05 4.149033e-05 5.125276e-05\n[441] 6.101520e-05 5.613398e-05 5.613398e-05 7.565884e-05\n[445] 5.369337e-05 8.542127e-05 5.125276e-05 6.345580e-05\n[449] 5.369337e-05 4.881216e-05 4.149033e-05 4.637155e-05\n[453] 4.637155e-05 3.904972e-05 6.589641e-05 3.416851e-05\n[457] 4.637155e-05 5.125276e-05 5.613398e-05 5.613398e-05\n[461] 4.393094e-05 6.101520e-05 4.881216e-05 5.613398e-05\n[465] 5.369337e-05 3.660912e-05 5.125276e-05 4.393094e-05\n[469] 3.904972e-05 2.928729e-05\n\n$mids\n [1] 30.5 31.5 32.5 33.5 34.5 35.5 36.5 37.5 38.5\n [10] 39.5 40.5 41.5 42.5 43.5 44.5 45.5 46.5 47.5\n [19] 48.5 49.5 50.5 51.5 52.5 53.5 54.5 55.5 56.5\n [28] 57.5 58.5 59.5 60.5 61.5 62.5 63.5 64.5 65.5\n [37] 66.5 67.5 68.5 69.5 70.5 71.5 72.5 73.5 74.5\n [46] 75.5 76.5 77.5 78.5 79.5 80.5 81.5 82.5 83.5\n [55] 84.5 85.5 86.5 87.5 88.5 89.5 90.5 91.5 92.5\n [64] 93.5 94.5 95.5 96.5 97.5 98.5 99.5 100.5 101.5\n [73] 102.5 103.5 104.5 105.5 106.5 107.5 108.5 109.5 110.5\n [82] 111.5 112.5 113.5 114.5 115.5 116.5 117.5 118.5 119.5\n [91] 120.5 121.5 122.5 123.5 124.5 125.5 126.5 127.5 128.5\n[100] 129.5 130.5 131.5 132.5 133.5 134.5 135.5 136.5 137.5\n[109] 138.5 139.5 140.5 141.5 142.5 143.5 144.5 145.5 146.5\n[118] 147.5 148.5 149.5 150.5 151.5 152.5 153.5 154.5 155.5\n[127] 156.5 157.5 158.5 159.5 160.5 161.5 162.5 163.5 164.5\n[136] 165.5 166.5 167.5 168.5 169.5 170.5 171.5 172.5 173.5\n[145] 174.5 175.5 176.5 177.5 178.5 179.5 180.5 181.5 182.5\n[154] 183.5 184.5 185.5 186.5 187.5 188.5 189.5 190.5 191.5\n[163] 192.5 193.5 194.5 195.5 196.5 197.5 198.5 199.5 200.5\n[172] 201.5 202.5 203.5 204.5 205.5 206.5 207.5 208.5 209.5\n[181] 210.5 211.5 212.5 213.5 214.5 215.5 216.5 217.5 218.5\n[190] 219.5 220.5 221.5 222.5 223.5 224.5 225.5 226.5 227.5\n[199] 228.5 229.5 230.5 231.5 232.5 233.5 234.5 235.5 236.5\n[208] 237.5 238.5 239.5 240.5 241.5 242.5 243.5 244.5 245.5\n[217] 246.5 247.5 248.5 249.5 250.5 251.5 252.5 253.5 254.5\n[226] 255.5 256.5 257.5 258.5 259.5 260.5 261.5 262.5 263.5\n[235] 264.5 265.5 266.5 267.5 268.5 269.5 270.5 271.5 272.5\n[244] 273.5 274.5 275.5 276.5 277.5 278.5 279.5 280.5 281.5\n[253] 282.5 283.5 284.5 285.5 286.5 287.5 288.5 289.5 290.5\n[262] 291.5 292.5 293.5 294.5 295.5 296.5 297.5 298.5 299.5\n[271] 300.5 301.5 302.5 303.5 304.5 305.5 306.5 307.5 308.5\n[280] 309.5 310.5 311.5 312.5 313.5 314.5 315.5 316.5 317.5\n[289] 318.5 319.5 320.5 321.5 322.5 323.5 324.5 325.5 326.5\n[298] 327.5 328.5 329.5 330.5 331.5 332.5 333.5 334.5 335.5\n[307] 336.5 337.5 338.5 339.5 340.5 341.5 342.5 343.5 344.5\n[316] 345.5 346.5 347.5 348.5 349.5 350.5 351.5 352.5 353.5\n[325] 354.5 355.5 356.5 357.5 358.5 359.5 360.5 361.5 362.5\n[334] 363.5 364.5 365.5 366.5 367.5 368.5 369.5 370.5 371.5\n[343] 372.5 373.5 374.5 375.5 376.5 377.5 378.5 379.5 380.5\n[352] 381.5 382.5 383.5 384.5 385.5 386.5 387.5 388.5 389.5\n[361] 390.5 391.5 392.5 393.5 394.5 395.5 396.5 397.5 398.5\n[370] 399.5 400.5 401.5 402.5 403.5 404.5 405.5 406.5 407.5\n[379] 408.5 409.5 410.5 411.5 412.5 413.5 414.5 415.5 416.5\n[388] 417.5 418.5 419.5 420.5 421.5 422.5 423.5 424.5 425.5\n[397] 426.5 427.5 428.5 429.5 430.5 431.5 432.5 433.5 434.5\n[406] 435.5 436.5 437.5 438.5 439.5 440.5 441.5 442.5 443.5\n[415] 444.5 445.5 446.5 447.5 448.5 449.5 450.5 451.5 452.5\n[424] 453.5 454.5 455.5 456.5 457.5 458.5 459.5 460.5 461.5\n[433] 462.5 463.5 464.5 465.5 466.5 467.5 468.5 469.5 470.5\n[442] 471.5 472.5 473.5 474.5 475.5 476.5 477.5 478.5 479.5\n[451] 480.5 481.5 482.5 483.5 484.5 485.5 486.5 487.5 488.5\n[460] 489.5 490.5 491.5 492.5 493.5 494.5 495.5 496.5 497.5\n[469] 498.5 499.5\n\n$xname\n[1] \"frag_lens\"\n\n$equidist\n[1] TRUE\n\nattr(,\"class\")\n[1] \"histogram\"\n```\n\n\n:::\n:::\n\n\n## Autocorrelation\n\nThe `density` slot contains a vector of densities at base-pair resolution. We will use `acf()` to calculate the autocorrelation of these values, and will store the tidied result.\n\n\n::: {.cell output-location='column'}\n\n```{.r .cell-code}\natac_acf_tbl <-\n acf(\n atac_frag_lens$density,\n lag.max = 40,\n plot = FALSE\n ) |>\n broom::tidy()\n\natac_acf_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 41 × 2\n lag acf\n \n 1 0 1 \n 2 1 0.975\n 3 2 0.937\n 4 3 0.916\n 5 4 0.909\n 6 5 0.902\n 7 6 0.891\n 8 7 0.882\n 9 8 0.877\n10 9 0.887\n# ℹ 31 more rows\n```\n\n\n:::\n:::\n\n\n## Autocorrelation {.smaller}\n\nNow let's plot the autocorrelation. First, we define a function.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nplot_acf <- function(tbl, title) {\n ggplot(\n tbl,\n aes(\n x = lag,\n y = acf\n )\n ) +\n geom_point(size = 2) +\n geom_line() +\n theme_minimal_grid() +\n geom_vline(\n xintercept = c(10, 21),\n color = \"red\"\n ) +\n labs(title = title)\n}\n```\n:::\n\n\n---\n\nAnd then we make the plot.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nplot_atac_acf <- plot_acf(atac_acf_tbl, title = \"ATAC ACF\")\n\nplot_atac_acf\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-acf-atac-1.png){fig-alt='Plot showing autocorrelation function (ACF) for ATAC-seq data.' width=960}\n:::\n:::\n\n\n## Autocorrelation {.smaller}\n\nSo, it looks like there significant bumps in autocorrelation at 10 and 21 bp positions, indicating that ATAC length distribution is periodic.\n\nHow do we confirm these bumps are interesting? Let's calculate the acf of a negative control -- the length distribution of the MNase data.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nmnase_frag_lens <-\n fragment_len_hist(mnase_tbl)\n\nmnase_acf_tbl <-\n acf(\n mnase_frag_lens$density,\n lag.max = 40,\n plot = FALSE\n ) |>\n broom::tidy()\n\nplot_mnase_acf <- plot_acf(mnase_acf_tbl, title = \"MNase ACF\")\n\n# patchwork plot\nplot_atac_acf & plot_mnase_acf\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-combined-acfs-1.png){fig-alt='Plot showing autocorrelation function (ACF) for MNase-seq data.' width=960}\n:::\n:::\n\n\n## Interpretation\n\nWe can see a monotonic decrease in the MNase-seq data, which confirms that the bumps we see are distinctive features of ATAC-seq data.\n\n**What are these features?** Consider that the specificity of binding of DNase, MNase, and Tn5 is not completely generic. These enzymes have specificity for the minor groove of DNA, and there is an optimal substrate geometry for cleavage. You can see this in previous studies, where DNase-seq revealed high-resolution views of DNA:protein structures.\n\n**So what then, exactly is the \\~10-11 bp periodicity?** And why is this not present in MNase data?\n\n## Molecular Picture of DNA accessibility\n\n![](../img/block-dna/dna-protein-structures.jpg)\n\n## Visualize read density in genomic region {.smaller}\n\nWe will use [Gviz](https://bioconductor.org/packages/release/bioc/vignettes/Gviz/inst/doc/Gviz.html#2_Basic_Features) to visualize read densities relative to a reference.\n\n## Load tracks {.smaller}\n\nFirst, we load the gene annotations from the [Saccharomyces Genome Databases](https://yeastgenome.org) (SGD).\n\n\n::: {.cell}\n\n```{.r .cell-code}\nsgd_genes <-\n GeneRegionTrack(\n TxDb.Scerevisiae.UCSC.sacCer3.sgdGene,\n chromosome = \"chrII\",\n start = 530811,\n end = 540885,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n )\n\nsgd_genes\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nGeneRegionTrack 'GeneRegionTrack'\n| genome: sacCer3\n| active chromosome: chrII\n| annotation features: 7\n```\n\n\n:::\n:::\n\n\n## Import bigWig {.smaller}\n\nNext, import the bigwig file containing yeast nucleosome-sized fragments\n(via MNase-seq) using `valr::read_bigwig()`.\n\nInspect the object.\n\n(What is \"GRanges\"?)\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_nuc_gr <- read_bigwig(\n here(\"data/block-dna/yeast_mnase_134_160.bw\"),\n as = \"GRanges\"\n)\n\nmnase_nuc_gr\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nGRanges object with 69120 ranges and 1 metadata column:\n seqnames ranges strand | score\n | \n [1] chrII 9-29 * | 3.81086\n [2] chrII 29-59 * | 5.71629\n [3] chrII 59-69 * | 13.33801\n [4] chrII 69-79 * | 28.58146\n [5] chrII 79-89 * | 34.29775\n ... ... ... ... . ...\n [69116] chrII 813099-813109 * | 24.77060\n [69117] chrII 813109-813119 * | 20.95973\n [69118] chrII 813119-813139 * | 15.24344\n [69119] chrII 813139-813169 * | 7.62172\n [69120] chrII 813169-813179 * | 5.71629\n -------\n seqinfo: 1 sequence from an unspecified genome; no seqlengths\n```\n\n\n:::\n:::\n\n\n## Load track {.smaller}\n\nNext, load the GRanges object as a track for Gviz to plot:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_nuc_trk <- DataTrack(\n mnase_nuc_gr,\n name = \"MNase_nuc\",\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n)\n\nmnase_nuc_trk\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nDataTrack 'MNase_nuc'\n| genome: NA\n| active chromosome: chrII\n| positions: 69120\n| samples:1\n| strand: * \n```\n\n\n:::\n:::\n\n\n## Vizualize a genomic region {.smaller}\n\nNow, we can make a plot for this particular region of chrII:\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# special track for the x-axis\nx_axis <- GenomeAxisTrack()\n\nplotTracks(\n c(\n sgd_genes,\n mnase_nuc_trk,\n x_axis\n ),\n from = 530811,\n to = 540885,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/gen-track-plot-1.png){fig-alt='Genome browser-style plot showing gene annotations and MNase-seq read density over a region of chromosome II in Saccharomyces cerevisiae.' width=960}\n:::\n:::\n\n\n## Load the remaining data\n\nThat looks great! Let's load all the other data sets.\n\n1. Load each bigWig as a GRanges object with `valr::read_bigwig()`\n2. Convert each to a `Gviz::DataTrack()` for plotting\n\n## Load the remaining data {.smaller}\n\nWe can do this one of two ways. We could do it one-by-one:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# complete the following steps for each of the four tracks\nfile_name <- \"yeast_mnase_lt50.bw\"\ntrack_name <- \"MNase_Short\"\n\nbig_wig <- read_bigwig(\n here(\"data/block-dna\", file_name),\n as = \"GRanges\"\n)\n\ndata_track <- DataTrack(big_wig, track_name)\n```\n:::\n\n\n---\n\nOr we can create a tibble with file and track names, and use [purrr](https://purrr.tidyverse.org/) to load and convert each one.\n\nFirst, we define a tibble of files and metadata.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info <-\n tibble(\n file_name = c(\n \"yeast_mnase_lt50.bw\",\n \"yeast_mnase_134_160.bw\",\n \"yeast_atac_lt120.bw\",\n \"yeast_atac_gt120.bw\"\n ),\n file_path = here(\"data/block-dna\", file_name),\n track_name = c(\n \"MNase_Short\",\n \"MNase_Long\",\n \"ATAC_Short\",\n \"ATAC_Long\"\n )\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 3\n file_name file_path track_name\n \n1 yeast_mnase_lt50.bw /Users/jayhesselberth/d… MNase_Sho…\n2 yeast_mnase_134_160.bw /Users/jayhesselberth/d… MNase_Long\n3 yeast_atac_lt120.bw /Users/jayhesselberth/d… ATAC_Short\n4 yeast_atac_gt120.bw /Users/jayhesselberth/d… ATAC_Long \n```\n\n\n:::\n:::\n\n\n## Load the remaining data\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info <-\n mutate(\n track_info,\n big_wig = purrr::map(\n file_path,\n \\(x) read_bigwig(x, as = \"GRanges\")\n ),\n data_track = purrr::map2(\n big_wig,\n track_name,\n \\(x, y) {\n DataTrack(\n x,\n name = y,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 11\n )\n }\n )\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 5\n file_name file_path track_name big_wig data_track\n \n1 yeast_mnase_lt5… /Users/j… MNase_Sho… \n2 yeast_mnase_134… /Users/j… MNase_Long \n3 yeast_atac_lt12… /Users/j… ATAC_Short \n4 yeast_atac_gt12… /Users/j… ATAC_Long \n```\n\n\n:::\n:::\n\n\n## Load the remaining data {.smaller}\n\nNow, we just have to make a list of tracks to plot and Gviz takes care of the rest.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nplotTracks(\n c(\n sgd_genes,\n track_info$data_track\n ),\n from = 530811,\n to = 540885,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-rest-track-data-1.png){width=960}\n:::\n:::\n\n\n## Interpretations\n\nRecall this plot:\n\n![](../img/block-dna/mnase-overview.png)\n\nSome questions to think about as you look at the tracks:\n\n1. What is each data set reporting on?\n2. What are the major differences between MNase-seq and ATAC-seq based on these tracks?\n3. What can you infer about gene regulation based on these tracks?\n", + "markdown": "---\ntitle: \"Chromatin accessibility I\"\nsubtitle: \"Chromatin-centric measurement of genomic features\"\nauthor: \"{{< var instructor.block.dna >}}\"\ndate: last-modified\n---\n\n## Chromatin accessbility patterns and genome function\n\nThis class we'll examine chromatin accessibility patterns and begin to get a sense of what they mean, both at the fine-scale (single base-pair) and across the genome.\n\n## Load the libraries\n\nThese are libraries we've used before.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse)\nlibrary(cowplot)\nlibrary(here)\nlibrary(patchwork)\n```\n:::\n\n\n---\n\nThese are new libraries specifically for genome analysis. You learned about valr and Gviz for your homework.\n\n`TxDb.Scerevisiae.UCSC.sacCer3.sgdGene` provides gene annotations for the *S. cerevisiae* genome.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(valr)\nlibrary(Gviz)\nlibrary(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)\n```\n:::\n\n\n## Load the data {.smaller}\n\nIn this and the next class we will analyze ATAC-seq and MNase-seq data sets from budding yeast. Here are the references for the two data set:\n\n#### ATAC-seq\n\n> Schep AN, Buenrostro JD, Denny SK, Schwartz K, Sherlock G, Greenleaf WJ. Structured nucleosome fingerprints enable high-resolution mapping of chromatin architecture within regulatory regions. Genome Res. 2015 PMID: 26314830; PMCID: PMC4617971. [\\[Link\\]](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4617971/) [\\[Data\\]](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE66386)\n\n#### MNase-seq\n\n> Zentner GE, Henikoff S. Mot1 redistributes TBP from TATA-containing to TATA-less promoters. Mol Cell Biol. 2013 PMID: 24144978; PMCID: PMC3889552. [\\[Link\\]](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3889552/) [\\[Data\\]](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE44200)\n\n## Experimental consideration\n\nIn a standard MNase-seq experiment, DNA around \\~150 bp is extracted to look closely at nucleosome occupancy & positioning. However, the above study *did not* perform size selection. This is important as now we can look at both transcription factor binding sites and nucleosome positions.\n\n## Fragment size distributions are informative\n\nFirst, we will determine the fragment size distributions obtained from the two experiments. These sizes are the fingerprints of particles that were protecting nuclear DNA from digestion.\n\nI have performed the alignment of paired-end reads and converted all reads into a bed file where each line of the bed file denotes a single fragment from start to end.\n\n## First, load the ATAC-seq reads:\n\n\n::: {.cell}\n\n```{.r .cell-code}\natac_tbl <- read_bed(\n here(\"data/block-dna/yeast_atac_chrII.bed.gz\"),\n)\n\natac_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 409,870 × 3\n chrom start end\n \n 1 chrII 0 42\n 2 chrII 0 52\n 3 chrII 0 71\n 4 chrII 0 75\n 5 chrII 0 82\n 6 chrII 0 83\n 7 chrII 0 83\n 8 chrII 0 83\n 9 chrII 0 122\n10 chrII 0 135\n# ℹ 409,860 more rows\n```\n\n\n:::\n:::\n\n\n## Next, load the MNase reads. {.smaller}\n\nWorking with a small genome is a huge advantage -- we can study the whole chromosome in this class.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_tbl <- read_bed(\n here(\"data/block-dna/yeast_mnase_chrII.bed.gz\")\n)\n\nmnase_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,236,334 × 3\n chrom start end\n \n 1 chrII 1 228\n 2 chrII 2 80\n 3 chrII 3 226\n 4 chrII 4 60\n 5 chrII 4 66\n 6 chrII 4 77\n 7 chrII 4 81\n 8 chrII 5 56\n 9 chrII 5 60\n10 chrII 5 60\n# ℹ 1,236,324 more rows\n```\n\n\n:::\n:::\n\n\n\n## Expectations for chromatin fragment lengths\n\nLet's remind ourselves of the expectations for chromatin fragment lengths from MNase-seq and ATAC-seq experiments.\n\n## MNase-seq\n\n![](../img/block-dna/mnase-overview.png)\n\n## ATAC-seq\n\n![](../img/block-dna/atac-explain.png)\n\n## Length distributions of chromatin-derived DNA fragments\n\nFor the MNase-seq BED file, you see that there are only three columns: `chrom`, `start`, and `end`.\n\nCalculating fragment length is simple:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmutate(mnase_tbl, frag_len = end - start)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,236,334 × 4\n chrom start end frag_len\n \n 1 chrII 1 228 227\n 2 chrII 2 80 78\n 3 chrII 3 226 223\n 4 chrII 4 60 56\n 5 chrII 4 66 62\n 6 chrII 4 77 73\n 7 chrII 4 81 77\n 8 chrII 5 56 51\n 9 chrII 5 60 55\n10 chrII 5 60 55\n# ℹ 1,236,324 more rows\n```\n\n\n:::\n:::\n\n\n## Let's use this approach to examine the fragment length distribution.\n\nFirst, we will combine the two data sets into a single tibble, adding a new column to indicate the type of experiment.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nacc_tbl <-\n bind_rows(\n mutate(mnase_tbl, type = \"mnase\"),\n mutate(atac_tbl, type = \"atac\")\n )\n\nacc_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 1,646,204 × 4\n chrom start end type \n \n 1 chrII 1 228 mnase\n 2 chrII 2 80 mnase\n 3 chrII 3 226 mnase\n 4 chrII 4 60 mnase\n 5 chrII 4 66 mnase\n 6 chrII 4 77 mnase\n 7 chrII 4 81 mnase\n 8 chrII 5 56 mnase\n 9 chrII 5 60 mnase\n10 chrII 5 60 mnase\n# ℹ 1,646,194 more rows\n```\n\n\n:::\n:::\n\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n acc_tbl,\n # \"end - start\" is fragment length\n aes(x = end - start)\n) +\n geom_histogram(\n # single base-pair resolution\n binwidth = 1\n ) +\n facet_grid(\n rows = vars(type),\n scales = \"free_y\"\n ) +\n xlim(30, 500) +\n labs(\n x = \"fragment length (bp)\",\n title = \"Histogram of fragment lengths\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-frag-len-1.png){width=960}\n:::\n:::\n\n\n## Interpretations\n\n1. How would you describe the two fragment length distributions? Are they similar?\n\n2. Can you make any biological conclusions based on the length distributions?\n\n## Periodicity in the fragment lengths\n\nThe ATAC data seems to be periodic. How can we test that hypothesis? We can calculate the autocorrelation of the length distribution. Can someone explain what [autocorrelation](https://en.wikipedia.org/wiki/Autocorrelation) means?\n\nWe'll use the base `hist` function to calculate the densities of the above histogram. Let's write a function we can use to analyze fragment lengths.\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\nfragment_len_hist <- function(tbl) {\n frag_lens <-\n mutate(\n tbl,\n frag_len = end - start\n ) |>\n filter(\n frag_len >= 30 &\n frag_len <= 500\n ) |>\n pull(frag_len)\n\n hist(\n frag_lens,\n breaks = seq(30, 500, 1),\n plot = FALSE\n )\n}\n\n# inspect the this value in the console\natac_frag_lens <- fragment_len_hist(atac_tbl)\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\natac_frag_lens\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n$breaks\n [1] 30 31 32 33 34 35 36 37 38 39 40 41 42\n [14] 43 44 45 46 47 48 49 50 51 52 53 54 55\n [27] 56 57 58 59 60 61 62 63 64 65 66 67 68\n [40] 69 70 71 72 73 74 75 76 77 78 79 80 81\n [53] 82 83 84 85 86 87 88 89 90 91 92 93 94\n [66] 95 96 97 98 99 100 101 102 103 104 105 106 107\n [79] 108 109 110 111 112 113 114 115 116 117 118 119 120\n [92] 121 122 123 124 125 126 127 128 129 130 131 132 133\n[105] 134 135 136 137 138 139 140 141 142 143 144 145 146\n[118] 147 148 149 150 151 152 153 154 155 156 157 158 159\n[131] 160 161 162 163 164 165 166 167 168 169 170 171 172\n[144] 173 174 175 176 177 178 179 180 181 182 183 184 185\n[157] 186 187 188 189 190 191 192 193 194 195 196 197 198\n[170] 199 200 201 202 203 204 205 206 207 208 209 210 211\n[183] 212 213 214 215 216 217 218 219 220 221 222 223 224\n[196] 225 226 227 228 229 230 231 232 233 234 235 236 237\n[209] 238 239 240 241 242 243 244 245 246 247 248 249 250\n[222] 251 252 253 254 255 256 257 258 259 260 261 262 263\n[235] 264 265 266 267 268 269 270 271 272 273 274 275 276\n[248] 277 278 279 280 281 282 283 284 285 286 287 288 289\n[261] 290 291 292 293 294 295 296 297 298 299 300 301 302\n[274] 303 304 305 306 307 308 309 310 311 312 313 314 315\n[287] 316 317 318 319 320 321 322 323 324 325 326 327 328\n[300] 329 330 331 332 333 334 335 336 337 338 339 340 341\n[313] 342 343 344 345 346 347 348 349 350 351 352 353 354\n[326] 355 356 357 358 359 360 361 362 363 364 365 366 367\n[339] 368 369 370 371 372 373 374 375 376 377 378 379 380\n[352] 381 382 383 384 385 386 387 388 389 390 391 392 393\n[365] 394 395 396 397 398 399 400 401 402 403 404 405 406\n[378] 407 408 409 410 411 412 413 414 415 416 417 418 419\n[391] 420 421 422 423 424 425 426 427 428 429 430 431 432\n[404] 433 434 435 436 437 438 439 440 441 442 443 444 445\n[417] 446 447 448 449 450 451 452 453 454 455 456 457 458\n[430] 459 460 461 462 463 464 465 466 467 468 469 470 471\n[443] 472 473 474 475 476 477 478 479 480 481 482 483 484\n[456] 485 486 487 488 489 490 491 492 493 494 495 496 497\n[469] 498 499 500\n\n$counts\n [1] 244 34 27 76 183 297 360 431 927 2006 1994\n [12] 1019 931 1081 1218 1331 1182 1192 1621 4702 5604 3897\n [23] 2960 3005 3227 2969 2917 3037 3031 3886 4729 4140 3616\n [34] 3207 3241 3248 3256 3252 3050 3305 3483 3634 3343 3088\n [45] 3142 3207 3189 2986 2787 2962 2895 3079 3037 2659 2857\n [56] 2529 2669 2529 2523 2519 2476 2516 2396 2431 2496 2352\n [67] 2175 2143 2144 2140 2060 2028 2042 2065 1993 1996 2003\n [78] 1811 1875 1935 1733 1697 1642 1791 1644 1685 1745 1622\n [89] 1573 1445 1546 1445 1555 1668 1659 1479 1329 1343 1277\n[100] 1186 1310 1247 1181 1211 1283 1382 1642 1922 1661 1312\n[111] 1187 1046 1096 942 1023 1075 1135 1287 1329 1473 1641\n[122] 1537 1248 1073 1007 1031 1120 1260 1381 1357 1271 1138\n[133] 1111 1091 1161 1162 1311 1499 1631 1668 1472 1372 1221\n[144] 1164 1312 1397 1489 1533 1573 1475 1479 1419 1345 1380\n[155] 1409 1475 1480 1506 1438 1432 1404 1307 1401 1404 1549\n[166] 1568 1469 1428 1382 1417 1414 1274 1390 1474 1492 1479\n[177] 1401 1380 1332 1274 1213 1264 1205 1298 1242 1194 1143\n[188] 1177 1115 1057 1045 1101 1080 945 1006 1008 904 932\n[199] 872 878 892 897 814 821 782 781 842 771 742\n[210] 710 653 664 680 641 638 702 612 614 593 602\n[221] 580 520 530 540 518 547 494 455 471 450 458\n[232] 437 441 426 465 436 417 430 444 421 400 390\n[243] 357 386 367 386 349 377 340 373 353 335 329\n[254] 319 305 347 323 340 349 352 308 318 330 292\n[265] 288 297 295 291 297 327 314 287 264 285 253\n[276] 284 256 284 284 292 292 273 284 279 220 236\n[287] 246 254 262 244 271 291 278 256 244 249 259\n[298] 240 231 218 264 264 213 242 251 231 196 211\n[309] 232 205 208 216 217 191 227 234 183 155 198\n[320] 196 201 180 194 175 185 167 163 178 175 166\n[331] 176 138 145 137 155 136 153 139 161 142 122\n[342] 127 130 135 134 118 126 126 122 136 120 117\n[353] 121 88 100 107 89 84 93 102 76 105 100\n[364] 95 76 82 74 77 88 71 68 79 77 73\n[375] 73 58 74 61 66 51 57 73 57 64 56\n[386] 60 42 47 55 46 57 40 46 48 36 50\n[397] 35 60 46 34 39 49 38 39 30 37 33\n[408] 37 25 40 35 44 39 30 29 23 28 31\n[419] 39 39 33 18 37 24 39 34 24 32 24\n[430] 34 23 30 31 21 31 34 25 29 17 21\n[441] 25 23 23 31 22 35 21 26 22 20 17\n[452] 19 19 16 27 14 19 21 23 23 18 25\n[463] 20 23 22 15 21 18 16 12\n\n$density\n [1] 5.955083e-04 8.298067e-05 6.589641e-05 1.854862e-04\n [5] 4.466312e-04 7.248605e-04 8.786188e-04 1.051902e-03\n [9] 2.262443e-03 4.895859e-03 4.866572e-03 2.486979e-03\n [13] 2.272206e-03 2.638297e-03 2.972660e-03 3.248449e-03\n [17] 2.884798e-03 2.909205e-03 3.956225e-03 1.147574e-02\n [21] 1.367717e-02 9.511049e-03 7.224199e-03 7.334026e-03\n [25] 7.875841e-03 7.246165e-03 7.119253e-03 7.412126e-03\n [29] 7.397482e-03 9.484202e-03 1.154163e-02 1.010412e-02\n [33] 8.825238e-03 7.827029e-03 7.910010e-03 7.927094e-03\n [37] 7.946619e-03 7.936857e-03 7.443854e-03 8.066209e-03\n [41] 8.500637e-03 8.869169e-03 8.158952e-03 7.536597e-03\n [45] 7.668390e-03 7.827029e-03 7.783098e-03 7.287655e-03\n [49] 6.801974e-03 7.229080e-03 7.065560e-03 7.514631e-03\n [53] 7.412126e-03 6.489576e-03 6.972817e-03 6.172297e-03\n [57] 6.513982e-03 6.172297e-03 6.157654e-03 6.147891e-03\n [61] 6.042945e-03 6.140569e-03 5.847696e-03 5.933118e-03\n [65] 6.091757e-03 5.740310e-03 5.308322e-03 5.230223e-03\n [69] 5.232663e-03 5.222901e-03 5.027652e-03 4.949553e-03\n [73] 4.983721e-03 5.039855e-03 4.864131e-03 4.871453e-03\n [77] 4.888537e-03 4.419941e-03 4.576140e-03 4.722576e-03\n [81] 4.229573e-03 4.141711e-03 4.007478e-03 4.371129e-03\n [85] 4.012359e-03 4.112424e-03 4.258861e-03 3.958666e-03\n [89] 3.839076e-03 3.526678e-03 3.773180e-03 3.526678e-03\n [93] 3.795145e-03 4.070934e-03 4.048968e-03 3.609659e-03\n [97] 3.243568e-03 3.277736e-03 3.116656e-03 2.894561e-03\n[101] 3.197196e-03 3.043438e-03 2.882358e-03 2.955576e-03\n[105] 3.131300e-03 3.372920e-03 4.007478e-03 4.690848e-03\n[109] 4.053850e-03 3.202077e-03 2.897001e-03 2.552876e-03\n[113] 2.674906e-03 2.299053e-03 2.496742e-03 2.623653e-03\n[117] 2.770090e-03 3.141062e-03 3.243568e-03 3.595015e-03\n[121] 4.005037e-03 3.751214e-03 3.045879e-03 2.618772e-03\n[125] 2.457692e-03 2.516267e-03 2.733481e-03 3.075166e-03\n[129] 3.370479e-03 3.311905e-03 3.102013e-03 2.777412e-03\n[133] 2.711515e-03 2.662703e-03 2.833546e-03 2.835986e-03\n[137] 3.199637e-03 3.658471e-03 3.980631e-03 4.070934e-03\n[141] 3.592575e-03 3.348514e-03 2.979982e-03 2.840867e-03\n[145] 3.202077e-03 3.409529e-03 3.634065e-03 3.741452e-03\n[149] 3.839076e-03 3.599897e-03 3.609659e-03 3.463222e-03\n[153] 3.282618e-03 3.368039e-03 3.438816e-03 3.599897e-03\n[157] 3.612100e-03 3.675555e-03 3.509594e-03 3.494950e-03\n[161] 3.426613e-03 3.189874e-03 3.419292e-03 3.426613e-03\n[165] 3.780501e-03 3.826873e-03 3.585253e-03 3.485188e-03\n[169] 3.372920e-03 3.458341e-03 3.451019e-03 3.109334e-03\n[173] 3.392445e-03 3.597456e-03 3.641387e-03 3.609659e-03\n[177] 3.419292e-03 3.368039e-03 3.250890e-03 3.109334e-03\n[181] 2.960457e-03 3.084928e-03 2.940932e-03 3.167909e-03\n[185] 3.031235e-03 2.914086e-03 2.789615e-03 2.872595e-03\n[189] 2.721278e-03 2.579722e-03 2.550435e-03 2.687109e-03\n[193] 2.635856e-03 2.306374e-03 2.455251e-03 2.460133e-03\n[197] 2.206309e-03 2.274646e-03 2.128210e-03 2.142854e-03\n[201] 2.177022e-03 2.189225e-03 1.986655e-03 2.003739e-03\n[205] 1.908555e-03 1.906115e-03 2.054992e-03 1.881709e-03\n[209] 1.810931e-03 1.732832e-03 1.593717e-03 1.620564e-03\n[213] 1.659613e-03 1.564430e-03 1.557108e-03 1.713307e-03\n[217] 1.493652e-03 1.498533e-03 1.447280e-03 1.469246e-03\n[221] 1.415553e-03 1.269116e-03 1.293522e-03 1.317928e-03\n[225] 1.264235e-03 1.335012e-03 1.205660e-03 1.110477e-03\n[229] 1.149526e-03 1.098274e-03 1.117798e-03 1.066546e-03\n[233] 1.076308e-03 1.039699e-03 1.134883e-03 1.064105e-03\n[237] 1.017733e-03 1.049461e-03 1.083630e-03 1.027496e-03\n[241] 9.762431e-04 9.518370e-04 8.712970e-04 9.420746e-04\n[245] 8.957031e-04 9.420746e-04 8.517721e-04 9.201091e-04\n[249] 8.298067e-04 9.103467e-04 8.615346e-04 8.176036e-04\n[253] 8.029600e-04 7.785539e-04 7.443854e-04 8.468909e-04\n[257] 7.883163e-04 8.298067e-04 8.517721e-04 8.590939e-04\n[261] 7.517072e-04 7.761133e-04 8.054006e-04 7.126575e-04\n[265] 7.028950e-04 7.248605e-04 7.199793e-04 7.102169e-04\n[269] 7.248605e-04 7.980788e-04 7.663509e-04 7.004544e-04\n[273] 6.443205e-04 6.955732e-04 6.174738e-04 6.931326e-04\n[277] 6.247956e-04 6.931326e-04 6.931326e-04 7.126575e-04\n[281] 7.126575e-04 6.662859e-04 6.931326e-04 6.809296e-04\n[285] 5.369337e-04 5.759834e-04 6.003895e-04 6.199144e-04\n[289] 6.394392e-04 5.955083e-04 6.614047e-04 7.102169e-04\n[293] 6.784890e-04 6.247956e-04 5.955083e-04 6.077113e-04\n[297] 6.321174e-04 5.857459e-04 5.637804e-04 5.320525e-04\n[301] 6.443205e-04 6.443205e-04 5.198495e-04 5.906271e-04\n[305] 6.125926e-04 5.637804e-04 4.783591e-04 5.149682e-04\n[309] 5.662210e-04 5.003246e-04 5.076464e-04 5.271713e-04\n[313] 5.296119e-04 4.661561e-04 5.540180e-04 5.711022e-04\n[317] 4.466312e-04 3.782942e-04 4.832403e-04 4.783591e-04\n[321] 4.905622e-04 4.393094e-04 4.734779e-04 4.271064e-04\n[325] 4.515124e-04 4.075815e-04 3.978191e-04 4.344282e-04\n[329] 4.271064e-04 4.051409e-04 4.295470e-04 3.368039e-04\n[333] 3.538881e-04 3.343633e-04 3.782942e-04 3.319227e-04\n[337] 3.734130e-04 3.392445e-04 3.929379e-04 3.465663e-04\n[341] 2.977542e-04 3.099572e-04 3.172790e-04 3.294821e-04\n[345] 3.270414e-04 2.879917e-04 3.075166e-04 3.075166e-04\n[349] 2.977542e-04 3.319227e-04 2.928729e-04 2.855511e-04\n[353] 2.953135e-04 2.147735e-04 2.440608e-04 2.611450e-04\n[357] 2.172141e-04 2.050111e-04 2.269765e-04 2.489420e-04\n[361] 1.854862e-04 2.562638e-04 2.440608e-04 2.318577e-04\n[365] 1.854862e-04 2.001298e-04 1.806050e-04 1.879268e-04\n[369] 2.147735e-04 1.732832e-04 1.659613e-04 1.928080e-04\n[373] 1.879268e-04 1.781644e-04 1.781644e-04 1.415553e-04\n[377] 1.806050e-04 1.488771e-04 1.610801e-04 1.244710e-04\n[381] 1.391146e-04 1.781644e-04 1.391146e-04 1.561989e-04\n[385] 1.366740e-04 1.464365e-04 1.025055e-04 1.147086e-04\n[389] 1.342334e-04 1.122680e-04 1.391146e-04 9.762431e-05\n[393] 1.122680e-04 1.171492e-04 8.786188e-05 1.220304e-04\n[397] 8.542127e-05 1.464365e-04 1.122680e-04 8.298067e-05\n[401] 9.518370e-05 1.195898e-04 9.274310e-05 9.518370e-05\n[405] 7.321823e-05 9.030249e-05 8.054006e-05 9.030249e-05\n[409] 6.101520e-05 9.762431e-05 8.542127e-05 1.073867e-04\n[413] 9.518370e-05 7.321823e-05 7.077763e-05 5.613398e-05\n[417] 6.833702e-05 7.565884e-05 9.518370e-05 9.518370e-05\n[421] 8.054006e-05 4.393094e-05 9.030249e-05 5.857459e-05\n[425] 9.518370e-05 8.298067e-05 5.857459e-05 7.809945e-05\n[429] 5.857459e-05 8.298067e-05 5.613398e-05 7.321823e-05\n[433] 7.565884e-05 5.125276e-05 7.565884e-05 8.298067e-05\n[437] 6.101520e-05 7.077763e-05 4.149033e-05 5.125276e-05\n[441] 6.101520e-05 5.613398e-05 5.613398e-05 7.565884e-05\n[445] 5.369337e-05 8.542127e-05 5.125276e-05 6.345580e-05\n[449] 5.369337e-05 4.881216e-05 4.149033e-05 4.637155e-05\n[453] 4.637155e-05 3.904972e-05 6.589641e-05 3.416851e-05\n[457] 4.637155e-05 5.125276e-05 5.613398e-05 5.613398e-05\n[461] 4.393094e-05 6.101520e-05 4.881216e-05 5.613398e-05\n[465] 5.369337e-05 3.660912e-05 5.125276e-05 4.393094e-05\n[469] 3.904972e-05 2.928729e-05\n\n$mids\n [1] 30.5 31.5 32.5 33.5 34.5 35.5 36.5 37.5 38.5\n [10] 39.5 40.5 41.5 42.5 43.5 44.5 45.5 46.5 47.5\n [19] 48.5 49.5 50.5 51.5 52.5 53.5 54.5 55.5 56.5\n [28] 57.5 58.5 59.5 60.5 61.5 62.5 63.5 64.5 65.5\n [37] 66.5 67.5 68.5 69.5 70.5 71.5 72.5 73.5 74.5\n [46] 75.5 76.5 77.5 78.5 79.5 80.5 81.5 82.5 83.5\n [55] 84.5 85.5 86.5 87.5 88.5 89.5 90.5 91.5 92.5\n [64] 93.5 94.5 95.5 96.5 97.5 98.5 99.5 100.5 101.5\n [73] 102.5 103.5 104.5 105.5 106.5 107.5 108.5 109.5 110.5\n [82] 111.5 112.5 113.5 114.5 115.5 116.5 117.5 118.5 119.5\n [91] 120.5 121.5 122.5 123.5 124.5 125.5 126.5 127.5 128.5\n[100] 129.5 130.5 131.5 132.5 133.5 134.5 135.5 136.5 137.5\n[109] 138.5 139.5 140.5 141.5 142.5 143.5 144.5 145.5 146.5\n[118] 147.5 148.5 149.5 150.5 151.5 152.5 153.5 154.5 155.5\n[127] 156.5 157.5 158.5 159.5 160.5 161.5 162.5 163.5 164.5\n[136] 165.5 166.5 167.5 168.5 169.5 170.5 171.5 172.5 173.5\n[145] 174.5 175.5 176.5 177.5 178.5 179.5 180.5 181.5 182.5\n[154] 183.5 184.5 185.5 186.5 187.5 188.5 189.5 190.5 191.5\n[163] 192.5 193.5 194.5 195.5 196.5 197.5 198.5 199.5 200.5\n[172] 201.5 202.5 203.5 204.5 205.5 206.5 207.5 208.5 209.5\n[181] 210.5 211.5 212.5 213.5 214.5 215.5 216.5 217.5 218.5\n[190] 219.5 220.5 221.5 222.5 223.5 224.5 225.5 226.5 227.5\n[199] 228.5 229.5 230.5 231.5 232.5 233.5 234.5 235.5 236.5\n[208] 237.5 238.5 239.5 240.5 241.5 242.5 243.5 244.5 245.5\n[217] 246.5 247.5 248.5 249.5 250.5 251.5 252.5 253.5 254.5\n[226] 255.5 256.5 257.5 258.5 259.5 260.5 261.5 262.5 263.5\n[235] 264.5 265.5 266.5 267.5 268.5 269.5 270.5 271.5 272.5\n[244] 273.5 274.5 275.5 276.5 277.5 278.5 279.5 280.5 281.5\n[253] 282.5 283.5 284.5 285.5 286.5 287.5 288.5 289.5 290.5\n[262] 291.5 292.5 293.5 294.5 295.5 296.5 297.5 298.5 299.5\n[271] 300.5 301.5 302.5 303.5 304.5 305.5 306.5 307.5 308.5\n[280] 309.5 310.5 311.5 312.5 313.5 314.5 315.5 316.5 317.5\n[289] 318.5 319.5 320.5 321.5 322.5 323.5 324.5 325.5 326.5\n[298] 327.5 328.5 329.5 330.5 331.5 332.5 333.5 334.5 335.5\n[307] 336.5 337.5 338.5 339.5 340.5 341.5 342.5 343.5 344.5\n[316] 345.5 346.5 347.5 348.5 349.5 350.5 351.5 352.5 353.5\n[325] 354.5 355.5 356.5 357.5 358.5 359.5 360.5 361.5 362.5\n[334] 363.5 364.5 365.5 366.5 367.5 368.5 369.5 370.5 371.5\n[343] 372.5 373.5 374.5 375.5 376.5 377.5 378.5 379.5 380.5\n[352] 381.5 382.5 383.5 384.5 385.5 386.5 387.5 388.5 389.5\n[361] 390.5 391.5 392.5 393.5 394.5 395.5 396.5 397.5 398.5\n[370] 399.5 400.5 401.5 402.5 403.5 404.5 405.5 406.5 407.5\n[379] 408.5 409.5 410.5 411.5 412.5 413.5 414.5 415.5 416.5\n[388] 417.5 418.5 419.5 420.5 421.5 422.5 423.5 424.5 425.5\n[397] 426.5 427.5 428.5 429.5 430.5 431.5 432.5 433.5 434.5\n[406] 435.5 436.5 437.5 438.5 439.5 440.5 441.5 442.5 443.5\n[415] 444.5 445.5 446.5 447.5 448.5 449.5 450.5 451.5 452.5\n[424] 453.5 454.5 455.5 456.5 457.5 458.5 459.5 460.5 461.5\n[433] 462.5 463.5 464.5 465.5 466.5 467.5 468.5 469.5 470.5\n[442] 471.5 472.5 473.5 474.5 475.5 476.5 477.5 478.5 479.5\n[451] 480.5 481.5 482.5 483.5 484.5 485.5 486.5 487.5 488.5\n[460] 489.5 490.5 491.5 492.5 493.5 494.5 495.5 496.5 497.5\n[469] 498.5 499.5\n\n$xname\n[1] \"frag_lens\"\n\n$equidist\n[1] TRUE\n\nattr(,\"class\")\n[1] \"histogram\"\n```\n\n\n:::\n:::\n\n\n## Autocorrelation\n\nThe `density` slot contains a vector of densities at base-pair resolution. We will use `acf()` to calculate the autocorrelation of these values, and will store the tidied result.\n\n\n::: {.cell output-location='column'}\n\n```{.r .cell-code}\natac_acf_tbl <-\n acf(\n atac_frag_lens$density,\n lag.max = 40,\n plot = FALSE\n ) |>\n broom::tidy()\n\natac_acf_tbl\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 41 × 2\n lag acf\n \n 1 0 1 \n 2 1 0.975\n 3 2 0.937\n 4 3 0.916\n 5 4 0.909\n 6 5 0.902\n 7 6 0.891\n 8 7 0.882\n 9 8 0.877\n10 9 0.887\n# ℹ 31 more rows\n```\n\n\n:::\n:::\n\n\n## Autocorrelation {.smaller}\n\nNow let's plot the autocorrelation. First, we define a function.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nplot_acf <- function(tbl, title) {\n ggplot(\n tbl,\n aes(\n x = lag,\n y = acf\n )\n ) +\n geom_point(size = 2) +\n geom_line() +\n theme_minimal_grid() +\n geom_vline(\n xintercept = c(10, 21),\n color = \"red\"\n ) +\n labs(title = title)\n}\n```\n:::\n\n\n---\n\nAnd then we make the plot.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nplot_atac_acf <- plot_acf(atac_acf_tbl, title = \"ATAC ACF\")\n\nplot_atac_acf\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-acf-atac-1.png){fig-alt='Plot showing autocorrelation function (ACF) for ATAC-seq data.' width=960}\n:::\n:::\n\n\n## Autocorrelation {.smaller}\n\nSo, it looks like there significant bumps in autocorrelation at 10 and 21 bp positions, indicating that ATAC length distribution is periodic.\n\nHow do we confirm these bumps are interesting? Let's calculate the acf of a negative control -- the length distribution of the MNase data.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nmnase_frag_lens <-\n fragment_len_hist(mnase_tbl)\n\nmnase_acf_tbl <-\n acf(\n mnase_frag_lens$density,\n lag.max = 40,\n plot = FALSE\n ) |>\n broom::tidy()\n\nplot_mnase_acf <- plot_acf(mnase_acf_tbl, title = \"MNase ACF\")\n\n# patchwork plot\nplot_atac_acf & plot_mnase_acf\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-combined-acfs-1.png){fig-alt='Plot showing autocorrelation function (ACF) for MNase-seq data.' width=960}\n:::\n:::\n\n\n## Interpretation\n\nWe can see a monotonic decrease in the MNase-seq data, which confirms that the bumps we see are distinctive features of ATAC-seq data.\n\n**What are these features?** Consider that the specificity of binding of DNase, MNase, and Tn5 is not completely generic. These enzymes have specificity for the minor groove of DNA, and there is an optimal substrate geometry for cleavage. You can see this in previous studies, where DNase-seq revealed high-resolution views of DNA:protein structures.\n\n**So what then, exactly is the \\~10-11 bp periodicity?** And why is this not present in MNase data?\n\n## Molecular Picture of DNA accessibility\n\n![](../img/block-dna/dna-protein-structures.jpg)\n\n## Visualize read density in genomic region {.smaller}\n\nWe will use [Gviz](https://bioconductor.org/packages/release/bioc/vignettes/Gviz/inst/doc/Gviz.html#2_Basic_Features) to visualize read densities relative to a reference.\n\n## Load tracks {.smaller}\n\nFirst, we load the gene annotations from the [Saccharomyces Genome Databases](https://yeastgenome.org) (SGD).\n\n\n::: {.cell}\n\n```{.r .cell-code}\nsgd_genes <-\n GeneRegionTrack(\n TxDb.Scerevisiae.UCSC.sacCer3.sgdGene,\n chromosome = \"chrII\",\n start = 530811,\n end = 540885,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n )\n\nsgd_genes\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nGeneRegionTrack 'GeneRegionTrack'\n| genome: sacCer3\n| active chromosome: chrII\n| annotation features: 7\n```\n\n\n:::\n:::\n\n\n## Import bigWig {.smaller}\n\nNext, import the bigwig file containing yeast nucleosome-sized fragments\n(via MNase-seq) using `valr::read_bigwig()`.\n\nInspect the object.\n\n(What is \"GRanges\"?)\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_nuc_gr <- read_bigwig(\n here(\"data/block-dna/yeast_mnase_134_160.bw\"),\n as = \"GRanges\"\n)\n\nmnase_nuc_gr\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nGRanges object with 69120 ranges and 1 metadata column:\n seqnames ranges strand | score\n | \n [1] chrII 9-29 * | 3.81086\n [2] chrII 29-59 * | 5.71629\n [3] chrII 59-69 * | 13.33801\n [4] chrII 69-79 * | 28.58146\n [5] chrII 79-89 * | 34.29775\n ... ... ... ... . ...\n [69116] chrII 813099-813109 * | 24.77060\n [69117] chrII 813109-813119 * | 20.95973\n [69118] chrII 813119-813139 * | 15.24344\n [69119] chrII 813139-813169 * | 7.62172\n [69120] chrII 813169-813179 * | 5.71629\n -------\n seqinfo: 1 sequence from an unspecified genome; no seqlengths\n```\n\n\n:::\n:::\n\n\n## Load track {.smaller}\n\nNext, load the GRanges object as a track for Gviz to plot:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmnase_nuc_trk <- DataTrack(\n mnase_nuc_gr,\n name = \"MNase_nuc\",\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n)\n\nmnase_nuc_trk\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nDataTrack 'MNase_nuc'\n| genome: NA\n| active chromosome: chrII\n| positions: 69120\n| samples:1\n| strand: * \n```\n\n\n:::\n:::\n\n\n# Genome-wide views of chromatin structure\n\n## Vizualize a genomic region {.smaller}\n\nNow, we can make a plot for this particular region of chrII:\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# special track for the x-axis\nx_axis <- GenomeAxisTrack()\n\nplotTracks(\n c(\n sgd_genes,\n mnase_nuc_trk,\n x_axis\n ),\n from = 530811,\n to = 540885,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/gen-track-plot-1.png){fig-alt='Genome browser-style plot showing gene annotations and MNase-seq read density over a region of chromosome II in Saccharomyces cerevisiae.' width=960}\n:::\n:::\n\n\n## Load the remaining data\n\nThat looks great! Let's load all the other data sets.\n\n1. Load each bigWig as a GRanges object with `valr::read_bigwig()`\n2. Convert each to a `Gviz::DataTrack()` for plotting\n\n## Load the remaining data {.smaller}\n\nWe can do this one of two ways. We could do it one-by-one:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# complete the following steps for each of the four tracks\nfile_name <- \"yeast_mnase_lt50.bw\"\ntrack_name <- \"MNase_Short\"\n\nbig_wig <- read_bigwig(\n here(\"data/block-dna\", file_name),\n as = \"GRanges\"\n)\n\ndata_track <- DataTrack(big_wig, track_name)\n```\n:::\n\n\n---\n\nOr we can create a tibble with file and track names, and use [purrr](https://purrr.tidyverse.org/) to load and convert each one.\n\nFirst, we define a tibble of files and metadata.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info <-\n tibble(\n file_name = c(\n \"yeast_mnase_lt50.bw\",\n \"yeast_mnase_134_160.bw\",\n \"yeast_atac_lt120.bw\",\n \"yeast_atac_gt120.bw\"\n ),\n file_path = here(\"data/block-dna\", file_name),\n track_name = c(\n \"MNase_Short\",\n \"MNase_Long\",\n \"ATAC_Short\",\n \"ATAC_Long\"\n )\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 3\n file_name file_path track_name\n \n1 yeast_mnase_lt50.bw /Users/jayhesselberth/d… MNase_Sho…\n2 yeast_mnase_134_160.bw /Users/jayhesselberth/d… MNase_Long\n3 yeast_atac_lt120.bw /Users/jayhesselberth/d… ATAC_Short\n4 yeast_atac_gt120.bw /Users/jayhesselberth/d… ATAC_Long \n```\n\n\n:::\n:::\n\n\n## Load the remaining data\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info <-\n mutate(\n track_info,\n big_wig = purrr::map(\n file_path,\n \\(x) read_bigwig(x, as = \"GRanges\")\n ),\n data_track = purrr::map2(\n big_wig,\n track_name,\n \\(x, y) {\n DataTrack(\n x,\n name = y,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 11\n )\n }\n )\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_info\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 5\n file_name file_path track_name big_wig data_track\n \n1 yeast_mnase_lt5… /Users/j… MNase_Sho… \n2 yeast_mnase_134… /Users/j… MNase_Long \n3 yeast_atac_lt12… /Users/j… ATAC_Short \n4 yeast_atac_gt12… /Users/j… ATAC_Long \n```\n\n\n:::\n:::\n\n\n## Load the remaining data {.smaller}\n\nNow, we just have to make a list of tracks to plot and Gviz takes care of the rest.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nplotTracks(\n c(\n sgd_genes,\n track_info$data_track\n ),\n from = 530811,\n to = 540885,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-17_files/figure-revealjs/plot-rest-track-data-1.png){width=960}\n:::\n:::\n\n\n## Interpretations\n\nRecall this plot:\n\n![](../img/block-dna/mnase-overview.png)\n\nSome questions to think about as you look at the tracks:\n\n1. What is each data set reporting on?\n2. What are the major differences between MNase-seq and ATAC-seq based on these tracks?\n3. What can you infer about gene regulation based on these tracks?\n", "supporting": [ "slides-17_files" ], diff --git a/_freeze/slides/slides-21/execute-results/html.json b/_freeze/slides/slides-21/execute-results/html.json index 5c5ef1bd..263babf2 100644 --- a/_freeze/slides/slides-21/execute-results/html.json +++ b/_freeze/slides/slides-21/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "8c9209a91f0afd4bbcf4b9ac87867d50", + "hash": "d6286160fcf0b4b36de841262cf68332", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"Factor-centric chromatin analysis\"\nauthor: \"{{< var instructor.block.dna >}}\"\n---\n\n## Where do transcription factors bind in the genome?\n\nToday we'll look at where two yeast transcription factors bind in the genome using CUT&RUN.\n\n## Where do transcription factors bind in the genome?\n\nTechniques like CUT&RUN require an affinity reagent (e.g., an antibody) that uniquely recognizes a transcription factor in the cell.\n\nThis antibody is added to permeabilized cells, and the antibody associates with the epitope. A separate reagent, a fusion of Protein A (which binds IgG) and micrococcal nuclease (MNase) then associates with the antibody. Addition of calcium activates MNase, and nearby DNA is digested. These DNA fragments are then isolated and sequenced to identify sites of TF association in the genome.\n\n## Where do transcription factors bind in the genome?\n\n![Fig 1a, Skene et al.](../img/block-dna/skene-fig-1a.png)\n\n## Data download and pre-processing\n\nCUT&RUN data were downloaded from the [NCBI GEO page](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE84474) for Skene et al.\n\nI selected the 16 second time point for *S. cerevisiae* Abf1 and Reb1 (note the paper combined data from the 1-32 second time points).\n\nBED files containing mapped DNA fragments were separated by size and converted to bigWig with:\n\n``` bash\n# separate fragments by size\nawk '($3 - $2 <= 120)' Abf1.bed > CutRun_Abf1_lt120.bed\nawk '($3 - $2 => 150)' Abf1.bed > CutRun_Abf1_gt150.bed\n\n# for each file with the different sizes\nbedtools genomecov -i Abf1.bed -g sacCer3.chrom.sizes -bg > Abf1.bg\nbedGraphToBigWig Abf1.bg sacCer3.chrom.sizes Abf1.bw\n```\n\nThe bigWig files are available here in the `data/` directory.\n\n# CUT&RUN analysis {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse)\nlibrary(here)\nlibrary(valr)\n\n# genome viz\nlibrary(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)\nlibrary(Gviz)\n\n# motif discovery and viz\nlibrary(BSgenome.Scerevisiae.UCSC.sacCer3)\nlibrary(memes)\nlibrary(ggseqlogo)\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_start <- 90000\ntrack_end <- 150000\n\n# genes track\nsgd_genes_trk <-\n GeneRegionTrack(\n TxDb.Scerevisiae.UCSC.sacCer3.sgdGene,\n chromosome = \"chrII\",\n start = track_start,\n end = track_end,\n background.title = \"white\",\n col.title = \"black\",\n fontsize = 16\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# signal tracks\ntrack_info <-\n tibble(\n file_name = c(\n \"CutRun_Reb1_lt120.bw\",\n \"CutRun_Abf1_lt120.bw\",\n \"CutRun_Reb1_gt150.bw\",\n \"CutRun_Abf1_gt150.bw\"\n ),\n sample_type = c(\n \"Reb1_Short\",\n \"Abf1_Short\",\n \"Reb1_Long\",\n \"Abf1_Long\"\n )\n ) |>\n mutate(\n file_path = here(\"data/block-dna\", file_name),\n big_wig = purrr::map(\n file_path,\n \\(x) read_bigwig(x, as = \"GRanges\")\n ),\n data_track = purrr::map2(\n big_wig,\n sample_type,\n \\(x, y) {\n DataTrack(\n x,\n name = y,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n )\n }\n )\n ) |>\n dplyr::select(sample_type, big_wig, data_track)\n\n# x-axis track\nx_axis_trk <- GenomeAxisTrack(\n col = \"black\",\n col.axis = \"black\",\n fontsize = 16\n)\n```\n:::\n\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nplotTracks(\n c(\n sgd_genes_trk,\n track_info$data_track,\n x_axis_trk\n ),\n from = track_start,\n to = track_end,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-21_files/figure-revealjs/plot-tracks-1.png){fig-alt='Genome browser tracks for Abf1 and Reb1 CUT&RUN data.' width=960}\n:::\n:::\n\n\n## Peak calling {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nabf1_tbl <- read_bigwig(here(\"data/block-dna/CutRun_Abf1_lt120.bw\"))\ntotal_reads <- 16e6\n\ngenome <- read_genome(here(\"data/block-dna/sacCer3.chrom.sizes\"))\ngenome_size <- sum(genome$size)\n\ngenome_lambda <- total_reads / genome_size\npeak_calls <-\n abf1_tbl |>\n # define single-base sites\n mutate(\n midpoint = start + round((end - start) / 2),\n start = midpoint,\n end = start + 1,\n # use the poisson to calculate a p-value with the genome-wide lambda\n pval = dpois(value, genome_lambda),\n # convert p-values to FDR\n fdr = p.adjust(pval, method = \"fdr\")\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\npeak_calls_sig <-\n filter(\n peak_calls,\n fdr == 0\n ) |>\n # collapse neighboring, significant sites\n bed_merge(max_dist = 20)\n\nfilter(\n peak_calls_sig,\n chrom == \"chrII\" &\n start >= track_start &\n end <= track_end\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 5 × 3\n chrom start end\n \n1 chrII 100248 100289\n2 chrII 101292 101393\n3 chrII 124916 124949\n4 chrII 136181 136264\n5 chrII 141070 141121\n```\n\n\n:::\n:::\n\n\n## How do proteins recognize specific locations in the genome to bind?\n\n## Motif discovery\n\n## Theory\n\nThere are two major approaches to defining sequence motifs enriched in a sample: enumerative and probabilistic approaches.\n\n## Theory\n\nHere we'll apply a probabilistic approach (MEME) to discover motifs in a collection of DNA sequences. During the RNA block, you'll learn about k-mer analysis, which is a form of enumerative approach.\n\nIn each case, the goal is to define a set of sequence motifs that are encriched in a set of provided sequences (i.e., peaks from CUT&RUN data) relative to a genomic background.\n\n## Theory\n\nMotifs are expressed in a [Position Weight Matrix](https://en.wikipedia.org/wiki/Position_weight_matrix), which captures the propensities for a position to be a particular nucleotide in a sequence motif.\n\nThese PWMs can be represented as sequence logos, visually represent the amount of information provided by the motif, typically using \"information content\", expressed in bits.\n\n## Theory\n\n![LexA sequence motif](../img/block-dna/lexa-motif.png)\n\n## Practice\n\nWe'll use the [memes](https://bioconductor.org/packages/release/bioc/html/memes.html) package from Bioconductor to derive sequence motifs from the peaks we called above. This is a straightforward process:\n\n1. Collect the DNA sequences within the peak windows using the BSgenome for *S. cerevisiae*\n2. Provide those sequences and the genomic background to `runDreme()`, which runs uses an Expectation-Maximization (EM) approach to identify and refine motifs.\n3. Examine the discovered motifs, and plot as a logo using `ggseqlogo`.\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\npeak_calls_gr <-\n GRanges(\n seqnames = peak_calls_sig$chrom,\n ranges = IRanges(peak_calls_sig$start, peak_calls_sig$end)\n )\n\npeak_seqs <- BSgenome::getSeq(\n # provided by BSgenome.Scerevisiae.UCSC.sacCer3\n Scerevisiae,\n peak_calls_gr\n)\n\nmotif_results <- runStreme(\n input = peak_seqs,\n control = \"shuffle\", # use shuffled sequences as control\n minw = 6, # minimum motif width\n maxw = 12, # maximum motif width\n nmotifs = 5, # number of motifs to find\n seed = 42\n)\n\n# look at the consensus motifs\nmotif_results\n```\n:::\n\n\nNow let's look at the sequence logo for the top hit.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nmotif_1 <- motif_results[[1]]\npwm <- motif_1[[1]]@motif\n\nggplot() +\n geom_logo(pwm) +\n theme_logo()\n```\n:::\n\n\n## Questions\n\n1. Does this motif make sense, based on what you know about the requirements and specificity of DNA binding by transcription factors?\n\n2. How might you confirm that a specific sequence (that conforms to a motif) is bound directly by a transcription factor?\n", + "markdown": "---\ntitle: \"Factor-centric chromatin analysis\"\nauthor: \"{{< var instructor.block.dna >}}\"\n---\n\n## Where do transcription factors bind in the genome?\n\nToday we'll look at where two yeast transcription factors bind in the genome using CUT&RUN.\n\n## Where do transcription factors bind in the genome?\n\nTechniques like CUT&RUN require an affinity reagent (e.g., an antibody) that uniquely recognizes a transcription factor in the cell.\n\nThis antibody is added to permeabilized cells, and the antibody associates with the epitope. A separate reagent, a fusion of Protein A (which binds IgG) and micrococcal nuclease (MNase) then associates with the antibody. Addition of calcium activates MNase, and nearby DNA is digested. These DNA fragments are then isolated and sequenced to identify sites of TF association in the genome.\n\n## Where do transcription factors bind in the genome?\n\n![Fig 1a, Skene et al.](../img/block-dna/skene-fig-1a.png)\n\n## Data download and pre-processing\n\nCUT&RUN data were downloaded from the [NCBI GEO page](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE84474) for Skene et al.\n\nI selected the 16 second time point for *S. cerevisiae* Abf1 and Reb1 (note the paper combined data from the 1-32 second time points).\n\nBED files containing mapped DNA fragments were separated by size and converted to bigWig with:\n\n``` bash\n# separate fragments by size\nawk '($3 - $2 <= 120)' Abf1.bed > CutRun_Abf1_lt120.bed\nawk '($3 - $2 => 150)' Abf1.bed > CutRun_Abf1_gt150.bed\n\n# for each file with the different sizes\nbedtools genomecov -i Abf1.bed -g sacCer3.chrom.sizes -bg > Abf1.bg\nbedGraphToBigWig Abf1.bg sacCer3.chrom.sizes Abf1.bw\n```\n\nThe bigWig files are available here in the `data/` directory.\n\n# CUT&RUN analysis {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse)\nlibrary(here)\nlibrary(valr)\n\n# genome viz\nlibrary(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)\nlibrary(Gviz)\n\n# motif discovery and viz\nlibrary(BSgenome.Scerevisiae.UCSC.sacCer3)\nlibrary(memes)\nlibrary(ggseqlogo)\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrack_start <- 90000\ntrack_end <- 150000\n\n# genes track\nsgd_genes_trk <-\n GeneRegionTrack(\n TxDb.Scerevisiae.UCSC.sacCer3.sgdGene,\n chromosome = \"chrII\",\n start = track_start,\n end = track_end,\n background.title = \"white\",\n col.title = \"black\",\n fontsize = 16\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# signal tracks\ntrack_info <-\n tibble(\n file_name = c(\n \"CutRun_Reb1_lt120.bw\",\n \"CutRun_Abf1_lt120.bw\",\n \"CutRun_Reb1_gt150.bw\",\n \"CutRun_Abf1_gt150.bw\"\n ),\n sample_type = c(\n \"Reb1_Short\",\n \"Abf1_Short\",\n \"Reb1_Long\",\n \"Abf1_Long\"\n )\n ) |>\n mutate(\n file_path = here(\"data/block-dna\", file_name),\n big_wig = purrr::map(\n file_path,\n \\(x) read_bigwig(x, as = \"GRanges\")\n ),\n data_track = purrr::map2(\n big_wig,\n sample_type,\n \\(x, y) {\n DataTrack(\n x,\n name = y,\n background.title = \"white\",\n col.title = \"black\",\n col.axis = \"black\",\n fontsize = 16\n )\n }\n )\n ) |>\n dplyr::select(sample_type, big_wig, data_track)\n\n# x-axis track\nx_axis_trk <- GenomeAxisTrack(\n col = \"black\",\n col.axis = \"black\",\n fontsize = 16\n)\n```\n:::\n\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nplotTracks(\n c(\n sgd_genes_trk,\n track_info$data_track,\n x_axis_trk\n ),\n from = track_start,\n to = track_end,\n chromosome = \"chrII\",\n transcriptAnnotation = \"gene\",\n shape = \"arrow\",\n type = \"histogram\"\n)\n```\n\n::: {.cell-output-display}\n![](slides-21_files/figure-revealjs/plot-tracks-1.png){fig-alt='Genome browser tracks for Abf1 and Reb1 CUT&RUN data.' width=960}\n:::\n:::\n\n\n## Peak calling {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nabf1_tbl <- read_bigwig(here(\"data/block-dna/CutRun_Abf1_lt120.bw\"))\ntotal_reads <- 16e6\n\ngenome <- read_genome(here(\"data/block-dna/sacCer3.chrom.sizes\"))\ngenome_size <- sum(genome$size)\n\ngenome_lambda <- total_reads / genome_size\npeak_calls <-\n abf1_tbl |>\n # define single-base sites\n mutate(\n midpoint = start + round((end - start) / 2),\n start = midpoint,\n end = start + 1,\n # use the poisson to calculate a p-value with the genome-wide lambda\n pval = dpois(value, genome_lambda),\n # convert p-values to FDR\n fdr = p.adjust(pval, method = \"fdr\")\n )\n```\n:::\n\n\n---\n\n\n::: {.cell}\n\n```{.r .cell-code}\npeak_calls_sig <-\n filter(\n peak_calls,\n fdr == 0\n ) |>\n # collapse neighboring, significant sites\n bed_merge(max_dist = 20)\n\nfilter(\n peak_calls_sig,\n chrom == \"chrII\" &\n start >= track_start &\n end <= track_end\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 5 × 3\n chrom start end\n \n1 chrII 100248 100289\n2 chrII 101292 101393\n3 chrII 124916 124949\n4 chrII 136181 136264\n5 chrII 141070 141121\n```\n\n\n:::\n:::\n\n\n## How do proteins recognize specific locations in the genome to bind?\n\n## Motif discovery\n\n## Theory\n\nThere are two major approaches to defining sequence motifs enriched in a sample: enumerative and probabilistic approaches.\n\n## Theory\n\nHere we'll apply a probabilistic approach (MEME) to discover motifs in a collection of DNA sequences. During the RNA block, you'll learn about k-mer analysis, which is a form of enumerative approach.\n\nIn each case, the goal is to define a set of sequence motifs that are encriched in a set of provided sequences (i.e., peaks from CUT&RUN data) relative to a genomic background.\n\n## Theory\n\nMotifs are expressed in a [Position Weight Matrix](https://en.wikipedia.org/wiki/Position_weight_matrix), which captures the propensities for a position to be a particular nucleotide in a sequence motif.\n\nThese PWMs can be represented as sequence logos, visually represent the amount of information provided by the motif, typically using \"information content\", expressed in bits.\n\n## Theory\n\n![LexA sequence motif](../img/block-dna/lexa-motif.png)\n\n## Practice\n\nWe'll use the [memes](https://bioconductor.org/packages/release/bioc/html/memes.html) package from Bioconductor to derive sequence motifs from the peaks we called above. This is a straightforward process:\n\n1. Collect the DNA sequences within the peak windows using the BSgenome for *S. cerevisiae*\n2. Provide those sequences and the genomic background to `runDreme()`, which runs uses an Expectation-Maximization (EM) approach to identify and refine motifs.\n3. Examine the discovered motifs, and plot as a logo using `ggseqlogo`.\n\n---\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\npeak_calls_gr <-\n GRanges(\n seqnames = peak_calls_sig$chrom,\n ranges = IRanges(peak_calls_sig$start, peak_calls_sig$end)\n )\n\npeak_seqs <- BSgenome::getSeq(\n # provided by BSgenome.Scerevisiae.UCSC.sacCer3\n Scerevisiae,\n peak_calls_gr\n)\n\nmotif_results <- runStreme(\n input = peak_seqs,\n control = \"shuffle\", # use shuffled sequences as control\n minw = 6, # minimum motif width\n maxw = 12, # maximum motif width\n nmotifs = 5, # number of motifs to find\n seed = 42\n)\n\n# look at the consensus motifs\nmotif_results\n```\n:::\n\n\n## Plot the logo\n\nNow let's look at the sequence logo for the top hit.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nmotif_1 <- motif_results[[1]]\npwm <- motif_1[[1]]@motif\n\nggplot() +\n geom_logo(pwm) +\n theme_logo()\n```\n:::\n\n\n## Questions\n\n1. Does this motif make sense, based on what you know about the requirements and specificity of DNA binding by transcription factors?\n\n2. How might you confirm that a specific sequence (that conforms to a motif) is bound directly by a transcription factor?\n", "supporting": [ "slides-21_files" ], diff --git a/_freeze/slides/slides-22/execute-results/html.json b/_freeze/slides/slides-22/execute-results/html.json index 343f8b79..c932744b 100644 --- a/_freeze/slides/slides-22/execute-results/html.json +++ b/_freeze/slides/slides-22/execute-results/html.json @@ -1,5 +1,5 @@ { - "hash": "c88f3b796d92d4026d0141243979b723", + "hash": "b6047c949ea51c892459c7dce29caeca", "result": { "engine": "knitr", "markdown": "---\ntitle: \"class 22\"\nsubtitle: \"RNA-sequencing intro\"\nauthor: \"{{< var instructor.block.rna >}}\"\n---\n\n\n\n## Lecture Overview\n\n- mRNA life cycle\n- RNA-seq\n- Alignment\n- Transcript quantification\n- DESeq model\n- Additional statistical considerations\n\n## RNA in the cell\n\n![](/img/block-rna/rrna.png)\n\n## life fo an mRNA\n\nMessenger RNA (mRNA) carries genetic information encoded in DNA required for making proteins.\n\n![](/img/block-rna/RNA_life_cycle.png){width=\"5in\"}\n\n## Steps of RNA regulation {.smaller}\n\n- **Transcription**: A pre-mRNA still containing intron sequences is transcribed from DNA.\n- **Capping**: A 7-methyl-guanosine \"cap\" is attached the 5' end of the nascent RNA.\n- **Splicing**: The excision intronic sequences.\n- **Cleavage**: The nascent RNA is cleaved from DNA.\n- **Polyadenylation**: The addition of a polyA tail to the 3' end of the now RNA.\n- **Export**: The mature mRNA is transported from the nucleus to the cytoplasm.\n- **Localization**: The mRNA is localized to specific sub-regions or organelles within the cell.\n- **Translation**: The production of specific protein based on the codons present within the mRNA.\n- **Decay**: The enzymatic degradation of mRNA molecules.\n\n## RNA-seq {.smaller}\n\nTypically refers to \"long\" RNAs i.e. mRNA and long non-coding RNA (lncRNA). Specifically, we capture the steady-state pool of mature mRNA and to a lesser degree pre-mRNA. Thus, we can easily assess the abundance and isoforms expressed in the sample of interest. Of course, long read RNA sequencing (Nanopore, PacBio) enable better detection of continuity of exons and full-length isoforms.\n\n![](https://raw.githubusercontent.com/Sydney-Informatics-Hub/training-RNAseq-slides/master/01_IntroductionToRNASeq/assets/tracy1.png)\n\n## Selecting RNA populations for sequencing {.smaller}\n\nNeed to determine which population of RNA you are interested in sequencing. The vast majority (\\~80%) of RNA in the cell is from ribosomal RNA. Smaller regulatory non-coding RNA are typically excluded due to size selection (snRNA, snoRNA, tRNA, miRNA).\n\n::::: columns\n::: {.column width=\"50%\"}\n- **polyA selection**: uses oligo dT to hybridize to poly A tails of mRNA (and many long non-coding RNA)\n\n- **depletion of rRNA**: uses DNA oligos complementary to portions of rRNA to either remove (purification) or degrade (RNaseH) to avoid rRNA getting into the library.\n\n- **size selection**: sequence a population of RNAs that have a specific length such as microRNAs, which are \\~21 nt regulatory non-coding RNAs.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/polyA_rRNA_size.png)\n:::\n:::::\n\n## Importance of stand-specificity {.smaller}\n\n::::: columns\n::: {.column width=\"60%\"}\n![](/img/block-rna/strandedness.png)\n:::\n\n::: {.column width=\"40%\"}\n...and the genome has complex organization.\n\nstrand-specificity is crucial\n\n![](/img/block-rna/overlapping_genes.png)\n:::\n:::::\n\n## Achieving strand-specificity\n\n![](/img/block-rna/strand_protocol.png)\n\n## RNA-seq read alignment {.smaller}\n\nYou get your data back and align the reads to the genome, right? Nope, we need to deal with reads that will need to be \"split\" - spliced exons - to properly align. There are two strategies to deal with this: **1) Spliced alignments** and **2) Pseudoalignment (transcripts)**.\n\n![](https://upload.wikimedia.org/wikipedia/commons/0/01/RNA-Seq-alignment.png)\n\n## Spliced alignment workflow {.smaller}\n\n::::: columns\n::: {.column width=\"60%\"}\n![](https://github.com/hbctraining/Intro-to-rnaseq-hpc-salmon/blob/master/img/RNAseqWorkflow.png?raw=true){width=\"75%\"}\n:::\n\n::: {.column .nonincremental width=\"40%\"}\nSplice-aware aligners:\n\n- [HiSat2](http://daehwankimlab.github.io/hisat2/)\n\n- [Tophat2](http://ccb.jhu.edu/software/tophat/index.shtml)\n\n- [STAR](https://github.com/alexdobin/STAR) *\\<- use this*\n:::\n:::::\n\n## How does STAR work? {.smaller}\n\n::::: columns\n::: {.column .incremental width=\"50%\"}\n![](/img/block-rna/alignment_STAR_step1.png)\n\n![](/img/block-rna/alignment_STAR_step2.png)\n:::\n\n::: {.column .incremental width=\"50%\"}\n![](/img/block-rna/alignment_STAR_step5.png)\n:::\n:::::\n\n## Pseudoalignment and transcript quantification {.smaller}\n\nOR align/quantify in the same step. Fast and accurate...but you need to provide the transcripts (cannot discover new isoforms).\n\n::::: columns\n::: {.column width=\"50%\"}\n![](https://hbctraining.github.io/Intro-to-rnaseq-hpc-salmon/img/rnaseq_salmon_workflow.png)\n:::\n\n::: {.column .nonincremental width=\"50%\"}\n![](https://hbctraining.github.io/Intro-to-rnaseq-hpc-salmon/img/salmon_workflow_subset.png)\n\nSoftware:\\\n[Salmon](https://combine-lab.github.io/salmon/) *\\<- use this*.\\\n[Kallisto](https://pachterlab.github.io/kallisto/about).\n:::\n:::::\n\n## How does Salmon work? {.smaller}\n\nCreate an index to evaluate the sequences for all possible unique sequences of length k (k-mer) in the transcriptome from known transcripts (splice isoforms for all genes).\n\n::::: columns\n::: {.column width=\"50%\"}\nThe Salmon index has two components:\n\n- a suffix array (SA) of the reference transcriptome\n- a hash table to map each transcript in the reference transcriptome to it's location in the SA\n\nThe quasi-mapping approach estimates where the reads best map to on the transcriptome through identifying where informative sequences within the read map to instead of performing base-by-base alignment.\n:::\n\n::: {.column .nonincremental width=\"50%\"}\n![](https://hbctraining.github.io/Intro-to-rnaseq-hpc-salmon/img/salmon_quasialignment.png)\n:::\n:::::\n\n## How does Salmon work? (cont.) {.smaller}\n\n::::: columns\n::: {.column width=\"50%\"}\n1. The read is scanned from left to right until a k-mer that appears in the hash table is discovered.\n2. The k-mer is looked up in the hash table and the SA intervals are retrieved, giving all suffixes containing that k-mer\n3. Similar to STAR, the maximal matching prefix (MMP) is identified by finding the longest read sequence that exactly matches the reference suffixes.\n:::\n\n::: {.column .nonincremental width=\"50%\"}\n![](https://hbctraining.github.io/Intro-to-rnaseq-hpc-salmon/img/salmon_quasialignment.png)\n:::\n:::::\n\n## How does Salmon work? (cont.) {.smaller}\n\n::::: columns\n::: {.column width=\"50%\"}\n4. We could search for the next MMP at the position following the MMP, but often natural variation or a sequencing error in the read is the cause of the mismatch from the reference, so the beginning the search at this position would likely return the same set of transcripts. Therefore, Salmon identifies the next informative position (NIP), by skipping ahead 1 k-mer.\n5. This process is repeated until the end of the read.\n6. The final mappings are generated by determining the set of transcripts appearing in all MMPs for the read. The transcripts, orientation and transcript location are output for each read.\n:::\n\n::: {.column .incremental width=\"50%\"}\n![](https://hbctraining.github.io/Intro-to-rnaseq-hpc-salmon/img/salmon_quasialignment.png)\n\nAfter determining the best mapping for each read/fragment, salmon will generate the final transcript abundance estimates after modeling sample-specific parameters and biases. Note that reads/fragments that map equally well to more than one transcript will have the count divided between all of the mappings; thereby not losing information for the various gene isoforms.\n:::\n:::::\n\n## Accounting for biases\n\nSalmon and Kallisto account for:\n\n- GC bias\n\n- positional coverage biases\n\n- sequence biases at 5' and 3' ends of the fragments\n\n- fragment length distribution\n\n- strand-specificity\n\n## Transcript quantification metrics {.smaller}\n\nNeed to deal with systematic differences within/between samples such as:\n\n- sequencing depth\n- gene/transcript length\n- composition\n\n## Sequencing Depth {.smaller}\n\n![](https://hbctraining.github.io/DGE_workshop/img/normalization_methods_depth.png){width=\"50%\"}\n\n## Gene length {.smaller}\n\n![](https://hbctraining.github.io/DGE_workshop/img/normalization_methods_length.png){width=\"50%\"}\n\n## Composition {.smaller}\n\n![](https://hbctraining.github.io/DGE_workshop/img/normalization_methods_composition.png){width=\"50%\"}\n\n## Popular metrics: {.smaller}\n\n::::: columns\n::: {.column width=\"60%\"}\nCPM — (read) Counts Per Million: $$CPM = \\displaystyle \\frac {\\#\\ reads\\ mapped\\ to\\ gene*10^6}{Total\\ \\#\\ mapped\\ reads}$$\n\n\\[F\\|R\\]PKM — \\[Fragments\\|Reads\\] Per Kilobase per Million: $$FPKM = \\displaystyle \\frac {\\#\\ fragments\\ mapped\\ to\\ gene*10^6}{Total\\ \\#\\ mapped\\ reads*transcript\\ length}$$\n\nTPM — Transcripts Per Million: $$TPM = \\displaystyle A* \\frac {1}{\\sum_{}A}$$ $$A = \\displaystyle \\frac {\\#\\ fragments\\ mapped\\ to\\ gene*10^6}{transcript\\ length}$$\n:::\n\n::: {.column width=\"40%\"}\n- RPKM and FPKM are pretty much the same thing. FPKM is for fragments (paired-ends), not reads (single-end).\n\n- TPM and \\[F\\|R\\]PKM account for length differences between transcripts.\n\n- The sum of all \\[F\\|R\\]PKMs may not be the same across samples.\n\n- TPM normalizes to gene length first and then normalize for sequencing depth. **Thus the sum of all TPMs is the same across samples**. A better measure of relative transcript \"concentration\" in your sample than \\[F\\|R\\]PKM.\n:::\n:::::\n\n## Appropriate use and caveats {.smaller}\n\nCan I compare TPM / \\*PKM / CPM across samples?\n\n> It depends what you mean by “compare”. Because these measures are purely relative, you cannot reliably use a metric like TPM to directly assess differences in transcript abundance across samples. Specifically, changes in the composition (e.g. polyA vs rRNA-depleted) of a sample can lead to changes in TPM, even if transcripts are, in reality, expressed at the same true level across samples. Metrics like this can be useful for “high-level” comparisons (e.g. visualizing samples etc.). However, whenever using a relative metric like this, one should be aware of its relative nature and the potential caveats that go along with interpreting them between samples.\n\n**We do NOT use TPM differences for differential expression.**\n\n[The RNA-seq abundance zoo](http://robpatro.com/blog/?p=235)\n\n[Misuse of RPKM or TPM normalization when comparing across samples and sequencing protocols](https://rnajournal.cshlp.org/content/26/8/903.full)\n\n[RPKM, FPKM and TPM, Clearly Explained!!!](https://www.youtube.com/watch?v=TTUrtCY2k-w)\n\n## Differential expression analysis {.smaller}\n\n::::: columns\n::: {.column width=\"50%\"}\nDO NOT USE TPM (or anything we just talked about) to perform differential expression analysis.\n\nRNA-seq data are discrete non-negative integers (counts per transcripts).\n\nRemember the reads are (pseudo-)aligned and we **COUNT** how many are assigned to a specific transcript in a given sample.\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/de_workflow_salmon.png)\n:::\n:::::\n\n## Distributions for count data {.smaller}\n\n> Reads are count based and not normally distributed. Two distributions for count based data are poisson (which presumes the variance and mean are equal) or negative binomial (which does not). This is especially a problem when the number of biological replicates are low because it is hard to accurately model variance of count based data if you are looking at only that gene and making the assumptions of normally distributed continuous data (ie a t-test).\n\n## Overdispersion {.smaller}\n\n> **Overdispersion** the variance of counts is generally greater than their mean, especially for genes expressed at a higher level.\n\n::::: columns\n::: {.column width=\"50%\"}\n![](/img/block-rna/nb_mean_var.png)\n:::\n\n::: {.column width=\"50%\"}\nThe total number of reads for each sample tends to be in the millions, while the counts per gene are much lower (many zeros, tens/hundreds) and vary considerably. While the Poisson distribution seems appropriate for sampling out of a large pool with low probability. Poisson does not handle **overdispersion**, enter the Negative Binomial distribution.\n:::\n:::::\n\n## Examine count data {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\nd <- read_csv(\n here(\"data\", \"unfilt_counts.csv.gz\")\n) |>\n as.matrix()\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nRows: 57808 Columns: 6\n── Column specification ────────────────────────────────────\nDelimiter: \",\"\ndbl (6): mock_rna_A, mock_rna_B, mock_rna_C, 8430_rna_A,...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n```\n\n\n:::\n\n```{.r .cell-code}\ndf <- tibble(\n variance = rowVars(d),\n mean = rowMeans(d)\n)\n\nggplot(df) +\n geom_point(aes(x = mean, y = variance)) +\n scale_y_log10(limits = c(1, 1e9)) +\n scale_x_log10(limits = c(1, 1e9)) +\n geom_abline(intercept = 0, slope = 1, color = \"red\") +\n theme_cowplot()\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in scale_y_log10(limits = c(1, 1e+09)): log-10\ntransformation introduced infinite values.\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in scale_x_log10(limits = c(1, 1e+09)): log-10\ntransformation introduced infinite values.\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning: Removed 6367 rows containing missing values or values\noutside the scale range (`geom_point()`).\n```\n\n\n:::\n\n::: {.cell-output-display}\n![](slides-22_files/figure-revealjs/plt-mean-var-1.png){fig-alt='examine counts' width=960}\n:::\n:::\n\n\n- data points do not fall on the diagonal, *mean* != *var*\n\n- for highly expressed genes, *var* \\> *mean*\n\n- lowly expressed genes have more scatter i.e. “heteroscedasticity”.\n\n[Why do we use the negative binomial distribution for analysing RNAseq data?](http://bridgeslab.sph.umich.edu/posts/why-do-we-use-the-negative-binomial-distribution-for-rnaseq)\n\n[Why sequencing data is modeled as a negative binomial](https://bioramble.wordpress.com/2016/01/30/why-sequencing-data-is-modeled-as-negative-binomial/)\n\n## DEseq Model {.smaller}\n\n![](https://hbctraining.github.io/DGE_workshop/img/NB_model_formula.png)\n\nwhere counts $K_{ij}$ for gene `i`, sample `j` are modeled using a negative binomial distribution with fitted mean $\\mu_{ij}$ and a gene-specific dispersion parameter $\\alpha_i$. The fitted mean is composed of a sample-specific size factor $s_{j}$ and a parameter $q_{ij}$ proportional to the expected true concentration of fragments for sample `j`.\n\n## DESeq2 {.smaller}\n\n::::: columns\n::: {.column width=\"50%\"}\n$$\\log_2(q_{ij}) = x_{j.} \\beta_i$$ The coefficients $\\beta_{i}$ give log2 fold changes for gene `i` \\`for each column of the model matrix X. Note that the model can be generalized to use sample- and gene-dependent normalization factors $s_{ij}$.\n:::\n\n::: {.column width=\"50%\"}\n![](https://hbctraining.github.io/DGE_workshop/img/deseq2_workflow_separate.png)\n:::\n:::::\n\n## Scaling between samples {.smaller}\n\n::::: columns\n::: {.column width=\"50%\"}\nThe counts divided by sample-specific size factors determined by median ratio of gene counts relative to geometric mean per gene.\n\n- Step 1: creates a pseudo-reference sample (row-wise geometric mean)\n\n- Step 2: calculates ratio of each sample to the reference\n\n- Step 3: calculate the normalization factor for each sample (size factor)\n:::\n\n::: {.column width=\"50%\"}\n![](https://hbctraining.github.io/DGE_workshop/img/normalization_methods_composition.png)\n:::\n:::::\n\n## estimateSizeFactors {.smaller}\n\n\n::: {.cell output-location='fragment'}\n\n```{.r .cell-code}\nd <- read_csv(here(\"data\", \"unfilt_counts.csv.gz\")) |> as.matrix()\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nRows: 57808 Columns: 6\n── Column specification ────────────────────────────────────\nDelimiter: \",\"\ndbl (6): mock_rna_A, mock_rna_B, mock_rna_C, 8430_rna_A,...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n```\n\n\n:::\n\n```{.r .cell-code}\nestimateSizeFactorsForMatrix(counts = d)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nmock_rna_A mock_rna_B mock_rna_C 8430_rna_A 8430_rna_B \n 0.9248615 0.8867074 1.0318455 1.0693342 1.0238999 \n8430_rna_C \n 1.1038130 \n```\n\n\n:::\n:::\n\n\n## Gene-wise dispersion {.smaller}\n\nWe need to generate accurate estimates of within-group variation for each gene...but usually have only 3 replicates making it hard to estimate reliably.\n\nDESeq2 shares information across genes to generate more accurate estimates of variation based on the mean expression level of the gene using a method called ‘shrinkage’. DESeq2 assumes that genes with similar expression levels have similar dispersion.\n\nEstimating the dispersion for each gene separately:\n\nTo model the dispersion based on expression level (mean counts of replicates), the dispersion for each gene is estimated using maximum likelihood estimation. In other words, given the count values of the replicates, the most likely estimate of dispersion is calculated.\n\n[Count normalization](https://hbctraining.github.io/DGE_workshop/lessons/02_DGE_count_normalization.html)\n\n[Comprehensive explanation of DESeq2 steps](https://hbctraining.github.io/DGE_workshop/lessons/04_DGE_DESeq2_analysis.html)\n\n## Design considerations\n\n![](/img/block-rna/auer.jpg)\n\n## Remember ENCODE {.smaller}\n\nA study compared mRNA expression profiles of many human and mouse tissues. One of their key findings:\n\n> GENE EXPRESSION IS MORE SIMILAR AMONG TISSUES WITHIN A SPECIES THAN BETWEEN CORRESPONDING TISSUES OF THE TWO SPECIES\n\n![](https://f1000researchdata.s3.amazonaws.com/manuscripts/7019/9f5f4330-d81d-46b8-9a3f-d8cb7aaf577e_figure1.gif)\n\n## Power: depth vs reps {.smaller}\n\n::::: columns\n::: {.column .nonincremental width=\"50%\"}\nReplicates allow us to:\n\n- estimate variation for each gene\n- randomize out unknown covariates\n- spot outliers\n- improve precision of expression and fold-change estimates\n\n[RNA-seq power calculation](https://cqs-vumc.shinyapps.io/rnaseqsamplesizeweb/)\n:::\n\n::: {.column width=\"50%\"}\n![](/img/block-rna/de_replicates_img2.png)\n:::\n:::::\n", diff --git a/_freeze/slides/slides-24/execute-results/html.json b/_freeze/slides/slides-24/execute-results/html.json index 3d558cfe..93548f10 100644 --- a/_freeze/slides/slides-24/execute-results/html.json +++ b/_freeze/slides/slides-24/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "490447d28a43f93b7e04b1c072287253", + "hash": "651459eb45f47a1ed1f6726e5c912a47", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"RNAseq DE\"\nauthor: \"{{< var instructor.block.rna >}}\"\n---\n\n\n\n## Overview {.smaller}\n\nLast time we took RNAseq data from an *in vitro* differentiation timecourse from mouse ESCs to glutaminergic neurons [(Hubbard et al, F1000 Research (2013))](10.12688/f1000research.2-35.v1). We took in transcript-level quantifications produced by `salmon` and collapsed them to gene-level quantifications using `tximport`. We then inspected the quality of the data by relating distances between samples using two methods: hierarchical clustering and principal components analysis. We found that the data was of high quality, as evidenced by the fact that replicates from a given timepoint were highly similar to other replicates for the same timepoint, and the distances between samples made sense with what we know about how the experiment was conducted.\n\nToday, we are going to pretend that this isn't a timecourse. For the sake of simplicity, we are going to imagine that we have only two conditions: DIV0 and DIV7. We will use `DESeq2` to identify genes that are differentially expressed between these two timepoints. We will then plot changes in expression for both individual genes and groups of genes that we already know going in might be interesting to look at. Finally, we will look at some features of transcripts and genes that are differentially expressed between these two timepoints.\n\n## Prepare `t2g` {.smaller}\n\nThe first thing we need to do is read in the data again and move from transcript-level expression values to gene-level expression values with `tximport`. Let's use `biomaRt` to get a table that relates gene and transcript IDs.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"mmusculus_gene_ensembl\"\n)\n\nt2g <- biomaRt::getBM(\n attributes = c(\n \"ensembl_transcript_id\",\n \"ensembl_gene_id\",\n \"external_gene_name\"\n ),\n mart = mart\n) |>\n as_tibble()\n\n# maps systematic to common gene names\ngene_name_map <- t2g |>\n dplyr::select(-ensembl_transcript_id) |>\n unique()\n```\n:::\n\n\n## Prepare `metdata` and import {.smaller}\n\nNow we can read in the transcript-level data and collapse to gene-level data with `tximport`\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmetadata <- tibble(\n salmon_dirs = fs::dir_ls(\n here(\"data/block-rna/differentiation_salmonouts\"),\n recurse = TRUE,\n glob = \"*quant.sf\"\n )\n) |>\n mutate(\n sample_id = fs::path_file(fs::path_dir(salmon_dirs))\n ) |>\n filter(str_starts(sample_id, \"DIV\")) |>\n separate_wider_delim(\n col = sample_id,\n delim = \".\",\n names = c(\"timepoint\", \"rep\"),\n too_few = \"align_start\",\n cols_remove = FALSE\n ) |>\n mutate(rep = str_remove(rep, \"Rep\")) |>\n column_to_rownames(\"sample_id\")\n\n# Add the sample_id column back from rownames\nmetadata$sample_id <- rownames(metadata)\n\nmetadata <- metadata |>\n filter(\n timepoint %in% c(\"DIV0\", \"DIV7\")\n )\n\nsalmdir <- metadata$salmon_dirs\nnames(salmdir) <- metadata$sample_id\n\ntxi <- tximport(\n files = salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nreading in files with read_tsv\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\n1 2 3 4 5 6 7 \ntranscripts missing from tx2gene: 4395\nsummarizing abundance\nsummarizing counts\nsummarizing length\n```\n\n\n:::\n:::\n\n\n## Filter lowly expressed genes\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# examine distribution of TPMs\nhist(log2(1 + rowSums(txi$abundance)), breaks = 40)\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/remove-low-genes-1.png){width=960}\n:::\n\n```{.r .cell-code}\n# decide a cutoff\nkeepG <- txi$abundance[log2(1 + rowSums(txi$abundance)) > 4.5, ] |>\n rownames()\n```\n:::\n\n\n## Create DESeq object {.smaller}\n\nThere are essentially two steps to using `DESeq2`. The first involves creating a `DESeqDataSet` from your data. Luckily, if you have a `tximport` object, which we do in the form of `txi`, then this becomes easy.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nddsTxi <- DESeqDataSetFromTximport(\n txi,\n colData = metadata,\n design = ~timepoint\n)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in DESeqDataSet(se, design = design, ignoreRank):\nsome variables in design formula are characters, converting\nto factors\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nusing just counts from tximport\n```\n\n\n:::\n\n```{.r .cell-code}\n# keep genes with sufficient expession\nddsTxi <- ddsTxi[keepG, ]\n```\n:::\n\n\n## Design formula {.smaller}\n\nYou can see that `DESeqDataSetFromTximport` wants three things. The first is our `tximport` object. The second is the dataframe we made that relates samples and conditions (or in this case timepoints). The last is something called a **design formula**. A design formula contains all of the variables that will go into `DESeq2`'s model. The formula starts with a tilde and then has variables separated by a plus sign think `lm()`. It is common practice, and in fact basically required with `DESeq2`, to put the variable of interest last. In our case, that's trivial because we only have one: timepoint. So our design formula is very simple:\n\n```r\ndesign = ~ timepoint\n```\n\nYour design formula should ideally include **all of the sources of variation in your data**. For example, let's say that here we thought there was a batch effect with the replicates. Maybe all of the Rep1 samples were prepped and sequenced on a different day than the Rep2 samples and so on. We could potentially account for this in `DESeq2`'s model with the following forumula:\n\n```r\ndesign = ~ rep + timepoint\n```\n\nHere, timepoint is still the variable of interest, but we are controlling for differences that arise due to differences in replicates.\n\n## Run `DESeq2` {.smaller}\n\nWe can see here that `DESeq2` is taking the counts produced by `tximport` for gene quantifications. There are 52346 genes (rows) here and 7 samples (columns). Now using this ddsTxi object, we can run `DESeq2`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# create DESeq object\ndds <- DESeq(ddsTxi)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nestimating size factors\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nestimating dispersions\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\ngene-wise dispersion estimates\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nmean-dispersion relationship\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nfinal dispersion estimates\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nfitting model and testing\n```\n\n\n:::\n:::\n\n\nThere are many useful things in this `dds` object. Take a look at the [vignette](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) for a full explanation. Including info on many more tests and analyses that can be done with `DESeq2`.\n\nThe results can be accessed using the `results()` function. We will use the `contrast` argument here. `DESeq2` reports changes in RNA abundance between two samples as a `log2FoldChange`. But, it's often not clear what the numerator and denominator of that fold change ratio...it could be either DIV7/DIV0 or DIV0/DIV7.\n\nThe lexographically first condition will be the numerator. I find it easier to explicitly specify what the numerator and denominator of this ratio are using the `contrast` argument. The `contrast` argument can be used to implement more complicated design formula. Remember our design formula that accounted for potential differences due to Replicate batch effects:\n\n```\n~ replicate + timepoint\n```\n\n`DESeq2` will account for differences between replicates here to find differences between timepoints.\n\n## Contrasts to get results {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# For contrast, we give three strings: the factor we are interested in, the numerator, and the denominator\nresults(dds, contrast = c(\"timepoint\", \"DIV7\", \"DIV0\"))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nlog2 fold change (MLE): timepoint DIV7 vs DIV0 \nWald test p-value: timepoint DIV7 vs DIV0 \nDataFrame with 13191 rows and 6 columns\n baseMean log2FoldChange lfcSE\n \nENSMUSG00000000001 5616.419 -0.950902 0.0533784\nENSMUSG00000000028 723.202 -2.551463 0.1076496\nENSMUSG00000000031 3652.172 4.121041 0.2921400\nENSMUSG00000000037 244.242 -1.272542 0.2049733\nENSMUSG00000000056 2391.087 0.789258 0.1470825\n... ... ... ...\nENSMUSG00000144223 510.92457 -0.595178 0.1209084\nENSMUSG00000144232 78.69414 0.383407 0.2425846\nENSMUSG00000144287 41.62399 -0.630864 0.3691944\nENSMUSG00002076020 2.70261 1.186678 1.1743062\nENSMUSG00002076083 1281.79528 0.893079 0.0600122\n stat pvalue padj\n \nENSMUSG00000000001 -17.81435 5.46892e-71 2.59106e-70\nENSMUSG00000000028 -23.70156 3.47448e-124 2.91715e-123\nENSMUSG00000000031 14.10639 3.46880e-45 1.15568e-44\nENSMUSG00000000037 -6.20833 5.35506e-10 8.80823e-10\nENSMUSG00000000056 5.36609 8.04610e-08 1.23520e-07\n... ... ... ...\nENSMUSG00000144223 -4.92256 8.54203e-07 1.26880e-06\nENSMUSG00000144232 1.58051 1.13990e-01 1.29827e-01\nENSMUSG00000144287 -1.70876 8.74958e-02 1.00669e-01\nENSMUSG00002076020 1.01054 3.12239e-01 3.39245e-01\nENSMUSG00002076083 14.88162 4.33859e-50 1.54540e-49\n```\n\n\n:::\n:::\n\n\nThe columns we are most interested in are **log2FoldChange** and **padj**.\n\nlog2FoldChange is self-explanatory. padj is the Benjamini-Hochberg corrected pvalue for a test asking if the expression of this gene is different between the two conditions.\n\n## Cleanup results {.smaller}\n\nLet's do a little work on this data frame to make it slightly cleaner and more informative.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff <-\n results(\n dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\")\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n # drop unused columns\n dplyr::select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n dplyr::rename(gene = external_gene_name)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n:::\n\n\n## How many are significant {.smaller}\n\nOK now we have a table of gene expression results. How many genes are significantly up/down regulated between these two timepoints? We will use 0.01 as an FDR (p.adj) cutoff.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# number of upregulated genes\nnrow(filter(diff, padj < 0.01 & log2FoldChange > 0))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 5294\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of downregulated genes\nnrow(filter(diff, padj < 0.01 & log2FoldChange < 0))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 5325\n```\n\n\n:::\n:::\n\n\n## Volcano plot of differential expression results {.smaller}\n\nLet's make a volcano plot of these results.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# meets the FDR cutoff\ndiff_sig <-\n mutate(\n diff,\n sig = case_when(\n padj < 0.01 ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n # if a gene did not meet expression cutoffs that DESeq2 automatically does, it gets a pvalue of NA\n drop_na()\n\nggplot(\n diff_sig,\n aes(\n x = log2FoldChange,\n y = -log10(padj),\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/volcano-1-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## Change the LFC threshold {.smaller}\n\nIn addition to an FDR cutoff, let's also apply a log2FoldChange cutoff. This will of course be more conservative, but will probably give you a more confident set of genes.\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\n# Is the expression of the gene at least 3-fold different?\ndiff_lfc <-\n results(\n dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\"),\n lfcThreshold = log(3, 2)\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n # drop unused columns\n select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n rename(gene = external_gene_name)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of upregulated genes\nnrow(\n filter(\n diff_lfc,\n padj < 0.01 & log2FoldChange > 0\n )\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 1507\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of downregulated genes\nnrow(\n filter(\n diff_lfc,\n padj < 0.01 & log2FoldChange < 0\n )\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 990\n```\n\n\n:::\n:::\n\n\n## Change the LFC threshold {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\ndiff_lfc_sig <-\n mutate(\n diff_lfc,\n sig = case_when(\n padj < 0.01 ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n drop_na()\n\n\n# look at some specific genes\n\ndiff_lfc_sig |>\n filter(\n gene %in%\n c(\"Bdnf\", \"Dlg4\", \"Klf4\", \"Sox2\")\n ) |>\n gt()\n```\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n \n \n
ensembl_gene_idlog2FoldChangepadjgenesig
ENSMUSG00000003032-2.3441414.559786e-09Klf4yes
ENSMUSG000000208863.3392652.017800e-45Dlg4yes
ENSMUSG000000484821.7104104.871606e-01Bdnfno
ENSMUSG00000074637-2.1695724.986817e-13Sox2yes
\n
\n```\n\n:::\n:::\n\n\n## Filtered Volcano {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n diff_lfc_sig,\n aes(\n x = log2FoldChange,\n y = -log10(padj),\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-2-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## Plotting the expression of single genes {.smaller}\n\nSometimes we will have particular marker genes that we might want to highlight to give confidence that the experiment worked as expected. We can plot the expression of these genes in each replicate. Let's plot the expression of two pluripotency genes (which we expect to decrease) and two neuronal genes (which we expect to increase).\n\nSo what is the value that we would plot? We could use the 'normalized counts' value provided by `DESeq2`. However, remember there is not length calculation so it is difficult to compare accross genes.\n\nA more interpretable value to plot might be TPM, since TPM is length-normalized. Let's say a gene was expressed at 500 TPM. Right off the bat, I know generally what kind of expression that reflects (pretty high).\n\n\n::: {.cell}\n\n:::\n\n\n## Get TPMs {.smaller}\n\nLet's plot the expression of Klf4, Sox2, Bdnf, and Dlg4 in our samples.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\ntpms <- txi$abundance |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n inner_join(gene_name_map) |>\n rename(gene = external_gene_name) |>\n # Filter for genes we are interested in\n filter(gene %in% c(\"Klf4\", \"Sox2\", \"Bdnf\", \"Dlg4\")) |>\n pivot_longer(-c(ensembl_gene_id, gene)) |>\n separate_wider_delim(\n col = name,\n delim = \".\",\n names = c(\"condition\", \"rep\")\n )\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n\n```{.r .cell-code}\ngt(tpms)\n```\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n \n \n
ensembl_gene_idgeneconditionrepvalue
ENSMUSG00000003032Klf4DIV0Rep140.022629
ENSMUSG00000003032Klf4DIV0Rep246.241797
ENSMUSG00000003032Klf4DIV0Rep357.374566
ENSMUSG00000003032Klf4DIV7Rep19.063035
ENSMUSG00000003032Klf4DIV7Rep29.208364
ENSMUSG00000003032Klf4DIV7Rep39.715119
ENSMUSG00000003032Klf4DIV7Rep48.817037
ENSMUSG00000020886Dlg4DIV0Rep118.752921
ENSMUSG00000020886Dlg4DIV0Rep215.749749
ENSMUSG00000020886Dlg4DIV0Rep312.212636
ENSMUSG00000020886Dlg4DIV7Rep1151.558403
ENSMUSG00000020886Dlg4DIV7Rep2156.043098
ENSMUSG00000020886Dlg4DIV7Rep3153.269475
ENSMUSG00000020886Dlg4DIV7Rep4153.538436
ENSMUSG00000048482BdnfDIV0Rep12.456452
ENSMUSG00000048482BdnfDIV0Rep22.401157
ENSMUSG00000048482BdnfDIV0Rep32.351342
ENSMUSG00000048482BdnfDIV7Rep17.799981
ENSMUSG00000048482BdnfDIV7Rep27.762255
ENSMUSG00000048482BdnfDIV7Rep37.638515
ENSMUSG00000048482BdnfDIV7Rep47.433529
ENSMUSG00000074637Sox2DIV0Rep1131.032132
ENSMUSG00000074637Sox2DIV0Rep2120.433905
ENSMUSG00000074637Sox2DIV0Rep3110.664468
ENSMUSG00000074637Sox2DIV7Rep124.484942
ENSMUSG00000074637Sox2DIV7Rep226.080394
ENSMUSG00000074637Sox2DIV7Rep327.106054
ENSMUSG00000074637Sox2DIV7Rep426.995461
\n
\n```\n\n:::\n:::\n\n\n## Now plot {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\nggplot(\n tpms,\n aes(\n x = condition,\n y = value,\n color = condition\n )\n) +\n geom_jitter(size = 2, width = .25) +\n labs(\n x = \"\",\n y = \"TPM\"\n ) +\n theme_cowplot() +\n scale_color_manual(values = c(\"blue\", \"red\")) +\n facet_wrap(~gene, scales = \"free_y\")\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-tpms-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## How about pathways? {.smaller}\n\nSay that instead of plotting individual genes we wanted to ask whether a whole class of genes are going up or down. We can do that by retrieving all genes that belong to a particular gene ontology term.\n\nThere are three classes of genes we will look at here:\n\n- Maintenance of pluripotency (GO:0019827)\n- Positive regulation of the cell cycle (GO:0045787)\n- Neuronal differentitaion (GO:0030182)\n\n## Retrieve pathway information {.smaller}\n\nWe can use `biomaRt` to get all genes that belong to each of these categories. Think of it like doing a gene ontology enrichment analysis in reverse.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npluripotencygenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0019827\"),\n mart = mart\n)\n\ncellcyclegenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0045787\"),\n mart = mart\n)\n\nneurongenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0030182\"),\n mart = mart\n)\n\n\n# pathway <- bind_rows(pluripotencygenes,\n# cellcyclegenes,\n# neurongenes\n# )\n#\n# pathway$path <- c(\n# rep(\"pluri\",nrow(pluripotencygenes)),\n# rep(\"cellcycle\",nrow(cellcyclegenes)),\n# rep(\"neuron\",nrow(neurongenes))\n# )\n#\n# write_csv(x = pathway, file = here(\"data\",\"block-rna\",\"pathwaygenes.csv.gz\"))\n```\n:::\n\n\n## Add pathway information to results {.smaller}\n\nYou can see that these items are one-column dataframes that have the column name 'ensembl_gene_id'. We can now go through our results dataframe and add an annotation column that marks whether the gene is in any of these categories.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff_paths <-\n diff_lfc |>\n mutate(\n annot = case_when(\n ensembl_gene_id %in% pluripotencygenes$ensembl_gene_id ~ \"pluripotency\",\n ensembl_gene_id %in% cellcyclegenes$ensembl_gene_id ~ \"cellcycle\",\n ensembl_gene_id %in% neurongenes$ensembl_gene_id ~ \"neurondiff\",\n .default = \"none\"\n ),\n # Reorder these for plotting purposes\n annot = factor(\n annot,\n levels = c(\"none\", \"cellcycle\", \"pluripotency\", \"neurondiff\")\n )\n ) |>\n drop_na()\n```\n:::\n\n\n## Are there significant differences? {.smaller}\n\nOK we've got our table, now we are going to ask if the log2FoldChange values for the genes in each of these classes are different that what we would expect. So what is the expected value? Well, we have a distribution of log2 fold changes for all the genes that are **not** in any of these categories. So we will ask if the distribution of log2 fold changes for each gene category is different than that null distribution.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npvals <- rstatix::wilcox_test(\n data = diff_paths,\n log2FoldChange ~ annot,\n ref.group = \"none\"\n)\n\np.pluripotency <- pvals |>\n filter(group2 == \"pluripotency\") |>\n pull(p.adj)\n\np.cellcycle <- pvals |>\n filter(group2 == \"cellcycle\") |>\n pull(p.adj)\n\np.neurondiff <- pvals |>\n filter(group2 == \"neurondiff\") |>\n pull(p.adj)\n```\n:::\n\n\n## plot pathway differences {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n diff_paths,\n aes(\n x = annot,\n y = log2FoldChange,\n fill = annot\n )\n) +\n labs(\n x = \"Gene class\",\n y = \"DIV7/DIV0, log2\"\n ) +\n geom_hline(\n yintercept = 0,\n color = \"gray\",\n linetype = \"dashed\"\n ) +\n geom_boxplot(\n notch = TRUE,\n outlier.shape = NA\n ) +\n theme_cowplot() +\n scale_fill_manual(values = c(\"gray\", \"red\", \"blue\", \"purple\"), guide = F) +\n scale_x_discrete(\n labels = c(\n \"none\",\n \"Cell cycle\",\n \"Pluripotency\",\n \"Neuron\\ndifferentiation\"\n )\n ) +\n ylim(-5, 7) +\n # hacky significance bars\n annotate(\"segment\", x = 1, xend = 2, y = 4, yend = 4) +\n annotate(\"segment\", x = 1, xend = 3, y = 5, yend = 5) +\n annotate(\"segment\", x = 1, xend = 4, y = 6, yend = 6) +\n annotate(\"text\", x = 1.5, y = 4.4, label = paste0(\"p = \", p.cellcycle)) +\n annotate(\"text\", x = 2, y = 5.4, label = paste0(\"p = \", p.pluripotency)) +\n annotate(\"text\", x = 2.5, y = 6.4, label = paste0(\"p = \", p.neurondiff))\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-diff-results-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## What if we want to look at pathways in an unbiased way? {.smaller}\n\nWe will use Gene Set Enrichment Analysis (GSEA) to determine if pre-defined gene sets (pathways, GO terms, experimentally defined genes) are coordinately up-regulated or down-regulated between the two conditions you are comparing. To run gsea you need 2 things. 1. You list of expressed genes ranked by fold change. 2. Pre-defined gene sets. See [MSigDb](https://www.gsea-msigdb.org/gsea/msigdb/index.jsp)\n\n![](/img/block-rna/gsea_overview.png)\n\nPMID: 12808457, 16199517\n\n## GSEA examples {.smaller}\nTop = upregulated\n\n![](/img/block-rna/gsea_examples.png){width=\"3in\"}\n\nBottom = downregulated\n\n## Prep GSEA {.smaller}\n\n1. We need to make a list of all genes and their LFC.\n\n2. We need to find interesting gene sets.\n\n3. Run GSEA\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# retrieve hallmark gene set from msigdb\nmouse_hallmark <- msigdbr(species = \"Mus musculus\") |>\n filter(gs_collection == \"H\") |>\n select(gs_name, gene_symbol)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nUsing human MSigDB with ortholog mapping to mouse. Use `db_species = \"MM\"` for mouse-native gene sets.\nThis message is displayed once per session.\n```\n\n\n:::\n\n```{.r .cell-code}\n# create a list of gene LFCs\nrankedgenes <- diff_lfc |> pull(log2FoldChange)\n\n# add symbols as names of the list\nnames(rankedgenes) <- diff$gene\n\n# sort by LFC\nrankedgenes <- sort(rankedgenes, decreasing = TRUE)\n\n# deduplicate\nrankedgenes <- rankedgenes[!duplicated(names(rankedgenes))]\n```\n:::\n\n\n## Run GSEA {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# run gsea\ndiv7vs0 <- GSEA(\n geneList = rankedgenes,\n eps = 0,\n pAdjustMethod = \"fdr\",\n pvalueCutoff = .05,\n minGSSize = 20,\n maxGSSize = 1000,\n TERM2GENE = mouse_hallmark\n)\n\ndiv7vs0@result |>\n dplyr::select(ID, NES, p.adjust) |>\n gt()\n```\n:::\n\n\n## Plot GSEA {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# plot \"HALLMARK_G2M_CHECKPOINT\"\ngseaplot(x = div7vs0, geneSetID = \"HALLMARK_G2M_CHECKPOINT\")\n```\n:::\n\n", + "markdown": "---\ntitle: \"RNAseq DE\"\nauthor: \"{{< var instructor.block.rna >}}\"\n---\n\n\n\n## Overview {.smaller}\n\nLast time we took RNAseq data from an *in vitro* differentiation timecourse from mouse ESCs to glutaminergic neurons [(Hubbard et al, F1000 Research (2013))](10.12688/f1000research.2-35.v1). We took in transcript-level quantifications produced by `salmon` and collapsed them to gene-level quantifications using `tximport`. We then inspected the quality of the data by relating distances between samples using two methods: hierarchical clustering and principal components analysis. We found that the data was of high quality, as evidenced by the fact that replicates from a given timepoint were highly similar to other replicates for the same timepoint, and the distances between samples made sense with what we know about how the experiment was conducted.\n\nToday, we are going to pretend that this isn't a timecourse. For the sake of simplicity, we are going to imagine that we have only two conditions: DIV0 and DIV7. We will use `DESeq2` to identify genes that are differentially expressed between these two timepoints. We will then plot changes in expression for both individual genes and groups of genes that we already know going in might be interesting to look at. Finally, we will look at some features of transcripts and genes that are differentially expressed between these two timepoints.\n\n## Prepare `t2g` {.smaller}\n\nThe first thing we need to do is read in the data again and move from transcript-level expression values to gene-level expression values with `tximport`. Let's use `biomaRt` to get a table that relates gene and transcript IDs.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmart <- biomaRt::useMart(\n \"ENSEMBL_MART_ENSEMBL\",\n dataset = \"mmusculus_gene_ensembl\"\n)\n\nt2g <- biomaRt::getBM(\n attributes = c(\n \"ensembl_transcript_id\",\n \"ensembl_gene_id\",\n \"external_gene_name\"\n ),\n mart = mart\n) |>\n as_tibble()\n\n# maps systematic to common gene names\ngene_name_map <- t2g |>\n dplyr::select(-ensembl_transcript_id) |>\n unique()\n```\n:::\n\n\n## Prepare `metdata` and import {.smaller}\n\nNow we can read in the transcript-level data and collapse to gene-level data with `tximport`\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmetadata <- tibble(\n salmon_dirs = fs::dir_ls(\n here(\"data/block-rna/differentiation_salmonouts\"),\n recurse = TRUE,\n glob = \"*quant.sf\"\n )\n) |>\n mutate(\n sample_id = fs::path_file(fs::path_dir(salmon_dirs))\n ) |>\n filter(str_starts(sample_id, \"DIV\")) |>\n separate_wider_delim(\n col = sample_id,\n delim = \".\",\n names = c(\"timepoint\", \"rep\"),\n too_few = \"align_start\",\n cols_remove = FALSE\n ) |>\n mutate(rep = str_remove(rep, \"Rep\")) |>\n column_to_rownames(\"sample_id\")\n\n# Add the sample_id column back from rownames\nmetadata$sample_id <- rownames(metadata)\n\nmetadata <- metadata |>\n filter(\n timepoint %in% c(\"DIV0\", \"DIV7\")\n )\n\nsalmdir <- metadata$salmon_dirs\nnames(salmdir) <- metadata$sample_id\n\ntxi <- tximport(\n files = salmdir,\n type = \"salmon\",\n tx2gene = t2g,\n dropInfReps = TRUE,\n countsFromAbundance = \"lengthScaledTPM\"\n)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nreading in files with read_tsv\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\n1 2 3 4 5 6 7 \ntranscripts missing from tx2gene: 4395\nsummarizing abundance\nsummarizing counts\nsummarizing length\n```\n\n\n:::\n:::\n\n\n## Filter lowly expressed genes\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# examine distribution of TPMs\nhist(log2(1 + rowSums(txi$abundance)), breaks = 40)\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/remove-low-genes-1.png){width=960}\n:::\n\n```{.r .cell-code}\n# decide a cutoff\nkeepG <- txi$abundance[log2(1 + rowSums(txi$abundance)) > 4.5, ] |>\n rownames()\n```\n:::\n\n\n## Create DESeq object {.smaller}\n\nThere are essentially two steps to using `DESeq2`. The first involves creating a `DESeqDataSet` from your data. Luckily, if you have a `tximport` object, which we do in the form of `txi`, then this becomes easy.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nddsTxi <- DESeqDataSetFromTximport(\n txi,\n colData = metadata,\n design = ~timepoint\n)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in DESeqDataSet(se, design = design, ignoreRank):\nsome variables in design formula are characters, converting\nto factors\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nusing just counts from tximport\n```\n\n\n:::\n\n```{.r .cell-code}\n# keep genes with sufficient expession\nddsTxi <- ddsTxi[keepG, ]\n```\n:::\n\n\n## Design formula {.smaller}\n\nYou can see that `DESeqDataSetFromTximport` wants three things. The first is our `tximport` object. The second is the dataframe we made that relates samples and conditions (or in this case timepoints). The last is something called a **design formula**. A design formula contains all of the variables that will go into `DESeq2`'s model. The formula starts with a tilde and then has variables separated by a plus sign think `lm()`. It is common practice, and in fact basically required with `DESeq2`, to put the variable of interest last. In our case, that's trivial because we only have one: timepoint. So our design formula is very simple:\n\n```r\ndesign = ~ timepoint\n```\n\nYour design formula should ideally include **all of the sources of variation in your data**. For example, let's say that here we thought there was a batch effect with the replicates. Maybe all of the Rep1 samples were prepped and sequenced on a different day than the Rep2 samples and so on. We could potentially account for this in `DESeq2`'s model with the following forumula:\n\n```r\ndesign = ~ rep + timepoint\n```\n\nHere, timepoint is still the variable of interest, but we are controlling for differences that arise due to differences in replicates.\n\n## Run `DESeq2` {.smaller}\n\nWe can see here that `DESeq2` is taking the counts produced by `tximport` for gene quantifications. There are 52346 genes (rows) here and 7 samples (columns). Now using this ddsTxi object, we can run `DESeq2`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# create DESeq object\ndds <- DESeq(ddsTxi)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nestimating size factors\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nestimating dispersions\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\ngene-wise dispersion estimates\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nmean-dispersion relationship\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nfinal dispersion estimates\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nfitting model and testing\n```\n\n\n:::\n:::\n\n\nThere are many useful things in this `dds` object. Take a look at the [vignette](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) for a full explanation. Including info on many more tests and analyses that can be done with `DESeq2`.\n\nThe results can be accessed using the `results()` function. We will use the `contrast` argument here. `DESeq2` reports changes in RNA abundance between two samples as a `log2FoldChange`. But, it's often not clear what the numerator and denominator of that fold change ratio...it could be either DIV7/DIV0 or DIV0/DIV7.\n\nThe lexographically first condition will be the numerator. I find it easier to explicitly specify what the numerator and denominator of this ratio are using the `contrast` argument. The `contrast` argument can be used to implement more complicated design formula. Remember our design formula that accounted for potential differences due to Replicate batch effects:\n\n```\n~ replicate + timepoint\n```\n\n`DESeq2` will account for differences between replicates here to find differences between timepoints.\n\n## Contrasts to get results {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# For contrast, we give three strings: the factor we are interested in, the numerator, and the denominator\nresults(dds, contrast = c(\"timepoint\", \"DIV7\", \"DIV0\"))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nlog2 fold change (MLE): timepoint DIV7 vs DIV0 \nWald test p-value: timepoint DIV7 vs DIV0 \nDataFrame with 13191 rows and 6 columns\n baseMean log2FoldChange lfcSE\n \nENSMUSG00000000001 5616.419 -0.950902 0.0533784\nENSMUSG00000000028 723.202 -2.551463 0.1076496\nENSMUSG00000000031 3652.172 4.121041 0.2921400\nENSMUSG00000000037 244.242 -1.272542 0.2049733\nENSMUSG00000000056 2391.087 0.789258 0.1470825\n... ... ... ...\nENSMUSG00000144223 510.92457 -0.595178 0.1209084\nENSMUSG00000144232 78.69414 0.383407 0.2425846\nENSMUSG00000144287 41.62399 -0.630864 0.3691944\nENSMUSG00002076020 2.70261 1.186678 1.1743062\nENSMUSG00002076083 1281.79528 0.893079 0.0600122\n stat pvalue padj\n \nENSMUSG00000000001 -17.81435 5.46892e-71 2.59106e-70\nENSMUSG00000000028 -23.70156 3.47448e-124 2.91715e-123\nENSMUSG00000000031 14.10639 3.46880e-45 1.15568e-44\nENSMUSG00000000037 -6.20833 5.35506e-10 8.80823e-10\nENSMUSG00000000056 5.36609 8.04610e-08 1.23520e-07\n... ... ... ...\nENSMUSG00000144223 -4.92256 8.54203e-07 1.26880e-06\nENSMUSG00000144232 1.58051 1.13990e-01 1.29827e-01\nENSMUSG00000144287 -1.70876 8.74958e-02 1.00669e-01\nENSMUSG00002076020 1.01054 3.12239e-01 3.39245e-01\nENSMUSG00002076083 14.88162 4.33859e-50 1.54540e-49\n```\n\n\n:::\n:::\n\n\nThe columns we are most interested in are **log2FoldChange** and **padj**.\n\nlog2FoldChange is self-explanatory. padj is the Benjamini-Hochberg corrected pvalue for a test asking if the expression of this gene is different between the two conditions.\n\n## Cleanup results {.smaller}\n\nLet's do a little work on this data frame to make it slightly cleaner and more informative.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff <-\n results(\n dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\")\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n # drop unused columns\n dplyr::select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n dplyr::rename(gene = external_gene_name)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n:::\n\n\n## How many are significant {.smaller}\n\nOK now we have a table of gene expression results. How many genes are significantly up/down regulated between these two timepoints? We will use 0.01 as an FDR (p.adj) cutoff.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# number of upregulated genes\nnrow(filter(diff, padj < 0.01 & log2FoldChange > 0))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 5294\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of downregulated genes\nnrow(filter(diff, padj < 0.01 & log2FoldChange < 0))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 5325\n```\n\n\n:::\n:::\n\n\n## Volcano plot of differential expression results {.smaller}\n\nLet's make a volcano plot of these results.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# meets the FDR cutoff\ndiff_sig <-\n mutate(\n diff,\n sig = case_when(\n padj < 0.01 ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n # if a gene did not meet expression cutoffs that DESeq2 automatically does, it gets a pvalue of NA\n drop_na()\n\nggplot(\n diff_sig,\n aes(\n x = log2FoldChange,\n y = -log10(padj),\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/volcano-1-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## Change the LFC threshold {.smaller}\n\nIn addition to an FDR cutoff, let's also apply a log2FoldChange cutoff. This will of course be more conservative, but will probably give you a more confident set of genes.\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\n# Is the expression of the gene at least 3-fold different?\ndiff_lfc <-\n results(\n dds,\n contrast = c(\"timepoint\", \"DIV7\", \"DIV0\"),\n lfcThreshold = log(3, 2)\n ) |>\n # Change this into a dataframe\n as.data.frame() |>\n # Move ensembl gene IDs into their own column\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n # drop unused columns\n select(-c(baseMean, lfcSE, stat, pvalue)) |>\n # Merge this with a table relating ensembl_gene_id with gene short names\n inner_join(gene_name_map) |>\n # Rename external_gene_name column\n rename(gene = external_gene_name)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of upregulated genes\nnrow(\n filter(\n diff_lfc,\n padj < 0.01 & log2FoldChange > 0\n )\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 1507\n```\n\n\n:::\n\n```{.r .cell-code}\n# number of downregulated genes\nnrow(\n filter(\n diff_lfc,\n padj < 0.01 & log2FoldChange < 0\n )\n)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 990\n```\n\n\n:::\n:::\n\n\n## Change the LFC threshold {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\ndiff_lfc_sig <-\n mutate(\n diff_lfc,\n sig = case_when(\n padj < 0.01 ~ \"yes\",\n .default = \"no\"\n )\n ) |>\n drop_na()\n\n\n# look at some specific genes\n\ndiff_lfc_sig |>\n filter(\n gene %in%\n c(\"Bdnf\", \"Dlg4\", \"Klf4\", \"Sox2\")\n ) |>\n gt()\n```\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n \n \n
ensembl_gene_idlog2FoldChangepadjgenesig
ENSMUSG00000003032-2.3441414.559786e-09Klf4yes
ENSMUSG000000208863.3392652.017800e-45Dlg4yes
ENSMUSG000000484821.7104104.871606e-01Bdnfno
ENSMUSG00000074637-2.1695724.986817e-13Sox2yes
\n
\n```\n\n:::\n:::\n\n\n## Filtered Volcano {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n diff_lfc_sig,\n aes(\n x = log2FoldChange,\n y = -log10(padj),\n color = sig\n )\n) +\n geom_point(alpha = 0.2) +\n labs(\n x = \"DIV7 expression / DIV0 expression, log2\",\n y = \"-log10(FDR)\"\n ) +\n scale_color_manual(\n values = c(\"black\", \"red\"),\n labels = c(\"NS\", \"FDR < 0.01\"),\n name = \"\"\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-2-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## Plotting the expression of single genes {.smaller}\n\nSometimes we will have particular marker genes that we might want to highlight to give confidence that the experiment worked as expected. We can plot the expression of these genes in each replicate. Let's plot the expression of two pluripotency genes (which we expect to decrease) and two neuronal genes (which we expect to increase).\n\nSo what is the value that we would plot? We could use the 'normalized counts' value provided by `DESeq2`. However, remember there is not length calculation so it is difficult to compare accross genes.\n\nA more interpretable value to plot might be TPM, since TPM is length-normalized. Let's say a gene was expressed at 500 TPM. Right off the bat, I know generally what kind of expression that reflects (pretty high).\n\n\n::: {.cell}\n\n:::\n\n\n## Get TPMs {.smaller}\n\nLet's plot the expression of Klf4, Sox2, Bdnf, and Dlg4 in our samples.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\ntpms <- txi$abundance |>\n as.data.frame() |>\n rownames_to_column(var = \"ensembl_gene_id\") |>\n as_tibble() |>\n inner_join(gene_name_map) |>\n rename(gene = external_gene_name) |>\n # Filter for genes we are interested in\n filter(gene %in% c(\"Klf4\", \"Sox2\", \"Bdnf\", \"Dlg4\")) |>\n pivot_longer(-c(ensembl_gene_id, gene)) |>\n separate_wider_delim(\n col = name,\n delim = \".\",\n names = c(\"condition\", \"rep\")\n )\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nJoining with `by = join_by(ensembl_gene_id)`\n```\n\n\n:::\n\n```{.r .cell-code}\ngt(tpms)\n```\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n\n\n\n\n \n \n \n
ensembl_gene_idgeneconditionrepvalue
ENSMUSG00000003032Klf4DIV0Rep140.022629
ENSMUSG00000003032Klf4DIV0Rep246.241797
ENSMUSG00000003032Klf4DIV0Rep357.374566
ENSMUSG00000003032Klf4DIV7Rep19.063035
ENSMUSG00000003032Klf4DIV7Rep29.208364
ENSMUSG00000003032Klf4DIV7Rep39.715119
ENSMUSG00000003032Klf4DIV7Rep48.817037
ENSMUSG00000020886Dlg4DIV0Rep118.752921
ENSMUSG00000020886Dlg4DIV0Rep215.749749
ENSMUSG00000020886Dlg4DIV0Rep312.212636
ENSMUSG00000020886Dlg4DIV7Rep1151.558403
ENSMUSG00000020886Dlg4DIV7Rep2156.043098
ENSMUSG00000020886Dlg4DIV7Rep3153.269475
ENSMUSG00000020886Dlg4DIV7Rep4153.538436
ENSMUSG00000048482BdnfDIV0Rep12.456452
ENSMUSG00000048482BdnfDIV0Rep22.401157
ENSMUSG00000048482BdnfDIV0Rep32.351342
ENSMUSG00000048482BdnfDIV7Rep17.799981
ENSMUSG00000048482BdnfDIV7Rep27.762255
ENSMUSG00000048482BdnfDIV7Rep37.638515
ENSMUSG00000048482BdnfDIV7Rep47.433529
ENSMUSG00000074637Sox2DIV0Rep1131.032132
ENSMUSG00000074637Sox2DIV0Rep2120.433905
ENSMUSG00000074637Sox2DIV0Rep3110.664468
ENSMUSG00000074637Sox2DIV7Rep124.484942
ENSMUSG00000074637Sox2DIV7Rep226.080394
ENSMUSG00000074637Sox2DIV7Rep327.106054
ENSMUSG00000074637Sox2DIV7Rep426.995461
\n
\n```\n\n:::\n:::\n\n\n## Now plot {.smaller}\n\n\n::: {.cell output-location='column-fragment'}\n\n```{.r .cell-code}\nggplot(\n tpms,\n aes(\n x = condition,\n y = value,\n color = condition\n )\n) +\n geom_jitter(size = 2, width = .25) +\n labs(\n x = \"\",\n y = \"TPM\"\n ) +\n theme_cowplot() +\n scale_color_manual(values = c(\"blue\", \"red\")) +\n facet_wrap(~gene, scales = \"free_y\")\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-tpms-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## How about pathways? {.smaller}\n\nSay that instead of plotting individual genes we wanted to ask whether a whole class of genes are going up or down. We can do that by retrieving all genes that belong to a particular gene ontology term.\n\nThere are three classes of genes we will look at here:\n\n- Maintenance of pluripotency (GO:0019827)\n- Positive regulation of the cell cycle (GO:0045787)\n- Neuronal differentitaion (GO:0030182)\n\n## Retrieve pathway information {.smaller}\n\nWe can use `biomaRt` to get all genes that belong to each of these categories. Think of it like doing a gene ontology enrichment analysis in reverse.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npluripotencygenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0019827\"),\n mart = mart\n)\n\ncellcyclegenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0045787\"),\n mart = mart\n)\n\nneurongenes <- getBM(\n attributes = c(\"ensembl_gene_id\"),\n filters = c(\"go_parent_term\"),\n values = c(\"GO:0030182\"),\n mart = mart\n)\n\n\n# pathway <- bind_rows(pluripotencygenes,\n# cellcyclegenes,\n# neurongenes\n# )\n#\n# pathway$path <- c(\n# rep(\"pluri\",nrow(pluripotencygenes)),\n# rep(\"cellcycle\",nrow(cellcyclegenes)),\n# rep(\"neuron\",nrow(neurongenes))\n# )\n#\n# write_csv(x = pathway, file = here(\"data\",\"block-rna\",\"pathwaygenes.csv.gz\"))\n```\n:::\n\n\n## Add pathway information to results {.smaller}\n\nYou can see that these items are one-column dataframes that have the column name 'ensembl_gene_id'. We can now go through our results dataframe and add an annotation column that marks whether the gene is in any of these categories.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndiff_paths <-\n diff_lfc |>\n mutate(\n annot = case_when(\n ensembl_gene_id %in% pluripotencygenes$ensembl_gene_id ~ \"pluripotency\",\n ensembl_gene_id %in% cellcyclegenes$ensembl_gene_id ~ \"cellcycle\",\n ensembl_gene_id %in% neurongenes$ensembl_gene_id ~ \"neurondiff\",\n .default = \"none\"\n ),\n # Reorder these for plotting purposes\n annot = factor(\n annot,\n levels = c(\"none\", \"cellcycle\", \"pluripotency\", \"neurondiff\")\n )\n ) |>\n drop_na()\n```\n:::\n\n\n## Are there significant differences? {.smaller}\n\nOK we've got our table, now we are going to ask if the log2FoldChange values for the genes in each of these classes are different that what we would expect. So what is the expected value? Well, we have a distribution of log2 fold changes for all the genes that are **not** in any of these categories. So we will ask if the distribution of log2 fold changes for each gene category is different than that null distribution.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npvals <- rstatix::wilcox_test(\n data = diff_paths,\n log2FoldChange ~ annot,\n ref.group = \"none\"\n)\n\np.pluripotency <- pvals |>\n filter(group2 == \"pluripotency\") |>\n pull(p.adj)\n\np.cellcycle <- pvals |>\n filter(group2 == \"cellcycle\") |>\n pull(p.adj)\n\np.neurondiff <- pvals |>\n filter(group2 == \"neurondiff\") |>\n pull(p.adj)\n```\n:::\n\n\n## plot pathway differences {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\nggplot(\n diff_paths,\n aes(\n x = annot,\n y = log2FoldChange,\n fill = annot\n )\n) +\n labs(\n x = \"Gene class\",\n y = \"DIV7/DIV0, log2\"\n ) +\n geom_hline(\n yintercept = 0,\n color = \"gray\",\n linetype = \"dashed\"\n ) +\n geom_boxplot(\n notch = TRUE,\n outlier.shape = NA\n ) +\n theme_cowplot() +\n scale_fill_manual(values = c(\"gray\", \"red\", \"blue\", \"purple\"), guide = F) +\n scale_x_discrete(\n labels = c(\n \"none\",\n \"Cell cycle\",\n \"Pluripotency\",\n \"Neuron\\ndifferentiation\"\n )\n ) +\n ylim(-5, 7) +\n # hacky significance bars\n annotate(\"segment\", x = 1, xend = 2, y = 4, yend = 4) +\n annotate(\"segment\", x = 1, xend = 3, y = 5, yend = 5) +\n annotate(\"segment\", x = 1, xend = 4, y = 6, yend = 6) +\n annotate(\"text\", x = 1.5, y = 4.4, label = paste0(\"p = \", p.cellcycle)) +\n annotate(\"text\", x = 2, y = 5.4, label = paste0(\"p = \", p.pluripotency)) +\n annotate(\"text\", x = 2.5, y = 6.4, label = paste0(\"p = \", p.neurondiff))\n```\n\n::: {.cell-output-display}\n![](slides-24_files/figure-revealjs/plot-diff-results-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## What if we want to look at pathways in an unbiased way? {.smaller}\n\nWe will use Gene Set Enrichment Analysis (GSEA) to determine if pre-defined gene sets (pathways, GO terms, experimentally defined genes) are coordinately up-regulated or down-regulated between the two conditions you are comparing. To run gsea you need 2 things. 1. You list of expressed genes ranked by fold change. 2. Pre-defined gene sets. See [MSigDb](https://www.gsea-msigdb.org/gsea/msigdb/index.jsp)\n\n![](/img/block-rna/gsea_overview.png)\n\nPMID: 12808457, 16199517\n\n## GSEA examples {.smaller}\nTop = upregulated\n\n![](/img/block-rna/gsea_examples.png){width=\"3in\"}\n\nBottom = downregulated\n\n## Prep GSEA {.smaller}\n\n1. We need to make a list of all genes and their LFC.\n\n2. We need to find interesting gene sets.\n\n3. Run GSEA\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# retrieve hallmark gene sets from msigdb\nmouse_hallmark <- msigdbr(species = \"Mus musculus\") |>\n filter(gs_collection == \"H\") |> # \"H\" is hallmark\n select(gs_name, gene_symbol)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nUsing human MSigDB with ortholog mapping to mouse. Use `db_species = \"MM\"` for mouse-native gene sets.\nThis message is displayed once per session.\n```\n\n\n:::\n\n```{.r .cell-code}\n# create a list of gene LFCs\nrankedgenes <- diff_lfc |> pull(log2FoldChange)\n\n# add symbols as names of the list\nnames(rankedgenes) <- diff$gene\n\n# sort by LFC\nrankedgenes <- sort(rankedgenes, decreasing = TRUE)\n\n# deduplicate\nrankedgenes <- rankedgenes[!duplicated(names(rankedgenes))]\n```\n:::\n\n\n## Run GSEA {.smaller}\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# rankedgenes[!names(rankedgenes) == \"\"]\n\n# run gsea\ndiv7vs0 <- GSEA(\n geneList = rankedgenes,\n eps = 0,\n pAdjustMethod = \"fdr\",\n pvalueCutoff = .05,\n minGSSize = 20,\n maxGSSize = 1000,\n TERM2GENE = mouse_hallmark\n)\n\ndiv7vs0@result |>\n dplyr::select(ID, NES, p.adjust) |>\n gt()\n```\n:::\n\n\n## Plot GSEA {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# plot \"HALLMARK_G2M_CHECKPOINT\"\ngseaplot(x = div7vs0, geneSetID = \"HALLMARK_G2M_CHECKPOINT\")\n```\n:::\n\n", "supporting": [ "slides-24_files" ], diff --git a/_freeze/slides/slides-24/figure-revealjs/plot-tpms-1.png b/_freeze/slides/slides-24/figure-revealjs/plot-tpms-1.png index db243d1656c624ac1d288f1ff94ccf43cb5809e4..0580df88f213f16051032c590346ab89b2fb8223 100644 GIT binary patch literal 94307 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 R5KDHS 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 F`agD1@t*(y diff --git a/_freeze/slides/slides-25/execute-results/html.json b/_freeze/slides/slides-25/execute-results/html.json new file mode 100644 index 00000000..a7dbb810 --- /dev/null +++ b/_freeze/slides/slides-25/execute-results/html.json @@ -0,0 +1,21 @@ +{ + "hash": "11d9387e15c9be40282685cbbedd4406", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Alternative splicing\"\nauthor: \"{{< var instructor.block.rna >}}\"\n---\n\n\n\n## Overview {.smaller}\n\nIn this lecture, we are going focus on analyzing the regulation of alternative splicing using RNAseq approaches.As we learned last week, `salmon` quantifies a fastq file of sequencing reads against a fasta file of all transcripts present in the sample. At the end of this analysis, we end up with quantifications for each transcript in our fasta file. However, for splicing you may be able to see how this strategy may need to be tweaked. `salmon` gave us transcript-level data, but for looking at splicing, we often want to measure how the inclusion of individual **exons** within transcripts differs between conditions. Thus, transcript-level quantifications are not directly useful here.\n\n> Small aside: Actually, transcript level quantifications could work, because you could ask how the relative abundances of two different transcripts (one that has the exon in question and one that doesn't) vary across conditions. See also `suppa2`.\n\n## Split alignments {.smaller}\n\nWe need exon-level quantifications. So we want to count reads that either support the inclusion or exclusion of an exon.\n\nBelow are examples of some RNAseq reads mapped along a transcript. This transcript contains exons (yellow) and introns (gray). Let's say that there are two isoforms of this gene: one where `exon2` is included and one where it is exlcuded. Reads have been \"aligned\" to this transcript to give a graphical representation of where they came from. You can see that the orange, purple, blue, and teal reads all *support* the inclusion of `exon2`.\n\n![Kim et al, Nat Methods, 2015](/img/block-rna/junc_read.png)\n\n## Split alignments {.smaller}\n\nAnother way to think about this is that the orange, purple, blue, and teal reads came from RNA molecules in which the transcript was included.\n\nWe know this because each of those reads cross a **splice junction** that is either `exon1-exon2` or `exon2-exon3`. These reads tell us, **unambiguously**, that `exon2` was included in the RNA molecule that these reads came from.\n\n![Kim et al, Nat Methods, 2015](/img/block-rna/junc_read.png)\n\n> What does the red read tell us? What would a read that unambiguously told us that exon2 was *excluded* look like?\n\n## Strategy in action {.smaller}\n\nExample of reads mapped to the area surrounding an alternative exon (the middle exon). The height of the red and blue area corresponds to the number of read coverage. The red and blue lines connecting exons represent the number of reads that span that junction. So for the blue condition, there are 347 reads (91 + 256) that support the inclusion of this exon, while 81 reads support its exclusion. In the red condition, this exon is less often excluded as 296 reads (65 + 231) support its inclusion while 130 support its exclusion. *Think about how often an exon was included in a sample as a ratio between the inclusion- and exclusion-supporting reads*.\n\n![](/img/block-rna/sashimi.png){width=50%}\n\n## Workflow {.smaller}\n\nWe will focus on the right side of the flowchart that relies on [`STAR`](https://github.com/alexdobin/STAR), a splice-aware read aligner, and [`rMATS`](https://rnaseq-mats.sourceforge.io/), an alternative splicing analysis tool.\n\n![](/img/block-rna/flowchart.png)\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\nSTAR begins by finding matches (either unique or nonunique) between a portion of a read and the reference. This matching region of the query is extended along the reference until the two start to disagree. If this match extends all the way through to the end of the read, then the read lies completely within one exon (or intron, or I guess intergenic region if you are bad at making RNAseq libraries) and we are done. If the match ends before the end of the read, the part that has matched so far defines one *seed*.\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/seed1.png)\n\n:::\n:::\n\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\nSTAR then takes the rest of the query and uses it to find the best match to its sequence in the reference, defining another seed.\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/seed2.png)\n\n:::\n:::\n\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\nIf, during the extension of a match a small region of mismatch or discontinuity occurs, these can be identified as mutations or indels if high-quality matches between the query and reference resume later in the read.\n\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/indel.png){width=50% height=100%}\n\n:::\n:::\n\n\n## How STAR works {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\nAfter aligning seeds, they can be stitched together. The stitching of seeds with high alignment quality (low number of indels, mismatches) is prefered over the stitching of seeds with low alignment quality (high number of indels, mismatches).\n\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/stitch.png)\n\n:::\n:::\n\n## Running STAR {.smaller}\n\nTo align reads, we first need to create an **index** of the genome (see STAR manual [here](https://physiology.med.cornell.edu/faculty/skrabanek/lab/angsd/lecture_notes/STARmanual.pdf). To do this, `STAR` will require the sequence of the genome (in fasta format), and an annotation that tells it where exons and introns are. It needs the annotation to be able to see if seeds that it stitches together make sense with what we know about exon/intron structures that exist in the transcriptome. Let's take a look at one of these genome annotation files.\n\n\n## Annotation files {.smaller}\n\nThe most common annotation files are `GTF` and `GFF` files. Here's an example of a `GFF`.\n\n![](/img/block-rna/gff.png)\n\nEach line corresponds to one feature. This is a tab-delimited text file. There are only a few columns that we care about:\n\n* Column 1: chromosome\n* Column 2: source\n* Column 3: feature type\n* Column 4: feature start\n* Column 5: feature end\n* Column 7: strand (you aren't in DNA land anymore...strand matters)\n\n\n## Annotation files {.smaller}\n\n![](/img/block-rna/gff.png)\n\nColumn 8 contains various information about the feature. Perhaps the most important one tells you about the hierarchy that defines the relationship between features. For example, genes contain *children* transcripts within them, and each transcript contains *children* exons. Transcripts will therefore belong to *parent* genes and exons will belong to *parent* transcripts. Biologically, this should make sense to you. These relationships are indicated by the **Parent** attribute within column 8.\n\n## Make STAR index {.smaller}\n\nOK now we are ready to make our index. There relevant options we will need to pay attention to when doing this are shown below:\n\n* **--runMode** genomeGenerate (we are making an index, not aligning reads)\n* **--genomeDir** /path/to/genomeDir (where you want STAR to put this index we are making)\n* **--genomeFastaFiles** /path/to/genomesequence (genome sequence as fasta, either one file or multiple)\n* **--sjdbGTFfile** /path/to/annotations.gff (yes it says gtf, but we are going to use a gff format)\n* **--sjdbOverhang** 100 (100 will usually be a good value here, the recommended value is readLength - 1)\n* **--sjdbGTFtagExonParentTranscript** Parent (we have to specify this because we are using a gff annotation and this is how gff files denote relationships)\n* **--genomeSAindexNbases** 11 (don't worry about this one, we are specifying it because we are using an artificially small genome in this example)\n\n## Make STAR index {.smaller}\n\n>STAR --runMode genomeGenerate\n --genomeDir {path-to}/mySTARindex\n --genomeFastaFiles {path-to}/genome.fasta\n --sjdbGTFfile {path-to}/MOLB7950.gff3\n --sjdbOverhang 100\n --sjdbGTFtagExonParentTranscript Parent\n --genomeSAindexNbases 11\n\n![](/img/block-rna/star_index_out.png)\n\n## STAR: align reads {.smaller}\n\nNow that we have our index we are ready to align our reads. The options we need to pay attention to here are:\n\n* **--runMode** alignReads (we are aligning this time)\n* **--genomeDir** /path/to/genomeDir (a path to the index we made in the previous step)\n* **--readFilesIn** /path/to/forwardreads /path/to/reversereads (paths to our fastqs, separated by a space)\n* **--readFilesCommand** gunzip -c (our reads our gzipped so we need to tell STAR how to read them)\n* **--outFileNamePrefix** path/to/outputdir (where to put the results)\n* **--outSAMtype** BAM SortedByCoordinate (the format of the alignment output, more on this later)\n\nNow we are ready to align our reads.\n\n## STAR: align reads {.smaller}\n\n> STAR --runMode alignReads\n --genomeDir {path-to}/mySTARindex/\n --readFilesIn {path-to}/MOLB7950_1.fastq.gz {path-to}/MOLB7950_2.fastq.gz\n --readFilesCommand gunzip -c\n --outFileNamePrefix {path-to}/myalignments\n --outSAMtype BAM SortedByCoordinate\n\n![](/img/block-rna/read_align_status.png)\n\n\n## Mapping stats produced by STAR {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\nWell so how did it go? Check the log file. We can see that we put in almost 100k read pairs and 96.7k of these could be uniquely assigned to a single genomic position. 95.6k of these had a splice junction. This is expected for paired end reads against a genome with many introns and short exons.\n\nAs an aside, any read that aligns more times than is allowed by the flag **--outFilterMultimapNmax** is not reported in the alignments. As a default, this value is set to 10. Libraries that are made from low complexity RNA samples and those that deal with repetitive genomic regions can be sensitive to this. Also, if you wanted to, you can use this flag to restrict your alignment file to those that only *uniquely* aligned by setting this value to 1.\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/star_out.png)\n\n:::\n:::\n\n## Investigating alignment files {.smaller}\n\nOur alignment output file is `dummyAligned.sortedByCoord.out.bam`. `BAM` files are binary files and need to be converted to plain text using `samtools view` for us to read it.\n\n> samtools view dummyAligned.sortedByCoord.out.bam > dummyAligned.sam\n\n## Alignments {.smaller}\n\nSAM files can be a little confusing, but it's worth taking the time to get to know them. The full SAM format specification can be found [here](https://samtools.github.io/hts-specs/SAMv1.pdf).\n\nLet's take a look at our SAM file and see what we see. I'm going to pick 2 lines out.\n\n![](/img/block-rna/sam_example.png)\n\nHere we are looking at 2 lines from this file. These two lines correspond to two paired reads. I know that because the first field in this file is the read ID as it came off the sequencer. You can see that these two reads have the same ID (it's the thing I grepped for).\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **second** field is a bitwise flag. It is a sum of integers where each integer tells us something about the read. Every possible value of this flag is a unique combination of the informative integers. You can see what each of these integers are and what they mean in the [SAM format specification](https://samtools.github.io/hts-specs/SAMv1.pdf). There is also a handy calculator that you can plug your value into and it will tell you what your flag means [here](https://www.samformat.info/sam-format-flag). If we put our first flag, 163, in there it tell us that this read is:\n\n* The second read in a mate pair (128)\n* On the opposite strand of its mate pair (32)\n* Is mapped and properly paired (2)\n* Is paired (1)\n\nIf you put the flag value for the second read into the calculator, what do you get?\n\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **third** field is obviously the reference name. No big mystery there. This read maps to chromosome 19.\n\nThe **fourth** field is the position on the reference that corresponds to the beginning of the query. This read starts to map to chr19 beginning at position 3371611. As a aside, positions reported in SAM files are 1-based, not 0-based.\n\n## Alignments {.smaller}\n\n![](/img/block-rna/sam_example.png)\n\nThe **sixth** field is called the CIGAR string. This is a string of characters that tells you a little bit about *how* the query aligns to the reference. Again, details can be found in the [SAM format specification](https://samtools.github.io/hts-specs/SAMv1.pdf). The CIGAR string for the first read can be interpreted as follows:\n\n* The first 67 bases in the query align to the reference.\n* There is then a gap in the reference of 3415 nt.\n* Then the query starts to match again, and does so for the next 84 nt.\n\nThese are paired end 151 nt reads, so it makes sense that 67 + 84 = 151.\n\nIn not so shocking news, the top read's mate (the second read) also has a gap in the reference of 3415 nt. As you might have guessed, these reads are spanning the same intron, which you would expect reads from the same mate pair to do.\n\n## Alignments {.smaller}\n\nThe **ninth** field is the *template length*, abbreviated TLEN. This is the distance, in nt, from the beginning of one read in a pair to the end of it's mate.\n\n![](/img/block-rna/tlen.png)\n\nIf you know a little bit about how RNAseq libraries are made, you might know that transcripts are fragmented, usually to lengths of 200-500 nt. Given that this read is stretching over 3 kb along the reference sequence, it's a good bet that it is spanning an intron that is present in the reference but had been removed in the RNA molecule i.e. it was spliced out!\n\n## Workflow {.smaller}\n\nNow that we have aligned with `STAR`, we can calculate exon inclusion with `rMATS`. As is often the case with bioinformatic tools, `rMATS` is not the only tool that you can use to look at alternative splicing, but it has been around for a while and has been thoroughly tested.\n\n![](/img/block-rna/flowchart.png)\n\n## PSI ($\\psi$) values {.smaller}\n\nIn many scenarios, splicing is quantified using a metric called PSI (Percent Spliced In), often shown as the greek letter $\\psi$, is a metric that asks what fraction of transcripts *contain* the exon or RNA sequence in question. Thus, $\\psi$ values range from 0 (which would indicate that the exon is never included) to 1 (which would indicate that the exon is always included). $\\psi$ can be estimated by counting the number of reads that unambiguously support the inclusion of the exon and the number of reads that unambiguously support exclusion of the exon.\n\nFor skipped \"cassette\" exons, these reads are diagrammed below:\n\n![Shen et al, (2014). PNAS](/img/block-rna/sepsi.jpg)\n\n## PSI ($\\psi$) values {.smaller}\n\nIn this diagram, the exon in gray can either be included or skipped to produced two different transcript isoforms. Reads in red (I for inclusion) unambiguously argue for the inclusion of the exon while reads in green (S for skipping) unambiguously argue for skipping of the exon. Keep in mind that the reads drawn over splice junctions indicate the the read spans the splice junction.\n\n\n![Shen et al, (2014). PNAS](/img/block-rna/sepsi.jpg)\n\n> Note: Red reads that do not cross a junction but lie totally within the gray exon are often used in splicing analysis, but do not formally unambiguously show exon inclusion. It is safer to rely **only** on splice-junction spanning reads for splicing quantitation. The downside of this is that you will lose read counts that came from non-junction reads. Fewer read counts means less statistical power.\n\n## Types of alternative splicing {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n![Shen et al, (2014). PNAS](/img/block-rna/astypes_1.png)\n\n:::\n::: {.column width=\"50%\"}\nThere are other types of alternative splicing besides skipped exons. In each case, $\\psi$ is defined as the fraction of transcript in which the white sequence is included.\n\nSince we have already determined where in the genome RNAseq reads came from using `STAR`, we will now use `rMATS` to take those locations and combine it with information about the locations of alternative exons to quantify the inclusion of each alternative exon.\n:::\n:::\n\n## Running rMATS {.smaller}\n\nTo quantify alternative splicing, `rMATS` needs two things: the locations of the reads in the genome (bam files) and the locations of alternative exons in the genome (GTF annotation file).\n\n> Note: You may remember that when we ran STAR, we used a different type of genome annotaiton file: GFF. GTFs and GFFs contain essentially the same information and it is possible to interconvert between the two. I chose to introduce you to GFFs because, to my mind, they are more intuitive to and readable by humans. STAR could handle both GTF and GFF formats. rMATS requires GTFs.\n\nHere are the most relevant options when running `rMATS`. See the documentation [here](https://github.com/Xinglab/rmats-turbo/blob/v4.1.0/README.md).\n\n* **--b1** /path/to/b1.txt (path to a text file that contains paths to all BAM files for samples in condition 1)\n* **--b2** /path/to/b2.txt (path to a text file that contains paths to all BAM files for samples in condition 2)\n* **--gtf** /path/to/gtf (path to the gtf genome annotation)\n* **-t** readtype (single or paired)\n* **--readlength** readlength\n* **--od** /path/to/output (output directory)\n\n## Looking at rMATS output {.smaller}\n\nIn this example, the authors were interested in the splicing regulatory activity of the RNA-binding protein RBFOX2. They sequenced RNA from cells that had been treated with either shRNA against RBFOX2 or a control, non-targeting shRNA. Each condition was performed in quadruplicate, meaning we have 4 replicates for each condition. I downloaded their data, aligned it against the mouse genome using `STAR`, and then quantified alternative splicing using `rMATS`.\n\nWe won't run `rMATS` here because we would need multiple large bam files to do anything meaningful, and honestly, it's just copying things from the documentation and putting them into the command line. What we will do though, is look at the output produced by `rMATS`.\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"50%\"}\n\n\nYou can see that there are many files here, and that each type of alternative splicing (A3SS, A5SS, MXE, RI, and SE) has files associated with it. Specifically each event type has 2 files: one that ends in 'JC.txt' and one that ends in 'JCEC.txt'. The 'JC.txt' files only use reads that cross splice junctions to quantify splicing (JC = junction counts) while the 'JCEC.txt' files use both junction reads *and* reads that map to the alternative exon (EC = exon counts). We are going to use the files ending in `*JC.txt`.\n\n:::\n::: {.column width=\"50%\"}\n\n![](/img/block-rna/rmats_dir.png)\n\n:::\n:::\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"40%\"}\n\nIf we look at `SE.MATS.JC.txt` file the column names are at the top. Let's go through some of the more important columns:\n\n* **ID** A unique identifier for this event.\n* **chr** chromosome\n* **strand** strand (+ or -)\n* **exonStart_0base** the coordinate of the beginning of the alternative exon (using 0-based coordinates)\n* **exonEnd** the coordinate of the end of the alternative exon\n\n:::\n::: {.column width=\"60%\"}\n\n![](/img/block-rna/rmats_out.png)\n\n\n:::\n:::\n\n\n## rMATS output {.smaller}\n\n::: columns\n::: {.column width=\"40%\"}\n\n* **upstreamES** the coordinate of the beginning of the exon immediately upstream of the alternative exon\n* **upstreamEE** the coordinate of the end of the exon immediately upstream of the alternative exon\n* **downstreamES** the coordinate of the beginning of the exon immediately downstream of the alternative exon\n* **downstreamEE** the coordinate of the end of the exon immediately downstream of the alternative exon\n\n\n:::\n::: {.column width=\"60%\"}\n\n![](/img/block-rna/rmats_out.png)\n\n\n:::\n:::\n\n\n## rMATS output {.smaller}\n\nNotice that with these coordinates and the sequence of the genome, you could derive the sequences flanking each of these exons. That could be useful, perhaps, if you wanted to ask if there were short sequences (kmers) enriched near exons whose inclusion was sensitive to RBFOX2 loss versus exons whose inclusion was insensitive.\n\n* **IJC_SAMPLE_X** the number of read counts that support inclusion of the exon is sample X (four numbers, one for each replicate, each separated by a comma)\n* **SJC_SAMPLE_X** same thing, but for read counts that support the exclusion of the exon\n\n## rMATS output {.smaller}\n\nThe numbers from `[S|I]JC_SAMPLE_X ` could be useful for filtering events based on coverage. Say, for example, that we were looking at an event that when we combined IJC and SJC counts for each replicate we got something like 2,4,1,5. That would mean that in the replicates for this condition, we only had 2, 4, 1, and 5 reads that tell us anything about the status of this exon. That's pretty low, so I would argue that we really wouldn't want to consider this event at all since we don't have much confidence that we know anything about its inclusion.\n\n* **PValue** The pvalue asking if the PSI values for this event between the two conditions is statistically significantly different\n* **FDR** The p value, after it has been corrected for multiple hypothesis testing. This is the significance value you would want to filter on.\n* **IncLevel1** PSI values for the replicates in condition 1 (in this case, condition 1 is RBFOX shRNA).\n* **IncLevel2** PSI values for the replicates in condition 2 (in this case, condition 2 is Control shRNA).\n* **IncLevelDifference** Difference in PSI values between conditions (Condition 1 - Condition 2).\n\n\n## rMATS output {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\npsis <-\n read_tsv(\n here(\"data/block-rna/rMATS/SE.MATS.JC.txt.gz\"),\n ) |>\n # Select only the columns we care about\n dplyr::select(\n c(\n ID = ID...1,\n geneSymbol,\n contains(\"SAMPLE\"),\n FDR,\n starts_with(\"Inc\")\n )\n )\n\npsis\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 12,134 × 11\n ID geneSymbol IJC_SAMPLE_1 SJC_SAMPLE_1 IJC_SAMPLE_2\n \n 1 5 Neil1 12,6,9,5 0,0,0,0 10,8,14,0 \n 2 6 Wrap53 44,34,40,22 3,0,0,0 29,13,19,15 \n 3 9 Zfp28 3,0,0,4 0,0,0,0 2,0,0,0 \n 4 11 Pik3cd 18,5,1,3 0,0,0,0 3,7,10,2 \n 5 17 Cd81 348,210,261,2… 0,0,0,0 231,166,135…\n 6 21 Smarca4 136,107,135,78 0,0,1,0 107,132,95,…\n 7 22 Smarca4 8,0,0,8 148,93,102,… 1,0,0,4 \n 8 26 Map7d1 3,1,11,10 9,3,26,8 8,14,7,23 \n 9 27 Map7d1 3,1,7,7 0,0,2,0 8,16,5,19 \n10 28 Ubxn2a 62,70,49,38 1,4,4,0 51,54,52,20 \n# ℹ 12,124 more rows\n# ℹ 6 more variables: SJC_SAMPLE_2 , FDR ,\n# IncFormLen , IncLevel1 , IncLevel2 ,\n# IncLevelDifference \n```\n\n\n:::\n:::\n\n\nWe will only consider events where there are *at least* 20 informative reads that tell us about the inclusion of the exon `IJC + SJC > 20` in **every replicate**. For example, for event '5' (gene Neil1) above, Sample 1 replicates have 12, 6, 9, and 5 reads while Sample 2 replicates have 10, 8, 14, and 0 reads. I would want to require that all of 12, 6, 9, 5, 10, 8, 14, and 0 are greater than 20 in order to worry about this event. Otherwise, I conclude that we don't have enough data to accurately conclude anything about this event.\n\n## tidy rMATS output {.smaller}\n\n\n::: {.cell}\n\n```{.r .cell-code}\npsis <- psis |>\n separate_wider_delim(\n cols = c(IJC_SAMPLE_1, SJC_SAMPLE_1, IJC_SAMPLE_2, SJC_SAMPLE_2),\n delim = \",\",\n names_sep = \"\",\n too_few = \"align_start\"\n ) |>\n rename_with(\n \\(x) {\n case_when(\n str_detect(x, \"IJC_SAMPLE_1_(\\\\d+)\") ~\n str_replace(x, \"IJC_SAMPLE_1_(\\\\d+)\", \"IJC_S1R\\\\1\"),\n str_detect(x, \"SJC_SAMPLE_1_(\\\\d+)\") ~\n str_replace(x, \"SJC_SAMPLE_1_(\\\\d+)\", \"SJC_S1R\\\\1\"),\n str_detect(x, \"IJC_SAMPLE_2_(\\\\d+)\") ~\n str_replace(x, \"IJC_SAMPLE_2_(\\\\d+)\", \"IJC_S2R\\\\1\"),\n str_detect(x, \"SJC_SAMPLE_2_(\\\\d+)\") ~\n str_replace(x, \"SJC_SAMPLE_2_(\\\\d+)\", \"SJC_S2R\\\\1\"),\n .default = x\n )\n }\n ) |>\n # Convert to numeric\n mutate(across(starts_with(c(\"IJC_\", \"SJC_\")), as.numeric))\n\npsis\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 12,134 × 23\n ID geneSymbol IJC_SAMPLE_11 IJC_SAMPLE_12\n \n 1 5 Neil1 12 6\n 2 6 Wrap53 44 34\n 3 9 Zfp28 3 0\n 4 11 Pik3cd 18 5\n 5 17 Cd81 348 210\n 6 21 Smarca4 136 107\n 7 22 Smarca4 8 0\n 8 26 Map7d1 3 1\n 9 27 Map7d1 3 1\n10 28 Ubxn2a 62 70\n# ℹ 12,124 more rows\n# ℹ 19 more variables: IJC_SAMPLE_13 ,\n# IJC_SAMPLE_14 , SJC_SAMPLE_11 ,\n# SJC_SAMPLE_12 , SJC_SAMPLE_13 ,\n# SJC_SAMPLE_14 , IJC_SAMPLE_21 ,\n# IJC_SAMPLE_22 , IJC_SAMPLE_23 ,\n# IJC_SAMPLE_24 , SJC_SAMPLE_21 , …\n```\n\n\n:::\n:::\n\n\n\n## filter rMATS output {.smaller}\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npsis_filt <- psis |>\n mutate(\n S1R1counts = IJC_SAMPLE_11 + SJC_SAMPLE_11,\n S1R2counts = IJC_SAMPLE_12 + SJC_SAMPLE_12,\n S1R3counts = IJC_SAMPLE_13 + SJC_SAMPLE_13,\n S1R4counts = IJC_SAMPLE_14 + SJC_SAMPLE_14,\n S2R1counts = IJC_SAMPLE_21 + SJC_SAMPLE_21,\n S2R2counts = IJC_SAMPLE_22 + SJC_SAMPLE_22,\n S2R3counts = IJC_SAMPLE_23 + SJC_SAMPLE_23,\n S2R4counts = IJC_SAMPLE_24 + SJC_SAMPLE_24\n ) |>\n filter(if_all(ends_with(\"counts\"), ~ .x >= 20))\n\nhead(psis_filt)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 31\n ID geneSymbol IJC_SAMPLE_11 IJC_SAMPLE_12 IJC_SAMPLE_13\n \n1 17 Cd81 348 210 261\n2 21 Smarca4 136 107 135\n3 22 Smarca4 8 0 0\n4 28 Ubxn2a 62 70 49\n5 95 Wbp2 125 105 150\n6 98 Eme1 50 55 68\n# ℹ 26 more variables: IJC_SAMPLE_14 ,\n# SJC_SAMPLE_11 , SJC_SAMPLE_12 ,\n# SJC_SAMPLE_13 , SJC_SAMPLE_14 ,\n# IJC_SAMPLE_21 , IJC_SAMPLE_22 ,\n# IJC_SAMPLE_23 , IJC_SAMPLE_24 ,\n# SJC_SAMPLE_21 , SJC_SAMPLE_22 ,\n# SJC_SAMPLE_23 , SJC_SAMPLE_24 , FDR , …\n```\n\n\n:::\n:::\n\n\n\n## Plot distribution of PSI values {.smaller}\n\nExons whose inclusion is not regulated tend to have PSI values that are either very close to 0 or very close to 1 (i.e. these exons are pretty much always included or always skipped). Exons whose inclusion is regulated tend to have PSI values that are more evenly spread between 0 and 1. Do see this in our data?\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\npsis_filt_psi <- psis_filt |>\n separate_wider_delim(\n col = IncLevel1,\n delim = \",\",\n names = c(\"PSI_S1R1\", \"PSI_S1R2\", \"PSI_S1R3\", \"PSI_S1R4\")\n ) |>\n separate_wider_delim(\n col = IncLevel2,\n delim = \",\",\n names = c(\"PSI_S2R1\", \"PSI_S2R2\", \"PSI_S2R3\", \"PSI_S2R4\")\n ) |>\n select(contains(\"PSI\"), FDR) |>\n mutate(across(starts_with(\"PSI\"), as.numeric))\n\n# Turn data from wide format into long format for plotting purposes\npsis_filt_psi_long <- psis_filt_psi |>\n pivot_longer(\n cols = PSI_S1R1:PSI_S2R4,\n names_to = \"sample\",\n values_to = \"psi\"\n ) |>\n mutate(\n condition = if_else(str_detect(sample, \"S1\"), \"RBFOX2kd\", \"Controlkd\"),\n sig = if_else(FDR < 0.05, \"yes\", \"no\")\n )\n```\n:::\n\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# Plot\ncolors <- c(\"DarkOrange\", \"DarkViolet\")\n\nggplot(\n psis_filt_psi_long,\n aes(\n x = psi,\n linetype = condition,\n color = sig\n )\n) +\n geom_density() +\n theme_cowplot() +\n facet_wrap(\n ~sig,\n scales = \"free_y\",\n nrow = 2\n ) +\n scale_color_manual(values = colors)\n```\n\n::: {.cell-output-display}\n![](slides-25_files/figure-revealjs/plot-psis-2-1.png){width=960}\n:::\n:::\n\n\n## PCA of PSI values {.smaller}\n\nJust as we did with gene expression values, we can monitor the quality of this data using principle components analysis. We would expect that replicates within a condition would be clustered next to each other in this analysis and that PC1, the principal component along which the majority of the variance lies, would separate the conditions.\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# Make a matrix of psi values\npsis_mtx <-\n select(psis_filt_psi, -FDR) |>\n drop_na()\n\n# Use prcomp() to derive principle component coordinants of PSI values\npsi_pca <- prcomp(t(psis_mtx))\n\n# Add annotations of the conditions to the samples\npsi_pca_pc <-\n data.frame(\n psi_pca$x,\n sample = colnames(psis_mtx)\n ) |> \n mutate(\n condition = case_when(\n grepl(\"S1\", sample) ~ \"RBFOX2kd\",\n .default = \"Controlkd\"\n )\n ) \n\n\n# Get the amount of variances contained within PC1 and PC2\npsi.pca.summary <- summary(psi_pca)$importance\npc1var <- round(psi.pca.summary[2, 1] * 100, 1)\npc2var <- round(psi.pca.summary[2, 2] * 100, 1)\n\n# Plot PCA data\nggplot(\n psi_pca_pc,\n aes(\n x = PC1,\n y = PC2,\n shape = condition,\n color = condition\n )\n) +\n geom_point(size = 5) +\n scale_color_manual(values = colors) +\n labs(\n x = paste(\"PC1,\", pc1var, \"% explained var.\"),\n y = paste(\"PC2,\", pc2var, \"% explained var.\")\n ) +\n theme_cowplot()\n```\n\n::: {.cell-output-display}\n![](slides-25_files/figure-revealjs/pca-psis-1.png){fig-alt='Description of the plot - PLEASE FILL IN' width=960}\n:::\n:::\n\n\n## Heatmap of psi events\n\n\n::: {.cell output-location='slide'}\n\n```{.r .cell-code}\n# Filter only significant events\npsi_sig <- psis_filt_psi |>\n filter(FDR < 0.05) |>\n select(-FDR)\n\n# row scaled heatmap\npheatmap(\n mat = psi_sig,\n clustering_method = \"ward.D2\",\n scale = \"row\",\n show_rownames = FALSE\n)\n```\n\n::: {.cell-output-display}\n![](slides-25_files/figure-revealjs/heatmap-psis-1.png){width=960}\n:::\n:::\n\n", + "supporting": [ + "slides-25_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": { + "include-after-body": [ + "\n\n\n" + ] + }, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/slides/slides-25/figure-revealjs/heatmap-psis-1.png b/_freeze/slides/slides-25/figure-revealjs/heatmap-psis-1.png new file mode 100644 index 0000000000000000000000000000000000000000..460913da5ccfd3eeaa81a778786f8ffecf2eac1b GIT binary patch literal 85571 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 z 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Î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 IX6h38H(?2}fdBvi literal 0 HcmV?d00001 diff --git a/_freeze/slides/slides-25/figure-revealjs/pca-psis-1.png b/_freeze/slides/slides-25/figure-revealjs/pca-psis-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e774601f3cf1c2df20cd63b20f3a417513fbf53f GIT binary patch literal 82692 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 OcS+>(`NXrDuKx#pMUXiF literal 0 HcmV?d00001 diff --git a/_freeze/slides/slides-25/figure-revealjs/plot-psis-2-1.png b/_freeze/slides/slides-25/figure-revealjs/plot-psis-2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..33c330c1487de8b0922da62bcca2570696460d08 GIT binary patch literal 120148 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ⅈ&QYD-QLXood+FZf8JyZv+h#P9RsMoV# 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%0Dsj(K&CtIYzqclm#$IBFfh9qT47XX3GQ zJ@Rhr7F|GMzf3xTO2OV}f}SB5eCekz@efP$n!N0|LtnK84{>lIXSaXwk;Ta*tnriU z0TdvBq^|*`8Ko)DU`PB9UmLVI?L0q?bU1YA6PEWI`q@VQt0jTr#xJK*S29k&%fDr6 ztX}R|{A3+Ay)l1O<*?M#$DP4fC%GzKG{Id)oup!Q+FO>mgnFcvHzZDzgFi1=`*yd| zoPG1b__}6h*+7d2t91I2Yk|W!3&$YG(n3I)(NeFqW-hDUqx$NaU^A3Il z^QYVnOZtnapPdXWcb8!TP3}KNmJ8l`8n2Px(lwIOSW*JLAbRVe?f0fz91B1D@yQD& zy{<5IKFcSpjm&))nP#gNf_HMPL<&G;#*g5Cz<=^hf7;!MBT!>Gl^}VuMqkJ)GH4+ z$GuQZI&YlL;dKkI+G06_R*7xSM_+NiC8`jK_SNz1vegc|!SgcygYT!OtK44%pSo!Z zT6AYLYFbCR6Y}j}*DIki*`%}5W20)Zh3#>knmRq-gQtP~FqhG!pK#8i7vk`vt?#xW za&pc|qEw#ZRC&wO2+T{Uv7X|O?T){%+F7N3e7T32d#!uU!&rJj06Fzi3o-QAN2~<# zF0;+Df5ISVBh9DuZmhd#C3JthJKp?`;pv>~%4eQb_2ZY?zW@Hbvp-GFU*J&UUdqIR zfG1jX%q|)!#NI}JSdtsijsq(QC5-hI|KbOHjKpGf9sW+H4IPnzKd;9DsOh14;8&9^Xp@Upsnfpn}AdKzN8 zNkH?*j!)G$&c7b9?hvffTJ1bTmhl|li)G1|L#filj>(cA*i7{+%?$z=q$Fb!1z>-o zd(M~Cf9_kv1F%73I;$M8zqSI2P!sJg=VLj~%&z?8DACkh9AePgYr9Sx@>T&Pvv;+N zm9er-iKjmLc0K9t4pnbHT6s;RdBS?oOyWez--|l?hR)z3FF5U_l?!6T!G3YZ5|uST z17I-Wm`O~J$YVwwkA#xJ3rIfIYd2>gBKJ<2`feE3Jo*@H?H=r}V?{-%35_yL2B(-y zP5J`#LDll-07u+T*>h{LHzo%z#LhEmlyLKRO*d^f2ybyZT2z+>o+9hSd~npt^Wo3( z{yNOrONikqkQ@=jme=0hHFe&G*15cAaWr~EcvuoCV5aSzrU{wVJW3H`+;47^1PvaO z6Bv;veV1O~nkj~S6i(pWnTG(}4Gx>vc!J78CN5XD$&=*1!h-qBTI=hNWve;9=BFAS zKhF?P2+w$jt9VojroR6ZxDhBI=C-$LZGK{CC%^e+7>Fxg15d6k`Q)1`+QhX~d;(0- zUFYY;je4R3WAhQrW8A~fAH@btT2fc+XkwoLn;6fvvQMI;kt2WoNE*-jE5z%L0?r5L zs}QlIn`NB4ko&aiFb@HE;Fd;aot#d#19D>Z)(AHKX~hXa2RzJ9T9uf_UjyyD1P0zf zr}Ju7?nrq`hs%H->*L!jv3k*5V;I%WrzbH}Xvk8xWPVc4E*-7-0s+{u{-@u!Bc9Z7bu#W;EBO5^^}w?{ z+MTso`0I^hCf9H8Fd;fa1dzz)3d?)I8&^ThokdHa};lJUxA`f4V3^+V@pC3LcP(QgD2{YfI-Wp&G;^ z+s;1lqn_1xlZ$izfHQQ={WqS+OEzv(h2=Q^abWDdx{&ILs&zG@tJooZ{cqnq^#SL5 zhu&P!%b{9_(IHeK>G_QYci!UDxeYiM!8?9nMQ#MT#QwalUw=K4NX&!=?^J0qQ#1V3 zwr%b=QeL%Cl6@YkIO~6@r&X9LW7?uiAtPWipTz&vVNB8h=7Ip@i^1Qoa$d-*kaEj; z|5NA4fmqN^Vrah9fRhJ#UT%Km(gH3Qvx`d3H31&Yb9Bv)OTUegrkfXBX`IccYk$2^ z99wza_FlHTwbt2-QZaG2e0=>-aA|Pa(vWXy`r7TKLfT}`*|FQsNA^82<0q-mG0I@- zcH)`;YA}fsm;zKG@G9o6jw)J*cE)5ytxDI{>v+63;OTf=I2|Wm42K3l7jVZD!GeE1 z&LZG}aDEK}=h=LuvUn`rKt{bB7~h|!wuF(SC5-tW&=Vc=5X;_8Ar&~2C9uVrGk|;0 zcx(DAl3)He2JS|o7Ke8saeu!Cn)mhebrabz%dYUMhUqe1wpRUSB;}_}SlWSk@^8PJ zXbSG6YPJRbH*3J5>6S~(tCl?8cMcw8W!Z{I3kp%Nb5Ayrj^RXpd>MD-m*n3bxNc#1 z3f4su4?tjcNT8MYD@;q&!TsT;oomQC`l&Z}OWThTmbMTpjMp~^>$qNjqqiKZ6>ffp zDYUIaC4u#}U|OVgg{Bl(*CCSIG+GR@do9rK1t#mpfCYveV05P85twPHWM{YaoieQE ztPeQ7Q64Fb1mu04pKkN4L>0B0ij17R<~(ZO?lNj?(-L4js;)=G;&H*svIR*5XDS&AuAArm|og3~bN=izq#ec))6wIA{ zudm)RMyZ~TK?ItgX~?H8FfDfJNN{FG8zcXBNPw88r+P+!a_IVh`*i(o-B-TCp_mL z#dywh=c`g@OVe&&;xbOqAx-w_3RY=Md|Qfl=ae15L1dtz>o%bzBt}1fwC<0uxz7de zfim4kt6&mp>a{>tiuuXyF;rQiC^IWd>JLA0CIpDw!!dJAQt}Wo z2r8}X8#I32R+1UBb6jZGo~FmKpOd0%L}z}Qhwhhv@3%Qv8LHyt<%Lo|1avUmbyId6 zOsKhtYf5^P_xA0Sc8}Yj*$W2ruW{2u8*aC5^10*w1p8=}mw3%XbpOu31*eI$MyMYd z_c95(H5d$BD+}Bq51;DQ2XwSID4PCAxTK&)B+NGGxGzp0|GobbdoF9YE>f9C_|;N_sjoGqbdllM^V!$R;v{{eGHf;>@crSTT#^ z&PSzj>c}~a);{~nB>I-6PZAOz7b}9^(4GVk8YAFEAR3>68sG?M&dNX|SnyELaJ5s> z&Ja+=?yxu%-viQmdNi{Zv{EnKQTAw*!tM0&o&4k#e^qVA?6Y?D^QuLuQ9OjHoX}d! zaLi7V*ToAf&V$wQmDixBG6MuXh&QtqqZ=L}2qk&>?}A|Qkgr2UGS(<=xg8TD(-pP7S4rAO z+xQ8SYf+n_C=gG4Wr;6Vw2LH*i*Wy74X& z5bVTfW@ffljrBY{;ETI(y-JfMh+4QdxhXR*PYzfxrG??&mWhfSUj;5feecx=_}+IG z**YPu_G6{Qn8wnHT=4`*3f2yR>au6)M9F^SW!2Nv9D&;SB4|4SOrqMbuwm%6?8*|D zmqV3P31UGpnAnQHl&kjnAy`AW_KKhU#1hWl<$g$g1gs6wOj*ICro5zya1n0Z)OIZ= zUD^peCjUfwe7|0!`8S6yvW7|vMR(e;jWp81a~%ANFFXn}uCw&xFZjEodyV5LKqY7e zr89Rb5zy_tLH~8h+fSUq$#Hc3B|5XhDS=9Jx%ih23aM5cvqD7H9Xvz^ zPd>y;`wn0ys4AUM1$t0~-fF~UH3B1YfV#y8=!&ncFNX;Hd|QSpns2cbc>-Rm93p7V z?MyWF@uAj@6yJ*x3G zOPP&A3;T}FN81O&WN7~wR$|u$aLCd$P<6s^W>x191D8Y4#_9rFX#^6`HB8TypQu0y z`cbtcB_-_#_-lT)F*}3F)^S^)k#S+UsB7Co58W#dXDHEp050wmec$bcg4;3Iij_`< zQ`N=6!K|dhXItSGoJyR`ba!PY4y_9(j8(^UG9oR;;3^ir*dU)b0(E?j*|8s`Ki#Ca z@ut5yMt)Lkiq#vLP74n1t=F4A{3TxcZ5h9Q@?+6WI1oM(twkPf3JeexV>t^S*my-u zs7?y%s@cAk+gqUNJj$2Rp5M;;jmZ&r!Py(P6%Ggp-~{5{wH~njGZoByaE7gTuXLKa zpo5XiNz-;MM(iJT*`~80RkKwwZ9B$Ys zRRhu^f0ZsoMObCoA*yGNZo!|VWj8$EsZtHFFyR~m3atimq{NwT9$XO!+n4-J7yJ{7 zL?E7>-6i|2FA^p#Gxlb>#;@THz7L(ULkj!yv+9?vw4M?-o+3Jg;QTi^AU0a4VV}eT zV&QeAE$f--@rwwe(gzdUp?H@PY@oa=0czs)%uj2JwD;&9tAokU9VL95Wuk}9TO%|p zBk5Ar2gNKy+MtC#<929Qg&mvK*!s{@u`eaersD=edNNPofs8#rqdW^k@kaz?xL{Sp z(UUrLa0CNB$Jey;$T`C!n^g6kK+CF?s7GZhF(%Fg2RoYhwq|Yrc5w3{7@M+P@D}J$ z#^cRE%Rb>UY>!)4AKLA+o;Pg{IyZ0DO?`Z?{3KJGcfjzvb?+!RX^w@5mR1bRAIoyz zZK7Ue_1FuLl9Gz0s>{6_CE!%pw;9>rm3z~*ltc}g?wYP@srAnCsa-SPIS$05iAkg0 zZX9-z{NYhdIAnTgL+!eBWjOu`}2;;r0@~rPg7|-qA zwd+J@z{D?f1(-mP<*RSnz6-8k8=%)v33a;fGUpe5@qXPl7;vz}F?)DB&Sv5seU*wS zX~OSQ;HL3QC1Gh{v5H>0Z_)Pc+xr$));!C&K~4yK52a9_jg6&1g%Z$ZO9mFw_!3aB zrg&K7wi_N_HOjFw-Jw@z8c|D+p3NOQO2;9T85iC)T_VcO=R}`$Ojyi&`*gg(^%HQ@ z3|!;fJj;q!6aIMk)bAKM?tH=2*W-7aw?T5qe1$A3MJVQf%(Y`0RFaJ!iSjhdjnO_-x28_xKX23kL`$Z1qALD62$!Epaqf+Cw5j-1v*L$ z#qIq%yYps{k&9gu5NAf|I+GUTA;0-tFF5P3DuO8adI`JYG4asegH*0Mg|wA5Wu~waVVGY(-+KX^6t`wslF3&3PG%g$+JkYZ>V^7`}6#f$W;=B&XV{$abLGa0R)aNLMUL?xu1uMK&u za;lQ0U@%kN>2Evl@2Wm`KRRaHRX+I!{qFW+iPyw&X4Lo4saC@l_fqTqeBXH#&iy_@ zwxabcS&-Qz7T(R6eAK5oI=QbNdb1sBe=z{R2l!2nxjHsZiwD-iq0`nU(dVB?>>S{^ zvUdOtu|G($qvGI}d)B9CJMm^fXl8*h*=|+G&-mL$Z5=%#!ZbDRx5bU$0&JZN1@A=+ z%8UI(oF?tP*5MF@3_U!0Mb+|)@jE!$s}9e5^x>PAL!rD*DaSme(DLe8S?x3~ul4z- z`dxuGv!x2hsbe8ot`{LDf+NqJwVu@E(P~9>i5E>-Y%}y@Z6jH7{+0M4azvC~L>Wwc zyfHfM@J({V;9K&`T-OY>_BG~puG@F$ls1t%rL*t|$x`P0i>DNp$T2Z+dLCyt-cG6m!G0GcIg!_2LZFXT|l8@kti4-Z0;Uu@MQQJ{Qu(A@%$ zO?pr?9afbi#V?%G&q8=PkJ+4S^@967uA0I8BGsrw>m2de_>2$f^bAcY6ZRPE?j?-> zM(?0HM_ff#ywYhcTf;TJrfXx-skEJ=X72o1Cg0s9-O02fw=HV(qiqD~61Q>2aljAr zk~1=u`6mEd9rTUQs=LTc9wp2ywEKap9sTT9Rx6*kL6Wvxe2b1#liiYHQn6WT2lvsJ zN{;0pn1-biJB|W$TDEZ?efNZEM$taw;aj>SH%3ozY?-euE4s5iWv~0ta}+fF_V;`J z_0y3`;w!h@h@&;CT(;@mN{9f;@)cT&YiL%jT#9EGUep}D*2-eOuP43&x#}lApEE%) zFtkZJm@)9?%(1)%;_D$TO*fX;&oO6O{A~i7;3}G7ax|2#Fv{j5$Nuu|K1hFEnK6l6 zSDx18f*Pkj`eMPSWx`7O+Q~OVHHD@b28cNJw%`_Z1nvL2LL3Tzled3NDTSspwohtypmHRVMV`5 zGfxp0a04rxYT}b<7#iBleJ&0&#*w6=rANijB{R+H3yz4WD6{s2Df?^R&S=wJUc6}4 ze5rIAI|1?9%OuAb|N784QqHH%nyi>D{W0K3Kf38sTd9AVMXILxcBQvCuvV>bko*bP z?|UtiexB8za$Mo8aWNbZOBybF$Te}Pw+@BbCs(?Qz@&XvT+|akkF1a!$|hXTy%*~IE^`gnHcX{Gc!1~ypQp<<9w@xQC*g+* z(R8doDVHkNaIH>jZ~sJ$16-wLi|%xf4(=uiF{8mUw(W_W%{A(zA@t||Z|#h?Lccn1 zx>TUbZ@DB?78)9o`~}8xM8HL7;n8 z{-jHnm?b%8PzratZWp8yHtL$O*`3P)9) z8wF8rm`gP*Lbvx(!gj!em|_Oy8#k&QSABkKG(;v*3p1(NNcj=8UQbou3L!hSIh87F zB8lU!rR6N#|LG_o@XAS9Z64oix)zf8CFzR#j@di^!2w=B+vxi#60s3Olzwy9|Mk)Z z8QuddMB1`zXdB~f9wWrg8u6rpPnK(?sFO@TJ2y9x1%Rdl#+$WHLec_N|R^q2&0%p3X%MTkUFtF&+^@7P*L(udQ!H z9B_y3C$G4+J;Ba=rIkB~EP7<8FY7P!YA>!WnDKD+iM?r|)27RmKBIrviw=6>+o!6G zUnky+>RQ1AP5!*Kp9eon4nj@bw#Kc13CK)NZ8q z?e{`A)aj3nbp7sXA3gf~Qz+Md7FJuN*d!MW`@!5RBf=y0{XP&e{OU4oOyNMypHp%ntD`mS+ulXJcAqJ0b!It#$3p4_*ZEvbLtUP~AB&`}W%- zd4k6Ta$XDhVAv8S&{u3%a`jEt-qr03Svx9BTe&Ig`*X!o)nx9xvO&(|OF}e@(J!ZP z?f;fn|AAzk!v)cEyb@mZ*}Mb(<@psd4tlQ1R)@nX1vAE6fuTG9}23;R&_(~71wq4*cnA`S4^L;Jfc1)yV3}QZTpx2Z6q@E14ck=l z`ScMZ-Q9g_ls{}!&Ie>D$}O64;(VJdBSn9VbwvoH^UJLn5EdUDT4G6Ezn%oLgARh{ z$S!PNV~C=-_?|hlrfRl>dvW`P%h|c11ykpJP2)+Ch9h%zqU98tg&U)!*UXZ|!jWJw_G#n=dn8Be_D#FlHUmzj;o;mgb#~bB@GVd- z?4%nAKPt}57ofXq^*AF=G}dqE>1O^rw3~iIx67%g)v?(;@$k zMJ(Nyk&jm9zOg;NgU~cv6Y(`;{BJ+#LFnxHmVbLceAK%+#sJ909^r*sxUFvrLSs4E zRX{LEdp6O5Q%>;jAaxf*pMSAr%Il$F-q^rAk#CC+pK;8}rr80bdCsw84XUF7uH~e@ zsr30}e5gjc(Pp(v<4&RNvMecd)5?_hOooSpKzaN4r?V6|2u~54*BYQ_L^(#$Qixp1 zg6c)P4Y|_uxpBO#4pSvX*{bv&DxWY_q(2xY5iieE?9&Br-&WKlMt>jlUeP~F^1Gc9H1p3BebnVg)Decp@K53t(kco+bR(t zxg*ZWRPOOrC$`K{+(_dKH_KGqgJLK6K`r<{zbo?vd|B=HGzZIaQo}(3ur(xeyKft# zw8m?E_Bm|(l0Af~u@moZf}af%_{-r6BQ34TaoN&4ql!FEFH_9ga>L|5NO4-~rUwNm zEY4@RlTrZsBy~wRX8sV*byxh}fqCAY%$;5me^5`ZXK`tca; z%Dn!xSPPXPSwZtzlhEMG=9J{Tk zcl1DGg>LK@>}&e(l+M zOI?AM9)CPiXc%+XOkID}w2WJZ>#=bknQBb&0CANJlWAX3g{z^o$&x}}(Lh>-1()7c z2m3;gS%jI)v3=0E>&&l=vzZ%l=&m_TqITTcKo^i*bv`Va668eoQ7q5h<)(1(~6kK6*q~M$1|Z3#aJ~ zW!|YEBTMdHqVsWpLWn8T0xU|V2>;9r%rSr{F&Tu)eGYy;PMPhmQ-}@99fbM#4Too` zNVg~PTy@L*LItv00!tccEo%-J4olTHeoNCpn+c}p>$UjqPe6~Q*q^borh*c7jcmB5 zO0Jk;yjp=%;M=xtyl#w(&w3`8KcI#eMX`cd#k;UT?gbZtjYYG$99=kfE7oaV@`6y+ z5WLA=^W`XHBsetIvd_TdS+f5ac7n5gs%`dyve|6OlSrP?<*4R!bS*rL4cO7ex}qIJ zPq+%;k!hf>q#f!K)EY@ZViJDgE%!hr=l7|Xb?wD^dcz|8(^v;Re+pq9-0n7tH^vBp z@o!}>$e|6@J{If=T;SiTw8ay=k4(HfQCKWPefT28zIu*aAo%gU%y>&^_t6u^z>M^UC&0@IR`oTz2N3)4l||P?VZ1bSD88mz%An zWU5=@lF9gN3Ke%|v$^x~Q92%L*x~|^!VfWS07P0zcpE=tVN@_>hgA1l12@-U%J*Yil&8xJ6pH;B_Ip zE`hE9QF%#3G7hv3N8RV2v<-)*pbiAGBeDH?KJ>|39(tRqFwk3LZSIz<$&b`ppwwgN zjt=#e__nQ0Y3;pWY=RL8MCAPwF5B4Fd>{3Uo3-FuR?7A9jVq(N z6T4K_uGPMAvAVO4>3;S)k~QN3=>}Q!d=9lDaFp*Zw&the@1q+QvC9I-%+TYT8HCq+&;1Ga12Uuv0% z&t!z9v=U!&PHZZ``+eBG5{VPfzv_m^teRgJ^sH*>3!XtaI_PNgC_L+_qU1c|txWfJ*}}+anA=V> z%%8iTSCoy?Lm~o5W^&#?wZS+mGjRS4tW?`|6F+qUh@-^X%Pc^fvbkfe($cj^qjbrY zW#jGf)tqRxNWv$3#;GduVKY<8%4A1NocRqd~E-|LH)^mm5e{c7ZCRfIdR^Pm)&zw?;Vd?oZS1 zgvWO`II(ll;R0Qj=2#Ce$m#H=Ab^F^VDECU8pZSkbp-!LO5N=2}M zQXHbg2=044JC>W-H9N|1uVe+S|w1cBGAc%SHQsL3#VlGidEQWtKL z5Z1Fo-1tc}_VeqN(S_tLDTTI-jBSX^O5rB9`|L$dSjo|o7mD#uK!Kbd`NTfIhK1}@ zS&Ax$0Lgzrskn4rXAjk8q4|Mv;lj8}PcoA9?Ffvw+uBXPsMfXoaYEGn*V0@AdrEd< zK1OW=#xX7$X?=Y|hPRl{WZejKFr;Di9QOz5c`C2PM)BMO!*`p_8&HBQB8GW#$d$Cu zxF0!@jV}#lbehjCQXRmZi691M-!5!GU4MpP^9jB*@0tX%KK>%vTZ4R@12ML32h9Z9 zS#eU7qy!Z3^7~9oDNbV%q>32e(udq zn`@wbfA8MIy=)U#vT!aTDNqP9ybtTOBfxB(apP9`Ac3P zZc!6KJ_=h#u>`!v_2y4uax?r(B{L<~?7z!@7Qd+=J0^I!D)sS%w&9`XD8zMn z?`}&6VSrdN1P-a%bXN zMu%x@VL0clLDm6lC50$<+hEEahbjHc7+a?-wsZ=0(8yA19N&)eH?fgcJ03~=dM1Ih zV=><;`0o_%;CJ?w9ZQw-o%$`WRU#TJTL%;Djn9wKDR*a4Z2<5 zv~R)2d`5W}_I;zgyrM48dwWs}JA#Ut9P6YkYb39pIu@ViTheBe^^FZMg`#!AJf5v^ zC)J+?B%uBG&$Ww!GGJ8Fc2B%>!y zN+?H~n2(|ymK+=>wyvP9?uxSl+2^2ud`<>YB%S8RPptt8olVaL1c~_R^rX3QhTsic zm#Y_2*=DM>zO(yU95khatgRgPV`ps2a)IDHYxL(Bqiw%8e7oSh39We!?s%tx2Z|!bDwH&lqzFL~;IajXi z{RGonqdr)xWGR%1@DfX(FKsFleDb)-x5j(E_#VA1VmCm6W2*QKOWlKsP^Q$;MZ`?< zSM@EU5A62q4%;%D2VTwCUmZNubCWh@EL{}}c7CjU*F58lD3o-&{7nFJphPZ1Fm{Pu zd+lq;0WhF0_R{pc&SK8p@+NZi*69s~x!j9x8zGIJHEvCMqMUneO6g^mgT+IyOCcA} zd>n!VRl4{gM~Jpc&mGggY=iL?Vj@dZ-f=i2|7koyNt)_dy4bkCIW{uo0!bO-B|*T& zt$d;s+Em^xDXP_k2y+xazUrSVmv4CR8hYP=>K-HA<9u&}GYLqyFeZH8Jx>L4BWxt3 zjQqppEdGn>4olLRU|t3)I;#jgowvzTnL%%PWI7vk&bC9@*k9(}>!Y(tjHhP^8e^gx z&oA@$mZq_jDGsh{f<6O0#Vcp5QEt%jkBE1R{qJRE(X5U5vY7T|DvlerZ|0?3%!|FFF|qe_j`v&GR!4*47Wi z{ne*GQ1q<`0nQgg2~b<;C~q*xyK8LSd`Y{kTxk@}plahL4V!FcDjO8in(Ej-|FLK8 zc584E=l=2}0d^UEu^uHXoXZp@VLpvD3U7R8K=JY{wz$m0hOy17*VnF}#c0+)Hd=Tn z$A)YqGUp)mFEnU2ITUM!#&U6uARUn{K{|ahzvtLd zL3h2nJLR1av*h=lnp?8Pl&p>e(+1VLeNDr`K3jIfpey_pbWql?Q3R`#P6TRe5ZG(A}J~BSxKtw>{prN=bHF4 zY*M8$YkRZ&wVj8Gm8oz`SQO%(q1nWO&J#n1>%x?0xo4ho@CII!Z@nV}HP0{RKW<*; z$v`QZxFFoyFu-C1OrxsU>F(6mab-D#mrIRrqfjY`kG*G2BJOqk4+do;RAp<@?dPHF z2;xPw*?X5|@0We-^_Uf1kCzAUe+%xVwNXC}FkpU1dA%@+MGxQRVZpKO*LFP_x}=n& z00Nhqv+?u|udqmypO}h19I?QNB~*m*`uBT69J+KT;IQt<)brJ^pqz!y$jg ztpEh(IV6V)WXbu{P&6SZs|wqsF#v5WY>c1G|2K-L|8TXS3mYhdIE{jjhbp$65;@T* z*l9XiDLA0jYP`!~Z&T7BqBN9h^zlJi0p;?gPRrhEC^0)(~R-i2JPF zpkerdWlp>Ix`$BhBlCC|2j^dN*SvJb7S?mYj?ApcqXp)nXF70;ZYw4_SwS=Am6iVj zY3!%x^z;n<#D@)iIDJbyAL%7bfLD?00-Mrzx}7#KJzSco8O?utaGn>aQ9A}1QEc=Y za!`Ka*@Mrv5*wH5zU!K?PE4n1dBgMW;zaKZ&B|Xh2bmr?Ninq`OsZ@ z_X?v{F;5P}=e(dBW61J9*l&>l;Aak6budtW2FSTWR||>8Q)#_@uDG zD>LyZI?WhVgyl5K+q;rMf=IE;Yu{$M*DyIe0ljCOc+@vgv%X~xCD69N^Wz466pa;$ z$Jin!xANJto0S*$F}*4^@k?B|O1*BwRZ?&(CDm0Na2}%E83?4hj>H;5=%svh4^rhH9z~rr=3S#ZjA- z)(l5{%mw6s`?1<&$M(vhWSZ*wZNf{?m}}(4s`HvK<=M&(3Zp_;<>KcT^piD*wHRLw zd`*G>XuhHRIwXLg7+3#{Yr`xN(UUF0zzhG#%h{YhZa*I>Z%D_KMy_~gG`?0t`)*(5 z*VME~t4uPcqt~_H>GZmQAR(4SdSy@RO5oCxjow)dGl>IGsL;a#ifjKj78{UYN|D2=6iQ}TvOiX3=9bxj znGtT==@^`YfB3hQLWmN8@C-_Uzq%QbK2_kq;Kz0k~_>d(O8 z47zYF4C_GC$kE}P@UN{fRRTucG?ZX`CLd@YC;=k#ug&&?TbZLPgQz_j2gA{=@eatt zy|_#%N|d3EVonv^Y@8-1VWZP~6@fRLr3~4P4jFJl5Z}d}bpg2T%`2#WZ8r}`GkfkI03->pAzHbu7Zg{sq5;JA* zkCUgfQs3?UXj;0*A;@v_5vo*2NVGFtf3`NJ^{eZpl$*I2RQ$o*gCxtGs2@98m9>S> zj`=5Xhd10L65@Vz0QnTr)vLW+@je4=lpE(YQBn$H0b9_AJ%PS254BIp4cz+v zd~yhfC0w9pqnRA&{dktI4T;=Au>{>3SiLP0sEIthHel|<-G<5Z0OgA8nHkb2Ma3&Y z7Y*I_Afs{jTj-+W8}z!^h4H^4;^9T_L~p+I=r0tm=Nu@tb$G??7-rHe^1J;V7)}*t zX|+n)jz>(o7PV@td!$7i23lOqevl=Ok@h)^lFyiAT#C)S z^ZeDDW|qgOb|^A?Yww3ml~k`RJhcAw-aEL61GHDqpC?&VF3?G!7E-ZRuX_{Do2Mds zLflhK^D4wqdva9rwR5XhE2Y7Na-F4FQ6$(RlyCB|$p<*o6nWvp~1XeogITANx=+-mE{) zYCJ~MEbTXF5NGGePxT5(Vy#8Q+kzU%P6Fs5usa^JlOqVcPuDGIrtR9TGl7KF^PMtL z^*vW!LGqy$)GB-NW3I|9Bi&pGse>RbQVrPn4|(7lHb3fBa6#(xDWR#!j5g|ln@8ip za}ds&rKab0wp4$}<0rr2AP$JSQFGDk!0uR{N{_vE9oy+3?tRJ84d=OzXw*O>W)>DX z(4gWU60(yGi}q%R@`$1q9|OU?(z9obqtoT|bP6InZ`kGliF=UT3rOUWk(77vf)ph@ zVq^`D*+}^Y39V`GOeUGV|H6aG#c@F#6(OYzlDzf}_#vQ6gE$_nPOp9It$$|qhhk0`lXe5~pJP&90Xp9OPJjXxPk4ay%IdAhZ?B2bp%g~3)XJFZ794;^SiF3QC)}+;U zc=Os|KqdOx6Cei_yXwV{!Du~auo%0##`oOnE6>J3s(M0tx#iE3Yv?geD5nWV z#hCH&@L!9HTOrT}pwY&=0it6eovNuil0&>h!fS&<15y3vA+$GYHQ! zYZ^Km4qdmGPBWsngYO$kqf%kM&u1aPe$21lVPw}&nTS{^PT0!9M8axp_i>hRG}D}>-K_w5#yP@NtKgsr~5 zKJP*TEaw?vM%#mSb(iB2f3RB%F<4gPzqz@|X*P7PLX*Xk7Zp52bgmTWg;Uxn#{f9O zZE`fFkPGk#U}6zS5oM4=hJa=99i`mfgqOGkU$fJ-UxE=_s%qgpRBMWncbrhej~<%L zL?VQQ)^@#&ep#6R{>`2Dm>d^odWx5c zuYlS};hQ*-t28&>EFZl5D8qIjbQHIPP)e<=a*jx;>J!||_xl9KRoi7Ps)okIyD!D+ z`3gQW^sXkUzQ_2f>PJrtv81>~jJbUFI8%sl$rtG7-D=oKKZ^!Dt0dPIR;Q%bw?a3$ z%pa|7g8ihusAX_9RU&$`t>fKc;9?bP^cjdq^S&3u4HzC6Z@)7eM9DuWDq_~-yhZIQ`%u@C|oWtQ9l+CgC{JoEE_jbqkcmMIgIp=fU6_v`h1 zo_|ha8u+7CP0`+8hLtQQhk(8GKv!26;dWP_T=Idr`6&58zjm1|+l6yR({{GD5nqBB z`Zqv-1p;sg$dN!|SqjkRw{8U(01bA(Sq!4Cz*|EF9z4W$_!M1hl=vW{$#^Amtl5`D z)obhRs8lbdN>34#mPiw~sBLi}(zqk4_CXtKbQlB^?>;DoCK^R%`J~+yI-8Z9;CxrW ztS+vBFLy1=CIaigD{3?p!#_86TG?<~r0Nq)Of)<|5U0mGEqb*xAU> zX|G1<9*NiX?07%EUq6rEzLQP2Ztqcyp^A$iez1KsLi_C%Q?<(li3}@(rjvCezK^=* zBpQCHYasLQJ+eIM5T5yQwYaXSd3rO1!y#sK)4TTNEFlcoFgz%$K3nHL zKMto`eUCN~Bc*?74*%ehC6Ui#BG?Q4Dp?1FmC;ESDd7;p=k26l*DNW7W_gk<4>mfZg4=P@exTM? z#XsQ5M20cV21w}Ab(-3cOQ88yzwW#>i7F`$AmwQo8uCeC<^hoo2MJ*wb)K4J+xQRD z3gJh+H_L}%82;KK%{=5$LgmNK%5B!>Dfw}R+`fyqR2&~3s12_+ep(CAprzcn#T#DM zK3J5utcDVowhT2+q9MzxYg5Fm>_ost@$$_dz$?ot#-raO7e~G@r##ZOX@D~wK6;GI z(k#7sH1jCp+lj67^F6b1#Wa(x4w$Ahg3|?67ngf4aG7WwX%ZmzR+_^3k^V-+6I{H! zi=(ykJ37DIjFS0R@phyisL|Ek`uYiKN8AqK+qu3FHK|t9yOkUnAJ0p2`m&6w4VOz9 z3>^L43S(tJ%hgCp^-i`GL#G6kY<+8RujpmP6rAD{t8S#H&T*gAaG5n%n<^TgoCuQZ%bnn#DAuIh+nLVPRo8ub$gtF`sdG zXScM%HVI{mmgoyOa~EahATPiuD&V;~qvqDy(h{+;G_Jt=o#-QBeL;kzA(i;c~7&)h_ss{rKL5)u;46~GDfWC~A zH`eno3p&;h8EzIX=xoW2E?^Xg3Jg&Ct5>?F&?e$HXl`eieJcB-YZ!l`xA@}?kqOIW z?T^F)m}ii|Vy6(Ji_XM&?Qr1{dDO#mQkU9UZ@JZV2ENbs_LLyvd(HIM?DcJ*R&q|D zh?Nr191(n}i$JPndSge-hQOi@{d~OsWp>q}l04hNpsDzoroV*3a!C(J%f!dW2Yc+I zLI4ZJI9CNBmdN&phk@e!lr8& zuejBtEp$;?s3z+>^|aH(n}cC7^c(K24n~W=SQ&t>kZ>62hhxeF zl2y#nxX9#s<9T802z}5mff^7ZX#z5TMRJF0rCu>m#_is7g3sZM6%##+!r9M{(iIq*}9*&Slwp# zSeM?2;c4JP*{VgcwOyZ`7}fb$f__>;MG5~^q+bMoCZaVL+c4AIbkRehbLgYnUBN*Q zT0wuzfX}XxugjTj*Yd}h?~$>b8 zK^_N!q5b&N3%UZ6Ek3~ihZ*LZnWY+X2Nx9yF*@C@iVvwWc|o_UqWFh+i~0%tfq4!lH_Y2SY4zRqsjj*bofQV-f-cYJY8(H$OeQ=eb&6{(fVcK{caw_brXp4WGfe(y zQ3qh&k>H&!S-{!kM(W#_eX%bee#Sfkm~hs($Hpd0tJ{QtZRTn`Nt!^?A&P+Xv7k0C z16c!@ZXhRJNf{x3L;B@x zTnCGWdQqf`VBNE-C+VhZ)(ma9@+Tc;ON<%M@rnwWiC&~bL7LS554JND(6k`Mc5HS2 z2Z7?L^?`92u04RMJ)^|0TW}kw(P2+=1|zTh?cKHNlKuoh(YDb7%ANK3^u}oTE7;QG zoL=FjKm}r_=_JFl4;o;Ua4e0r7RHj;z__)tLW6@3(A?w!jlvdfanNZgz_kEE(sK)v zLhhtMB=PtMTsH^zUX_BDjJ;l1g@s<-rqE17gA%>n38{saU4ezdos<&SK5SlkPf-#z z@_paJjexkd_FL>e{28q~_1P}IoCPZLI@J?WW2jrUp#yk1il0;KRrhZyew`*cuD2DV zg3_s)$ZkBrA2)gYe06O8r*juFuR-pd)4!Z73*mSkFI+=qv~x5YB0r~#<&e}CdVyri zxmH&Jh zbG5snm;nE>wVLY|JsU@(dJW0OLDmnVsmM%b^Ylr)8TKyy$WB9xMOi-zsz|ujHe5LTy6$LT{aE~WLwYB zOn&`2n}A~9t^UCgl6yn9o0gv5EW5X%K8UH7gw2Frxb>{G#0&5>y*J(Q;G*N;*U77a zw|;Q-2A_x`!55R5)FnmoklUno{M3qyfmspXT`%2I$9E;KcEAlW!9fCco6KK^qr;$| zGcz%xz_caX$0JvWXtz|k8P?e+@aTqYjIkcobgy%ac!sEb-dtdyxyVCn?qR0BMOeJ8 zH%bf1ms7}z$ceK!P)YdK>T0(b6t>1;+~8s``dLL3w-F#fWGKbSn>1eDrd}sSa{;i1M_rtod7ooN2#TEhernJ$1t-6@9%B3ZPQ&a^%1Mq$2g#hIgBBG@Q z1sX;AW_CN%DmV{q{cVqQ0Q`-nvZ{1fE0-iU=G_W1+P;~Cnw5as^fNqcXl*@hcVQ-; z1UX&y9WKcsC@At-h@Nb9DvUJv@-tR8PzF|Q`yScVw`V?irdTKMl{(_+hD*bPROL#m zStP1&zk0Sxh`K0Y{Tnim(b3BOw))v&ynKiNUcg?!r!56?*_v&=WvjmPX77zhKMGyt z_~|eERvWrh5O^JWnxaH)Qazjt&Bjt2Lq5VIg0nivGNX2?`?zPu1MWKqnWaGSndE(G zA4U2q%Nyb7Ow*OAtVCI%YOV*v9X!mvJqzx|gc}c9x?0M1OqN7p>TQ7qzXtMta_>PC zliQ1ul9J{S-)+;f@dQs>xn56p04rf}pageO6xWR>%bU%GDB36+*)2@R3-w9@AdUX3 z>rZL;=Itehgg{#yX9}qGp7>6&c`23ZsjRzGuB~T@T3vd&)pdyc^x4PH+eEViWYOx+ z+WA6@T*CVfftYe-u?;V2*6+De0DSK&!uZQmI-Ue2l=gP++hh)I{$(0tyRu~7oMM!` zU10bFFF?BE8KT7WyH-2NH6N0j8*aWf_eyL?^o+X5XXq)M7psqHyB_@z#Izi`TdK5b zZyVMm%-MiSQ(}Sz!Vaj4A zZ_OlRg|3Xdb#A=tz)(~<%;<>Sio~w$-H}jqi*3}wfVJ0jbEsSVjolbD(>A^;#SmGo z&DD>6^a2G(8=#!D&cvP(iW=%%QP#&ec5d-j}q$>kGwb zIf#4^>k*TF6LbNVmhO!`p=WdP0X;i>Z+7mg*>H(S@3znqm&FPfwn#dic|&Q_+^gphhNqj`kg z*vR7EuDve2L*_riU}a~GpyStU=Av0^vKE|!%nfQ5A&+ACLXU}OC(<1b5i7sfB?veN zj4OkPcH|j?rfa9^f@Usm_08EwlG|4BV=TkK?nlo@i{EYcgz)B6o|a) zKR5fR%1{XC4v5;*JguSR0ec&_7IG`q!zPF|K-+Vv7ey$V5{3w4wU_fwJ1DeDWPSC! zrE+gAl!ejiS?pOW5BknWTrRrC6b&kWnGP8Rp22uNc2@uXzGp+`f0*3P^(5`oD*Z-r zLt7*rQqq*z^#pBG+(j7Z)GpGs6~(hpZ%@7M=Rk=;zP52kEu=>^tUtIr!;o+ya_xQa zan#pxIXS8 zv+8+EzWO0#ZO&SE$u=^}-6Hp)-N4#GYiCzfmWN4hd@;etw9q_`nlePPtd8^&Qg@ld#1kAO3JWU^W0)vi5$@XF`zP6tp5 zxcaV|ar51t*jya9_?I`;{cCGFGk@eAeq{8HLqM~a3p4V^UygDVOf_*XpjpsH9wlQR zDx5|mPj}eC;30eV%2t(ePfjvo+b2E#OC8s9m3G8quG9TmpOWF+VKYywmI9#`_T{Vx zdXM?8&rpc(V3S)Bm=%ru_cvf~%O0!8+8tyul<7DZDmur5Kz@ZgAXWW^mKw+N3J*1i z`^s=sh)w^HtCTFi-8QtbeJjSIpLeM(a;3mjH=roGor#x@SnEZ|Ljss>20kN`@>?QH%q3CE9$If{6CVIa9i-@@ z-qfFZMWwX$O{m6&L42!VAXGWGkHF)8;G%5T%yrWf9s$+m4{B(Yqa(*1)@CA^&71p+ zVOh0ZFWqNL1I(X~FPOt#i2W#>eRY^^ zHR66p{iuY<)gL|Q7B;!q*TS`DlG07IeY28=nsDWR7*i&Zf|^*3^0O5IF>=L3dOrs{ zS1T+=YIFT!r(Yf{k%jj|Uq9>0=BsC$A&fdwQu@0~kxCW@V|V&DJ+$jJ>S)^3BIl1%fO*@5<>hnjv^b_7yf}qm2AQs^8Fssx-s8 z2L(3K^6!D~@K(R>tmoIe`br_Yi9zK)Kd}H@^5a=iZBe+7SG~H(9P~VNma(Vw7O;2S zzXpeY*!KnwWB5B|SCZeo&wl;`yMHrE&NCC5VPiPK0@blpEN^W*j$esjuNK#N_1seFjz}#&p;UuZ z{9om!{JK z^I`zh^n2682-XDtWEoAXF=II${grF3e2!nrCs&)7faZB6xaG>5UHmWy>cWk-7k9;+ z!6_Jt*R{Hxr1R7pO=QSM?0$E8TFA(rpV*c*dYU(z7|_LM89DR%F~@Z$OCJQ8&-UE1>nO3(i5gj@+10I{Tw!YD zZOr?unqqmUsv^SRQykr|mr>yHQouacKR}fKa5-Q2%jxO8rA>J2FfNWbmQOwmlIY+z zgVmP0;=@-TCE~dzm(yjRL9Dy<4aIE>%V$J6jN}KhI=`V6zi71X)O*^Q9v5HK2C}5E zrR|gE=tc8Sj5}uSIL>~(eny)oe$eYIGSIyB@AYfHSvDJ>_0~sX74D2U80lG7*I;MG z1PiRPPm|v!fjf8H@{f83>tsluYMtQ`&a*+Io^Gs^7dZz(klkP34~{m_tBU&ir(32f z)jZ6V_7FpZoKNH5vN16 zaEmb;AluX6CFzp~J0||ArRXG52){WPoO|qKyldAPoUp#W+1xYEMn0h(`)8`27~#NC zO6{#!tr{P+QB~fZ)hQXy)y(f_LCyuaHs0NTXX7*%sSX}=9D)!8nQC_{m3m~#)0hiz`enMx7V<8|;h z3pA@-0nDf83B2k?Oe{BRJdXlp*f_#ZJ8#jqj7SjchNC4NZ}Rcm%TI*(zvTaGZ%JWyfzgoE(HR)#-Okg#J9qZv7#N6HmY)>)epyc zm*&O!cIsbAFuNmwLE&^uR-{f?Tas7g+EM{TD|PICIR5Ej`ORnjU}3(8PORRyax zZK_??3?W418QqmSL&<)xrFd6gbZS0K32I4y{G0&$AkuMhR-xRPoUZO@{C(r`Hsx1V zqNxgA#ob6w%$YBmX`@Igsk?W!O3q+%YMK$<{eAjtYupyMDgA^eD%MLRQ|c&R#QPQV z6{9+fmOID-OZd8g`tW1#z;yAcYH}LeSfBf6v#gq#Z>(VXF$4}jg ziUIdRbYo+&;-xJ|AXu_o`x1YGF{9m=On>Vgh;9acJJx=i8!Oa^{NlPg`e6g{np*r> zPD+e%PLZ=7O^NNRnb)FcA%J92QOOK*$URivfN9k-rf*V0 zPw27~Up>`R;SU+)!|yEkSi<5f7!q$LGUu$kXqSQTSORbBI z3?2~bzsu`&>&x?%#WB0l;XZ*q(PVSXCG!&-=VkNji^$qTFQVyO-#}S&#=ipSgp4am zl{7*<(Mfj2mKe4iOFWgUYbE<2^`do*u|yl>irdXtNF1O0j;bHbZ_=XAr6fz)5}$U+ zWdxd}T@s^v02NcVOOC;Og)ztVFqjst(b~OamH`Zq^(P<->6V+-Jjr;$@mRhDkodfg zrE*i|8pY)#exB|@Jbk9Zf4JS^mm10+YZMKzLE%@pB7fwnLYXLVb_+Gs?l75ePc=Nd zHUrmJQ(cjfXf1RXv>)YK;HjC++T2ljmF`IFnfnsCUbZ2?efI(iDp)ydX?TM(o(ni) z9PIsj&2DZAC*zMycwc2YBVFpV>l|)7Ey=o626Q~6IHR#>^{8Fo7>gY0;99Iu&9taA zjKBo78DMa4yV4l?(sDJt@Epte`(ATjIiU`8ik%%WQ{Bt0+dVP;?UW9!%9q+S4wS<1 zlrF;j>IhbMSS*#7QGP*J;!pQumpJ{R^&CBI5^icCDE$a$!{eF)o&|oMdj?>*?x-Lw8gLARWgHx^2`VjGyv<^4bc3p2&7^wH@TO zIQ!eYl0NyCs$i9&wZ6!b z#K@`Le-9UgIOLnSB8~-9la;5 zVvQ70e$B{SZV^j;#=-8*w_#nMFR5Q$9uQSpdx!<7^82e7$%SE!hp8tsFSrVgDvpwONO*!@5S~qT@8(H&{v~ zxk0tddh_)|9`Hj&)i0GSPE#HzVX7e7B5xS*Cf6D;PY^HXPLHk0U96`bEX?U#wK7hW z9%FoHXTkc_n9zRbwqw?2y&>tw>coa-n)cJ1OSTJYYNG8De0lIpf^Sw#YbX_na#qhc zqw5WXyH&&gbVPsr#?}J>7SeI7-@SgAW3dJbT$s&Bep+f?OngQquQ4hJsLD!4eb&9A|LjD{x(Y6f{!s$)u!`!)_RWB zS|-;nhd}R1;s02zgmy2LvPMm-k9S9-S7CUkn&SNO<@7E)(F^k9l>wUD)# zqWfKHYmFi`%x5Nq-Fa6ImFSxdqP|nwwYEDTW1J=Q2vlgsv_pX`j56spROZ6>Y?k7O za-vGyS#KB>CN$J!&#gqO5Sz;16=*IGR_(^-@{00DMI-Kjn0-9^ zy9mGZgNhZ z%YHEobOn1+6>Xa>dxOyCN?j4}nPbn^sr-u5{pZQ@kW}DWz4SHgr8F?7sZY$1?)Mv( zos20yZ3e#-2`o7R*Mk4`t_rwI8W6TkqxuXV^EeV15XmQCaUo~r7pN%CONgL4Ii?rByoD97&V2q+WS|pzU^DKlu$}(@65rx`3prf=g&P$xc6(&M?Edt2XF%lDCAe0;JETZX+t(5a&@c?NO4e5PZkmEx&+ph-&lXQtZ~ zippJ4f|Knk+0;x>ybt8QgF8y3_jGaLt@_2_Jy9(SFYkLgISt&h_^Td}vK`kf^iXNq z7xn`A`qEk6aH?LHfxg+``_rOT*>1G@cmnP?ErBaC#9h0N%1TvEE0KmNxW_eimHM0Y zke2>1RdZl^z!v8%?tY!K4uan+uy3`t=_2ir2kmxdwU)l!F87*J_%rjqL|7D`pT#oU62dZ623cXO+PPOSeSL)wBv5XlQ4AT zJf>u-qNfbXitR!k7tF2`vPv&x);Vj@^|^qrt#Zuf69T?J1(B zT`-(Y7Ekfn^7IS%^hbYVOAJ|*(FPU$z+!9>4WxRqC$=Oo*g4z$Yk~m}gOu!*_v_rU z{a1n8rSPd_RZqd4@e5(@7LTcyV%^bD3CY-QCxNYY@D)G zQwn2_v7=T%F{{6xLx;#k)^jO6n6h$*YqH#+iumjIf$xy?l0ert?r^9&El9_k8Ey9; zfe!RvRn@e!$Z*ai-Dp?wi*N5dErzwg99VHH1x93I)!nimGWl(OQ{NctllazqQ*x}N zYGSy>{P|Y3)b%y%uLL?#vwwJF2}geOInaZyyz&R9Tirc2c5cXBu9!0ri=&A}sS^pV zuaS{?R4>=E(0y6C4q=tdZ&Nkvmx2YL^QM-OlRh|?Tda0nd;#$_w>vwGLvQNmKoRfC zyNy%etQpzr#iu_Q-Mg-bAF011*Sd6Q^H9R_VW005CBj>K1`+3?xDyR$p3rfOl zS-fbP*2-gv%a-lATf?9@p|-9`__an=icAHQ`0(a%t#LNYb>O-T5!~62#59Y_N3c4Z zyqOU9K;6R_FW3u;e1rwzEz0|V$Lw(Xw)>Tf?>|wRr!bxrjb^=M%xvpEO*b}6gL_ue z)Y?My#-pa&(a0~wFj^DV=Q`sS=*9Ax`HB|^lVzmzQat$9thU{jiRP0)U1euiwpTP` zS@;fo9e*}3`c>L)ajKnNf6}AgVQn@EpY&Y4(=ejrI<7um&o=S71Yd~^!^(!(6TOi_ zeItv~`IW|D&A;|$vCR6KpWyFqkpJ1kl=>4Ejq`oGk8*}W{N=1 z1{EF=uys^DVB40JeNmV#Atu(s0+ObD2TuLbm9qIJJmx(&F0znnzy;%%Ww&BY@i-f| z*^^ZwLbVhx7b`kpfgbajmOhr&+KVi=*V9A7c;Z*0JXkYDdMVJ**H?C5KTB48Ydm@* zp&$rt-aT-!B-S+j;OtjzYuh2=?d7WNWlA(os5;qZ)YuJ;l7)t%xO}WA;`MM(TxW#7 zWd=Gm@xCE%cT>r8UYf2=N_kLSMK;VpMlgGdQ1^BYc+dh#SQ~kFg4~#hS??6oMw!Re zr4(*8Gwi`W6i)FCRwNscVhK0A()NcTbIyQ1g^XbnKyv#(g>KTeAIQ_ zwotW3{Q#^@r^p^RQg*{vGRjWDSRD<+_p3Tx%jV~|x~Gq#h3Q?fF?QI#a_NLY^Lae) zm*fIFKm9dos=5OLb(GhGo;^cW^wgB^O8tgXu(^@#zcGJBy28rDBc*m!+omWFlp z%h4r40hecc(WQx=#&Ov#d#)wNL6BK{+H(3*KL z#(`4NUUSFf$-AYUF02C&d#s;2c~J&!(Dk(+5q2Ce%7H~O712?R-PAWZq;Kv<=`5*d z)$eDo5Q;?(@C`7`_ZWL!Rb?tI;ms;eEv8)|+ zNtq7_a5>V)KqhpJ*-Ko`42L+>R zPIJz6T?a)l{aL{Ahsy+9)36)BYZ4d;q>MX2K19jp{5y-A2V2q&LDrJOjIS*g(E5-b zOfBp81`(`lFt<(pdtoTrJ6})|&(xnPNceyjc2XEp3qUi)74i!2F!Qbs*?xcUP`@6h z)rh+*&J7umiv?8G#%&W;t+x8YvGzH3G?v6w9I`-YnpHWS+ZJLm>gw{^?kS=+r$E(R z)kYM@s_cdznT#&_N4k1{tC!FCUuG>{iE92X@$>S+f8Nxn;=72+@`{nVSBt0PPS=WWv>{5TifCCMQMoP@%IE8hQsZ z->QkyDaPBUS2jN}5?%SDj{J9*azB~Z!Eo@~-fL5%hof(QmaF)4ob1Tg5>%bmZB%+6 z{_WwwEVxk`#9N{<-e@k--a-8iL{K3uSW#_dl>i0{6WO|zds^J7M=Ldo&DPg<&qG9(|GohXjt>#U-{?s4wEej{>xhYZ3xRJ z!8Kmx$Q>ufp9@P$R{i_u!0iv!e=d!`A>hU=MGPqN9r(}ru#vU2|L?E+IgWi{^t2zr z72Axy58?}B6tqx${5W4FL8>oj(06Y~LtA_Niu+LG?Q_#L?NLnsHA1%2lwA}ScLV8P zuZa_2{dP{R!dOL6L_hZqE)%5VyO>{~zBaclXHh#+e#W`Wykul$1ehQA9*UgY53Y zG3E)^*)-(gs-dSeBb^H8i**qOPA|8|M5`Z*tXai0m7OkA zu1WsBzY~G`-D;0MQ(fWbFDcQiUu$h^gL?$2OH6VoDJvKD7t1@Ur{6x8nLd8U{XZYZ zN_yBfM&F^#?eXUFq&<%RI_RutlyLcgFY?-Os=gRMc4<*3KH>1cb3pxaER(RHGm2~; zun6LrK?$dhC@b%E>+Z`arFt>~(oVm~q-x`(RMZ@G=${Cf|3j)O4cQ8@Mvu4{bRZC- zJuf%6GrIF6?nrOURc>zc-n>U`)`;dO=eds`ZdfJuCnqR?o|tYs+h2zAPvrm>(VuXE zR5%VgXlEfU&CR4|5(EIrRp+aXvHC3?&$Zde;m^;v&c&+y=b|xFc$d>y5u5sAoSdEG z&AQFi)ZnP>bn>Cw=bELJPW}%O{^JOBq*HFX&tAd%&u*})-ZmNK|{cz6)O%yhE~Mlo5Q9F@lzN@NJ}4ynkJ!pAxL-?Jt8r=mOM^=b_BZOuS3cZzaKQ zgI1%J8-zuIM}>I>l+=1c5J>rH=6`M4XZCAn1lOXD&$#+OqmI8RuVo)n z3ysXT7wjBdT=j%e`JgiZO?J?IoE2(qU0^=e5`%{7R=)?%@EM=kc28Q zFwhAHP47chfHR|8?gH(W-0iq^tgQbGkIqmUDpqkMzuZ$T;=iAEiS#rNZvOI#i)(O0 zuZ1rKZgZduTuEwY8SMm^O8a{NS!2`o#!|fMY(a6cCc%3R;)dZ%{+zDE%3Wdj2glmK zjrGU>P6KUZY}YznL}3U>z2csHd%5^6i2tssX|gT8TywU3ns0;DFTm8Hs;-V8sqnC< zs51-bLeDk(7(ml0sr~Tb?TD8>`4_Kp{$AnM0uTl|bS(S{rCq%T3A8@5EPGwx8?#cRtSF#}alc>Ep+% z;%dJY0=*i+kVG>PQ5|UTZ{POU{~bT2NE1yR3=R!}zy~yLF~i$8Z!Yxp^;Pb@N0oj8 z{CiEHlLV?9|M)B8BEb59z^@PvX!m(D1IV(Uo2(OAIj`TJ{<6oWgnZliA1Tk*W* zpr2BFp^hF^sGoQxJUpCzaG|HMSVF$)rSOfJowb zl<8DEup-zWOU)APN97l<!rGBayflX~$C$amm1G0Ug} zGR+c9JYZV>2N)V!1{lIRjJeu-4~V9cv~rEQpSIHW!(aPn|A(U10I1B4M+ib{|0&+b z=jqwVX3}r|r)p#ieM-9VnooP&^#7QfAF>2E(#efwPyaJn_xIuYpE}i`QtLbxapJ{G zISY$4+H+F9m>y7#9^I{UY5!|(_=6U-HAYFtAvvA>!*9ZKPfzbEu+3rN;q>3%W*pt$ zPv5=WS@Np~jN$}X6?Vm+9W?*XdDH+{agNpm(YBxE-hcnrKds}7<7{LsH*S)u+Wzug z|M)ZXEoo1dsvcwh@zUQvDEAu(IuD=x?|9C?`_vzW@Bhzq_D6q_Qh?p5L5@v{5|abr z79I2|tXLy>zMmxZG=VlAZs+l~NTAuZj~qE-;*@4*XSY~$;8;WA?lPBdrAP5YZSCfn zzCz;TvGzoM1y%NfuaH42xU&1-k^{%Sv11^EhRhEh_y%wi2z&?#EM}rW zGTg@}0d(Ix+?T1}EFd|XN>`7!TSobeZIe2UjI@1#H`JV^TX=Kz^=P3)iU|pW#Gmp= zoX_UuB4G1u%Jto`+1e1)dJgZg9MkEc&zydL4tx(Al#)W_Fvq)^>=FV~LsQd{Xy40K zOV{gJ=s#p-Neu}O7MLp=PjzQh)pwX$T3Ar+&OeuRagWpKL67=hCT&!m9NYc&UZb5U zZGWGgO?mIHQ_dL5rw91K1k<%wzVQ3xqa`Y;xdCaTM0U_Vs7b}alPkfHGAHwr#Mhf~ z6(CFJ%^%;MU&Ui~(N8YyNZnS<%2MK9g+ja5+<1q=d2gYcyjty3FJ6Ia8*<8%9P_b* z+h4u;-h#?1I8$bOOa4bL3x+%LK#D+lO9w@-m!9QaKL4$`YNMR0O>0k$va&Lhs&xkX z`AE=#+x$RX`qEtWURA}$SgaEOCTU)3m*oe5BwMcJxGrt|bv~o2fmvD5CAcwTDa#Eg zoe{v1>MQX99NQzHnI;t2hyJ^*b8`6~>vQc%TEbt4hGU9xYyR`G=F{2+!wFSY*Ryzi zp3^aNf=1Uj_2+#JWHu+*b%Cb#K2r_CB>~{;l~jo4gDmCTRp|Z>kk&)fPe+P*gC({| z_HG<#1Xw@Ju_b6z<41nNk~PTE^>(Tm={QlJd;(e$M;4p;LpC~1R$|1pR_eAXGL8dT zS3Kj-apaEk)x(rmuU@49SVF6<0(M_kz+0bx5E2zVRJEMSU*?biacaDDq2IG$v2xD4 zJ-goJC4-f<^^v}v9&IDK3Gry(Oys3`Ot$_lq$D?(VMfR$aE_1j``?x}#b)a>T)uj> zpk1BVTI-U`@K|Y6O4L`ey#3MANj15pPw6-uPR_%loY!r!k?W8OLsxto2$v4$J|(pq zvt6Kg>G4&9VJYDJc8&M5w|pBC-Xc?lg*iEGph$I59Fs~yx46O<`T|JwDi1&Z9L5W{ zR%PwO4qo4xtDfdR(c02d;Uo=4!GCje(+?U)-_X$DnCQH@W5uIKRzD@^oHg~5on4cp z^$tPgj&3qKQXGClN%EoA0=`JE4Seq_;D>(QqKot-_qWRO_z zP`RRYyAxoie9oROpUw&DRU>J>P@etiVm+ra(sAR-M|Dj+vL6?qDo31cOENBll6ob! zP}_DM;;gQ0^;Fiahk@1iWZeBngLZvEijEVvZ{^`IAEMgdnImr_mM;>($;|L>Zo$Q{H4R=rG=N>zMS2eokRa z_3ldU`>m!0)8^Mpd7)K?fXJ#Jn#Ct*gu2$y@GkUw_p z&f1YGfWTHhIscn`td7jyMmwrcIf~~oTFnGBf~sl2r4|)MRY^^(iXtQliJyigggi)7 zIl(HDnogf+>UotEsEb8YG%mMvT~Ofz&VTbG54!OBbDlg?ZbuGnX30d4u`mND;wV3A zmEPewHL+nzl5(wF2Nc9#DrhEjye;6G(%#d2&c&ce8cRxM7E317VNoDUa2>+iC)mB< zoqW)|xJHR9o&(GRnFSZ@Lo3xEhjA|5$q8SEyya7{tD2Nh2S977p#nftq-gBxMX|#i zi;R+hs9hXDuMug4(hz}axfT;0?`Btd^^v7eu3=Wu*JOFgpFrbLm@3?BjiYo#lb^r*F-vJF?^h(@y}~6&CN^rXJ16}Jy^`+v z*n&q{`CLy~uTCyCxC3#j8s>bw)A&GYwLs_6Ro zZ70}!$p6so>Xa>zm%<}l-$OnDl{ja==y^^uo0IC;IUaTec#-+av98z5qOT^8bl?$` zK=eSt;K_~Po@tka*KcK}J|w$5;-XW`f}pfoLa(T4b*DPF9olpkng6*;0n>#nxR&S!Ng-EI7QJh+$*trBrZsnDe7t`7T3ew3w{+;- zB@<0`6@GXVNrQ5btoCoBsksSZ=*ky{d%gLlC^JXB$e!-*UajMh*`X_W7OhMu5wCT} z#-^r4+m|X5^_{#-E%RzXN9l9zE75ZlFTK9P*0xtRh{P|CR%iMypsdNhe?BH#*Wfo@T^gO1%i`m4rU%YlklZI>=wwQ^Y8_@WtId&+s89 z2X+vo4hKL=0!aZ&1HXR2^NE|snL{A){Z~zV;q=oUahv--_`)g0Zb2j$cD^uiM+G+1 z`^ar0WN$s>1;W?Gs~9k;qacHFt6S_Ypu7G3l3=?Od&z)PkO9#A(&7i3NKX9q6N<}% z80Lp!TQh}UJiRK}ykUHX6}@dCvb&{L?X<}XA+TIwt;FZ}Bl}^%<5P-JmKcEOb3sBV zLJc&Z+9R^DN0)V36*NAQg1L*7pemZ!$CePjCOEz8#Wn3xc0SYNn|pTmYak^Y0l<4R zE2W7GIQ`+{N2g1Ri;JX5mZ*4pdl#9U*vOYq1FBo>2Fbkx=Y^wRP&wd43Be$n5fk6`hF1SQxc$Qu`F&F*$I`*sZX=er73}XICs?h4C__>Bgu0$S!;l-OU<9#(9 zAa^k_--CyB92=8UK6SN>i0r@k)c}hyDGJnccQ5mPG?o@?AI5B7T00xnu;khnPO>ea zQ3?odIY_~oVRIm>C)*^Zd13_2@1`T@fuE6n$QU%}lj5a(kA(V<38y$lB1mfN9QEz< zSt$xV_s)XgZXW)n9~gV{K!O0C`mE&XuTx^+9E$VrckoCZ3>%F}<@E(k@9jZLw0jF7 zzC0wtb#MM1kdKK1y1xZ^3d5K5nbgSU<5RUg2W~xEqOX6(yfbQn%I$~eiYcU-;a;r; zG8l#eb*X*MYyL*r&T2pV(`pZ5J*!*X_G(GBE29vZfxf;CmfpQ;mO7N=9IieXGL|jG z_4mu8d|_#`MZ2$oCKf+O@~4wZ4%bb&pUd>{2;#<)Ec$Kwq=Tfk4|=|PIyw{Q(2Pr+ zt@BDxnnC`3Jz~E7RnKD+&5%9auppA6(;|t3>_(&d0LIe873YD4z8-Tce$L|bVq%~t z;?0{!)8b1lf_C>Enul{%%}E4$$7%d;%a|53un=d=VC;s4i-wJ9ZC`)eU_TCBGI!l z@p*FmTkw@e4mka^^p)G(>M~$T9r`4T9wpgFlViHQzA&q4OQ`4rD0O1y0)m3(LpA=L zujEI@M@Jh0Qk`wp1BKfc)Ss2K01$-%ULbJUp(KL^{6XM)eCEHgcQ#hmw`u@fB*7ls zxZy7aG9T~plJ!nZ*G+!wKR5+~F;iV(S5kBaIl_`T+44J3O(#lSyWV4^M;m{&Vhft)wj($7 z_}D(&3GgjRN{gCwEdfF?P15a|r#uN|q-4-XA9$1v_K-)as;`Oo8v$jTSu60ZS#5u~ z&7?{=r>axfes<|MlJDjT6f%xryBzH{=C$iPAUpci|vM*RP#sS}AT+AS@)*01!j^C#y(S8MPBE*yf1d-#B}k z{1q_8*>fRIB%kXlP;{hdNa>(p8_6RSVu5`NK*nx`cJKvmMVakRV=T zRX)wX%E{e5TG{@|6VdBf>R{2S=NB)(zj4a)X3LIhoF2b~K$P+!TU!Nn;-kWzkIhd% zf1hTeIxv!zj6^sTFT&PTe#32&?wG0Pl9ZIRi#7^dw?_&&y{#v-@BViV1pi|u`72 zt>$>{*W)7v?M5Qiuvq_;X!i2Po?MN@p{XV5afwuVq^8Uy z02MW4Su81J7|jMGYx`$gHLtxSw{o&ae^y4FzH6yZQlHAYVR)ZLx?6eJH`n9K8Ji3d zYe7Wn@`OfH;p*VE^&G8F^~Tu8DfZ(p4bju!boiBoz|GWF0FazE^`fdh@a~KGBZBa* z1>s$GMuvCFuk30tXwlgEzMxD>BYDmFIX_LZV9-jwp&^a!t5Oo-ru-4}WRZJo5P@<6 z&)qk&x=W)rK7e%`Dx+CHv&%S4)GWfbr^d<#>~`|&`@%jLzD#XU0*GRuw)q69qH%+7 z3pD`T-opIO(o=I=))LZj9eZuguQZ=VxlxmGy?p9E+klP>D~{bQJFOw+VMt~RTKoC= z8B+RAwC3%Lx*LilohXt}BO&EMSXOtEyO@K6!+9Oiaf9o_j_*O2bF;lMGBjXX(f{#5 zz8P{O5DXBpu|G!YeS+$j#W9iBbhDo9cFU^hx1eW*9YAj8T@J(Rph|z6tjm?c2A>Yt|hd_W_BVlW}pFF29#oq_*O!f{!d$(6jcj z4v_E4zjf<{n|ey>3m@&X4Pip)7;l=^UL*#_QDx?1RFF}R%#AvycdtJCXH|f^GSeB^ ztx1KjM!JTE1`E#W1laWVn|xT7Ht>3*Ud5i+wF+Rm9stu-RU;*vKU`Da>TA2kRXxvbyE zv&FgoRG`iVPRUII^N*4LuZ{kEFe{pmPu$sP_fELE@DK0(-*oW*MtRG^|A?p85?4CD zGFl*BFATs1v*w!qOrLq)kaI)&tF!s^RS8}D5!0W0o;K`(0E=C+*8CC$pz{BM$~cx2 z4+b}lVzq16u7i~In6I@rzqCL{;*@`375N+dH>66H0$ye8*yqr&o1ZF6^<_8x9E0TeY5Z3m#rb2v*s$Izb=z z;#_O#MLb!+qA@K}wVwY=YjrNdYj_gC6IViQ;lUNr;E&WAeDM5MR+eeJs>M1)1uTM! z3I_o~zpElT0dhntL8-<@1@W)>gIE!F> zD=8@r9eLmS*cd56F;(_WNPG7M%%f`OJLFXdqvKVSl^^8hPa}2#qbP6`&exz^qeW3f zJQjfgFm_i>;1b1Gm|*~Adxn02fcrnRuMk5b9`8|>OCE!A?`zJ6RIE6}Q*AS`aZAzg z4~Uz$Mi$^tr@=w+OMm~Fds$hJbDId@dfNwKXf@C^u|cj2&{;qZduKqj2(!A~%jSy~ z1o3;?QemdxC}pZK{L+yhk0ud$$O43nVn(I()(UHYt}iEedDdVp_+hK!;RHi zUbm>(bUhcBPN!I*7>Ld@PwBu$_$ozoRD8$N`}JjTR?XLXJLI`lO_4 zrTJSV-b*-AMkCz{vkemJ@~saYigh|x$LOOnXR_N&A9W+XBT2OEH>=h0X8JQeg^=Ch zFy7zDu$j|*xdwt)K(dJUx_y_xbrvtRJxN5B1~ql?w*vy`ekAwN(9O;5cZ0q+r2zAu zY3=z^Y8%+c+Iqw0A)^v4PkdbrwYZ8m%<&!SEy6q$PsDGYpXo%}AOT+a{rNOyEEan! zIS(b4g4l?^!}?(%into_dHw+V{*jD#7r%A8*4J>SDgs;5d+huoTn+Kw(}+;FpjlpA zn@FHwWmOf`*9$UD#Z-=gmHBWe(}cX^$PlE@-Mf4DTJs5lX~=Y!0uqQ;($yU^FSeoj zy#hhl6s`N|dhTY#cQa3JkkxY=b(6VltUlu1L$04l4&rYfIUmY5TVM1R+$%fi*!Amo zb<@b3k)w+R;GTIldj<+hG07h1sJ2#CNl2Z5p&cTN+b1If=?P}tpWnQqh#-X6+p==m zNGQS!Ecuvc&wlW?k&vynfoxcKW4L zi|&X+Vh_Yf3MS}>vi|_q`15>3s!$-=R)Z1yfeJIxgk89$;D%B}LDl*(uww6m4z+8x5 zC%&TI)af2AxNxcVl+Xce4zr=BwBx4~@2DO_)!AFe}1?vQOCE%#>fs zH91)jWNu?)qZ2UPPUW~WOXO4ZiP;pw4BOY?=?6|OR1)!@Vhsjrx-+WnmwajB&$d#3 z0-!Zk#yy!8Uwick7i?;7w)gVd=H5v$_dRuLZF+k8=%JS2;^N}KWb~fBd%G&*h$WT5 z>@k({^778Hu`w#)Oj$*=Lf5NU%wzQ-=2L~{9NXHz>uj8r6f?gse7lz@Bn)l?)6Fg* z0LSKVGOD&gxg%(I4<&#=AXL}XusqLtK$2qsd(4^frY59k0)oyXfc@Ot*B9R1-Hp@H ziKNr%$4{Jyay9C6t%|=&A(OLo%YXjLuerf0-wPG;FcNjK{EM>!!q$4Eva+(?{{Aaq zeZ6UG%NUYA9oR!7AGflKfI&xWsQ_ibo=DU`di3c1W^*&M&X!z9X+{#cn!yH^Uo9yq zAr@B%E@Y}4Dn4|}Uiq4HUtfVFARsF%+X)`M5m@wh4{y?Uc-z`4TbrUE4d%3yv-4C3 zdrG3Et=OGW6n^vO&5w6Jdght<`1||o1dS<+iHUVGiV0KSFPgt1l&@{cSr(a+IBy2= z?Xyz9Gn&XLDLETGCx++&oKI&db)1P0_5^}<_K9Lyd3pIpCMPRrcKpJPsHmt;$X#gE zC47ssTDF7GHUU}pQ;sqV<&b!(G-uYa)0{MiiylYq7(wlWjH&q#FYM!cesued^Xqxi2&|N@<1;G?t;cY$lX=sMG>bRI zFDcmAVaT{mZbwAOUmp1fhY|+3}0o|$~|if z*`mD6iBH<#1#cq5!}uk**UyZSc=41UWdL)XcKJGQqHyT&KM}5Bsgp7{r|T_Qm-*n& N$iQrO_75k|{TshiVwV5_ literal 0 HcmV?d00001 diff --git a/_quarto.yml b/_quarto.yml index 1e229ee5..c49bfa0b 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -4,6 +4,9 @@ project: - "*.qmd" - "!staging/" +filters: + - auto-dark + website: page-navigation: true title: "MOLB 7950" @@ -73,9 +76,7 @@ format: html: theme: light: [cosmo, style/quarto-main.scss] - dark: [cosmo, style/dark.scss, style/quarto-main.scss] mainfont: "Atkinson Hyperlegible" - # linkcolor: "#866fa3" toc: true code-copy: true code-overflow: wrap