From 8b81fdd96eeecf1d0e479d7908376b8e57dc356d Mon Sep 17 00:00:00 2001 From: Candace Savonen Date: Thu, 22 Oct 2020 11:04:43 -0400 Subject: [PATCH 1/7] Mechanics for CSS file and navbar add feedback URL (#303) * Adding in some style with css * Use css magic * Try making the navbar blue * Add survey link * Make font smaller * Need a comma * Change to normalizePath * normalizepath separate step references.bib * Move references.bib to component folder * Made ccs modifications, added logo file Made changes to css/navbar.html Tried to add the logo but it but it cuts out and not sure how to make it decent. * Resolve render-notebooks.R conflict * Remove testing html from file diff * uncommented mobile nav Co-authored-by: dvenprasad --- 02-microarray/00-intro-to-microarray.html | 162 ++++++++++++++------ CONTRIBUTING.md | 2 +- Snakefile | 2 +- components/_navbar.html | 22 ++- references.bib => components/references.bib | 0 components/refine-bio-ex-logo.svg | 57 +++++++ components/styles.css | 69 +++++++++ scripts/render-notebooks.R | 8 +- 8 files changed, 260 insertions(+), 62 deletions(-) rename references.bib => components/references.bib (100%) create mode 100644 components/refine-bio-ex-logo.svg create mode 100644 components/styles.css diff --git a/02-microarray/00-intro-to-microarray.html b/02-microarray/00-intro-to-microarray.html index 45b74393..4694e5c0 100644 --- a/02-microarray/00-intro-to-microarray.html +++ b/02-microarray/00-intro-to-microarray.html @@ -1263,25 +1263,22 @@ }; - - + - - - @@ -2608,6 +2590,73 @@ } + @@ -2874,15 +2923,20 @@ @@ -3023,34 +3083,34 @@

0.4.1 Why doesn’t the gene I ca

References

-

Dai M., P. Wang, A. D. Boyd, G. Kostov, and B. Athey et al., 2005 Evolving gene/transcript definitions significantly alter the interpretation of GeneChip data. Nucleic Acids Res 33: e175.

+

Dai M., P. Wang, A. D. Boyd, G. Kostov, and B. Athey et al., 2005 Evolving gene/transcript definitions significantly alter the interpretation of GeneChip data. Nucleic Acids Research 33: e175. https://doi.org/10.1093/nar/gni179

-

Farina D., 2020 Gene expression analysis and DNA microarray assays

+

Farina D., 2020 Gene expression analysis and DNA microarray assays. https://www.youtube.com/watch?v=Hv5flUOsE0s

-

Govindarajan R., J. Duraiyan, K. Kaliyappan, and M. Palanisamy, 2012 Microarray and its applications. J Pharm Bioallied Sci 4: S310–312.

+

Govindarajan R., J. Duraiyan, K. Kaliyappan, and M. Palanisamy, 2012 Microarray and its applications. Journal of Pharmacy and Bioallied Sciences 4: S310–312. https://doi.org/10.4103/0975-7406.100283

-

LCSciences, 2014 Microarray or RNA sequencing?

+

LCSciences, 2014 Microarray or RNA sequencing? https://www.lcsciences.com/news/microarray-or-rna-sequencing/

-

Mantione K. J., R. M. Kream, H. Kuzelova, R. Ptacek, and J. Raboch et al., 2014 Comparing bioinformatic gene expression profiling methods: microarray and RNA-Seq. Med Sci Monit Basic Res 20: 138–142.

+

Mantione K. J., R. M. Kream, H. Kuzelova, R. Ptacek, and J. Raboch et al., 2014 Comparing bioinformatic gene expression profiling methods: Microarray and RNA-Seq. Medical Science Monitor Basic Research 20: 138–142. https://doi.org/10.12659/MSMBR.892101

-

Piccolo S. R., Y. Sun, J. D. Campbell, M. E. Lenburg, and A. H. Bild et al., 2012 A single-sample microarray normalization method to facilitate personalized-medicine workflows. Genomics 100: 337–344.

+

Piccolo S. R., Y. Sun, J. D. Campbell, M. E. Lenburg, and A. H. Bild et al., 2012 A single-sample microarray normalization method to facilitate personalized-medicine workflows. Genomics 100: 337–344. https://doi.org/10.1016/j.ygeno.2012.08.003

-

Sánchez A., and M. C. R. de Villa, 2008 A tutorial review of microarray data analysis

+

Sánchez A., and M. C. R. de Villa, 2008 A tutorial review of microarray data analysis. http://www.ub.edu/stat/docencia/bioinformatica/microarrays/ADM/slides/A_Tutorial_Review_of_Microarray_data_Analysis_17-06-08.pdf

-

Slonim D. K., and I. Yanai, 2009 Getting started in gene expression microarray analysis. PLoS Comput. Biol. 5: e1000543.

+

Slonim D. K., and I. Yanai, 2009 Getting started in gene expression microarray analysis. PLOS Computational Biology 5: e1000543. https://doi.org/10.1371/journal.pcbi.1000543

-

Tarca A. L., R. Romero, and S. Draghici, 2006 Analysis of microarray experiments of gene expression profiling. Am. J. Obstet. Gynecol. 195: 373–388.

+

Tarca A. L., R. Romero, and S. Draghici, 2006 Analysis of microarray experiments of gene expression profiling. American Journal of Obstetrics and Gynecology 195: 373–388. https://doi.org/10.1016/j.ajog.2006.07.001

-

Wu H., Introduction to gene expression microarray data analysis

+

Wu H., Introduction to gene expression microarray data analysis. http://web1.sph.emory.edu/users/hwu30/teaching/bioc/GE1.pdf

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e49ccdf..71fc5447 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -347,7 +347,7 @@ The `render-notebooks.R` script adds a `bibliography:` specification in the `.Rm **Options:** - `--rmd`: provided by snakemake, the input `.Rmd` file to render. - `--bib_file`: File path for the `bibliography:` header option. -Default is the `references.bib` script at the top of the repository. +Default is the `references.bib` in the `components` folder. - `--html`: Default is to save the output `.html` file the same name as the input `.Rmd` file. This option allows you to specify an output file name. Default is used by snakemake. ### Add new analyses to the Snakefile diff --git a/Snakefile b/Snakefile index 60ca9dcd..4909b910 100644 --- a/Snakefile +++ b/Snakefile @@ -27,7 +27,7 @@ rule render_citations: shell: "Rscript scripts/render-notebooks.R" " --rmd {input.rmd}" - " --bib_file references.bib" + " --bib_file components/references.bib" " --cite_style components/genetics.csl" " --html {output}" " --style" diff --git a/components/_navbar.html b/components/_navbar.html index 8ecdf1e4..1ed6c957 100644 --- a/components/_navbar.html +++ b/components/_navbar.html @@ -1,15 +1,20 @@ diff --git a/references.bib b/components/references.bib similarity index 100% rename from references.bib rename to components/references.bib diff --git a/components/refine-bio-ex-logo.svg b/components/refine-bio-ex-logo.svg new file mode 100644 index 00000000..e001c3ee --- /dev/null +++ b/components/refine-bio-ex-logo.svg @@ -0,0 +1,57 @@ + + + + Logo + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/components/styles.css b/components/styles.css new file mode 100644 index 00000000..9ef20671 --- /dev/null +++ b/components/styles.css @@ -0,0 +1,69 @@ +html, +body { + font-family: 'Lato', sans-serif; + font-size: 16px; + -webkit-font-smoothing: antialiased; + line-height: 1.5; +} +h1, h2, h3, h4, h5, h6 { + font-family: 'Rubik', sans-serif; +} +h1 { + font-size: 1.625rem; +} +h2 { + font-size: 1.375rem; +} +h3 { + font-size: 1.25rem +} +h4 { + font-size: 1.125rem; +} +h5, h6 { + font-size: 1rem +} +p { + font-size: 1rem; + margin: 0 0 0.5rem 0; + line-height: 1.5; +} +a { + text-decoration: none; + color: #386db0; + line-height: 1; +} +.navbar-default, .navbar-nav, .navbar-inverse{ + font-size: 1rem; + max-width: 100%; + background-color: #386db0 !important; + color: #FDFDFD !important; +} + +.navbar-nav>li>a { + font-size: 1rem; + background-color: #386db0 !important; + color: #FDFDFD !important; +} + +.navbar-default .navbar-brand{ + color: #FDFDFD; !important; + float: left; + max-width: 100%; + display: block; + overflow: visible; + padding-bottom: 32px; +} + +ul.dropdown-menu { + background-color: #FDFDFD !important; + color: #000000 !important; +} +.dropdown-menu>li>a:hover, .dropdown-menu>li>a:active { + background-color: #386db0 !important; + color: #FDFDFD !important; +} +.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { + background-color: #386db0 !important; + color: #FDFDFD !important; +} diff --git a/scripts/render-notebooks.R b/scripts/render-notebooks.R index 3e9e2861..61adb6eb 100644 --- a/scripts/render-notebooks.R +++ b/scripts/render-notebooks.R @@ -54,6 +54,9 @@ opt <- parse_args(OptionParser(option_list = option_list)) # Get working directory base_dir <- getwd() +# Normalize file path +opt$bib_file <- normalizePath(opt$bib_file) + # Check that the rmd file exists if (!file.exists(opt$rmd)) { stop("Rmd file specified with --rmd is not found.") @@ -63,7 +66,7 @@ if (!file.exists(opt$rmd)) { if (!file.exists(opt$bib_file)) { stop("File specified for --bib_file option is not at the specified file path.") } else { - header_line <- paste("bibliography:", normalizePath(opt$bib_file)) + header_line <- paste("bibliography:", opt$bib_file) } # Check for a citation style if (!is.null(opt$cite_style)){ @@ -112,8 +115,9 @@ rmarkdown::render(tmp_file, output_format = rmarkdown::html_document( toc = TRUE, toc_depth = 2, toc_float = TRUE, number_sections = TRUE, + highlight = "haddock", df_print = "paged", - highlight = "haddock" + css = normalizePath(file.path("components", "styles.css")) ), # Save to original html output file name output_file = output_file From 052286cb4bf60b6dd7703593ce697d15e861f8cc Mon Sep 17 00:00:00 2001 From: Candace Savonen Date: Mon, 26 Oct 2020 14:31:13 -0400 Subject: [PATCH 2/7] Making staging changes live (#329) * Adding in some style with css * Use css magic * Try making the navbar blue * Add survey link * Make font smaller * Need a comma * Change to normalizePath * normalizepath separate step references.bib * Move references.bib to component folder * Update github actions to reflect staging branch (#311) * Update github actions to reflect staging branch * Add libglpk40 to Dockerfile * Make it gh-pages-stages! * Remove dockerfile change that should have been on its own all along * Does this work? * Declare a uses * Switch how env is declared * Force it to run so we can test it * try no curly brackets * What's up with the branch * Move to bash if instead * Need quotes? * forgot a `then` * Try dollar signs * Doesn't like the `.`? * Use curly brackets * Try ${GITHUB_REF} * Try ${BRANCH_NAME} * try ${GITHUB_REF#refs/*/} * use jashapiro suggestion * Change to base ref * Change back to `github.ref` * Get rid of PR `on:` * Try another test * Docker dep fix: Add lib package 40 thing that clusterprofiler needs (#316) * Add lib package 40 thing that clusterprofiler needs * Try adding options(warn = 2) * Test if options(warn =2) means it breaks like it should * Revert "Test if options(warn =2) means it breaks like it should" This reverts commit d9f688f68448ef69fe4c1caa48af23051cd7f4e3. * Revert "Try another test" This reverts commit 845cf1aff92ea7b83f402bbefd563562b44e5eac. * Add google analytics to renderings (#314) * Try adding google analytics * Add to header using includes * temporary file snuck in there * Restore master version so they aren't in the review * Let's call an html file and html file * Docker dep fix: Add lib package 40 thing that clusterprofiler needs (#316) * Add lib package 40 thing that clusterprofiler needs * Try adding options(warn = 2) * Test if options(warn =2) means it breaks like it should * Revert "Test if options(warn =2) means it breaks like it should" This reverts commit d9f688f68448ef69fe4c1caa48af23051cd7f4e3. * Only push if we are in master. For simplicity, we will now run this even if the dockerfile hasn't changed. * Add test target * test staging workflow with this branch * back to latest tag * Try separate push step * change tags to test push * Revert "change tags to test push" This reverts commit 6a38574d312cee82c90c3c036ac9033f9af7f7ec. * Remove this branch from triggers * Push staging, retag and push master Okay, so the branch name is now inaccurate, but that is fine... * Made ccs modifications, added logo file Made changes to css/navbar.html Tried to add the logo but it but it cuts out and not sure how to make it decent. * Resolve render-notebooks.R conflict * Remove testing html from file diff * uncommented mobile nav * Update scripts/render-notebooks.R * Add some issue templates (#319) * Add some rough draft issue templates * Incorporate cbethell review * Get rid of `Other` labels that aren't useful * Update diagrams showing how microarray/RNA-seq work (#326) * Mechanics for CSS file and navbar add feedback URL (#303) * Adding in some style with css * Use css magic * Try making the navbar blue * Add survey link * Make font smaller * Need a comma * Change to normalizePath * normalizepath separate step references.bib * Move references.bib to component folder * Made ccs modifications, added logo file Made changes to css/navbar.html Tried to add the logo but it but it cuts out and not sure how to make it decent. * Resolve render-notebooks.R conflict * Remove testing html from file diff * uncommented mobile nav Co-authored-by: dvenprasad * Update microarray and RNAseq overview figures - add context re figures - change .jpg to .png for consistency * Revert "Mechanics for CSS file and navbar add feedback URL (#303)" This reverts commit 8b81fdd96eeecf1d0e479d7908376b8e57dc356d. * update links to diagrams * @dvenprasad updated figure spacing * add the right updated figure * replace section of link to figures with updated commit id * incorporate @cansavvy's suggested changes Co-authored-by: Candace Savonen Co-authored-by: dvenprasad Co-authored-by: Joshua Shapiro Co-authored-by: dvenprasad Co-authored-by: Chante Bethell <43576623+cbethell@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/new-analysis.md | 26 +++++ .github/ISSUE_TEMPLATE/other-issue.md | 26 +++++ .github/workflows/docker-build-push.yml | 69 ++++++----- .github/workflows/docker-build.yml | 4 +- .github/workflows/style-and-sp-check.yml | 2 +- 02-microarray/00-intro-to-microarray.Rmd | 5 +- 02-microarray/00-intro-to-microarray.html | 6 +- 03-rnaseq/00-intro-to-rnaseq.Rmd | 5 +- 03-rnaseq/00-intro-to-rnaseq.html | 129 +++++++++------------ components/figures/microarray-overview.jpg | Bin 44998 -> 0 bytes components/figures/microarray-overview.png | Bin 0 -> 107241 bytes components/figures/rnaseq-overview.png | Bin 86861 -> 99450 bytes components/google-analytics.html | 8 ++ scripts/render-notebooks.R | 6 +- 14 files changed, 171 insertions(+), 115 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/new-analysis.md create mode 100644 .github/ISSUE_TEMPLATE/other-issue.md delete mode 100644 components/figures/microarray-overview.jpg create mode 100644 components/figures/microarray-overview.png create mode 100644 components/google-analytics.html diff --git a/.github/ISSUE_TEMPLATE/new-analysis.md b/.github/ISSUE_TEMPLATE/new-analysis.md new file mode 100644 index 00000000..c6a53856 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-analysis.md @@ -0,0 +1,26 @@ +--- +name: New analysis example +about: Use this issue template for filing a new analysis issue +title: 'New Analysis Example:' +labels: new analysis example +assignees: '' + +--- + +### What are the goals of this new example analysis? + + + + + +### What kind of dataset will this need? + + + +### What steps should be included in this analysis? + + + +### What packages/methods do you recommend using or looking into for this analysis? + + diff --git a/.github/ISSUE_TEMPLATE/other-issue.md b/.github/ISSUE_TEMPLATE/other-issue.md new file mode 100644 index 00000000..c253dbbf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other-issue.md @@ -0,0 +1,26 @@ +--- +name: Other issue +about: Use this issue template to describe a current issue with an analysis or documentation (that is not a new example analysis) +assignees: '' + +--- + +### Background + + + + +### Problem + + + +#### What potential "gotchas" do we know of? + + + +### What are the recommended next steps? + + + + + diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml index 47cc48fd..b3832343 100644 --- a/.github/workflows/docker-build-push.yml +++ b/.github/workflows/docker-build-push.yml @@ -4,7 +4,7 @@ name: Build, Render, and Push # events only for the master branch on: push: - branches: [ master ] + branches: [ staging, master ] jobs: # This workflow contains a single job called "build-all" @@ -21,54 +21,54 @@ jobs: fetch-depth: 0 # use alexslemonade-docs-bot token: ${{ secrets.DOCS_BOT_GITHUB_TOKEN }} + - name: Checkout pages branch and sync with changes run: | + echo $GITHUB_REF + if [ $GITHUB_REF == 'refs/heads/master' ] + then + pages_branch="gh-pages" + elif [ $GITHUB_REF == 'refs/heads/staging' ] + then + pages_branch="gh-pages-stages" + fi git config --local user.email "actions@github.com" git config --local user.name "Alex's Lemonade Docs Bot" - git checkout gh-pages + git checkout $pages_branch git merge -s recursive --strategy-option=theirs ${{ github.event.after }} - # Test if Dockerfile has changed - # sets steps.check_docker.outputs.changed to 1 if the Dockerfile has changed, 0 otherwise - - name: Check Dockerfile for changes - id: check_docker - env: - BEFORE: ${{ github.event.before }} - run: | - git diff-index --name-only $BEFORE > changes.txt - if grep "docker/Dockerfile" changes.txt ; then - echo "Dockerfile changed" - echo "::set-output name=changed::1" - else - echo "No change to Dockerfile" - echo "::set-output name=changed::0" - fi - rm changes.txt - # Login to Dockerhub - name: Login to DockerHub - if: steps.check_docker.outputs.changed == 1 uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_ID }} password: ${{ secrets.DOCKER_PASSWORD }} # set up Docker build - name: Set up Docker Buildx - if: steps.check_docker.outputs.changed == 1 uses: docker/setup-buildx-action@v1 - # Build docker image (We are not using caching here to force a clean build) - - name: Build and Push Docker image - if: steps.check_docker.outputs.changed == 1 + # Build the Docker image + - name: Build and Load Docker image uses: docker/build-push-action@v2 with: - push: true + push: false + load: true context: docker file: docker/Dockerfile tags: ccdl/refinebio-examples:latest + # push the Docker image if this is staging + - name: Push Docker image + if: github.ref == 'refs/heads/staging' + run: docker push ccdl/refinebio-examples:latest + # retag and push the Docker image if this is master + - name: Push release Docker image + if: github.ref == 'refs/heads/master' + run: | + docker tag ccdl/refinebio-examples:latest ccdl/refinebio-examples:release + docker push ccdl/refinebio-examples:release + # download data - name: Download data run: bash scripts/download-data.sh - - name: Render all pages to html run: | docker run \ @@ -76,11 +76,18 @@ jobs: ccdl/refinebio-examples \ snakemake --cores 2 --forceall - - name: Commit changed html + # If we are on the staging branch, do not publish to github pages + - name: Commit changed html back to non-public pages + if: github.ref == 'refs/heads/staging' run: | git add -A - git commit -m 'Render html' || echo "No changes to commit" - git push origin gh-pages || echo "No changes to push" - - + git commit -m 'Render html, do not publish' || echo "No changes to commit" + git push origin gh-pages-stages || echo "No changes to push" + # If we are on the master branch, publish to github pages! + - name: Commit changed html to public pages + if: github.ref == 'refs/heads/master' + run: | + git add -A + git commit -m 'Render html and publish' || echo "No changes to commit" + git push origin gh-pages || echo "No changes to push" diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index e5da75b0..aa065d43 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,10 +1,10 @@ name: Build Docker -# Controls when the action will run. Triggers the workflow for a pull request for +# Controls when the action will run. Triggers the workflow for a pull request for # master on: pull_request: - branches: [ master ] + branches: [ staging, master ] paths: [ docker/Dockerfile ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel diff --git a/.github/workflows/style-and-sp-check.yml b/.github/workflows/style-and-sp-check.yml index cf536f9e..314b12eb 100644 --- a/.github/workflows/style-and-sp-check.yml +++ b/.github/workflows/style-and-sp-check.yml @@ -5,7 +5,7 @@ name: Style and spell check R markdowns # events but only for the master branch on: pull_request: - branches: [ master ] + branches: [ staging, master ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: diff --git a/02-microarray/00-intro-to-microarray.Rmd b/02-microarray/00-intro-to-microarray.Rmd index ae4f3159..b0b00b25 100644 --- a/02-microarray/00-intro-to-microarray.Rmd +++ b/02-microarray/00-intro-to-microarray.Rmd @@ -32,12 +32,13 @@ Microarrays measure gene expression using chips filled with oligonucleotide prob After hybridization, the microarrays are scanned, and the fluorescence intensity for each probe is measured. The fluorescence intensity indicates the number of labeled fragments bound and therefore the relative quantity of the transcript the probe is designed for. - + -[@microarray-video] +[based on diagram from @microarray-video] There are many different kinds of microarray platforms, which can be broadly separated into single-color and [two-color arrays](https://www.ebi.ac.uk/training/online/course/functional-genomics-ii-common-technologies-and-data-analysis-methods/microarrays). At this time, refine.bio only supports single-color arrays, so our examples and advice are generally from the perspective of using single-color array. +The diagram above shows an overview of the single-color array process which includes extracting the total RNA from a sample, labeling the RNA with fluorescent dye, hybridizing the labels, and scanning the fluorescent image to analyze the fluorescence intensity. The two most common microarray platforms on refine.bio are [Affymetrix GeneChips](https://www.thermofisher.com/us/en/home/life-science/microarray-analysis/transcriptome-profiling-microarrays.html) and [Illumina BeadArray](https://www.illumina.com/documents/products/datasheets/datasheet_gene_exp_analysis.pdf). A longer list of specific arrays that are supported by refine.bio can be found [here](https://github.com/AlexsLemonade/refinebio/blob/dev/config/supported_microarray_platforms.csv). diff --git a/02-microarray/00-intro-to-microarray.html b/02-microarray/00-intro-to-microarray.html index 4694e5c0..b9d85539 100644 --- a/02-microarray/00-intro-to-microarray.html +++ b/02-microarray/00-intro-to-microarray.html @@ -3032,9 +3032,9 @@

CCDL for ALSF

0.1 Introduction to microarray technology

Microarrays measure gene expression using chips filled with oligonucleotide probes designed to hybridize to labeled RNA samples. After hybridization, the microarrays are scanned, and the fluorescence intensity for each probe is measured. The fluorescence intensity indicates the number of labeled fragments bound and therefore the relative quantity of the transcript the probe is designed for.

-

-

(Farina 2020)

-

There are many different kinds of microarray platforms, which can be broadly separated into single-color and two-color arrays. At this time, refine.bio only supports single-color arrays, so our examples and advice are generally from the perspective of using single-color array.

+

+

(based on diagram from Farina 2020)

+

There are many different kinds of microarray platforms, which can be broadly separated into single-color and two-color arrays. At this time, refine.bio only supports single-color arrays, so our examples and advice are generally from the perspective of using single-color array. The diagram above shows an overview of the single-color array process which includes extracting the total RNA from a sample, labeling the RNA with fluorescent dye, hybridizing the labels, and scanning the fluorescent image to analyze the fluorescence intensity.

The two most common microarray platforms on refine.bio are Affymetrix GeneChips and Illumina BeadArray. A longer list of specific arrays that are supported by refine.bio can be found here.

As with all experimental methods, microarrays have strengths and limitations that you should consider in regards to your scientific questions.

diff --git a/03-rnaseq/00-intro-to-rnaseq.Rmd b/03-rnaseq/00-intro-to-rnaseq.Rmd index 584ea4c5..909232c0 100644 --- a/03-rnaseq/00-intro-to-rnaseq.Rmd +++ b/03-rnaseq/00-intro-to-rnaseq.Rmd @@ -36,10 +36,11 @@ This tutorial has example analyses [organized by technology](../01-getting-start RNA-sequencing measures gene expression by direct high-throughput sequencing methods after the RNA has been isolated from a sample. - + -[@rnaseq-blog] +[based on diagram from @rnaseq-blog] +The diagram above provides a brief overview of the RNA-seq process, which includes extracting the total RNA from a tissue population, isolating the specific RNA species, converting the RNA to cDNA, and constructing a sequencing library to perform PCR amplification and sequencing. As with all experimental methods, RNA-seq has strengths and limitations that you should consider in regards to your scientific questions. ### RNA-seq data **strengths** diff --git a/03-rnaseq/00-intro-to-rnaseq.html b/03-rnaseq/00-intro-to-rnaseq.html index c48b0903..bda2b6cc 100644 --- a/03-rnaseq/00-intro-to-rnaseq.html +++ b/03-rnaseq/00-intro-to-rnaseq.html @@ -1263,25 +1263,22 @@ }; - - + - - - @@ -2900,6 +2882,7 @@
  • Differential Expression - Several groups
  • Dimension Reduction - PCA
  • Dimension Reduction - UMAP
  • +
  • Pathway Analysis - ORA
  • Ensembl Gene ID Annotation
  • Ortholog Mapping
  • @@ -2982,14 +2965,14 @@

    CCDL for ALSF

    0.1 Introduction to RNA-seq technology

    RNA-sequencing measures gene expression by direct high-throughput sequencing methods after the RNA has been isolated from a sample.

    -

    -

    (“An introduction to rna-seq methods, applications, experimental design, and technical challenges” 2015)

    -

    As with all experimental methods, RNA-seq has strengths and limitations that you should consider in regards to your scientific questions.

    +

    +

    (based on diagram from “An introduction to RNA-Seq methods, applications, experimental design, and technical challenges” 2015)

    +

    The diagram above provides a brief overview of the RNA-seq process, which includes extracting the total RNA from a tissue population, isolating the specific RNA species, converting the RNA to cDNA, and constructing a sequencing library to perform PCR amplification and sequencing. As with all experimental methods, RNA-seq has strengths and limitations that you should consider in regards to your scientific questions.

    0.1.1 RNA-seq data strengths

      -
    • RNA-seq can assay unknown transcripts, as it is not bound to a pre-determined set of probes like microarrays (Wang et al.).
    • -
    • Its values are considered more dynamic than microarray values which are constrained to a smaller range based on background signal and probe sets being saturated (Wang et al.).
    • +
    • RNA-seq can assay unknown transcripts, as it is not bound to a pre-determined set of probes like microarrays (Wang et al. 2009).
    • +
    • Its values are considered more dynamic than microarray values which are constrained to a smaller range based on background signal and probe sets being saturated (Wang et al. 2009).
    @@ -3019,8 +3002,8 @@

    0.1.3 About quantile normalizatio

    0.2.2 DESeq2 transformation methods

    -

    Our examples recommend using DESeq2 for normalizing your RNA-seq data. You may have heard about or worked with FPKM, TPM, RPKMs; how does DESeq2’s normalization compare? This handy table from an online Harvard Bioinformatics Core course nicely summarizes and compares these different methods (Harvard Chan Bioinformatics Core (HBC)). For more about the steps behind DESeq2 normalization, we highly recommend this StatQuest video which explains it quite nicely (Josh Starmer 2017b).

    -

    To normalize and transform our data with DESeq2, we generally use vst() (variance stabilizing transformation) or rlog() (regularized logarithm transformation). Both methods are very similar. Both normalize your data by correcting for library size differences but they also transform your data removing the dependence of the variance on the mean, meaning that low mean genes won’t have inflated variance from just one or a few samples having higher values than the rest (Michael I. Love, Simon Anders, and Wolfgang Huber 2020). Of the two methods, rlog() takes a bit longer to run (Michael I. Love and Huber 2019). If you end up using a larger dataset and rlog() transformation takes a bit too long, you can switch to using vst() with confidence since they yield similar results given the dataset is large enough (Michael I. Love and Huber 2019).

    +

    Our examples recommend using DESeq2 for normalizing your RNA-seq data. You may have heard about or worked with FPKM, TPM, RPKMs; how does DESeq2’s normalization compare? This handy table from an online Harvard Bioinformatics Core course nicely summarizes and compares these different methods (Harvard Chan Bioinformatics Core). For more about the steps behind DESeq2 normalization, we highly recommend this StatQuest video which explains it quite nicely (Starmer 2017a).

    +

    To normalize and transform our data with DESeq2, we generally use vst() (variance stabilizing transformation) or rlog() (regularized logarithm transformation). Both methods are very similar. Both normalize your data by correcting for library size differences but they also transform your data removing the dependence of the variance on the mean, meaning that low mean genes won’t have inflated variance from just one or a few samples having higher values than the rest (Michael I. Love and Huber 2020). Of the two methods, rlog() takes a bit longer to run (Michael I. Love and Huber 2019). If you end up using a larger dataset and rlog() transformation takes a bit too long, you can switch to using vst() with confidence since they yield similar results given the dataset is large enough (Michael I. Love and Huber 2019).

    0.2.3 Further resources for DESeq2

    @@ -3063,7 +3046,7 @@

    0.3.0.1 Why isn’t the gene I ca

    0.3.0.2 What about edgeR?

    In short, both edgeR and DESeq2 are good options and we at the CCDL just went with one of our preferences! See this blog that summarizes these – by one of the creators of DESeq2 – he agrees edgeR is also great.

    -

    If you have strong preferences for edgeR, you can definitely use your refine.bio data with it, but we currently do not have examples of that. In this case, we’d refer you to edgeR’s section of this example analysis and wish you the best of luck on your data adventures (Kasper D. Hansen)!

    +

    If you have strong preferences for edgeR, you can definitely use your refine.bio data with it, but we currently do not have examples of that. In this case, we’d refer you to edgeR’s section of this example analysis and wish you the best of luck on your data adventures (Hansen)!

    0.3.0.3 What if I care about isoforms?

    @@ -3075,58 +3058,58 @@

    0.3.0.3 What if I care about isof

    References

    -

    An introduction to rna-seq methods, applications, experimental design, and technical challenges, 2015

    +

    An introduction to RNA-Seq methods, applications, experimental design, and technical challenges, 2015. https://rna-seqblog.com/an-introduction-to-rna-seq-methods-applications-experimental-design-and-technical-challenges/

    +
    +
    +

    Hadfield J., 2016 An introduction to RNA-seq. https://bitesizebio.com/13542/what-everyone-should-know-about-rna-seq/

    -

    Hansen K. D., S. E. Brenner, and S. Dudoit, 2010 Biases in Illumina transcriptome sequencing caused by random hexamer priming. Nucleic Acids Res. 38: e131.

    +

    Hansen K. D., S. E. Brenner, and S. Dudoit, 2010 Biases in Illumina transcriptome sequencing caused by random hexamer priming. Nucleic Acids Research 38: e131. https://doi.org/10.1093/nar/gkq224

    +
    +
    -

    Harvard Chan Bioinformatics Core (HBC), Introduction to dge - deseq2 analysis

    +

    Harvard Chan Bioinformatics Core, Introduction to DGE - DESeq2 analysis. https://hbctraining.github.io/DGE_workshop/lessons/04_DGE_DESeq2_analysis.html

    -

    Harvard Chan Bioinformatics Core (HBC), Introduction to dge - count normalization

    -
    -
    -

    James Hadfield, 2016 An introduction to rna-seq

    -
    -
    -

    Josh Starmer, 2017a StatQuest: A gentle introduction to rna-seq

    -
    -
    -

    Josh Starmer, 2017b StatQuest: DESeq2, part 1, library normalization

    -
    -
    -

    Kasper D. Hansen, Count based rna-seq analysis

    +

    Harvard Chan Bioinformatics Core, Introduction to DGE - count normalization. https://hbctraining.github.io/DGE_workshop_salmon/lessons/02_DGE_count_normalization.html

    -

    Love M. I., W. Huber, and S. Anders, 2014 Moderated estimation of fold change and dispersion for rna-seq data with deseq2. Genome Biology 15. https://doi.org/10.1186/s13059-014-0550-8

    +

    Love M. I., W. Huber, and S. Anders, 2014 Moderated estimation of fold change and dispersion for RNA-Seq data with DESeq2. Genome Biology 15. https://doi.org/10.1186/s13059-014-0550-8

    -

    Love M. I., 2016 RNA-seq fragment sequence bias

    +

    Love M. I., 2016 RNA-seq fragment sequence bias. https://mikelove.wordpress.com/2016/09/26/rna-seq-fragment-sequence-bias/

    -

    Love M. I., J. B. Hogenesch, and R. A. Irizarry, 2016 Modeling of RNA-seq fragment sequence bias reduces systematic errors in transcript abundance estimation. Nat. Biotechnol. 34: 1287–1291.

    +

    Love M. I., J. B. Hogenesch, and R. A. Irizarry, 2016 Modeling of RNA-seq fragment sequence bias reduces systematic errors in transcript abundance estimation. Nature Biotechnology 34: 1287–1291. https://doi.org/10.1038/nbt.3682

    -

    Michael I. Love Simon Anders, and W. Huber, 2014 Beginner’s guide to using the deseq2 package

    +

    Michael I. Love Simon Anders, and W. Huber, 2014 Beginner’s guide to using the DESeq2 package. https://bioc.ism.ac.jp/packages/2.14/bioc/vignettes/DESeq2/inst/doc/beginner.pdf

    -

    Michael I. Love V. K. Simon Anders, and W. Huber, 2019 RNA-seq workflow: Gene-level exploratory analysis and differential expression

    +

    Michael I. Love V. K. Simon Anders, and W. Huber, 2019 RNA-seq workflow: Gene-level exploratory analysis and differential expression. http://master.bioconductor.org/packages/release/workflows/vignettes/rnaseqGene/inst/doc/rnaseqGene.html#the-variance-stabilizing-transformation-and-the-rlog

    -

    Michael I. Love, Simon Anders, and Wolfgang Huber, 2020 Analyzing rna-seq data with deseq2

    +

    Michael I. Love Simon Anders, and W. Huber, 2020 Analyzing RNA-seq data with DESeq2. https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html

    -

    Pepke S., B. Wold, and A. Mortazavi, 2009 Computation for ChIP-seq and RNA-seq studies. Nat. Methods 6: 22–32.

    +

    Pepke S., B. Wold, and A. Mortazavi, 2009 Computation for ChIP-seq and RNA-seq studies. Nature Methods 6: 22–32. https://doi.org/10.1038/nmeth.1371

    -

    Soneson C., M. I. Love, and M. D. Robinson, 2015 Differential analyses for rna-seq: Transcript-level estimates improve gene-level inferences. F1000Research 4. https://doi.org/10.12688/f1000research.7563.1

    +

    Soneson C., M. I. Love, and M. D. Robinson, 2015 Differential analyses for RNA-seq: Transcript-level estimates improve gene-level inferences. F1000Research 4. https://doi.org/10.12688/f1000research.7563.2

    +
    +
    +

    Starmer J., 2017a StatQuest: DESeq2, part 1, library normalization. https://www.youtube.com/watch?v=UFB993xufUU

    +
    +
    +

    Starmer J., 2017b StatQuest: A gentle introduction to RNA-seq. https://www.youtube.com/watch?v=tlf6wYJrwKY

    -

    Wang Z., M. Gerstein, and M. Snyder, RNA-seq: A revolutionary tool for transcriptomics. Nature reviews. Genetics 10: 57–63. https://doi.org/10.1038/nrg2484

    +

    Wang Z., M. Gerstein, and M. Snyder, 2009 RNA-Seq: A revolutionary tool for transcriptomics. Nature Reviews Genetics 10: 57–63. https://doi.org/10.1038/nrg2484

    -

    Zhang C., B. Zhang, L. L. Lin, and S. Zhao, 2017 Evaluation and comparison of computational tools for RNA-seq isoform quantification. BMC Genomics 18: 583.

    +

    Zhang C., B. Zhang, L. L. Lin, and S. Zhao, 2017 Evaluation and comparison of computational tools for RNA-seq isoform quantification. BMC Genomics 18: 583. https://doi.org/10.1186/s12864-017-4002-1

    diff --git a/components/figures/microarray-overview.jpg b/components/figures/microarray-overview.jpg deleted file mode 100644 index 40df19370f0809276d331d2ee0f1692a80a2cbfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44998 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 diff --git a/components/figures/microarray-overview.png b/components/figures/microarray-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..544ac79121120274e9e8bee7d5ad8f53fb7d608c GIT binary patch literal 107241 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 z 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 literal 0 HcmV?d00001 diff --git a/components/figures/rnaseq-overview.png b/components/figures/rnaseq-overview.png index 61b1c5fff7366ace82a45af700fe8d0e8159f8e1..3594bab031fffadaa620c924ed9fb1887cd942c5 100644 GIT binary patch literal 99450 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�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
    + + + +
    +
    +
    +
    +
    + +
    + + + + + + + + + +
    +

    1 Purpose of this analysis

    +

    This example is one of pathway analysis module set, we recommend looking at the pathway analysis table below to help you determine which pathway analysis method is best suited for your purposes.

    +

    IDENTICAL TO MICROARRAY EXAMPLE

    +

    This particular example analysis shows how you can use gene set enrichment analysis (GSEA) to detect situations where all genes in a predefined gene set change in a coordinated way, detecting even small statistical but coordinated changes between two biological states. Genes are ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic, for each gene set. More specifically, an ES is calculated by starting with the most highly ranked genes (based on the gene-level statistic selected for ranking) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. Normalized enrichment scores (NES) are enrichment scores that are scaled to account for gene sets of different sizes (Korotkevich et al. 2019; Subramanian et al. 2005).

    +

    ⬇️ Jump to the analysis code ⬇️

    +

    IDENTICAL TO OTHER PATHWAY ANALYSIS EXAMPLES

    +
    +

    1.0.1 What is pathway analysis?

    +

    Pathway analysis refers to any one of many techniques that uses predetermined sets of genes that are related or coordinated in their expression in some way (e.g., participate in the same molecular process, are regulated by the same transcription factor) to interpret a high-throughput experiment. In the context of refine.bio, we use these techniques to analyze and interpret genome-wide gene expression experiments. The rationale for performing pathway analysis is that looking at the pathway-level may be more biologically meaningful than considering individual genes, especially if a large number of genes are differentially expressed between conditions of interest. In addition, many relatively small changes in the expression values of genes in the same pathway could lead to a phenotypic outcome and these small changes may go undetected in differential gene expression analysis.

    +

    We highly recommend taking a look at Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges from Khatri et al. (2012) for a more comprehensive overview. We have provided primary publications and documentation of the methods we will introduce below as well as some recommended reading in the Resources for further learning section.

    +
    +
    +

    1.0.2 How to choose a pathway analysis?

    +

    This table summarizes the pathway analyses examples in this module.

    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AnalysisWhat is required for inputWhat output looks like✅ Pros⚠️ Cons
    ORA (Over-representation Analysis)A list of gene IDs (no stats needed)A per-pathway hypergeometric test result- Simple

    - Inexpensive computationally to calculate p-values
    - Requires arbitrary thresholds and ignores any statistics associated with a gene

    - Assumes independence of genes and pathways
    GSEA (Gene Set Enrichment Analysis)A list of genes IDs with gene-level summary statisticsA per-pathway enrichment score- Includes all genes (no arbitrary threshold!)

    - Attempts to measure coordination of genes
    - Permutations can be expensive

    - Does not account for pathway overlap

    - Two-group comparisons not always appropriate/feasible
    GSVA (Gene Set Variation Analysis)A gene expression matrix (like what you get from refine.bio directly)Pathway-level scores on a per-sample basis- Does not require two groups to compare upfront

    - Normally distributed scores
    - Scores are not a good fit for gene sets that contain genes that go up AND down

    - Method doesn’t assign statistical significance itself

    - Recommended sample size n > 10
    +
    +
    +
    +

    2 How to run this example

    +

    For general information about our tutorials and the basic software packages you will need, please see our ‘Getting Started’ section. We recommend taking a look at our Resources for Learning R if you have not written code in R before.

    +
    +

    2.1 Obtain the .Rmd file

    +

    To run this example yourself, download the .Rmd for this analysis by clicking this link.

    +

    Clicking this link will most likely send this to your downloads folder on your computer. Move this .Rmd file to where you would like this example and its files to be stored.

    +

    You can open this .Rmd file in RStudio and follow the rest of these steps from there. (See our section about getting started with R notebooks if you are unfamiliar with .Rmd files.)

    +
    +
    +

    2.2 Set up your analysis folders

    +

    Good file organization is helpful for keeping your data analysis project on track! We have set up some code that will automatically set up a folder structure for you. Run this next chunk to set up your folders!

    +

    If you have trouble running this chunk, see our introduction to using .Rmds for more resources and explanations.

    +
    # Create the data folder if it doesn't exist
    +if (!dir.exists("data")) {
    +  dir.create("data")
    +}
    +
    +# Define the file path to the plots directory
    +plots_dir <- "plots" # Can replace with path to desired output plots directory
    +
    +# Create the plots folder if it doesn't exist
    +if (!dir.exists(plots_dir)) {
    +  dir.create(plots_dir)
    +}
    +
    +# Define the file path to the results directory
    +results_dir <- "results" # Can replace with path to desired output results directory
    +
    +# Create the results folder if it doesn't exist
    +if (!dir.exists(results_dir)) {
    +  dir.create(results_dir)
    +}
    +

    In the same place you put this .Rmd file, you should now have three new empty folders called data, plots, and results!

    +
    +
    +

    2.3 Obtain the gene set for this example

    +

    DRAFT

    +

    In this example, we are using differential expression results table we obtained from an example analysis of an acute myeloid leukemia (AML) dataset using the DESeq2 package (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case).

    +

    We have provided this file for you and the code in this notebook will read in the results that are stored online, but if you’d like to follow the steps for obtaining this results file yourself, we suggest going through that differential expression analysis example.

    +
    +
    +

    2.4 About the dataset we are using for this example

    +

    For this example analysis, we will use this acute myeloid leukemia (AML) dataset (Micol et al. 2017).

    +

    Micol et al. (2017) performed RNA-seq on primary peripheral blood and bone marrow samples from AML patients with and without ASXL1/2 mutations.

    +
    +
    +

    2.5 Check out our file structure!

    +

    Your new analysis folder should contain:

    +
      +
    • The example analysis .Rmd you downloaded
      +
    • +
    • A folder called data (currently empty)
    • +
    • A folder for plots (currently empty)
      +
    • +
    • A folder for results (currently empty)
    • +
    +

    Your example analysis folder should contain your .Rmd and three empty folders (which won’t be empty for long!).

    +

    If the concept of a “file path” is unfamiliar to you; we recommend taking a look at our section about file paths.

    +
    +
    +
    +

    3 Using a different refine.bio dataset with this analysis?

    +

    If you’d like to adapt an example analysis to use a different dataset from refine.bio, we recommend placing the files in the data/ directory you created and changing the filenames and paths in the notebook to match these files (we’ve put comments to signify where you would need to change the code). We suggest saving plots and results to plots/ and results/ directories, respectively, as these are automatically created by the notebook. From here you can customize this analysis example to fit your own scientific questions and preferences.

    +
    + +

     

    +
    +
    +

    4 Gene set enrichment analysis - RNA-seq

    +
    +

    4.1 Install libraries

    +

    See our Getting Started page with instructions for package installation for a list of the other software you will need, as well as more tips and resources.

    +

    In this analysis, we will be using clusterProfiler package to perform GSEA and the msigdbr package which contains gene sets from the Molecular Signatures Database (MSigDB) already in the tidy format required by clusterProfiler (Yu et al. 2012; Dolgalev 2020; Subramanian et al. 2005).

    +

    We will also need the org.Hs.eg.db package to perform gene identifier conversion (Carlson 2020).

    +
    if (!("clusterProfiler" %in% installed.packages())) {
    +  # Install this package if it isn't installed yet
    +  BiocManager::install("clusterProfiler", update = FALSE)
    +}
    +
    +if (!("msigdbr" %in% installed.packages())) {
    +  # Install this package if it isn't installed yet
    +  BiocManager::install("msigdbr", update = FALSE)
    +}
    +
    +if (!("org.Hs.eg.db" %in% installed.packages())) {
    +  # Install this package if it isn't installed yet
    +  BiocManager::install("org.Hs.eg.db", update = FALSE)
    +}
    +

    Attach the packages we need for this analysis.

    +
    # Attach the library
    +library(clusterProfiler)
    +
    ## 
    +
    ## clusterProfiler v3.18.0  For help: https://guangchuangyu.github.io/software/clusterProfiler
    +## 
    +## If you use clusterProfiler in published research, please cite:
    +## Guangchuang Yu, Li-Gen Wang, Yanyan Han, Qing-Yu He. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology. 2012, 16(5):284-287.
    +
    ## 
    +## Attaching package: 'clusterProfiler'
    +
    ## The following object is masked from 'package:stats':
    +## 
    +##     filter
    +
    # Package that contains MSigDB gene sets in tidy format
    +library(msigdbr)
    +
    +# Human annotation package we'll use for gene identifier conversion
    +library(org.Hs.eg.db)
    +
    ## Loading required package: AnnotationDbi
    +
    ## Loading required package: stats4
    +
    ## Loading required package: BiocGenerics
    +
    ## Loading required package: parallel
    +
    ## 
    +## Attaching package: 'BiocGenerics'
    +
    ## The following objects are masked from 'package:parallel':
    +## 
    +##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
    +##     clusterExport, clusterMap, parApply, parCapply, parLapply,
    +##     parLapplyLB, parRapply, parSapply, parSapplyLB
    +
    ## The following objects are masked from 'package:stats':
    +## 
    +##     IQR, mad, sd, var, xtabs
    +
    ## The following objects are masked from 'package:base':
    +## 
    +##     anyDuplicated, append, as.data.frame, basename, cbind, colnames,
    +##     dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
    +##     grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,
    +##     order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
    +##     rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,
    +##     union, unique, unsplit, which.max, which.min
    +
    ## Loading required package: Biobase
    +
    ## Welcome to Bioconductor
    +## 
    +##     Vignettes contain introductory material; view with
    +##     'browseVignettes()'. To cite Bioconductor, see
    +##     'citation("Biobase")', and for packages 'citation("pkgname")'.
    +
    ## Loading required package: IRanges
    +
    ## Loading required package: S4Vectors
    +
    ## 
    +## Attaching package: 'S4Vectors'
    +
    ## The following object is masked from 'package:clusterProfiler':
    +## 
    +##     rename
    +
    ## The following object is masked from 'package:base':
    +## 
    +##     expand.grid
    +
    ## 
    +## Attaching package: 'IRanges'
    +
    ## The following object is masked from 'package:clusterProfiler':
    +## 
    +##     slice
    +
    ## 
    +## Attaching package: 'AnnotationDbi'
    +
    ## The following object is masked from 'package:clusterProfiler':
    +## 
    +##     select
    +
    ## 
    +
    # We will need this so we can use the pipe: %>%
    +library(magrittr)
    +
    +
    +

    4.2 Import data

    +

    DRAFT

    +

    We will read in the differential expression results we will download from online. These results are from a acute myeloid leukemia (AML) RNA-seq dataset we used for differential expression analysis using DESeq2 (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). We can identify differentially regulated genes by filtering these results and use this list as input to GSEA.

    +

    REVIEW

    +

    Instead of using the URL below, you can use a file path to a TSV file with your desired gene list results. First we will assign the URL to its own variable called, dge_url.

    +
    # Define the url to your differential expression results file
    +dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv"
    +

    Read in the file that has differential expression results. Here we are using the URL we set up above, but this can be a local file path instead i.e. you can replace dge_url in the code below with a path to file you have on your computer like: file.path("results", "SRP078441_differential_expression_results.tsv").

    +
    # Read in the contents of your differential expression results file
    +# `dge_url` can be replaced with a file path to a TSV file with your
    +# desired gene list results
    +dge_df <- readr::read_tsv(dge_url)
    +
    ## 
    +## ── Column specification ─────────────────────────────────────────────────────────────────────────
    +## cols(
    +##   Gene = col_character(),
    +##   baseMean = col_double(),
    +##   log2FoldChange = col_double(),
    +##   lfcSE = col_double(),
    +##   pvalue = col_double(),
    +##   padj = col_double(),
    +##   threshold = col_logical()
    +## )
    +

    read_tsv() can read TSV files online and doesn’t necessarily require you download the file first. Let’s take a look at what these contrast results from the differential expression analysis look like.

    +
    dge_df
    +
    + +
    +
    +
    +

    4.3 Getting familiar with clusterProfiler’s options

    +

    Let’s take a look at what organisms the package supports.

    +
    msigdbr_species()
    +
    + +
    +

    MSigDB contains 8 different gene set collections (Subramanian et al. 2005).

    +
    H: hallmark gene sets
    +C1: positional gene sets
    +C2: curated gene sets
    +C3: motif gene sets
    +C4: computational gene sets
    +C5: GO gene sets
    +C6: oncogenic signatures
    +C7: immunologic signatures
    +

    MSigDB includes a collection called Hallmark gene sets. Here’s an excerpt of the collection description (Liberzon et al. 2015):

    +

    Hallmark gene sets summarize and represent specific well-defined biological states or processes and display coherent expression. These gene sets were generated by a computational methodology based on identifying gene set overlaps and retaining genes that display coordinate expression. The hallmarks reduce noise and redundancy and provide a better delineated biological space for GSEA.

    +

    REVIEW

    +

    The data we’re interested in here comes from human samples, so we can obtain just the gene sets relevant to Homo sapiens by specifying species = "Homo sapiens"

    +
    hs_gene_sets <- msigdbr(
    +  species = "Homo sapiens" # Replace with species name relevant to your data
    +)
    +

    If you run the chunk above with specifying category = "H" to the msigdbr() function, it will return only the Hallmark gene sets for Homo sapiens.

    +

    Let’s preview what’s in hs_gene_sets.

    +
    head(hs_gene_sets)
    +
    + +
    +

    Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs.

    +

    In our differential expression results data frame, dge_df we have Ensembl gene identifiers. So we will need to convert our Ensembl IDs into either gene symbols or Entrez IDs for GSEA.

    +

    IDENTICAL TO MICROARRAY EXAMPLE (except “ENTREZID” –> “SYMBOL” and “Dr” –> “Hs”) ## Gene identifier conversion

    +

    We’re going to convert our identifiers in dge_df to gene symbols, but you can, with the change of a single argument, use the same code to convert to many other types of identifiers!

    +

    The annotation package org.Hs.eg.db contains information for different identifiers (Carlson 2020). org.Hs.eg.db is specific to Homo sapiens – this is what the Hs in the package name is referencing.

    +

    We can see what types of IDs are available to us in an annotation package with keytypes().

    +
    keytypes(org.Hs.eg.db)
    +
    ##  [1] "ACCNUM"       "ALIAS"        "ENSEMBL"      "ENSEMBLPROT"  "ENSEMBLTRANS"
    +##  [6] "ENTREZID"     "ENZYME"       "EVIDENCE"     "EVIDENCEALL"  "GENENAME"    
    +## [11] "GO"           "GOALL"        "IPI"          "MAP"          "OMIM"        
    +## [16] "ONTOLOGY"     "ONTOLOGYALL"  "PATH"         "PFAM"         "PMID"        
    +## [21] "PROSITE"      "REFSEQ"       "SYMBOL"       "UCSCKG"       "UNIGENE"     
    +## [26] "UNIPROT"
    +

    Even though we’ll use this package to convert from Ensembl gene IDs (ENSEMBL) to gene symbols (SYMBOL), we could just as easily use it to convert from an Ensembl transcript ID (ENSEMBLTRANS) to Entrez IDs (ENTREZID).

    +

    Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: the microarray example and the RNA-seq example.

    +

    The function we will use to map from Ensembl gene IDs to gene symbols is called mapIds().

    +

    Let’s create a data frame that shows the mapped gene symbols along with the differential expression stats for the respective Ensembl IDs.

    +
    # First let's create a mapped data frame we can join to the differential expression stats
    +dge_mapped_df <- data.frame(
    +  "gene_symbol" = mapIds(
    +    org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data
    +    keys = dge_df$Gene,
    +    column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to
    +    keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data
    +    multiVals = "first" # This will keep only the first mapped value for each Ensembl ID
    +  )
    +) %>%
    +  # If an Ensembl gene identifier doesn't map to a gene symbol, drop that
    +  # from the data frame
    +  dplyr::filter(!is.na(gene_symbol)) %>%
    +  # Make an `Ensembl` column to store the rownames
    +  tibble::rownames_to_column("Ensembl") %>%
    +  # Now let's join the rest of the expression data
    +  dplyr::inner_join(dge_df, by = c("Ensembl" = "Gene"))
    +
    ## 'select()' returned 1:many mapping between keys and columns
    +

    This 1:many mapping between keys and columns message means that some Ensembl gene identifiers map to multiple gene symbols. In this case, it’s also possible that a gene symbol will map to multiple Ensembl IDs. For the purpose of performing GSEA later in this notebook, we keep only the first mapped IDs. For more about how to explore this, take a look at our microarray gene ID conversion example.

    +

    Let’s see a preview of dge_mapped_df.

    +
    head(dge_mapped_df)
    +
    + +
    +

    We will want to keep in mind that GSEA requires that genes are ranked from most highly positive to most highly negative and weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic. GSEA also requires unique gene identifiers to produce the most accurate results. This means if any duplicate gene identifiers are found in our dataset, we will want to retain the instance with the higher absolute value as this will be the instance most likely to be ranked most highly negative or most highly positive. Otherwise the enrichment score results may be skewed and the GSEA() function will throw a warning.

    +

    Let’s check to see if we have any gene symbols that mapped to multiple Ensembl IDs.

    +
    any(duplicated(dge_mapped_df$gene_symbol))
    +
    ## [1] TRUE
    +

    Looks like we do have duplicated gene symbols. Let’s find out which gene symbols have been duplicated.

    +
    dup_gene_symbols <- dge_mapped_df %>%
    +  dplyr::filter(duplicated(gene_symbol)) %>%
    +  dplyr::pull(gene_symbol)
    +
    +dup_gene_symbols
    +
    ##  [1] "IFNAR2"       "NDST2"        "CLEC4A"       "PTP4A1"       "BAZ2B"       
    +##  [6] "ZNF280D"      "ARHGAP11B"    "DNAJC9-AS1"   "ZNF365"       "CYB561D2"    
    +## [11] "ZCWPW2"       "PLA2G2C"      "SLFN12L"      "ARHGEF18"     "C2-AS1"      
    +## [16] "GGT1"         "LINC02203"    "SPDYE1"       "LOC440896"    "RGS5"        
    +## [21] "LRTOMT"       "RLN1"         "ITFG2-AS1"    "TBC1D3"       "HSPA14"      
    +## [26] "MPV17L"       "DET1"         "KBTBD11-OT1"  "FBXO10"       "SCHIP1"      
    +## [31] "ZNF365"       "GOLGA8M"      "CHN2"         "SLC35D2"      "SPATA13"     
    +## [36] "RN7SK"        "POLA2"        "CLN3"         "BOLA2"        "ZNF724"      
    +## [41] "HLA-DQA1"     "FAM50B"       "LRRC57"       "TMEM217"      "ST6GALNAC6"  
    +## [46] "LOC101927815" "C4orf36"      "GOLGA6L4"     "TAB2"         "RBM27"       
    +## [51] "KYAT1"        "OR2C3"        "COMMD7"       "SEC16B"       "PRH1"        
    +## [56] "PTGR2"        "PRORP"        "ELFN2"        "ARL17A"       "TUT1"        
    +## [61] "TBCE"         "ZNF844"       "TMSB15B"      "RAET1E"       "SMN1"        
    +## [66] "LINC01238"    "RNF43"        "POLR2J3"      "POLR2J2"      "SERF1A"      
    +## [71] "PARL"         "ZNF761"       "SPICE1"       "SPATA13"      "MATR3"
    +

    Now let’s take a look at the rows associated with the duplicated gene symbols.

    +
    dge_mapped_df %>%
    +  dplyr::filter(gene_symbol %in% dup_gene_symbols) %>%
    +  dplyr::arrange(gene_symbol)
    +
    + +
    +

    IDENTICAL TO MICROARRAY EXAMPLE (except using absolute log2 fold change value instead of t-statistic value)

    +

    We can see that the associated values vary for each row.

    +

    As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let’s keep the gene symbols associated with the higher absolute value of the log fold change. GSEA relies on genes’ rankings on the basis of this statistic. Retaining the instance of the gene symbol with the higher absolute value means that we will retain the value that is likely to be more highly- or lowly-ranked or, put another way, the values less likely to be towards the middle of the ranked gene list. We should keep this decision in mind when interpreting our results. For example, if the duplicate identifiers tended to be enriched in a particular gene set, we may get an optimistic view of how perturbed that gene set is by preferentially selecting values that have a higher absolute value.

    +
    filtered_dge_mapped_df <- dge_mapped_df %>%
    +  # Sort so that the highest absolute values of the log fold change are at the top
    +  dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>%
    +  # Filter out the duplicated rows using `dplyr::distinct()`-- this will keep
    +  # the first row with the duplicated value thus keeping the row with the
    +  # highest absolute value of the log fold change
    +  dplyr::distinct(gene_symbol, .keep_all = TRUE)
    +

    Let’s check to see that we removed the duplicate gene symbols and kept the rows with the higher absolute value of the log fold change.

    +
    filtered_dge_mapped_df %>%
    +  dplyr::filter(gene_symbol %in% dup_gene_symbols) %>%
    +  dplyr::arrange(gene_symbol)
    +
    + +
    +

    Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher absolute value of the log fold change!

    +
    +
    +

    4.4 Perform gene set enrichment analysis (GSEA)

    +

    The goal of GSEA is to detect situations where all genes in a gene set change in a coordinated way, detecting even small statistical but coordinated changes. This is done by ranking genes within a gene set from most highly positive to most highly negative, weighting them according to their gene-level statistic, to calculate the enrichment score (ES), which is a pathway-level statistic (Yu).

    +
    +

    4.4.1 Determine our pre-ranked genes list

    +

    The GSEA() function takes a pre-ranked and sorted named vector of statistics, where the names in the vector are gene identifiers. We will therefore need to create a gene list with statistics that GSEA will rank by.

    +

    In the next chunk, we will create a named vector ranked based on the gene-level log fold change values.

    +
    # Let's create a named vector ranked based on the log fold change values
    +lfc_vector <- filtered_dge_mapped_df$log2FoldChange
    +names(lfc_vector) <- filtered_dge_mapped_df$gene_symbol
    +
    +# We need to sort the log fold change values in descending order here
    +lfc_vector <- sort(lfc_vector, decreasing = TRUE)
    +

    Let’s preview our pre-ranked named vector.

    +
    # Look at first entries of the ranked log fold change vector
    +head(lfc_vector)
    +
    ##     UTS2     ALPL   GRIN2B      ADM    KRT23    IL1R2 
    +## 6.174579 5.824919 4.172007 3.952953 3.731020 3.717043
    +
    +
    +

    4.4.2 Run GSEA using the GSEA() function

    +

    Genes were ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, in the previous section. In this section, we will implement GSEA to calculate the enrichment score (ES) for each gene set using our pre-ranked gene list.

    +

    We can use the GSEA() function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., gseKEGG()).

    +
    gsea_results <- GSEA(
    +  geneList = lfc_vector, # ordered ranked gene list
    +  minGSSize = 25, # minimum gene set size
    +  maxGSSize = 500, # maximum gene set set
    +  pvalueCutoff = 0.05, # p value cutoff
    +  eps = 0, # boundary for calculating the p value
    +  seed = TRUE, # set seed to make results reproducible
    +  pAdjustMethod = "BH", # Benjamini-Hochberg correction
    +  TERM2GENE = dplyr::select(
    +    hs_gene_sets,
    +    gs_name,
    +    gene_symbol
    +  )
    +)
    +
    ## preparing geneSet collections...
    +
    ## GSEA analysis...
    +
    ## Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.01% of the list).
    +## The order of those tied genes will be arbitrary, which may produce unexpected results.
    +
    ## no term enriched under specific pvalueCutoff...
    +

    Let’s take a look at the results.

    +
    # We can access the results from our gseaResult object using `@result`
    +head(gsea_results@result)
    +
    + +
    +

    Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing. Looks like we have gene sets returned as significant at FDR of 0.05. If we didn’t have any, our visualizations below would show up blank as nothing would have met our pvalueCutoff above.

    +

    The information we’re most likely interested in is in the results slot. Let’s convert this into a data frame that we can use for further analysis and write to file.

    +
    gsea_result_df <- data.frame(gsea_results@result)
    +

    IDENTICAL TO MICROARRAY EXAMPLE

    +
    +
    +
    +

    4.5 Visualizing results

    +

    We can visualize GSEA results for individual pathways or gene sets using enrichplot::gseaplot(). Let’s take a look at 2 different pathways – one with a highly positive NES and one with a highly negative NES – to get more insight into how ES are calculated.

    +
    +

    4.5.1 Most Positive NES

    +

    Let’s look for the gene set with the most positive NES.

    +
    gsea_result_df %>%
    +  # Use `top_n()` to return the top n observation using `NES` as the ordering variable
    +  dplyr::top_n(n = 3, wt = NES)
    +
    + +
    +

    The gene set HP_VERTEBRAL_CLEFTING has the most positive NES score.

    +
    most_positive_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "HP_VERTEBRAL_CLEFTING",
    +  title = "HP_VERTEBRAL_CLEFTING",
    +  color.line = "#0d76ff"
    +)
    +
    +most_positive_nes_plot
    +

    +

    Notice how the genes that are in the gene set, indicated by the black bars, tend to be on the left side of the graph indicating that they have positive gene-level scores. The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score’s data are being displayed.

    +

    The plots returned by enrichplot::gseaplot are ggplots, so we can use ggplot2::ggsave() to save them to file.

    +

    Let’s save to PNG.

    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    +  plot = most_positive_nes_plot
    +)
    +
    ## Saving 7 x 5 in image
    +
    +
    +

    4.5.2 Most Negative NES

    +

    Let’s look for the gene set with the most negative NES.

    +
    gsea_result_df %>%
    +  # Use `top_n()` to return the top n observation using `NES` as the ordering
    +  # variable -- note the use of `-n` to display the top n values when sorted
    +  # in descending order
    +  dplyr::top_n(n = -3, wt = NES)
    +
    + +
    +

    The gene set HOLLERN_EMT_BREAST_TUMOR_DN has the most negative NES.

    +
    most_negative_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "HOLLERN_EMT_BREAST_TUMOR_DN",
    +  title = "HOLLERN_EMT_BREAST_TUMOR_DN",
    +  color.line = "#0d76ff"
    +)
    +
    +most_negative_nes_plot
    +

    +

    This gene set shows the opposite pattern – genes in the pathway tend to be on the right side of the graph. Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score’s data are being displayed.

    +

    Let’s save this plot to PNG.

    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    +  plot = most_negative_nes_plot
    +)
    +
    ## Saving 7 x 5 in image
    +
    +
    +
    +

    4.6 Write results to file

    +
    readr::write_tsv(
    +  gsea_result_df,
    +  file.path(
    +    results_dir,
    +    "SRP078441_gsea_results.tsv"
    +  )
    +)
    +
    +
    +
    +

    5 Resources for further learning

    + +
    +
    +

    6 Session info

    +

    At the end of every analysis, before saving your notebook, we recommend printing out your session info. This helps make your code more reproducible by recording what versions of software and packages you used to run this.

    +
    # Print session info
    +sessioninfo::session_info()
    +
    ## ─ Session info ───────────────────────────────────────────────────────────────
    +##  setting  value                       
    +##  version  R version 4.0.2 (2020-06-22)
    +##  os       Ubuntu 20.04 LTS            
    +##  system   x86_64, linux-gnu           
    +##  ui       X11                         
    +##  language (EN)                        
    +##  collate  en_US.UTF-8                 
    +##  ctype    en_US.UTF-8                 
    +##  tz       Etc/UTC                     
    +##  date     2020-12-02                  
    +## 
    +## ─ Packages ───────────────────────────────────────────────────────────────────
    +##  package         * version  date       lib source        
    +##  AnnotationDbi   * 1.52.0   2020-10-27 [1] Bioconductor  
    +##  assertthat        0.2.1    2019-03-21 [1] RSPM (R 4.0.0)
    +##  backports         1.1.10   2020-09-15 [1] RSPM (R 4.0.2)
    +##  Biobase         * 2.50.0   2020-10-27 [1] Bioconductor  
    +##  BiocGenerics    * 0.36.0   2020-10-27 [1] Bioconductor  
    +##  BiocManager       1.30.10  2019-11-16 [1] RSPM (R 4.0.0)
    +##  BiocParallel      1.24.1   2020-11-06 [1] Bioconductor  
    +##  bit               4.0.4    2020-08-04 [1] RSPM (R 4.0.2)
    +##  bit64             4.0.5    2020-08-30 [1] RSPM (R 4.0.2)
    +##  blob              1.2.1    2020-01-20 [1] RSPM (R 4.0.0)
    +##  cli               2.1.0    2020-10-12 [1] RSPM (R 4.0.2)
    +##  clusterProfiler * 3.18.0   2020-10-27 [1] Bioconductor  
    +##  colorspace        1.4-1    2019-03-18 [1] RSPM (R 4.0.0)
    +##  cowplot           1.1.0    2020-09-08 [1] RSPM (R 4.0.2)
    +##  crayon            1.3.4    2017-09-16 [1] RSPM (R 4.0.0)
    +##  curl              4.3      2019-12-02 [1] RSPM (R 4.0.0)
    +##  data.table        1.13.0   2020-07-24 [1] RSPM (R 4.0.2)
    +##  DBI               1.1.0    2019-12-15 [1] RSPM (R 4.0.0)
    +##  digest            0.6.25   2020-02-23 [1] RSPM (R 4.0.0)
    +##  DO.db             2.9      2020-11-18 [1] Bioconductor  
    +##  DOSE              3.16.0   2020-10-27 [1] Bioconductor  
    +##  downloader        0.4      2015-07-09 [1] RSPM (R 4.0.0)
    +##  dplyr             1.0.2    2020-08-18 [1] RSPM (R 4.0.2)
    +##  ellipsis          0.3.1    2020-05-15 [1] RSPM (R 4.0.0)
    +##  enrichplot        1.10.1   2020-11-14 [1] Bioconductor  
    +##  evaluate          0.14     2019-05-28 [1] RSPM (R 4.0.0)
    +##  fansi             0.4.1    2020-01-08 [1] RSPM (R 4.0.0)
    +##  farver            2.0.3    2020-01-16 [1] RSPM (R 4.0.0)
    +##  fastmatch         1.1-0    2017-01-28 [1] RSPM (R 4.0.0)
    +##  fgsea             1.16.0   2020-10-27 [1] Bioconductor  
    +##  generics          0.0.2    2018-11-29 [1] RSPM (R 4.0.0)
    +##  getopt            1.20.3   2019-03-22 [1] RSPM (R 4.0.0)
    +##  ggforce           0.3.2    2020-06-23 [1] RSPM (R 4.0.2)
    +##  ggplot2           3.3.2    2020-06-19 [1] RSPM (R 4.0.1)
    +##  ggraph            2.0.3    2020-05-20 [1] RSPM (R 4.0.2)
    +##  ggrepel           0.8.2    2020-03-08 [1] RSPM (R 4.0.2)
    +##  glue              1.4.2    2020-08-27 [1] RSPM (R 4.0.2)
    +##  GO.db             3.12.1   2020-11-18 [1] Bioconductor  
    +##  GOSemSim          2.16.1   2020-10-29 [1] Bioconductor  
    +##  graphlayouts      0.7.0    2020-04-25 [1] RSPM (R 4.0.2)
    +##  gridExtra         2.3      2017-09-09 [1] RSPM (R 4.0.0)
    +##  gtable            0.3.0    2019-03-25 [1] RSPM (R 4.0.0)
    +##  hms               0.5.3    2020-01-08 [1] RSPM (R 4.0.0)
    +##  htmltools         0.5.0    2020-06-16 [1] RSPM (R 4.0.1)
    +##  igraph            1.2.6    2020-10-06 [1] RSPM (R 4.0.2)
    +##  IRanges         * 2.24.0   2020-10-27 [1] Bioconductor  
    +##  jsonlite          1.7.1    2020-09-07 [1] RSPM (R 4.0.2)
    +##  knitr             1.30     2020-09-22 [1] RSPM (R 4.0.2)
    +##  labeling          0.3      2014-08-23 [1] RSPM (R 4.0.0)
    +##  lattice           0.20-41  2020-04-02 [2] CRAN (R 4.0.2)
    +##  lifecycle         0.2.0    2020-03-06 [1] RSPM (R 4.0.0)
    +##  magrittr        * 1.5      2014-11-22 [1] RSPM (R 4.0.0)
    +##  MASS              7.3-51.6 2020-04-26 [2] CRAN (R 4.0.2)
    +##  Matrix            1.2-18   2019-11-27 [2] CRAN (R 4.0.2)
    +##  memoise           1.1.0    2017-04-21 [1] RSPM (R 4.0.0)
    +##  msigdbr         * 7.2.1    2020-10-02 [1] RSPM (R 4.0.2)
    +##  munsell           0.5.0    2018-06-12 [1] RSPM (R 4.0.0)
    +##  optparse        * 1.6.6    2020-04-16 [1] RSPM (R 4.0.0)
    +##  org.Hs.eg.db    * 3.12.0   2020-11-18 [1] Bioconductor  
    +##  pillar            1.4.6    2020-07-10 [1] RSPM (R 4.0.2)
    +##  pkgconfig         2.0.3    2019-09-22 [1] RSPM (R 4.0.0)
    +##  plyr              1.8.6    2020-03-03 [1] RSPM (R 4.0.2)
    +##  polyclip          1.10-0   2019-03-14 [1] RSPM (R 4.0.0)
    +##  ps                1.4.0    2020-10-07 [1] RSPM (R 4.0.2)
    +##  purrr             0.3.4    2020-04-17 [1] RSPM (R 4.0.0)
    +##  qvalue            2.22.0   2020-10-27 [1] Bioconductor  
    +##  R.cache           0.14.0   2019-12-06 [1] RSPM (R 4.0.0)
    +##  R.methodsS3       1.8.1    2020-08-26 [1] RSPM (R 4.0.2)
    +##  R.oo              1.24.0   2020-08-26 [1] RSPM (R 4.0.2)
    +##  R.utils           2.10.1   2020-08-26 [1] RSPM (R 4.0.2)
    +##  R6                2.4.1    2019-11-12 [1] RSPM (R 4.0.0)
    +##  RColorBrewer      1.1-2    2014-12-07 [1] RSPM (R 4.0.0)
    +##  Rcpp              1.0.5    2020-07-06 [1] RSPM (R 4.0.2)
    +##  readr             1.4.0    2020-10-05 [1] RSPM (R 4.0.2)
    +##  rematch2          2.1.2    2020-05-01 [1] RSPM (R 4.0.0)
    +##  reshape2          1.4.4    2020-04-09 [1] RSPM (R 4.0.2)
    +##  rlang             0.4.8    2020-10-08 [1] RSPM (R 4.0.2)
    +##  rmarkdown         2.4      2020-09-30 [1] RSPM (R 4.0.2)
    +##  RSQLite           2.2.1    2020-09-30 [1] RSPM (R 4.0.2)
    +##  rstudioapi        0.11     2020-02-07 [1] RSPM (R 4.0.0)
    +##  rvcheck           0.1.8    2020-03-01 [1] RSPM (R 4.0.0)
    +##  S4Vectors       * 0.28.0   2020-10-27 [1] Bioconductor  
    +##  scales            1.1.1    2020-05-11 [1] RSPM (R 4.0.0)
    +##  scatterpie        0.1.5    2020-09-09 [1] RSPM (R 4.0.2)
    +##  sessioninfo       1.1.1    2018-11-05 [1] RSPM (R 4.0.0)
    +##  shadowtext        0.0.7    2019-11-06 [1] RSPM (R 4.0.0)
    +##  stringi           1.5.3    2020-09-09 [1] RSPM (R 4.0.2)
    +##  stringr           1.4.0    2019-02-10 [1] RSPM (R 4.0.0)
    +##  styler            1.3.2    2020-02-23 [1] RSPM (R 4.0.0)
    +##  tibble            3.0.4    2020-10-12 [1] RSPM (R 4.0.2)
    +##  tidygraph         1.2.0    2020-05-12 [1] RSPM (R 4.0.2)
    +##  tidyr             1.1.2    2020-08-27 [1] RSPM (R 4.0.2)
    +##  tidyselect        1.1.0    2020-05-11 [1] RSPM (R 4.0.0)
    +##  tweenr            1.0.1    2018-12-14 [1] RSPM (R 4.0.2)
    +##  vctrs             0.3.4    2020-08-29 [1] RSPM (R 4.0.2)
    +##  viridis           0.5.1    2018-03-29 [1] RSPM (R 4.0.0)
    +##  viridisLite       0.3.0    2018-02-01 [1] RSPM (R 4.0.0)
    +##  withr             2.3.0    2020-09-22 [1] RSPM (R 4.0.2)
    +##  xfun              0.18     2020-09-29 [1] RSPM (R 4.0.2)
    +##  yaml              2.2.1    2020-02-01 [1] RSPM (R 4.0.0)
    +## 
    +## [1] /usr/local/lib/R/site-library
    +## [2] /usr/local/lib/R/library
    +
    +
    +

    References

    +
    +
    +

    Carlson M., 2020 org.Hs.eg.db: Genome wide annotation for human. http://bioconductor.org/packages/release/data/annotation/html/org.Hs.eg.db.html

    +
    +
    +

    Diego U. S., and B. I. Team, GSEA: Gene set enrichment analysis. https://www.gsea-msigdb.org/gsea/index.jsp

    +
    +
    +

    Dolgalev I., 2020 Msigdbr: MSigDB gene sets for multiple organisms in a tidy data format. https://cran.r-project.org/web/packages/msigdbr/index.html

    +
    +
    +

    Khatri P., M. Sirota, and A. J. Butte, 2012 Ten years of pathway analysis: Current approaches and outstanding challenges. PLOS Computational Biology 8: e1002375. https://doi.org/10.1371/journal.pcbi.1002375

    +
    +
    +

    Korotkevich G., V. Sukhov, and A. Sergushichev, 2019 Fast gene set enrichment analysis. bioRxiv. https://doi.org/10.1101/060012

    +
    +
    +

    Liberzon A., C. Birger, H. Thorvaldsdóttir, M. Ghandi, and J. P. Mesirov et al., 2015 The molecular signatures database hallmark gene set collection. Cell Systems 1. https://doi.org/10.1016/j.cels.2015.12.004

    +
    +
    +

    Love M. I., W. Huber, and S. Anders, 2014 Moderated estimation of fold change and dispersion for RNA-Seq data with DESeq2. Genome Biology 15. https://doi.org/10.1186/s13059-014-0550-8

    +
    +
    +

    Micol J. B., A. Pastore, D. Inoue, N. Duployez, and E. Kim et al., 2017 ASXL2 is essential for haematopoiesis and acts as a haploinsufficient tumour suppressor in leukemia. Nature Communications 8: 15429. https://doi.org/10.1038/ncomms15429

    +
    +
    +

    Subramanian A., P. Tamayo, V. K. Mootha, S. Mukherjee, and B. L. Ebert et al., 2005 Gene set enrichment analysis: A knowledge-based approach for interpreting genome-wide expression profiles. Proceedings of the National Academy of Sciences 102: 15545–15550. https://doi.org/10.1073/pnas.0506580102

    +
    +
    +

    Yu G., L.-G. Wang, Y. Han, and Q.-Y. He, 2012 clusterProfiler: An R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology 16: 284–287. https://doi.org/10.1089/omi.2011.0118

    +
    +
    +

    Yu G., clusterProfiler: Universal enrichment tool for functional and comparative study. http://yulab-smu.top/clusterProfiler-book/index.html

    +
    +
    +
    + + + + +
    +
    + +
    + + + + + + + + + + + + + + + + diff --git a/Snakefile b/Snakefile index e9c26d36..47184ca4 100644 --- a/Snakefile +++ b/Snakefile @@ -18,6 +18,7 @@ rule target: "03-rnaseq/dimension-reduction_rnaseq_01_pca.html", "03-rnaseq/dimension-reduction_rnaseq_02_umap.html", "03-rnaseq/gene-id-annotation_rnaseq_01_ensembl.html", + "03-rnaseq/pathway-analysis_rnaseq_02_gsea.html", "03-rnaseq/ortholog-mapping_rnaseq_01_ensembl.html", "04-advanced-topics/00-intro-to-advanced-topics.html", "04-advanced-topics/network-analysis_rnaseq_01_wgcna.html" From f9b46d2b8b9f240981e22c8df44bdecafbddb5ba Mon Sep 17 00:00:00 2001 From: Chante Bethell Date: Wed, 2 Dec 2020 09:29:32 -0500 Subject: [PATCH 4/7] add to `dictionary.txt` --- components/dictionary.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/dictionary.txt b/components/dictionary.txt index 8fe5cca5..61ccfcec 100644 --- a/components/dictionary.txt +++ b/components/dictionary.txt @@ -56,6 +56,7 @@ ENSDARG Ensembl ENSG Entrez +ENTREZID et FACS frac @@ -77,6 +78,7 @@ hexamer HGNC histological Hochberg +Hs hypomethylating IDH Illumina @@ -126,6 +128,7 @@ ribosomes RMA RPKMs RStudio +sina ssGSEA StatQuest Subramanian From 20929fa662eb1c05a721b2a4a6eaf0d14050a4dc Mon Sep 17 00:00:00 2001 From: Chante Bethell Date: Fri, 4 Dec 2020 09:30:30 -0500 Subject: [PATCH 5/7] use KEGG gene sets and rank log fold change values --- 03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd | 143 +++--- .../pathway-analysis_rnaseq_02_gsea.html | 432 +++++++----------- 2 files changed, 239 insertions(+), 336 deletions(-) diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd index b4adbe0e..ac423381 100644 --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd @@ -13,8 +13,6 @@ output: This example is one of pathway analysis module set, we recommend looking at the [pathway analysis table below](#how-to-choose-a-pathway-analysis) to help you determine which pathway analysis method is best suited for your purposes. -**IDENTICAL TO MICROARRAY EXAMPLE** - This particular example analysis shows how you can use gene set enrichment analysis (GSEA) to detect situations where all genes in a predefined gene set change in a coordinated way, detecting even small statistical but coordinated changes between two biological states. Genes are ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic, for each gene set. More specifically, an ES is calculated by starting with the most highly ranked genes (based on the gene-level statistic selected for ranking) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. @@ -22,8 +20,6 @@ Normalized enrichment scores (NES) are enrichment scores that are scaled to acco ⬇️ [**Jump to the analysis code**](#analysis) ⬇️ -**IDENTICAL TO OTHER PATHWAY ANALYSIS EXAMPLES** - ### What is pathway analysis? Pathway analysis refers to any one of many techniques that uses predetermined sets of genes that are related or coordinated in their expression in some way (e.g., participate in the same molecular process, are regulated by the same transcription factor) to interpret a high-throughput experiment. @@ -92,10 +88,8 @@ In the same place you put this `.Rmd` file, you should now have three new empty ## Obtain the gene set for this example -**DRAFT** - -In this example, we are using differential expression results table we obtained from an [example analysis of an acute myeloid leukemia (AML) dataset](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using the `DESeq2` package [@Love2014]. -The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). +In this example, we are using the differential expression results table we obtained from an [example analysis of an acute myeloid leukemia (AML) dataset](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using the `DESeq2` package [@Love2014]. +The table contains summary statistics including Ensembl gene IDs, log2 fold change values, and adjusted p-values (FDR in this case). We have provided this file for you and the code in this notebook will read in the results that are stored online, but if you'd like to follow the steps for obtaining this results file yourself, we suggest going through [that differential expression analysis example](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html). @@ -113,7 +107,7 @@ Your new analysis folder should contain: - A folder called `data` (currently empty) - A folder for `plots` (currently empty) - A folder for `results` (currently empty) - + Your example analysis folder should contain your `.Rmd` and three empty folders (which won't be empty for long!). If the concept of a "file path" is unfamiliar to you; we recommend taking a look at our [section about file paths](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#an-important-note-about-file-paths-and-Rmds). @@ -157,7 +151,7 @@ if (!("org.Hs.eg.db" %in% installed.packages())) { Attach the packages we need for this analysis. -```{r} +```{r message=FALSE} # Attach the library library(clusterProfiler) @@ -171,17 +165,20 @@ library(org.Hs.eg.db) library(magrittr) ``` -## Import data +The GSEA algorithm utilizes random sampling so we are going to set the seed to make our results reproducible. -**DRAFT** +```{r} +# Set the seed so our results are reproducible: +set.seed(2020) +``` + +## Import data We will read in the differential expression results we will download from online. -These results are from a acute myeloid leukemia (AML) RNA-seq dataset we used for [differential expression analysis](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using `DESeq2` [@Love2014]. -The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). +These results are from an acute myeloid leukemia (AML) RNA-seq dataset we used for [differential expression analysis](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using `DESeq2` [@Love2014]. +The table contains summary statistics including Ensembl gene IDs, log2 fold change values, and adjusted p-values (FDR in this case). We can identify differentially regulated genes by filtering these results and use this list as input to GSEA. -**REVIEW** - Instead of using the URL below, you can use a file path to a TSV file with your desired gene list results. First we will assign the URL to its own variable called, `dge_url`. @@ -201,7 +198,7 @@ dge_df <- readr::read_tsv(dge_url) ``` `read_tsv()` can read TSV files online and doesn't necessarily require you download the file first. -Let's take a look at what these contrast results from the differential expression analysis look like. +Let's take a look at what the contrast results from the differential expression analysis looks like. ```{r} dge_df @@ -226,24 +223,18 @@ MSigDB contains 8 different gene set collections [@Subramanian2005]. C6: oncogenic signatures C7: immunologic signatures -MSigDB includes a collection called Hallmark gene sets. -Here's an excerpt of the collection description [@Liberzon2015]: - -Hallmark gene sets summarize and represent specific well-defined biological states or processes and display coherent expression. -These gene sets were generated by a computational methodology based on identifying gene set overlaps and retaining genes that display coordinate expression. -The hallmarks reduce noise and redundancy and provide a better delineated biological space for GSEA. - -**REVIEW** - -The data we're interested in here comes from human samples, so we can obtain just the gene sets relevant to _Homo sapiens_ by specifying `species = "Homo sapiens"` +The data we're interested in here comes from human samples, so we can obtain just the gene sets (from all of the gene set collections listed above) relevant to _Homo sapiens_ by specifying `species = "Homo sapiens"`. ```{r} hs_gene_sets <- msigdbr( - species = "Homo sapiens" # Replace with species name relevant to your data + species = "Homo sapiens", # Replace with species name relevant to your data, + category = "C2", + subcategory = "KEGG" ) ``` If you run the chunk above with specifying `category = "H"` to the `msigdbr()` function, it will return only the Hallmark gene sets for _Homo sapiens_. +See `?msigdbr` for more options. Let's preview what's in `hs_gene_sets`. @@ -256,7 +247,6 @@ Looks like we have a data frame of gene sets with associated gene symbols and En In our differential expression results data frame, `dge_df` we have Ensembl gene identifiers. So we will need to convert our Ensembl IDs into either gene symbols or Entrez IDs for GSEA. -**IDENTICAL TO MICROARRAY EXAMPLE** (except "ENTREZID" --> "SYMBOL" and "Dr" --> "Hs") ## Gene identifier conversion We're going to convert our identifiers in `dge_df` to gene symbols, but you can, with the change of a single argument, use the same code to convert to many other types of identifiers! @@ -270,10 +260,7 @@ We can see what types of IDs are available to us in an annotation package with ` keytypes(org.Hs.eg.db) ``` -Even though we'll use this package to convert from Ensembl gene IDs (`ENSEMBL`) to gene symbols (`SYMBOL`), we could just as easily use it to convert from an Ensembl transcript ID (`ENSEMBLTRANS`) to Entrez IDs (`ENTREZID`). - -Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: -[the microarray example](https://alexslemonade.github.io/refinebio-examples/02-microarray/gene-id-annotation_microarray_01_ensembl.html) and [the RNA-seq example](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/gene-id-annotation_rnaseq_01_ensembl.html). +Even though we'll use this package to convert from Ensembl gene IDs (`ENSEMBL`) to gene symbols (`SYMBOL`), we could just as easily use it to convert to and from any of these `keytypes()` listed above. The function we will use to map from Ensembl gene IDs to gene symbols is called `mapIds()`. @@ -302,7 +289,8 @@ dge_mapped_df <- data.frame( This `1:many mapping between keys and columns` message means that some Ensembl gene identifiers map to multiple gene symbols. In this case, it's also possible that a gene symbol will map to multiple Ensembl IDs. For the purpose of performing GSEA later in this notebook, we keep only the first mapped IDs. -For more about how to explore this, take a look at our [microarray gene ID conversion example](https://alexslemonade.github.io/refinebio-examples/02-microarray/gene-id-annotation_microarray_01_ensembl.html). +Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: +[the microarray example](https://alexslemonade.github.io/refinebio-examples/02-microarray/gene-id-annotation_microarray_01_ensembl.html) and [the RNA-seq example](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/gene-id-annotation_rnaseq_01_ensembl.html). Let's see a preview of `dge_mapped_df`. @@ -328,8 +316,6 @@ Let's find out which gene symbols have been duplicated. dup_gene_symbols <- dge_mapped_df %>% dplyr::filter(duplicated(gene_symbol)) %>% dplyr::pull(gene_symbol) - -dup_gene_symbols ``` Now let's take a look at the rows associated with the duplicated gene symbols. @@ -339,35 +325,39 @@ dge_mapped_df %>% dplyr::filter(gene_symbol %in% dup_gene_symbols) %>% dplyr::arrange(gene_symbol) ``` -**IDENTICAL TO MICROARRAY EXAMPLE** (except using absolute log2 fold change value instead of t-statistic value) We can see that the associated values vary for each row. -As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let's keep the gene symbols associated with the higher absolute value of the log fold change. +As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let's keep the gene symbols associated with the higher ranked absolute value of the log2 fold change. GSEA relies on genes' rankings on the basis of this statistic. Retaining the instance of the gene symbol with the higher absolute value means that we will retain the value that is likely to be more highly- or lowly-ranked or, put another way, the values less likely to be towards the middle of the ranked gene list. We should keep this decision in mind when interpreting our results. For example, if the duplicate identifiers tended to be enriched in a particular gene set, we may get an optimistic view of how perturbed that gene set is by preferentially selecting values that have a higher absolute value. +In the next chunk, we are going to filter out the duplicated row using the `dplyr::distinct()` function. +This will keep the first row with the duplicated value thus keeping the row with the highest ranked absolute value of the log2 fold change. + ```{r} filtered_dge_mapped_df <- dge_mapped_df %>% - # Sort so that the highest absolute values of the log fold change are at the top - dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>% - # Filter out the duplicated rows using `dplyr::distinct()`-- this will keep - # the first row with the duplicated value thus keeping the row with the - # highest absolute value of the log fold change + # First let's create a column to hold the rankings of our absolute log2 fold + # change values -- this handles duplicate log2 fold change values + dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>% + # Sort so that the highest ranked absolute values of the log2 fold change are at the top + dplyr::arrange(dplyr::desc(rank)) %>% + # Filter out the duplicated rows using `dplyr::distinct()` dplyr::distinct(gene_symbol, .keep_all = TRUE) ``` -Let's check to see that we removed the duplicate gene symbols and kept the rows with the higher absolute value of the log fold change. +Note that the log2 fold change values we use here for ranking have been transformed by `DESeq2` to account for genes with low counts or highly variable counts. +See the [`DESeq2` package vignette](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) for more information on how `DESeq2` handles the log2 fold change values with the `lfcShrink()` function. + +Let's check to see that we removed the duplicate gene symbols and kept the rows with the higher ranked absolute value of the log2 fold change. ```{r} -filtered_dge_mapped_df %>% - dplyr::filter(gene_symbol %in% dup_gene_symbols) %>% - dplyr::arrange(gene_symbol) +any(duplicated(filtered_dge_mapped_df$gene_symbol)) ``` -Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher absolute value of the log fold change! +Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher ranked absolute value of the log2 fold change! ## Perform gene set enrichment analysis (GSEA) @@ -379,22 +369,22 @@ This is done by ranking genes within a gene set from most highly positive to mos The `GSEA()` function takes a pre-ranked and sorted named vector of statistics, where the names in the vector are gene identifiers. We will therefore need to create a gene list with statistics that GSEA will rank by. -In the next chunk, we will create a named vector ranked based on the gene-level log fold change values. +In the next chunk, we will create a named vector ranked based on the rankings of the gene-level log2 fold change values. ```{r} -# Let's create a named vector ranked based on the log fold change values -lfc_vector <- filtered_dge_mapped_df$log2FoldChange -names(lfc_vector) <- filtered_dge_mapped_df$gene_symbol +# Let's create a named vector of the rankings based on the log2 fold change values +ranked_vector <- filtered_dge_mapped_df$rank +names(ranked_vector) <- filtered_dge_mapped_df$gene_symbol -# We need to sort the log fold change values in descending order here -lfc_vector <- sort(lfc_vector, decreasing = TRUE) +# We need to sort the ranked vector in descending order here +ranked_vector <- sort(ranked_vector, decreasing = TRUE) ``` Let's preview our pre-ranked named vector. ```{r} -# Look at first entries of the ranked log fold change vector -head(lfc_vector) +# Look at first entries of the ranked vector +head(ranked_vector) ``` ### Run GSEA using the `GSEA()` function @@ -406,13 +396,14 @@ We can use the `GSEA()` function to perform GSEA with any generic set of gene se ```{r} gsea_results <- GSEA( - geneList = lfc_vector, # ordered ranked gene list + geneList = ranked_vector, # ordered ranked gene list minGSSize = 25, # minimum gene set size maxGSSize = 500, # maximum gene set set pvalueCutoff = 0.05, # p value cutoff eps = 0, # boundary for calculating the p value seed = TRUE, # set seed to make results reproducible pAdjustMethod = "BH", # Benjamini-Hochberg correction + scoreType = "pos", TERM2GENE = dplyr::select( hs_gene_sets, gs_name, @@ -424,14 +415,14 @@ gsea_results <- GSEA( Let's take a look at the results. ```{r} -# We can access the results from our gseaResult object using `@result` +# We can access the results from our `gsea_results` object using `@result` head(gsea_results@result) ``` Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing. -Looks like we have gene sets returned as significant at FDR of `0.05`. -If we didn't have any, our visualizations below would show up blank as nothing would have met our `pvalueCutoff` above. + +Looks like we have gene sets returned as significant at FDR of `0.05`, according to the `p.adjust` column above. The information we're most likely interested in is in the `results` slot. Let's convert this into a data frame that we can use for further analysis and write to file. @@ -440,12 +431,11 @@ Let's convert this into a data frame that we can use for further analysis and wr gsea_result_df <- data.frame(gsea_results@result) ``` -**IDENTICAL TO MICROARRAY EXAMPLE** - ## Visualizing results We can visualize GSEA results for individual pathways or gene sets using `enrichplot::gseaplot()`. Let's take a look at 2 different pathways -- one with a highly positive NES and one with a highly negative NES -- to get more insight into how ES are calculated. +Note that if we didn't have any significant pathways, our visualizations below would show up blank as nothing would have met our `pvalueCutoff` above. ### Most Positive NES @@ -453,26 +443,25 @@ Let's look for the gene set with the most positive NES. ```{r} gsea_result_df %>% - # Use `top_n()` to return the top n observation using `NES` as the ordering variable - dplyr::top_n(n = 3, wt = NES) + # Use `slice_max()` to return the top n observation using `NES` as the ordering variable + dplyr::slice_max(NES, n = 3) ``` -The gene set `HP_VERTEBRAL_CLEFTING` has the most positive NES score. +The gene set `KEGG_SELENOAMINO_ACID_METABOLISM` has the most positive NES score. ```{r} most_positive_nes_plot <- enrichplot::gseaplot( gsea_results, - geneSetID = "HP_VERTEBRAL_CLEFTING", - title = "HP_VERTEBRAL_CLEFTING", + geneSetID = "KEGG_SELENOAMINO_ACID_METABOLISM", + title = "KEGG_SELENOAMINO_ACID_METABOLISM", color.line = "#0d76ff" ) most_positive_nes_plot ``` -Notice how the genes that are in the gene set, indicated by the black bars, tend to be on the left side of the graph indicating that they have positive gene-level scores. The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). -As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. +As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score's data are being displayed. The plots returned by `enrichplot::gseaplot` are ggplots, so we can use `ggplot2::ggsave()` to save them to file. @@ -491,28 +480,26 @@ Let's look for the gene set with the most negative NES. ```{r} gsea_result_df %>% - # Use `top_n()` to return the top n observation using `NES` as the ordering - # variable -- note the use of `-n` to display the top n values when sorted - # in descending order - dplyr::top_n(n = -3, wt = NES) + # Use `slice_min()` to return the bottom n observation using `NES` as the ordering + # variable + dplyr::slice_min(NES, n = 3) ``` -The gene set `HOLLERN_EMT_BREAST_TUMOR_DN` has the most negative NES. +The gene set `KEGG_TIGHT_JUNCTION` has the most negative NES. ```{r} most_negative_nes_plot <- enrichplot::gseaplot( gsea_results, - geneSetID = "HOLLERN_EMT_BREAST_TUMOR_DN", - title = "HOLLERN_EMT_BREAST_TUMOR_DN", + geneSetID = "KEGG_TIGHT_JUNCTION", + title = "KEGG_TIGHT_JUNCTION", color.line = "#0d76ff" ) most_negative_nes_plot ``` -This gene set shows the opposite pattern -- genes in the pathway tend to be on the right side of the graph. Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. -As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. +As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score's data are being displayed. diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html index 88e5a6b5..55d5060e 100644 --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html @@ -2570,7 +2570,7 @@ "vtp_value":"" },{ "function":"__c", - "vtp_value":false + "vtp_value":0 },{ "function":"__aev", "vtp_varType":"URL", @@ -2979,7 +2979,7 @@ function f(){}function h(T){var ja=!0;T&&f();ja&&zj.push(J)}function k(){return function(T){u&&(T=Jg(T));return T}}var l=qg(a),q=b==C.ba,r=l.C[0],p=l.C[1],t=void 0!==p,n=function(T){return d.getWithConfig(T)}, u=void 0!=n(C.M)&&!1!==n(C.M),v=!1!==n(C.mb),x=n(C.lb)||n(C.fa),y=n(C.V),w=n(C.da),z=n(C.ja),A=n(C.Ha),B=xj(A);Dj(B);var D={prefix:x,domain:y,Ib:w,flags:z};if(q){var F=n(C.ka)||{};v&&(Mf(F[C.ob],!!F[C.D])&&cg(Aj,D),$f(D),eg(["aw","dc"],D));n(C.ya)&&gg();F[C.D]&&dg(Aj,F[C.D],F[C.qb],!!F[C.pb],x);Gg(l,d);hj(!1,u,a)}if(b===C.Ea){var M=n(C.xa),P=n(C.wa),W=n(M);if(M===C.Ub&&void 0===W){var Z=lg("aw",D.prefix,u);0===Z.length?P(void 0):1===Z.length?P(Z[0]): P(Z)}else P(W);return}var na=!1===n(C.$d)||!1===n(C.sb);if(!q||!t&&!na)if(!0===n(C.ae)&&(t=!1),!1!==n(C.ca)||t){var J={google_conversion_id:r,google_remarketing_only:!t,onload_callback:d.H,gtm_onFailure:d.F,google_conversion_format:"3",google_conversion_color:"ffffff",google_conversion_domain:"",google_conversion_label:p,google_conversion_language:n(C.Va),google_conversion_value:n(C.za),google_conversion_currency:n(C.va),google_conversion_order_id:n(C.ub), -google_user_id:n(C.vb),google_conversion_page_url:n(C.rb),google_conversion_referrer_url:n(C.Fa),google_gtm:Di()};t&&(J.google_transport_url=oi(A,"/"));J.google_restricted_data_processing=n(C.Uc);tg()&&(J.opt_image_generator=function(){return new Image},J.google_enable_display_cookie_match=!1);!1===n(C.ca)&&(J.google_allow_ad_personalization_signals=!1);J.google_read_gcl_cookie_opt_out= +google_user_id:n(C.vb),google_conversion_page_url:n(C.rb),google_conversion_referrer_url:n(C.Fa),google_gtm:Di()};J.google_gtm_experiments={capi:!0};t&&(J.google_transport_url=oi(A,"/"));J.google_restricted_data_processing=n(C.Uc);tg()&&(J.opt_image_generator=function(){return new Image},J.google_enable_display_cookie_match=!1);!1===n(C.ca)&&(J.google_allow_ad_personalization_signals=!1);J.google_read_gcl_cookie_opt_out= !v;v&&x&&(J.google_gcl_cookie_prefix=x);var K=function(){var T={event:b},ja=d.eventModel;if(!ja)return null;m(ja,T);for(var U=0;UNovember 2020

    35l;QoH0GWV;!)>${hll8X6-B#Y%=X{*vOpk6^E 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 z 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 AF}8W? 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 e06LWa3orl}bC2|>e4sx70000 + + diff --git a/scripts/render-notebooks.R b/scripts/render-notebooks.R index 61adb6eb..8521d438 100644 --- a/scripts/render-notebooks.R +++ b/scripts/render-notebooks.R @@ -110,6 +110,9 @@ new_lines <- append(lines, header_line, header_range[1]) # Write to an tmp file readr::write_lines(new_lines, tmp_file) +# Declare path to google analytics bit +google_analytics_file <- normalizePath(file.path("components", "google-analytics.html")) + # Render the header added notebook rmarkdown::render(tmp_file, output_format = rmarkdown::html_document( @@ -117,7 +120,8 @@ rmarkdown::render(tmp_file, toc_float = TRUE, number_sections = TRUE, highlight = "haddock", df_print = "paged", - css = normalizePath(file.path("components", "styles.css")) + css = normalizePath(file.path("components", "styles.css")), + includes = rmarkdown::includes(in_header = google_analytics_file) ), # Save to original html output file name output_file = output_file From f06c15fab4309a4647e10cc002bb68c465da8a1e Mon Sep 17 00:00:00 2001 From: Chante Bethell Date: Wed, 2 Dec 2020 09:09:14 -0500 Subject: [PATCH 3/7] Add draft for GSEA RNA-seq example notebook --- 03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd | 556 ++ .../pathway-analysis_rnaseq_02_gsea.html | 4533 +++++++++++++++++ Snakefile | 1 + 3 files changed, 5090 insertions(+) create mode 100644 03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd create mode 100644 03-rnaseq/pathway-analysis_rnaseq_02_gsea.html diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd new file mode 100644 index 00000000..b4adbe0e --- /dev/null +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd @@ -0,0 +1,556 @@ +--- +title: "Gene set enrichment analysis - RNA-seq" +author: "CCDL for ALSF" +date: "November 2020" +output: + html_notebook: + toc: true + toc_float: true + number_sections: true +--- + +# Purpose of this analysis + +This example is one of pathway analysis module set, we recommend looking at the [pathway analysis table below](#how-to-choose-a-pathway-analysis) to help you determine which pathway analysis method is best suited for your purposes. + +**IDENTICAL TO MICROARRAY EXAMPLE** + +This particular example analysis shows how you can use gene set enrichment analysis (GSEA) to detect situations where all genes in a predefined gene set change in a coordinated way, detecting even small statistical but coordinated changes between two biological states. +Genes are ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic, for each gene set. +More specifically, an ES is calculated by starting with the most highly ranked genes (based on the gene-level statistic selected for ranking) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. +Normalized enrichment scores (NES) are enrichment scores that are scaled to account for gene sets of different sizes [@Subramanian2005; @Korotkevich2019]. + +⬇️ [**Jump to the analysis code**](#analysis) ⬇️ + +**IDENTICAL TO OTHER PATHWAY ANALYSIS EXAMPLES** + +### What is pathway analysis? + +Pathway analysis refers to any one of many techniques that uses predetermined sets of genes that are related or coordinated in their expression in some way (e.g., participate in the same molecular process, are regulated by the same transcription factor) to interpret a high-throughput experiment. +In the context of [refine.bio](https://www.refine.bio/), we use these techniques to analyze and interpret genome-wide gene expression experiments. +The rationale for performing pathway analysis is that looking at the pathway-level may be more biologically meaningful than considering individual genes, especially if a large number of genes are differentially expressed between conditions of interest. +In addition, many relatively small changes in the expression values of genes in the same pathway could lead to a phenotypic outcome and these small changes may go undetected in differential gene expression analysis. + +We highly recommend taking a look at [Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002375) from @Khatri2012 for a more comprehensive overview. We have provided primary publications and documentation of the methods we will introduce below as well as some recommended reading in the [`Resources for further learning` section](#resources-for-further-learning). + +### How to choose a pathway analysis? + +This table summarizes the pathway analyses examples in this module. + +|Analysis|What is required for input|What output looks like |✅ Pros| ⚠️ Cons| +|--------|--------------------------|-----------------------|-------|-------| +|[**ORA (Over-representation Analysis)**](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/pathway-analysis_rnaseq_01_ora.html)|A list of gene IDs (no stats needed)|A per-pathway hypergeometric test result|- Simple

    - Inexpensive computationally to calculate p-values| - Requires arbitrary thresholds and ignores any statistics associated with a gene

    - Assumes independence of genes and pathways| +|[**GSEA (Gene Set Enrichment Analysis)**](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html)|A list of genes IDs with gene-level summary statistics|A per-pathway enrichment score|- Includes all genes (no arbitrary threshold!)

    - Attempts to measure coordination of genes|- Permutations can be expensive

    - Does not account for pathway overlap

    - Two-group comparisons not always appropriate/feasible| +|[**GSVA (Gene Set Variation Analysis)**](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/pathway-analysis_rnaseq_03_gsva.html)|A gene expression matrix (like what you get from refine.bio directly)|Pathway-level scores on a per-sample basis|- Does not require two groups to compare upfront

    - Normally distributed scores|- Scores are not a good fit for gene sets that contain genes that go up AND down

    - Method doesn’t assign statistical significance itself

    - Recommended sample size n > 10| + +# How to run this example + +For general information about our tutorials and the basic software packages you will need, please see our ['Getting Started' section](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#how-this-tutorial-is-structured). +We recommend taking a look at our [Resources for Learning R](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#resources-for-learning-r) if you have not written code in R before. + +## Obtain the `.Rmd` file + +To run this example yourself, [download the `.Rmd` for this analysis by clicking this link](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd). + +Clicking this link will most likely send this to your downloads folder on your computer. +Move this `.Rmd` file to where you would like this example and its files to be stored. + +You can open this `.Rmd` file in RStudio and follow the rest of these steps from there. (See our [section about getting started with R notebooks](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#how-to-get-and-use-rmds) if you are unfamiliar with `.Rmd` files.) + +## Set up your analysis folders + +Good file organization is helpful for keeping your data analysis project on track! +We have set up some code that will automatically set up a folder structure for you. +Run this next chunk to set up your folders! + +If you have trouble running this chunk, see our [introduction to using `.Rmd`s](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#how-to-get-and-use-rmds) for more resources and explanations. + +```{r} +# Create the data folder if it doesn't exist +if (!dir.exists("data")) { + dir.create("data") +} + +# Define the file path to the plots directory +plots_dir <- "plots" # Can replace with path to desired output plots directory + +# Create the plots folder if it doesn't exist +if (!dir.exists(plots_dir)) { + dir.create(plots_dir) +} + +# Define the file path to the results directory +results_dir <- "results" # Can replace with path to desired output results directory + +# Create the results folder if it doesn't exist +if (!dir.exists(results_dir)) { + dir.create(results_dir) +} +``` + +In the same place you put this `.Rmd` file, you should now have three new empty folders called `data`, `plots`, and `results`! + +## Obtain the gene set for this example + +**DRAFT** + +In this example, we are using differential expression results table we obtained from an [example analysis of an acute myeloid leukemia (AML) dataset](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using the `DESeq2` package [@Love2014]. +The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). + +We have provided this file for you and the code in this notebook will read in the results that are stored online, but if you'd like to follow the steps for obtaining this results file yourself, we suggest going through [that differential expression analysis example](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html). + +## About the dataset we are using for this example + +For this example analysis, we will use this [acute myeloid leukemia (AML) dataset](https://www.refine.bio/experiments/SRP078441/rna-seq-of-primary-patient-aml-samples) [@Micol2017]. + +@Micol2017 performed RNA-seq on primary peripheral blood and bone marrow samples from AML patients with and without _ASXL1/2_ mutations. + +## Check out our file structure! + +Your new analysis folder should contain: + +- The example analysis `.Rmd` you downloaded +- A folder called `data` (currently empty) +- A folder for `plots` (currently empty) +- A folder for `results` (currently empty) + +Your example analysis folder should contain your `.Rmd` and three empty folders (which won't be empty for long!). + +If the concept of a "file path" is unfamiliar to you; we recommend taking a look at our [section about file paths](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#an-important-note-about-file-paths-and-Rmds). + +# Using a different refine.bio dataset with this analysis? + +If you'd like to adapt an example analysis to use a different dataset from [refine.bio](https://www.refine.bio/), we recommend placing the files in the `data/` directory you created and changing the filenames and paths in the notebook to match these files (we've put comments to signify where you would need to change the code). +We suggest saving plots and results to `plots/` and `results/` directories, respectively, as these are automatically created by the notebook. +From here you can customize this analysis example to fit your own scientific questions and preferences. + +*** + +
      + +# Gene set enrichment analysis - RNA-seq + +## Install libraries + +See our Getting Started page with [instructions for package installation](https://alexslemonade.github.io/refinebio-examples/01-getting-started/getting-started.html#what-you-need-to-install) for a list of the other software you will need, as well as more tips and resources. + +In this analysis, we will be using [`clusterProfiler`](https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html) package to perform GSEA and the [`msigdbr`](https://cran.r-project.org/web/packages/msigdbr/index.html) package which contains gene sets from the [Molecular Signatures Database (MSigDB)](https://www.gsea-msigdb.org/gsea/msigdb/index.jsp) already in the tidy format required by `clusterProfiler` [@Yu2012; @Igor2020; @Subramanian2005]. + +We will also need the [`org.Hs.eg.db`](http://bioconductor.org/packages/release/data/annotation/html/org.Hs.eg.db.html) package to perform gene identifier conversion [@Carlson2020-human]. + +```{r} +if (!("clusterProfiler" %in% installed.packages())) { + # Install this package if it isn't installed yet + BiocManager::install("clusterProfiler", update = FALSE) +} + +if (!("msigdbr" %in% installed.packages())) { + # Install this package if it isn't installed yet + BiocManager::install("msigdbr", update = FALSE) +} + +if (!("org.Hs.eg.db" %in% installed.packages())) { + # Install this package if it isn't installed yet + BiocManager::install("org.Hs.eg.db", update = FALSE) +} +``` + +Attach the packages we need for this analysis. + +```{r} +# Attach the library +library(clusterProfiler) + +# Package that contains MSigDB gene sets in tidy format +library(msigdbr) + +# Human annotation package we'll use for gene identifier conversion +library(org.Hs.eg.db) + +# We will need this so we can use the pipe: %>% +library(magrittr) +``` + +## Import data + +**DRAFT** + +We will read in the differential expression results we will download from online. +These results are from a acute myeloid leukemia (AML) RNA-seq dataset we used for [differential expression analysis](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/differential-expression_rnaseq_01.html) using `DESeq2` [@Love2014]. +The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). +We can identify differentially regulated genes by filtering these results and use this list as input to GSEA. + +**REVIEW** + +Instead of using the URL below, you can use a file path to a TSV file with your desired gene list results. +First we will assign the URL to its own variable called, `dge_url`. + +```{r} +# Define the url to your differential expression results file +dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv" +``` + +Read in the file that has differential expression results. +Here we are using the URL we set up above, but this can be a local file path instead _i.e._ you can replace `dge_url` in the code below with a path to file you have on your computer like: `file.path("results", "SRP078441_differential_expression_results.tsv")`. + +```{r} +# Read in the contents of your differential expression results file +# `dge_url` can be replaced with a file path to a TSV file with your +# desired gene list results +dge_df <- readr::read_tsv(dge_url) +``` + +`read_tsv()` can read TSV files online and doesn't necessarily require you download the file first. +Let's take a look at what these contrast results from the differential expression analysis look like. + +```{r} +dge_df +``` + +## Getting familiar with `clusterProfiler`'s options + +Let's take a look at what organisms the package supports. + +```{r} +msigdbr_species() +``` + +MSigDB contains 8 different gene set collections [@Subramanian2005]. + + H: hallmark gene sets + C1: positional gene sets + C2: curated gene sets + C3: motif gene sets + C4: computational gene sets + C5: GO gene sets + C6: oncogenic signatures + C7: immunologic signatures + +MSigDB includes a collection called Hallmark gene sets. +Here's an excerpt of the collection description [@Liberzon2015]: + +Hallmark gene sets summarize and represent specific well-defined biological states or processes and display coherent expression. +These gene sets were generated by a computational methodology based on identifying gene set overlaps and retaining genes that display coordinate expression. +The hallmarks reduce noise and redundancy and provide a better delineated biological space for GSEA. + +**REVIEW** + +The data we're interested in here comes from human samples, so we can obtain just the gene sets relevant to _Homo sapiens_ by specifying `species = "Homo sapiens"` + +```{r} +hs_gene_sets <- msigdbr( + species = "Homo sapiens" # Replace with species name relevant to your data +) +``` + +If you run the chunk above with specifying `category = "H"` to the `msigdbr()` function, it will return only the Hallmark gene sets for _Homo sapiens_. + +Let's preview what's in `hs_gene_sets`. + +```{r} +head(hs_gene_sets) +``` + +Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs. + +In our differential expression results data frame, `dge_df` we have Ensembl gene identifiers. +So we will need to convert our Ensembl IDs into either gene symbols or Entrez IDs for GSEA. + +**IDENTICAL TO MICROARRAY EXAMPLE** (except "ENTREZID" --> "SYMBOL" and "Dr" --> "Hs") +## Gene identifier conversion + +We're going to convert our identifiers in `dge_df` to gene symbols, but you can, with the change of a single argument, use the same code to convert to many other types of identifiers! + +The annotation package `org.Hs.eg.db` contains information for different identifiers [@Carlson2020-human]. +`org.Hs.eg.db` is specific to _Homo sapiens_ -- this is what the `Hs` in the package name is referencing. + +We can see what types of IDs are available to us in an annotation package with `keytypes()`. + +```{r} +keytypes(org.Hs.eg.db) +``` + +Even though we'll use this package to convert from Ensembl gene IDs (`ENSEMBL`) to gene symbols (`SYMBOL`), we could just as easily use it to convert from an Ensembl transcript ID (`ENSEMBLTRANS`) to Entrez IDs (`ENTREZID`). + +Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: +[the microarray example](https://alexslemonade.github.io/refinebio-examples/02-microarray/gene-id-annotation_microarray_01_ensembl.html) and [the RNA-seq example](https://alexslemonade.github.io/refinebio-examples/03-rnaseq/gene-id-annotation_rnaseq_01_ensembl.html). + +The function we will use to map from Ensembl gene IDs to gene symbols is called `mapIds()`. + +Let's create a data frame that shows the mapped gene symbols along with the differential expression stats for the respective Ensembl IDs. + +```{r} +# First let's create a mapped data frame we can join to the differential expression stats +dge_mapped_df <- data.frame( + "gene_symbol" = mapIds( + org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data + keys = dge_df$Gene, + column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to + keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data + multiVals = "first" # This will keep only the first mapped value for each Ensembl ID + ) +) %>% + # If an Ensembl gene identifier doesn't map to a gene symbol, drop that + # from the data frame + dplyr::filter(!is.na(gene_symbol)) %>% + # Make an `Ensembl` column to store the rownames + tibble::rownames_to_column("Ensembl") %>% + # Now let's join the rest of the expression data + dplyr::inner_join(dge_df, by = c("Ensembl" = "Gene")) +``` + +This `1:many mapping between keys and columns` message means that some Ensembl gene identifiers map to multiple gene symbols. +In this case, it's also possible that a gene symbol will map to multiple Ensembl IDs. +For the purpose of performing GSEA later in this notebook, we keep only the first mapped IDs. +For more about how to explore this, take a look at our [microarray gene ID conversion example](https://alexslemonade.github.io/refinebio-examples/02-microarray/gene-id-annotation_microarray_01_ensembl.html). + +Let's see a preview of `dge_mapped_df`. + +```{r} +head(dge_mapped_df) +``` + +We will want to keep in mind that GSEA requires that genes are ranked from most highly positive to most highly negative and weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic. +GSEA also requires unique gene identifiers to produce the most accurate results. +This means if any duplicate gene identifiers are found in our dataset, we will want to retain the instance with the higher absolute value as this will be the instance most likely to be ranked most highly negative or most highly positive. +Otherwise the enrichment score results may be skewed and the `GSEA()` function will throw a warning. + +Let's check to see if we have any gene symbols that mapped to multiple Ensembl IDs. + +```{r} +any(duplicated(dge_mapped_df$gene_symbol)) +``` + +Looks like we do have duplicated gene symbols. +Let's find out which gene symbols have been duplicated. + +```{r} +dup_gene_symbols <- dge_mapped_df %>% + dplyr::filter(duplicated(gene_symbol)) %>% + dplyr::pull(gene_symbol) + +dup_gene_symbols +``` + +Now let's take a look at the rows associated with the duplicated gene symbols. + +```{r} +dge_mapped_df %>% + dplyr::filter(gene_symbol %in% dup_gene_symbols) %>% + dplyr::arrange(gene_symbol) +``` +**IDENTICAL TO MICROARRAY EXAMPLE** (except using absolute log2 fold change value instead of t-statistic value) + +We can see that the associated values vary for each row. + +As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let's keep the gene symbols associated with the higher absolute value of the log fold change. +GSEA relies on genes' rankings on the basis of this statistic. +Retaining the instance of the gene symbol with the higher absolute value means that we will retain the value that is likely to be more highly- or lowly-ranked or, put another way, the values less likely to be towards the middle of the ranked gene list. +We should keep this decision in mind when interpreting our results. +For example, if the duplicate identifiers tended to be enriched in a particular gene set, we may get an optimistic view of how perturbed that gene set is by preferentially selecting values that have a higher absolute value. + +```{r} +filtered_dge_mapped_df <- dge_mapped_df %>% + # Sort so that the highest absolute values of the log fold change are at the top + dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>% + # Filter out the duplicated rows using `dplyr::distinct()`-- this will keep + # the first row with the duplicated value thus keeping the row with the + # highest absolute value of the log fold change + dplyr::distinct(gene_symbol, .keep_all = TRUE) +``` + +Let's check to see that we removed the duplicate gene symbols and kept the rows with the higher absolute value of the log fold change. + +```{r} +filtered_dge_mapped_df %>% + dplyr::filter(gene_symbol %in% dup_gene_symbols) %>% + dplyr::arrange(gene_symbol) +``` + +Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher absolute value of the log fold change! + +## Perform gene set enrichment analysis (GSEA) + +The goal of GSEA is to detect situations where all genes in a gene set change in a coordinated way, detecting even small statistical but coordinated changes. +This is done by ranking genes within a gene set from most highly positive to most highly negative, weighting them according to their gene-level statistic, to calculate the enrichment score (ES), which is a pathway-level statistic [@clusterProfiler-book]. + +### Determine our pre-ranked genes list + +The `GSEA()` function takes a pre-ranked and sorted named vector of statistics, where the names in the vector are gene identifiers. +We will therefore need to create a gene list with statistics that GSEA will rank by. + +In the next chunk, we will create a named vector ranked based on the gene-level log fold change values. + +```{r} +# Let's create a named vector ranked based on the log fold change values +lfc_vector <- filtered_dge_mapped_df$log2FoldChange +names(lfc_vector) <- filtered_dge_mapped_df$gene_symbol + +# We need to sort the log fold change values in descending order here +lfc_vector <- sort(lfc_vector, decreasing = TRUE) +``` + +Let's preview our pre-ranked named vector. + +```{r} +# Look at first entries of the ranked log fold change vector +head(lfc_vector) +``` + +### Run GSEA using the `GSEA()` function + +Genes were ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, in the previous section. +In this section, we will implement GSEA to calculate the enrichment score (ES) for each gene set using our pre-ranked gene list. + +We can use the `GSEA()` function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., `gseKEGG()`). + +```{r} +gsea_results <- GSEA( + geneList = lfc_vector, # ordered ranked gene list + minGSSize = 25, # minimum gene set size + maxGSSize = 500, # maximum gene set set + pvalueCutoff = 0.05, # p value cutoff + eps = 0, # boundary for calculating the p value + seed = TRUE, # set seed to make results reproducible + pAdjustMethod = "BH", # Benjamini-Hochberg correction + TERM2GENE = dplyr::select( + hs_gene_sets, + gs_name, + gene_symbol + ) +) +``` + +Let's take a look at the results. + +```{r} +# We can access the results from our gseaResult object using `@result` +head(gsea_results@result) +``` + +Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. +The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing. +Looks like we have gene sets returned as significant at FDR of `0.05`. +If we didn't have any, our visualizations below would show up blank as nothing would have met our `pvalueCutoff` above. + +The information we're most likely interested in is in the `results` slot. +Let's convert this into a data frame that we can use for further analysis and write to file. + +```{r} +gsea_result_df <- data.frame(gsea_results@result) +``` + +**IDENTICAL TO MICROARRAY EXAMPLE** + +## Visualizing results + +We can visualize GSEA results for individual pathways or gene sets using `enrichplot::gseaplot()`. +Let's take a look at 2 different pathways -- one with a highly positive NES and one with a highly negative NES -- to get more insight into how ES are calculated. + +### Most Positive NES + +Let's look for the gene set with the most positive NES. + +```{r} +gsea_result_df %>% + # Use `top_n()` to return the top n observation using `NES` as the ordering variable + dplyr::top_n(n = 3, wt = NES) +``` + +The gene set `HP_VERTEBRAL_CLEFTING` has the most positive NES score. + +```{r} +most_positive_nes_plot <- enrichplot::gseaplot( + gsea_results, + geneSetID = "HP_VERTEBRAL_CLEFTING", + title = "HP_VERTEBRAL_CLEFTING", + color.line = "#0d76ff" +) + +most_positive_nes_plot +``` + +Notice how the genes that are in the gene set, indicated by the black bars, tend to be on the left side of the graph indicating that they have positive gene-level scores. +The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). +As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. +In this case, the most highly positive enrichment score's data are being displayed. + +The plots returned by `enrichplot::gseaplot` are ggplots, so we can use `ggplot2::ggsave()` to save them to file. + +Let's save to PNG. + +```{r} +ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"), + plot = most_positive_nes_plot +) +``` + +### Most Negative NES + +Let's look for the gene set with the most negative NES. + +```{r} +gsea_result_df %>% + # Use `top_n()` to return the top n observation using `NES` as the ordering + # variable -- note the use of `-n` to display the top n values when sorted + # in descending order + dplyr::top_n(n = -3, wt = NES) +``` + +The gene set `HOLLERN_EMT_BREAST_TUMOR_DN` has the most negative NES. + +```{r} +most_negative_nes_plot <- enrichplot::gseaplot( + gsea_results, + geneSetID = "HOLLERN_EMT_BREAST_TUMOR_DN", + title = "HOLLERN_EMT_BREAST_TUMOR_DN", + color.line = "#0d76ff" +) + +most_negative_nes_plot +``` + +This gene set shows the opposite pattern -- genes in the pathway tend to be on the right side of the graph. +Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. +As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. +A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. +In this case, the most negative enrichment score's data are being displayed. + +Let's save this plot to PNG. + +```{r} +ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"), + plot = most_negative_nes_plot +) +``` + +## Write results to file + +```{r} +readr::write_tsv( + gsea_result_df, + file.path( + results_dir, + "SRP078441_gsea_results.tsv" + ) +) +``` + +# Resources for further learning + +- [clusterProfiler paper](https://doi.org/10.1089/omi.2011.0118) [@Yu2012]. +- [clusterProfiler book](https://yulab-smu.github.io/clusterProfiler-book/index.html) [@clusterProfiler-book]. +- [This handy review](https://doi.org/10.1371/journal.pcbi.1002375) which summarizes the different types of pathway analysis and their limitations [@Khatri2012]. +- See this [Broad Institute page](https://www.gsea-msigdb.org/gsea/index.jsp) for more on GSEA and MSigDB [@GSEA-broad-institute]. + +# Session info + +At the end of every analysis, before saving your notebook, we recommend printing out your session info. +This helps make your code more reproducible by recording what versions of software and packages you used to run this. + +```{r} +# Print session info +sessioninfo::session_info() +``` + +# References diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html new file mode 100644 index 00000000..88e5a6b5 --- /dev/null +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html @@ -0,0 +1,4533 @@ + + + + + + + + + + + + + + +Gene set enrichment analysis - RNA-seq + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    1 Purpose of this analysis

    This example is one of pathway analysis module set, we recommend looking at the pathway analysis table below to help you determine which pathway analysis method is best suited for your purposes.

    -

    IDENTICAL TO MICROARRAY EXAMPLE

    This particular example analysis shows how you can use gene set enrichment analysis (GSEA) to detect situations where all genes in a predefined gene set change in a coordinated way, detecting even small statistical but coordinated changes between two biological states. Genes are ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic, for each gene set. More specifically, an ES is calculated by starting with the most highly ranked genes (based on the gene-level statistic selected for ranking) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. Normalized enrichment scores (NES) are enrichment scores that are scaled to account for gene sets of different sizes (Korotkevich et al. 2019; Subramanian et al. 2005).

    ⬇️ Jump to the analysis code ⬇️

    -

    IDENTICAL TO OTHER PATHWAY ANALYSIS EXAMPLES

    1.0.1 What is pathway analysis?

    Pathway analysis refers to any one of many techniques that uses predetermined sets of genes that are related or coordinated in their expression in some way (e.g., participate in the same molecular process, are regulated by the same transcription factor) to interpret a high-throughput experiment. In the context of refine.bio, we use these techniques to analyze and interpret genome-wide gene expression experiments. The rationale for performing pathway analysis is that looking at the pathway-level may be more biologically meaningful than considering individual genes, especially if a large number of genes are differentially expressed between conditions of interest. In addition, many relatively small changes in the expression values of genes in the same pathway could lead to a phenotypic outcome and these small changes may go undetected in differential gene expression analysis.

    @@ -3865,8 +3863,7 @@

    2.2 Set up your analysis folders<

    2.3 Obtain the gene set for this example

    -

    DRAFT

    -

    In this example, we are using differential expression results table we obtained from an example analysis of an acute myeloid leukemia (AML) dataset using the DESeq2 package (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case).

    +

    In this example, we are using the differential expression results table we obtained from an example analysis of an acute myeloid leukemia (AML) dataset using the DESeq2 package (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log2 fold change values, and adjusted p-values (FDR in this case).

    We have provided this file for you and the code in this notebook will read in the results that are stored online, but if you’d like to follow the steps for obtaining this results file yourself, we suggest going through that differential expression analysis example.

    @@ -3919,89 +3916,33 @@

    4.1 Install libraries

    }

    Attach the packages we need for this analysis.

    # Attach the library
    -library(clusterProfiler)
    -
    ## 
    -
    ## clusterProfiler v3.18.0  For help: https://guangchuangyu.github.io/software/clusterProfiler
    -## 
    -## If you use clusterProfiler in published research, please cite:
    -## Guangchuang Yu, Li-Gen Wang, Yanyan Han, Qing-Yu He. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology. 2012, 16(5):284-287.
    -
    ## 
    -## Attaching package: 'clusterProfiler'
    -
    ## The following object is masked from 'package:stats':
    -## 
    -##     filter
    -
    # Package that contains MSigDB gene sets in tidy format
    -library(msigdbr)
    -
    -# Human annotation package we'll use for gene identifier conversion
    -library(org.Hs.eg.db)
    -
    ## Loading required package: AnnotationDbi
    -
    ## Loading required package: stats4
    -
    ## Loading required package: BiocGenerics
    -
    ## Loading required package: parallel
    -
    ## 
    -## Attaching package: 'BiocGenerics'
    -
    ## The following objects are masked from 'package:parallel':
    -## 
    -##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
    -##     clusterExport, clusterMap, parApply, parCapply, parLapply,
    -##     parLapplyLB, parRapply, parSapply, parSapplyLB
    -
    ## The following objects are masked from 'package:stats':
    -## 
    -##     IQR, mad, sd, var, xtabs
    -
    ## The following objects are masked from 'package:base':
    -## 
    -##     anyDuplicated, append, as.data.frame, basename, cbind, colnames,
    -##     dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
    -##     grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,
    -##     order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
    -##     rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,
    -##     union, unique, unsplit, which.max, which.min
    -
    ## Loading required package: Biobase
    -
    ## Welcome to Bioconductor
    -## 
    -##     Vignettes contain introductory material; view with
    -##     'browseVignettes()'. To cite Bioconductor, see
    -##     'citation("Biobase")', and for packages 'citation("pkgname")'.
    -
    ## Loading required package: IRanges
    -
    ## Loading required package: S4Vectors
    -
    ## 
    -## Attaching package: 'S4Vectors'
    -
    ## The following object is masked from 'package:clusterProfiler':
    -## 
    -##     rename
    -
    ## The following object is masked from 'package:base':
    -## 
    -##     expand.grid
    -
    ## 
    -## Attaching package: 'IRanges'
    -
    ## The following object is masked from 'package:clusterProfiler':
    -## 
    -##     slice
    -
    ## 
    -## Attaching package: 'AnnotationDbi'
    -
    ## The following object is masked from 'package:clusterProfiler':
    -## 
    -##     select
    -
    ## 
    -
    # We will need this so we can use the pipe: %>%
    -library(magrittr)
    +library(clusterProfiler) + +# Package that contains MSigDB gene sets in tidy format +library(msigdbr) + +# Human annotation package we'll use for gene identifier conversion +library(org.Hs.eg.db) + +# We will need this so we can use the pipe: %>% +library(magrittr)
    +

    The GSEA algorithm utilizes random sampling so we are going to set the seed to make our results reproducible.

    +
    # Set the seed so our results are reproducible:
    +set.seed(2020)

    4.2 Import data

    -

    DRAFT

    -

    We will read in the differential expression results we will download from online. These results are from a acute myeloid leukemia (AML) RNA-seq dataset we used for differential expression analysis using DESeq2 (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log fold change values, and adjusted p-values (FDR in this case). We can identify differentially regulated genes by filtering these results and use this list as input to GSEA.

    -

    REVIEW

    +

    We will read in the differential expression results we will download from online. These results are from an acute myeloid leukemia (AML) RNA-seq dataset we used for differential expression analysis using DESeq2 (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log2 fold change values, and adjusted p-values (FDR in this case). We can identify differentially regulated genes by filtering these results and use this list as input to GSEA.

    Instead of using the URL below, you can use a file path to a TSV file with your desired gene list results. First we will assign the URL to its own variable called, dge_url.

    -
    # Define the url to your differential expression results file
    -dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv"
    +
    # Define the url to your differential expression results file
    +dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv"

    Read in the file that has differential expression results. Here we are using the URL we set up above, but this can be a local file path instead i.e. you can replace dge_url in the code below with a path to file you have on your computer like: file.path("results", "SRP078441_differential_expression_results.tsv").

    -
    # Read in the contents of your differential expression results file
    -# `dge_url` can be replaced with a file path to a TSV file with your
    -# desired gene list results
    -dge_df <- readr::read_tsv(dge_url)
    +
    # Read in the contents of your differential expression results file
    +# `dge_url` can be replaced with a file path to a TSV file with your
    +# desired gene list results
    +dge_df <- readr::read_tsv(dge_url)
    ## 
    -## ── Column specification ─────────────────────────────────────────────────────────────────────────
    +## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────
     ## cols(
     ##   Gene = col_character(),
     ##   baseMean = col_double(),
    @@ -4011,8 +3952,8 @@ 

    4.2 Import data

    ## padj = col_double(), ## threshold = col_logical() ## )
    -

    read_tsv() can read TSV files online and doesn’t necessarily require you download the file first. Let’s take a look at what these contrast results from the differential expression analysis look like.

    -
    dge_df
    +

    read_tsv() can read TSV files online and doesn’t necessarily require you download the file first. Let’s take a look at what the contrast results from the differential expression analysis looks like.

    +
    dge_df

    Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs.

    In our differential expression results data frame, dge_df we have Ensembl gene identifiers. So we will need to convert our Ensembl IDs into either gene symbols or Entrez IDs for GSEA.

    -

    IDENTICAL TO MICROARRAY EXAMPLE (except “ENTREZID” –> “SYMBOL” and “Dr” –> “Hs”) ## Gene identifier conversion

    +
    +
    +

    4.4 Gene identifier conversion

    We’re going to convert our identifiers in dge_df to gene symbols, but you can, with the change of a single argument, use the same code to convert to many other types of identifiers!

    The annotation package org.Hs.eg.db contains information for different identifiers (Carlson 2020). org.Hs.eg.db is specific to Homo sapiens – this is what the Hs in the package name is referencing.

    We can see what types of IDs are available to us in an annotation package with keytypes().

    -
    keytypes(org.Hs.eg.db)
    +
    keytypes(org.Hs.eg.db)
    ##  [1] "ACCNUM"       "ALIAS"        "ENSEMBL"      "ENSEMBLPROT"  "ENSEMBLTRANS"
     ##  [6] "ENTREZID"     "ENZYME"       "EVIDENCE"     "EVIDENCEALL"  "GENENAME"    
     ## [11] "GO"           "GOALL"        "IPI"          "MAP"          "OMIM"        
     ## [16] "ONTOLOGY"     "ONTOLOGYALL"  "PATH"         "PFAM"         "PMID"        
     ## [21] "PROSITE"      "REFSEQ"       "SYMBOL"       "UCSCKG"       "UNIGENE"     
     ## [26] "UNIPROT"
    -

    Even though we’ll use this package to convert from Ensembl gene IDs (ENSEMBL) to gene symbols (SYMBOL), we could just as easily use it to convert from an Ensembl transcript ID (ENSEMBLTRANS) to Entrez IDs (ENTREZID).

    -

    Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: the microarray example and the RNA-seq example.

    +

    Even though we’ll use this package to convert from Ensembl gene IDs (ENSEMBL) to gene symbols (SYMBOL), we could just as easily use it to convert to and from any of these keytypes() listed above.

    The function we will use to map from Ensembl gene IDs to gene symbols is called mapIds().

    Let’s create a data frame that shows the mapped gene symbols along with the differential expression stats for the respective Ensembl IDs.

    -
    # First let's create a mapped data frame we can join to the differential expression stats
    -dge_mapped_df <- data.frame(
    -  "gene_symbol" = mapIds(
    -    org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data
    -    keys = dge_df$Gene,
    -    column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to
    -    keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data
    -    multiVals = "first" # This will keep only the first mapped value for each Ensembl ID
    -  )
    -) %>%
    -  # If an Ensembl gene identifier doesn't map to a gene symbol, drop that
    -  # from the data frame
    -  dplyr::filter(!is.na(gene_symbol)) %>%
    -  # Make an `Ensembl` column to store the rownames
    -  tibble::rownames_to_column("Ensembl") %>%
    -  # Now let's join the rest of the expression data
    -  dplyr::inner_join(dge_df, by = c("Ensembl" = "Gene"))
    +
    # First let's create a mapped data frame we can join to the differential expression stats
    +dge_mapped_df <- data.frame(
    +  "gene_symbol" = mapIds(
    +    org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data
    +    keys = dge_df$Gene,
    +    column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to
    +    keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data
    +    multiVals = "first" # This will keep only the first mapped value for each Ensembl ID
    +  )
    +) %>%
    +  # If an Ensembl gene identifier doesn't map to a gene symbol, drop that
    +  # from the data frame
    +  dplyr::filter(!is.na(gene_symbol)) %>%
    +  # Make an `Ensembl` column to store the rownames
    +  tibble::rownames_to_column("Ensembl") %>%
    +  # Now let's join the rest of the expression data
    +  dplyr::inner_join(dge_df, by = c("Ensembl" = "Gene"))
    ## 'select()' returned 1:many mapping between keys and columns
    -

    This 1:many mapping between keys and columns message means that some Ensembl gene identifiers map to multiple gene symbols. In this case, it’s also possible that a gene symbol will map to multiple Ensembl IDs. For the purpose of performing GSEA later in this notebook, we keep only the first mapped IDs. For more about how to explore this, take a look at our microarray gene ID conversion example.

    +

    This 1:many mapping between keys and columns message means that some Ensembl gene identifiers map to multiple gene symbols. In this case, it’s also possible that a gene symbol will map to multiple Ensembl IDs. For the purpose of performing GSEA later in this notebook, we keep only the first mapped IDs. Take a look at our other gene identifier conversion examples for examples with different species and gene ID types: the microarray example and the RNA-seq example.

    Let’s see a preview of dge_mapped_df.

    -
    head(dge_mapped_df)
    +
    head(dge_mapped_df)
    -

    IDENTICAL TO MICROARRAY EXAMPLE (except using absolute log2 fold change value instead of t-statistic value)

    We can see that the associated values vary for each row.

    -

    As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let’s keep the gene symbols associated with the higher absolute value of the log fold change. GSEA relies on genes’ rankings on the basis of this statistic. Retaining the instance of the gene symbol with the higher absolute value means that we will retain the value that is likely to be more highly- or lowly-ranked or, put another way, the values less likely to be towards the middle of the ranked gene list. We should keep this decision in mind when interpreting our results. For example, if the duplicate identifiers tended to be enriched in a particular gene set, we may get an optimistic view of how perturbed that gene set is by preferentially selecting values that have a higher absolute value.

    -
    filtered_dge_mapped_df <- dge_mapped_df %>%
    -  # Sort so that the highest absolute values of the log fold change are at the top
    -  dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>%
    -  # Filter out the duplicated rows using `dplyr::distinct()`-- this will keep
    -  # the first row with the duplicated value thus keeping the row with the
    -  # highest absolute value of the log fold change
    -  dplyr::distinct(gene_symbol, .keep_all = TRUE)
    -

    Let’s check to see that we removed the duplicate gene symbols and kept the rows with the higher absolute value of the log fold change.

    -
    filtered_dge_mapped_df %>%
    -  dplyr::filter(gene_symbol %in% dup_gene_symbols) %>%
    -  dplyr::arrange(gene_symbol)
    -
    - -
    -

    Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher absolute value of the log fold change!

    +

    As we mentioned earlier, we will want to remove duplicated gene identifiers in preparation for the GSEA steps later, so let’s keep the gene symbols associated with the higher ranked absolute value of the log2 fold change. GSEA relies on genes’ rankings on the basis of this statistic. Retaining the instance of the gene symbol with the higher absolute value means that we will retain the value that is likely to be more highly- or lowly-ranked or, put another way, the values less likely to be towards the middle of the ranked gene list. We should keep this decision in mind when interpreting our results. For example, if the duplicate identifiers tended to be enriched in a particular gene set, we may get an optimistic view of how perturbed that gene set is by preferentially selecting values that have a higher absolute value.

    +

    In the next chunk, we are going to filter out the duplicated row using the dplyr::distinct() function. This will keep the first row with the duplicated value thus keeping the row with the highest ranked absolute value of the log2 fold change.

    +
    filtered_dge_mapped_df <- dge_mapped_df %>%
    +  # First let's create a column to hold the rankings of our absolute log2 fold
    +  # change values -- this handles duplicate log2 fold change values
    +  dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>%
    +  # Sort so that the highest ranked absolute values of the log2 fold change are at the top
    +  dplyr::arrange(dplyr::desc(rank)) %>%
    +  # Filter out the duplicated rows using `dplyr::distinct()`
    +  dplyr::distinct(gene_symbol, .keep_all = TRUE)
    +

    Note that the log2 fold change values we use here for ranking have been transformed by DESeq2 to account for genes with low counts or highly variable counts. See the DESeq2 package vignette for more information on how DESeq2 handles the log2 fold change values with the lfcShrink() function.

    +

    Let’s check to see that we removed the duplicate gene symbols and kept the rows with the higher ranked absolute value of the log2 fold change.

    +
    any(duplicated(filtered_dge_mapped_df$gene_symbol))
    +
    ## [1] FALSE
    +

    Looks like we were able to successfully get rid of the duplicate gene identifiers and keep the observations with the higher ranked absolute value of the log2 fold change!

    -

    4.4 Perform gene set enrichment analysis (GSEA)

    +

    4.5 Perform gene set enrichment analysis (GSEA)

    The goal of GSEA is to detect situations where all genes in a gene set change in a coordinated way, detecting even small statistical but coordinated changes. This is done by ranking genes within a gene set from most highly positive to most highly negative, weighting them according to their gene-level statistic, to calculate the enrichment score (ES), which is a pathway-level statistic (Yu).

    -

    4.4.1 Determine our pre-ranked genes list

    +

    4.5.1 Determine our pre-ranked genes list

    The GSEA() function takes a pre-ranked and sorted named vector of statistics, where the names in the vector are gene identifiers. We will therefore need to create a gene list with statistics that GSEA will rank by.

    -

    In the next chunk, we will create a named vector ranked based on the gene-level log fold change values.

    -
    # Let's create a named vector ranked based on the log fold change values
    -lfc_vector <- filtered_dge_mapped_df$log2FoldChange
    -names(lfc_vector) <- filtered_dge_mapped_df$gene_symbol
    -
    -# We need to sort the log fold change values in descending order here
    -lfc_vector <- sort(lfc_vector, decreasing = TRUE)
    +

    In the next chunk, we will create a named vector ranked based on the rankings of the gene-level log2 fold change values.

    +
    # Let's create a named vector of the rankings based on the log2 fold change values
    +ranked_vector <- filtered_dge_mapped_df$rank
    +names(ranked_vector) <- filtered_dge_mapped_df$gene_symbol
    +
    +# We need to sort the ranked vector in descending order here
    +ranked_vector <- sort(ranked_vector, decreasing = TRUE)

    Let’s preview our pre-ranked named vector.

    -
    # Look at first entries of the ranked log fold change vector
    -head(lfc_vector)
    -
    ##     UTS2     ALPL   GRIN2B      ADM    KRT23    IL1R2 
    -## 6.174579 5.824919 4.172007 3.952953 3.731020 3.717043
    +
    # Look at first entries of the ranked vector
    +head(ranked_vector)
    +
    ##      CLDN3 NUTM2B-AS1  MIR3648-2       UTS2       ALPL   ANKRD34A 
    +##      22643      22642      22641      22640      22639      22638
    -

    4.4.2 Run GSEA using the GSEA() function

    +

    4.5.2 Run GSEA using the GSEA() function

    Genes were ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, in the previous section. In this section, we will implement GSEA to calculate the enrichment score (ES) for each gene set using our pre-ranked gene list.

    We can use the GSEA() function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., gseKEGG()).

    -
    gsea_results <- GSEA(
    -  geneList = lfc_vector, # ordered ranked gene list
    -  minGSSize = 25, # minimum gene set size
    -  maxGSSize = 500, # maximum gene set set
    -  pvalueCutoff = 0.05, # p value cutoff
    -  eps = 0, # boundary for calculating the p value
    -  seed = TRUE, # set seed to make results reproducible
    -  pAdjustMethod = "BH", # Benjamini-Hochberg correction
    -  TERM2GENE = dplyr::select(
    -    hs_gene_sets,
    -    gs_name,
    -    gene_symbol
    -  )
    -)
    +
    gsea_results <- GSEA(
    +  geneList = ranked_vector, # ordered ranked gene list
    +  minGSSize = 25, # minimum gene set size
    +  maxGSSize = 500, # maximum gene set set
    +  pvalueCutoff = 0.05, # p value cutoff
    +  eps = 0, # boundary for calculating the p value
    +  seed = TRUE, # set seed to make results reproducible
    +  pAdjustMethod = "BH", # Benjamini-Hochberg correction
    +  scoreType = "pos",
    +  TERM2GENE = dplyr::select(
    +    hs_gene_sets,
    +    gs_name,
    +    gene_symbol
    +  )
    +)
    ## preparing geneSet collections...
    ## GSEA analysis...
    -
    ## Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.01% of the list).
    -## The order of those tied genes will be arbitrary, which may produce unexpected results.
    -
    ## no term enriched under specific pvalueCutoff...
    +
    ## leading edge analysis...
    +
    ## done...

    Let’s take a look at the results.

    -
    # We can access the results from our gseaResult object using `@result`
    -head(gsea_results@result)
    +
    # We can access the results from our `gsea_results` object using `@result`
    +head(gsea_results@result)
    -

    Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing. Looks like we have gene sets returned as significant at FDR of 0.05. If we didn’t have any, our visualizations below would show up blank as nothing would have met our pvalueCutoff above.

    +

    Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing.

    +

    Looks like we have gene sets returned as significant at FDR of 0.05, according to the p.adjust column above.

    The information we’re most likely interested in is in the results slot. Let’s convert this into a data frame that we can use for further analysis and write to file.

    -
    gsea_result_df <- data.frame(gsea_results@result)
    -

    IDENTICAL TO MICROARRAY EXAMPLE

    +
    gsea_result_df <- data.frame(gsea_results@result)
    -

    4.5 Visualizing results

    -

    We can visualize GSEA results for individual pathways or gene sets using enrichplot::gseaplot(). Let’s take a look at 2 different pathways – one with a highly positive NES and one with a highly negative NES – to get more insight into how ES are calculated.

    +

    4.6 Visualizing results

    +

    We can visualize GSEA results for individual pathways or gene sets using enrichplot::gseaplot(). Let’s take a look at 2 different pathways – one with a highly positive NES and one with a highly negative NES – to get more insight into how ES are calculated. Note that if we didn’t have any significant pathways, our visualizations below would show up blank as nothing would have met our pvalueCutoff above.

    -

    4.5.1 Most Positive NES

    +

    4.6.1 Most Positive NES

    Let’s look for the gene set with the most positive NES.

    -
    gsea_result_df %>%
    -  # Use `top_n()` to return the top n observation using `NES` as the ordering variable
    -  dplyr::top_n(n = 3, wt = NES)
    +
    gsea_result_df %>%
    +  # Use `slice_max()` to return the top n observation using `NES` as the ordering variable
    +  dplyr::slice_max(NES, n = 3)
    -

    The gene set HP_VERTEBRAL_CLEFTING has the most positive NES score.

    -
    most_positive_nes_plot <- enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "HP_VERTEBRAL_CLEFTING",
    -  title = "HP_VERTEBRAL_CLEFTING",
    -  color.line = "#0d76ff"
    -)
    -
    -most_positive_nes_plot
    -

    -

    Notice how the genes that are in the gene set, indicated by the black bars, tend to be on the left side of the graph indicating that they have positive gene-level scores. The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score’s data are being displayed.

    +

    The gene set KEGG_SELENOAMINO_ACID_METABOLISM has the most positive NES score.

    +
    most_positive_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "KEGG_SELENOAMINO_ACID_METABOLISM",
    +  title = "KEGG_SELENOAMINO_ACID_METABOLISM",
    +  color.line = "#0d76ff"
    +)
    +
    +most_positive_nes_plot
    +

    +

    The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score’s data are being displayed.

    The plots returned by enrichplot::gseaplot are ggplots, so we can use ggplot2::ggsave() to save them to file.

    Let’s save to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    -  plot = most_positive_nes_plot
    -)
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    +  plot = most_positive_nes_plot
    +)
    ## Saving 7 x 5 in image
    -

    4.5.2 Most Negative NES

    +

    4.6.2 Most Negative NES

    Let’s look for the gene set with the most negative NES.

    -
    gsea_result_df %>%
    -  # Use `top_n()` to return the top n observation using `NES` as the ordering
    -  # variable -- note the use of `-n` to display the top n values when sorted
    -  # in descending order
    -  dplyr::top_n(n = -3, wt = NES)
    +
    gsea_result_df %>%
    +  # Use `slice_min()` to return the bottom n observation using `NES` as the ordering
    +  # variable
    +  dplyr::slice_min(NES, n = 3)
    -

    The gene set HOLLERN_EMT_BREAST_TUMOR_DN has the most negative NES.

    -
    most_negative_nes_plot <- enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "HOLLERN_EMT_BREAST_TUMOR_DN",
    -  title = "HOLLERN_EMT_BREAST_TUMOR_DN",
    -  color.line = "#0d76ff"
    -)
    -
    -most_negative_nes_plot
    -

    -

    This gene set shows the opposite pattern – genes in the pathway tend to be on the right side of the graph. Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score’s data are being displayed.

    +

    The gene set KEGG_TIGHT_JUNCTION has the most negative NES.

    +
    most_negative_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "KEGG_TIGHT_JUNCTION",
    +  title = "KEGG_TIGHT_JUNCTION",
    +  color.line = "#0d76ff"
    +)
    +
    +most_negative_nes_plot
    +

    +

    Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score’s data are being displayed.

    Let’s save this plot to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    -  plot = most_negative_nes_plot
    -)
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    +  plot = most_negative_nes_plot
    +)
    ## Saving 7 x 5 in image
    -

    4.6 Write results to file

    -
    readr::write_tsv(
    -  gsea_result_df,
    -  file.path(
    -    results_dir,
    -    "SRP078441_gsea_results.tsv"
    -  )
    -)
    +

    4.7 Write results to file

    +
    readr::write_tsv(
    +  gsea_result_df,
    +  file.path(
    +    results_dir,
    +    "SRP078441_gsea_results.tsv"
    +  )
    +)
    @@ -4292,8 +4211,8 @@

    5 Resources for further learning<

    6 Session info

    At the end of every analysis, before saving your notebook, we recommend printing out your session info. This helps make your code more reproducible by recording what versions of software and packages you used to run this.

    -
    # Print session info
    -sessioninfo::session_info()
    +
    # Print session info
    +sessioninfo::session_info()
    ## ─ Session info ───────────────────────────────────────────────────────────────
     ##  setting  value                       
     ##  version  R version 4.0.2 (2020-06-22)
    @@ -4304,7 +4223,7 @@ 

    6 Session info

    ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC -## date 2020-12-02 +## date 2020-12-04 ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date lib source @@ -4327,7 +4246,7 @@

    6 Session info

    ## data.table 1.13.0 2020-07-24 [1] RSPM (R 4.0.2) ## DBI 1.1.0 2019-12-15 [1] RSPM (R 4.0.0) ## digest 0.6.25 2020-02-23 [1] RSPM (R 4.0.0) -## DO.db 2.9 2020-11-18 [1] Bioconductor +## DO.db 2.9 2020-12-02 [1] Bioconductor ## DOSE 3.16.0 2020-10-27 [1] Bioconductor ## downloader 0.4 2015-07-09 [1] RSPM (R 4.0.0) ## dplyr 1.0.2 2020-08-18 [1] RSPM (R 4.0.2) @@ -4345,7 +4264,7 @@

    6 Session info

    ## ggraph 2.0.3 2020-05-20 [1] RSPM (R 4.0.2) ## ggrepel 0.8.2 2020-03-08 [1] RSPM (R 4.0.2) ## glue 1.4.2 2020-08-27 [1] RSPM (R 4.0.2) -## GO.db 3.12.1 2020-11-18 [1] Bioconductor +## GO.db 3.12.1 2020-12-02 [1] Bioconductor ## GOSemSim 2.16.1 2020-10-29 [1] Bioconductor ## graphlayouts 0.7.0 2020-04-25 [1] RSPM (R 4.0.2) ## gridExtra 2.3 2017-09-09 [1] RSPM (R 4.0.0) @@ -4366,7 +4285,7 @@

    6 Session info

    ## msigdbr * 7.2.1 2020-10-02 [1] RSPM (R 4.0.2) ## munsell 0.5.0 2018-06-12 [1] RSPM (R 4.0.0) ## optparse * 1.6.6 2020-04-16 [1] RSPM (R 4.0.0) -## org.Hs.eg.db * 3.12.0 2020-11-18 [1] Bioconductor +## org.Hs.eg.db * 3.12.0 2020-12-02 [1] Bioconductor ## pillar 1.4.6 2020-07-10 [1] RSPM (R 4.0.2) ## pkgconfig 2.0.3 2019-09-22 [1] RSPM (R 4.0.0) ## plyr 1.8.6 2020-03-03 [1] RSPM (R 4.0.2) @@ -4430,9 +4349,6 @@

    References

    Korotkevich G., V. Sukhov, and A. Sergushichev, 2019 Fast gene set enrichment analysis. bioRxiv. https://doi.org/10.1101/060012

    -
    -

    Liberzon A., C. Birger, H. Thorvaldsdóttir, M. Ghandi, and J. P. Mesirov et al., 2015 The molecular signatures database hallmark gene set collection. Cell Systems 1. https://doi.org/10.1016/j.cels.2015.12.004

    -

    Love M. I., W. Huber, and S. Anders, 2014 Moderated estimation of fold change and dispersion for RNA-Seq data with DESeq2. Genome Biology 15. https://doi.org/10.1186/s13059-014-0550-8

    From 217b8678a9bed7024182bf51abecd773e4d6a6c1 Mon Sep 17 00:00:00 2001 From: Chante Bethell Date: Fri, 4 Dec 2020 19:02:54 -0500 Subject: [PATCH 6/7] add exploration plots and code --- 03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd | 97 +++++++-- .../pathway-analysis_rnaseq_02_gsea.html | 203 +++++++++++------- 2 files changed, 207 insertions(+), 93 deletions(-) diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd index ac423381..0d5decc9 100644 --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd @@ -227,9 +227,7 @@ The data we're interested in here comes from human samples, so we can obtain jus ```{r} hs_gene_sets <- msigdbr( - species = "Homo sapiens", # Replace with species name relevant to your data, - category = "C2", - subcategory = "KEGG" + species = "Homo sapiens", # Replace with species name relevant to your data ) ``` @@ -341,9 +339,9 @@ This will keep the first row with the duplicated value thus keeping the row with filtered_dge_mapped_df <- dge_mapped_df %>% # First let's create a column to hold the rankings of our absolute log2 fold # change values -- this handles duplicate log2 fold change values - dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>% + # dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>% # Sort so that the highest ranked absolute values of the log2 fold change are at the top - dplyr::arrange(dplyr::desc(rank)) %>% + dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>% # Filter out the duplicated rows using `dplyr::distinct()` dplyr::distinct(gene_symbol, .keep_all = TRUE) ``` @@ -373,7 +371,7 @@ In the next chunk, we will create a named vector ranked based on the rankings of ```{r} # Let's create a named vector of the rankings based on the log2 fold change values -ranked_vector <- filtered_dge_mapped_df$rank +ranked_vector <- filtered_dge_mapped_df$log2FoldChange names(ranked_vector) <- filtered_dge_mapped_df$gene_symbol # We need to sort the ranked vector in descending order here @@ -395,6 +393,12 @@ In this section, we will implement GSEA to calculate the enrichment score (ES) f We can use the `GSEA()` function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., `gseKEGG()`). ```{r} +gene_terms <- hs_gene_sets %>% + dplyr::select( + gs_name, + gene_symbol + ) + gsea_results <- GSEA( geneList = ranked_vector, # ordered ranked gene list minGSSize = 25, # minimum gene set size @@ -403,12 +407,7 @@ gsea_results <- GSEA( eps = 0, # boundary for calculating the p value seed = TRUE, # set seed to make results reproducible pAdjustMethod = "BH", # Benjamini-Hochberg correction - scoreType = "pos", - TERM2GENE = dplyr::select( - hs_gene_sets, - gs_name, - gene_symbol - ) + TERM2GENE = gene_terms ) ``` @@ -447,13 +446,13 @@ gsea_result_df %>% dplyr::slice_max(NES, n = 3) ``` -The gene set `KEGG_SELENOAMINO_ACID_METABOLISM` has the most positive NES score. +The gene set `HP_VERTEBRAL_CLEFTING` has the most positive NES score. ```{r} most_positive_nes_plot <- enrichplot::gseaplot( gsea_results, - geneSetID = "KEGG_SELENOAMINO_ACID_METABOLISM", - title = "KEGG_SELENOAMINO_ACID_METABOLISM", + geneSetID = "HP_VERTEBRAL_CLEFTING", + title = "HP_VERTEBRAL_CLEFTING", color.line = "#0d76ff" ) @@ -485,13 +484,13 @@ gsea_result_df %>% dplyr::slice_min(NES, n = 3) ``` -The gene set `KEGG_TIGHT_JUNCTION` has the most negative NES. +The gene set `GO_LATERAL_PLASMA_MEMBRANE` has the most negative NES. ```{r} most_negative_nes_plot <- enrichplot::gseaplot( gsea_results, - geneSetID = "KEGG_TIGHT_JUNCTION", - title = "KEGG_TIGHT_JUNCTION", + geneSetID = "GO_LATERAL_PLASMA_MEMBRANE", + title = "GO_LATERAL_PLASMA_MEMBRANE", color.line = "#0d76ff" ) @@ -511,6 +510,68 @@ ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"), ) ``` +## Plot other pathways + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL", + title = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL", + color.line = "#0d76ff" +) +``` + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "BENPORATH_NOS_TARGETS", + title = "BENPORATH_NOS_TARGETS", + color.line = "#0d76ff" +) + +benporath_genes <- hs_gene_sets %>% + dplyr::filter(gs_name == "BENPORATH_NOS_TARGETS") + +sum(filtered_dge_mapped_df$gene_symbol %in% benporath_genes$gene_symbol) +length(benporath_genes$gene_symbol) +``` + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "GO_REGULATION_OF_BINDING", + title = "GO_REGULATION_OF_BINDING", + color.line = "#0d76ff" +) +``` + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "KEGG_APOPTOSIS", + title = "KEGG_APOPTOSIS", + color.line = "#0d76ff" +) +``` + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS", + title = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS", + color.line = "#0d76ff" +) +``` + +```{r} +enrichplot::gseaplot( + gsea_results, + geneSetID = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY", + title = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY", + color.line = "#0d76ff" +) +``` + ## Write results to file ```{r} diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html index 55d5060e..44176e02 100644 --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html @@ -3942,7 +3942,7 @@

    4.2 Import data

    # desired gene list results dge_df <- readr::read_tsv(dge_url)
    ## 
    -## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────
    +## ── Column specification ──────────────────────────────────────────────────────────────────────────────────
     ## cols(
     ##   Gene = col_character(),
     ##   baseMean = col_double(),
    @@ -3980,16 +3980,14 @@ 

    4.3 Getting familiar with c C7: immunologic signatures

    The data we’re interested in here comes from human samples, so we can obtain just the gene sets (from all of the gene set collections listed above) relevant to Homo sapiens by specifying species = "Homo sapiens".

    hs_gene_sets <- msigdbr(
    -  species = "Homo sapiens", # Replace with species name relevant to your data,
    -  category = "C2",
    -  subcategory = "KEGG"
    -)
    + species = "Homo sapiens", # Replace with species name relevant to your data +)

    If you run the chunk above with specifying category = "H" to the msigdbr() function, it will return only the Hallmark gene sets for Homo sapiens. See ?msigdbr for more options.

    Let’s preview what’s in hs_gene_sets.

    head(hs_gene_sets)

    Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs.

    @@ -4059,9 +4057,9 @@

    4.4 Gene identifier conversion
    filtered_dge_mapped_df <- dge_mapped_df %>%
       # First let's create a column to hold the rankings of our absolute log2 fold
       # change values -- this handles duplicate log2 fold change values
    -  dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>%
    +  # dplyr::mutate(rank = rank(abs(log2FoldChange), ties.method = "random")) %>%
       # Sort so that the highest ranked absolute values of the log2 fold change are at the top
    -  dplyr::arrange(dplyr::desc(rank)) %>%
    +  dplyr::arrange(dplyr::desc(abs(log2FoldChange))) %>%
       # Filter out the duplicated rows using `dplyr::distinct()`
       dplyr::distinct(gene_symbol, .keep_all = TRUE)

    Note that the log2 fold change values we use here for ranking have been transformed by DESeq2 to account for genes with low counts or highly variable counts. See the DESeq2 package vignette for more information on how DESeq2 handles the log2 fold change values with the lfcShrink() function.

    @@ -4078,7 +4076,7 @@

    4.5.1 Determine our pre-ranked ge

    The GSEA() function takes a pre-ranked and sorted named vector of statistics, where the names in the vector are gene identifiers. We will therefore need to create a gene list with statistics that GSEA will rank by.

    In the next chunk, we will create a named vector ranked based on the rankings of the gene-level log2 fold change values.

    # Let's create a named vector of the rankings based on the log2 fold change values
    -ranked_vector <- filtered_dge_mapped_df$rank
    +ranked_vector <- filtered_dge_mapped_df$log2FoldChange
     names(ranked_vector) <- filtered_dge_mapped_df$gene_symbol
     
     # We need to sort the ranked vector in descending order here
    @@ -4086,44 +4084,47 @@ 

    4.5.1 Determine our pre-ranked ge

    Let’s preview our pre-ranked named vector.

    # Look at first entries of the ranked vector
     head(ranked_vector)
    -
    ##      CLDN3 NUTM2B-AS1  MIR3648-2       UTS2       ALPL   ANKRD34A 
    -##      22643      22642      22641      22640      22639      22638
    +
    ##     UTS2     ALPL   GRIN2B      ADM    KRT23    IL1R2 
    +## 6.174579 5.824919 4.172007 3.952953 3.731020 3.717043

    4.5.2 Run GSEA using the GSEA() function

    Genes were ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, in the previous section. In this section, we will implement GSEA to calculate the enrichment score (ES) for each gene set using our pre-ranked gene list.

    We can use the GSEA() function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., gseKEGG()).

    -
    gsea_results <- GSEA(
    -  geneList = ranked_vector, # ordered ranked gene list
    -  minGSSize = 25, # minimum gene set size
    -  maxGSSize = 500, # maximum gene set set
    -  pvalueCutoff = 0.05, # p value cutoff
    -  eps = 0, # boundary for calculating the p value
    -  seed = TRUE, # set seed to make results reproducible
    -  pAdjustMethod = "BH", # Benjamini-Hochberg correction
    -  scoreType = "pos",
    -  TERM2GENE = dplyr::select(
    -    hs_gene_sets,
    -    gs_name,
    -    gene_symbol
    -  )
    -)
    +
    gene_terms <- hs_gene_sets %>%
    +  dplyr::select(
    +    gs_name,
    +    gene_symbol
    +  )
    +
    +gsea_results <- GSEA(
    +  geneList = ranked_vector, # ordered ranked gene list
    +  minGSSize = 25, # minimum gene set size
    +  maxGSSize = 500, # maximum gene set set
    +  pvalueCutoff = 0.05, # p value cutoff
    +  eps = 0, # boundary for calculating the p value
    +  seed = TRUE, # set seed to make results reproducible
    +  pAdjustMethod = "BH", # Benjamini-Hochberg correction
    +  TERM2GENE = gene_terms
    +)
    ## preparing geneSet collections...
    ## GSEA analysis...
    +
    ## Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.01% of the list).
    +## The order of those tied genes will be arbitrary, which may produce unexpected results.
    ## leading edge analysis...
    ## done...

    Let’s take a look at the results.

    -
    # We can access the results from our `gsea_results` object using `@result`
    -head(gsea_results@result)
    +
    # We can access the results from our `gsea_results` object using `@result`
    +head(gsea_results@result)

    Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing.

    Looks like we have gene sets returned as significant at FDR of 0.05, according to the p.adjust column above.

    The information we’re most likely interested in is in the results slot. Let’s convert this into a data frame that we can use for further analysis and write to file.

    -
    gsea_result_df <- data.frame(gsea_results@result)
    +
    gsea_result_df <- data.frame(gsea_results@result)

    @@ -4132,71 +4133,123 @@

    4.6 Visualizing results

    4.6.1 Most Positive NES

    Let’s look for the gene set with the most positive NES.

    -
    gsea_result_df %>%
    -  # Use `slice_max()` to return the top n observation using `NES` as the ordering variable
    -  dplyr::slice_max(NES, n = 3)
    +
    gsea_result_df %>%
    +  # Use `slice_max()` to return the top n observation using `NES` as the ordering variable
    +  dplyr::slice_max(NES, n = 3)
    -

    The gene set KEGG_SELENOAMINO_ACID_METABOLISM has the most positive NES score.

    -
    most_positive_nes_plot <- enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_SELENOAMINO_ACID_METABOLISM",
    -  title = "KEGG_SELENOAMINO_ACID_METABOLISM",
    -  color.line = "#0d76ff"
    -)
    -
    -most_positive_nes_plot
    -

    +

    The gene set HP_VERTEBRAL_CLEFTING has the most positive NES score.

    +
    most_positive_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "HP_VERTEBRAL_CLEFTING",
    +  title = "HP_VERTEBRAL_CLEFTING",
    +  color.line = "#0d76ff"
    +)
    +
    +most_positive_nes_plot
    +

    The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score’s data are being displayed.

    The plots returned by enrichplot::gseaplot are ggplots, so we can use ggplot2::ggsave() to save them to file.

    Let’s save to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    -  plot = most_positive_nes_plot
    -)
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    +  plot = most_positive_nes_plot
    +)
    ## Saving 7 x 5 in image

    4.6.2 Most Negative NES

    Let’s look for the gene set with the most negative NES.

    -
    gsea_result_df %>%
    -  # Use `slice_min()` to return the bottom n observation using `NES` as the ordering
    -  # variable
    -  dplyr::slice_min(NES, n = 3)
    +
    gsea_result_df %>%
    +  # Use `slice_min()` to return the bottom n observation using `NES` as the ordering
    +  # variable
    +  dplyr::slice_min(NES, n = 3)
    -

    The gene set KEGG_TIGHT_JUNCTION has the most negative NES.

    -
    most_negative_nes_plot <- enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_TIGHT_JUNCTION",
    -  title = "KEGG_TIGHT_JUNCTION",
    -  color.line = "#0d76ff"
    -)
    -
    -most_negative_nes_plot
    -

    +

    The gene set GO_LATERAL_PLASMA_MEMBRANE has the most negative NES.

    +
    most_negative_nes_plot <- enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "GO_LATERAL_PLASMA_MEMBRANE",
    +  title = "GO_LATERAL_PLASMA_MEMBRANE",
    +  color.line = "#0d76ff"
    +)
    +
    +most_negative_nes_plot
    +

    Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score’s data are being displayed.

    Let’s save this plot to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    -  plot = most_negative_nes_plot
    -)
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    +  plot = most_negative_nes_plot
    +)
    ## Saving 7 x 5 in image
    +
    +

    4.7 Plot other pathways

    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    +  title = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    +  color.line = "#0d76ff"
    +)
    +

    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "BENPORATH_NOS_TARGETS",
    +  title = "BENPORATH_NOS_TARGETS",
    +  color.line = "#0d76ff"
    +)
    +

    +
    benporath_genes <- hs_gene_sets %>%
    +  dplyr::filter(gs_name == "BENPORATH_NOS_TARGETS")
    +
    +sum(filtered_dge_mapped_df$gene_symbol %in% benporath_genes$gene_symbol)
    +
    ## [1] 177
    +
    length(benporath_genes$gene_symbol)
    +
    ## [1] 179
    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "GO_REGULATION_OF_BINDING",
    +  title = "GO_REGULATION_OF_BINDING",
    +  color.line = "#0d76ff"
    +)
    +

    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "KEGG_APOPTOSIS",
    +  title = "KEGG_APOPTOSIS",
    +  color.line = "#0d76ff"
    +)
    +

    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    +  title = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    +  color.line = "#0d76ff"
    +)
    +

    +
    enrichplot::gseaplot(
    +  gsea_results,
    +  geneSetID = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    +  title = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    +  color.line = "#0d76ff"
    +)
    +

    +
    -

    4.7 Write results to file

    -
    readr::write_tsv(
    -  gsea_result_df,
    -  file.path(
    -    results_dir,
    -    "SRP078441_gsea_results.tsv"
    -  )
    -)
    +

    4.8 Write results to file

    +
    readr::write_tsv(
    +  gsea_result_df,
    +  file.path(
    +    results_dir,
    +    "SRP078441_gsea_results.tsv"
    +  )
    +)
    @@ -4211,8 +4264,8 @@

    5 Resources for further learning<

    6 Session info

    At the end of every analysis, before saving your notebook, we recommend printing out your session info. This helps make your code more reproducible by recording what versions of software and packages you used to run this.

    -
    # Print session info
    -sessioninfo::session_info()
    +
    # Print session info
    +sessioninfo::session_info()
    ## ─ Session info ───────────────────────────────────────────────────────────────
     ##  setting  value                       
     ##  version  R version 4.0.2 (2020-06-22)
    
    From ecbabf086e0c44c4b1d66241494e3af3e6e1aba5 Mon Sep 17 00:00:00 2001
    From: Chante Bethell 
    Date: Mon, 7 Dec 2020 12:57:43 -0500
    Subject: [PATCH 7/7] swap datasets and re work notebook
    
    ---
     03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd | 119 ++++---------
     .../pathway-analysis_rnaseq_02_gsea.html      | 168 ++++++------------
     2 files changed, 89 insertions(+), 198 deletions(-)
    
    diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd
    index 0d5decc9..dffe1801 100644
    --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd
    +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.Rmd
    @@ -1,7 +1,7 @@
     ---
     title: "Gene set enrichment analysis - RNA-seq"
     author: "CCDL for ALSF"
    -date: "November 2020"
    +date: "December 2020"
     output:  
       html_notebook:
         toc: true
    @@ -95,9 +95,9 @@ We have provided this file for you and the code in this notebook will read in th
     
     ## About the dataset we are using for this example
     
    -For this example analysis, we will use this [acute myeloid leukemia (AML) dataset](https://www.refine.bio/experiments/SRP078441/rna-seq-of-primary-patient-aml-samples) [@Micol2017].
    -
    -@Micol2017 performed RNA-seq on primary peripheral blood and bone marrow samples from AML patients with and without _ASXL1/2_ mutations. 
    +For this example analysis, we are using RNA-seq data from an [acute lymphoblastic leukemia (ALL) mouse lymphoid cell model](https://www.refine.bio/experiments/SRP123625) [@Kampen2019].
    +All lymphoid mouse cells have human RPL10 but three of the mice have a knock-in R98S mutated RPL10 and three have the human wildtype RPL10. 
    +Differential expression was performed using these knock-in and wildtype mice designations.
     
     ## Check out our file structure!
     
    @@ -130,7 +130,7 @@ See our Getting Started page with [instructions for package installation](https:
     
     In this analysis, we will be using [`clusterProfiler`](https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html) package to perform GSEA and the [`msigdbr`](https://cran.r-project.org/web/packages/msigdbr/index.html) package which contains gene sets from the [Molecular Signatures Database (MSigDB)](https://www.gsea-msigdb.org/gsea/msigdb/index.jsp) already in the tidy format required by `clusterProfiler` [@Yu2012; @Igor2020; @Subramanian2005].
     
    -We will also need the [`org.Hs.eg.db`](http://bioconductor.org/packages/release/data/annotation/html/org.Hs.eg.db.html) package to perform gene identifier conversion [@Carlson2020-human].
    +We will also need the [`org.Mm.eg.db`](http://bioconductor.org/packages/release/data/annotation/html/org.Mm.eg.db.html) package to perform gene identifier conversion [@Carlson2020-human].
     
     ```{r}
     if (!("clusterProfiler" %in% installed.packages())) {
    @@ -143,9 +143,9 @@ if (!("msigdbr" %in% installed.packages())) {
       BiocManager::install("msigdbr", update = FALSE)
     }
     
    -if (!("org.Hs.eg.db" %in% installed.packages())) {
    +if (!("org.Mm.eg.db" %in% installed.packages())) {
       # Install this package if it isn't installed yet
    -  BiocManager::install("org.Hs.eg.db", update = FALSE)
    +  BiocManager::install("org.Mm.eg.db", update = FALSE)
     }
     ```
     
    @@ -159,7 +159,7 @@ library(clusterProfiler)
     library(msigdbr)
     
     # Human annotation package we'll use for gene identifier conversion
    -library(org.Hs.eg.db)
    +library(org.Mm.eg.db)
     
     # We will need this so we can use the pipe: %>%
     library(magrittr)
    @@ -184,11 +184,11 @@ First we will assign the URL to its own variable called, `dge_url`.
     
     ```{r}
     # Define the url to your differential expression results file
    -dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv"
    +dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP123625/SRP123625_differential_expression_results.tsv"
     ```
     
     Read in the file that has differential expression results. 
    -Here we are using the URL we set up above, but this can be a local file path instead _i.e._ you can replace `dge_url` in the code below with a path to file you have on your computer like: `file.path("results", "SRP078441_differential_expression_results.tsv")`.
    +Here we are using the URL we set up above, but this can be a local file path instead _i.e._ you can replace `dge_url` in the code below with a path to file you have on your computer like: `file.path("results", "SRP123625_differential_expression_results.tsv")`.
     
     ```{r}
     # Read in the contents of your differential expression results file
    @@ -226,8 +226,9 @@ MSigDB contains 8 different gene set collections [@Subramanian2005].
     The data we're interested in here comes from human samples, so we can obtain just the gene sets (from all of the gene set collections listed above) relevant to _Homo sapiens_ by specifying `species = "Homo sapiens"`.
     
     ```{r}
    -hs_gene_sets <- msigdbr(
    -  species = "Homo sapiens", # Replace with species name relevant to your data
    +mm_gene_sets <- msigdbr(
    +  species = "Mus musculus", # Replace with species name relevant to your data
    +  category = "H"
     )
     ```
     
    @@ -237,7 +238,7 @@ See `?msigdbr` for more options.
     Let's preview what's in `hs_gene_sets`.
     
     ```{r}
    -head(hs_gene_sets)
    +head(mm_gene_sets)
     ```
     
     Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs.
    @@ -255,7 +256,7 @@ The annotation package `org.Hs.eg.db` contains information for different identif
     We can see what types of IDs are available to us in an annotation package with `keytypes()`.
     
     ```{r}
    -keytypes(org.Hs.eg.db)
    +keytypes(org.Mm.eg.db)
     ```
     
     Even though we'll use this package to convert from Ensembl gene IDs (`ENSEMBL`) to gene symbols (`SYMBOL`), we could just as easily use it to convert to and from any of these `keytypes()` listed above.
    @@ -268,7 +269,7 @@ Let's create a data frame that shows the mapped gene symbols along with the diff
     # First let's create a mapped data frame we can join to the differential expression stats
     dge_mapped_df <- data.frame(
       "gene_symbol" = mapIds(
    -    org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data
    +    org.Mm.eg.db, # Replace with annotation package for the organism relevant to your data
         keys = dge_df$Gene,
         column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to
         keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data
    @@ -393,7 +394,7 @@ In this section, we will implement GSEA to calculate the enrichment score (ES) f
     We can use the `GSEA()` function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., `gseKEGG()`).
     
     ```{r}
    -gene_terms <- hs_gene_sets %>%
    +gene_terms <- mm_gene_sets %>%
       dplyr::select(
         gs_name,
         gene_symbol
    @@ -407,7 +408,11 @@ gsea_results <- GSEA(
       eps = 0, # boundary for calculating the p value
       seed = TRUE, # set seed to make results reproducible
       pAdjustMethod = "BH", # Benjamini-Hochberg correction
    -  TERM2GENE = gene_terms
    +  TERM2GENE = dplyr::select(
    +    mm_gene_sets,
    +    gs_name,
    +    gene_symbol
    +  )
     )
     ```
     
    @@ -446,13 +451,13 @@ gsea_result_df %>%
       dplyr::slice_max(NES, n = 3)
     ```
     
    -The gene set `HP_VERTEBRAL_CLEFTING` has the most positive NES score.
    +The gene set `HALLMARK_MYC_TARGETS_V2` has the most positive NES score.
     
     ```{r}
     most_positive_nes_plot <- enrichplot::gseaplot(
       gsea_results,
    -  geneSetID = "HP_VERTEBRAL_CLEFTING",
    -  title = "HP_VERTEBRAL_CLEFTING",
    +  geneSetID = "HALLMARK_MYC_TARGETS_V2",
    +  title = "HALLMARK_MYC_TARGETS_V2",
       color.line = "#0d76ff"
     )
     
    @@ -468,7 +473,7 @@ The plots returned by `enrichplot::gseaplot` are ggplots, so we can use `ggplot2
     Let's save to PNG.
     
     ```{r}
    -ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    +ggplot2::ggsave(file.path(plots_dir, "SRP123625_gsea_enrich_positive_plot.png"),
       plot = most_positive_nes_plot
     )
     ```
    @@ -484,13 +489,13 @@ gsea_result_df %>%
       dplyr::slice_min(NES, n = 3)
     ```
     
    -The gene set `GO_LATERAL_PLASMA_MEMBRANE` has the most negative NES.
    +The gene set `HALLMARK_HYPOXIA` has the most negative NES.
     
     ```{r}
     most_negative_nes_plot <- enrichplot::gseaplot(
       gsea_results,
    -  geneSetID = "GO_LATERAL_PLASMA_MEMBRANE",
    -  title = "GO_LATERAL_PLASMA_MEMBRANE",
    +  geneSetID = "HALLMARK_HYPOXIA",
    +  title = "HALLMARK_HYPOXIA",
       color.line = "#0d76ff"
     )
     
    @@ -505,73 +510,11 @@ In this case, the most negative enrichment score's data are being displayed.
     Let's save this plot to PNG.
     
     ```{r}
    -ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    +ggplot2::ggsave(file.path(plots_dir, "SRP123625_gsea_enrich_negative_plot.png"),
       plot = most_negative_nes_plot
     )
     ```
     
    -## Plot other pathways
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    -  title = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    -  color.line = "#0d76ff"
    -)
    -```
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "BENPORATH_NOS_TARGETS",
    -  title = "BENPORATH_NOS_TARGETS",
    -  color.line = "#0d76ff"
    -)
    -
    -benporath_genes <- hs_gene_sets %>%
    -  dplyr::filter(gs_name == "BENPORATH_NOS_TARGETS")
    -
    -sum(filtered_dge_mapped_df$gene_symbol %in% benporath_genes$gene_symbol)
    -length(benporath_genes$gene_symbol)
    -```
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "GO_REGULATION_OF_BINDING",
    -  title = "GO_REGULATION_OF_BINDING",
    -  color.line = "#0d76ff"
    -)
    -```
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_APOPTOSIS",
    -  title = "KEGG_APOPTOSIS",
    -  color.line = "#0d76ff"
    -)
    -```
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    -  title = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    -  color.line = "#0d76ff"
    -)
    -```
    -
    -```{r}
    -enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    -  title = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    -  color.line = "#0d76ff"
    -)
    -```
    -
     ## Write results to file
     
     ```{r}
    @@ -579,7 +522,7 @@ readr::write_tsv(
       gsea_result_df,
       file.path(
         results_dir,
    -    "SRP078441_gsea_results.tsv"
    +    "SRP123625_gsea_results.tsv"
       )
     )
     ```
    diff --git a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html
    index 44176e02..af6a55e3 100644
    --- a/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html
    +++ b/03-rnaseq/pathway-analysis_rnaseq_02_gsea.html
    @@ -3765,7 +3765,7 @@
     
     

    Gene set enrichment analysis - RNA-seq

    CCDL for ALSF

    -

    November 2020

    +

    December 2020

    @@ -3868,8 +3868,7 @@

    2.3 Obtain the gene set for this

    2.4 About the dataset we are using for this example

    -

    For this example analysis, we will use this acute myeloid leukemia (AML) dataset (Micol et al. 2017).

    -

    Micol et al. (2017) performed RNA-seq on primary peripheral blood and bone marrow samples from AML patients with and without ASXL1/2 mutations.

    +

    For this example analysis, we are using RNA-seq data from an acute lymphoblastic leukemia (ALL) mouse lymphoid cell model (???). All lymphoid mouse cells have human RPL10 but three of the mice have a knock-in R98S mutated RPL10 and three have the human wildtype RPL10. Differential expression was performed using these knock-in and wildtype mice designations.

    2.5 Check out our file structure!

    @@ -3899,7 +3898,7 @@

    4 Gene set enrichment analysis -

    4.1 Install libraries

    See our Getting Started page with instructions for package installation for a list of the other software you will need, as well as more tips and resources.

    In this analysis, we will be using clusterProfiler package to perform GSEA and the msigdbr package which contains gene sets from the Molecular Signatures Database (MSigDB) already in the tidy format required by clusterProfiler (Yu et al. 2012; Dolgalev 2020; Subramanian et al. 2005).

    -

    We will also need the org.Hs.eg.db package to perform gene identifier conversion (Carlson 2020).

    +

    We will also need the org.Mm.eg.db package to perform gene identifier conversion (Carlson 2020).

    if (!("clusterProfiler" %in% installed.packages())) {
       # Install this package if it isn't installed yet
       BiocManager::install("clusterProfiler", update = FALSE)
    @@ -3910,9 +3909,9 @@ 

    4.1 Install libraries

    BiocManager::install("msigdbr", update = FALSE) } -if (!("org.Hs.eg.db" %in% installed.packages())) { +if (!("org.Mm.eg.db" %in% installed.packages())) { # Install this package if it isn't installed yet - BiocManager::install("org.Hs.eg.db", update = FALSE) + BiocManager::install("org.Mm.eg.db", update = FALSE) }

    Attach the packages we need for this analysis.

    # Attach the library
    @@ -3922,7 +3921,7 @@ 

    4.1 Install libraries

    library(msigdbr) # Human annotation package we'll use for gene identifier conversion -library(org.Hs.eg.db) +library(org.Mm.eg.db) # We will need this so we can use the pipe: %>% library(magrittr)
    @@ -3935,14 +3934,14 @@

    4.2 Import data

    We will read in the differential expression results we will download from online. These results are from an acute myeloid leukemia (AML) RNA-seq dataset we used for differential expression analysis using DESeq2 (Love et al. 2014). The table contains summary statistics including Ensembl gene IDs, log2 fold change values, and adjusted p-values (FDR in this case). We can identify differentially regulated genes by filtering these results and use this list as input to GSEA.

    Instead of using the URL below, you can use a file path to a TSV file with your desired gene list results. First we will assign the URL to its own variable called, dge_url.

    # Define the url to your differential expression results file
    -dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP078441/SRP078441_differential_expression_results.tsv"
    -

    Read in the file that has differential expression results. Here we are using the URL we set up above, but this can be a local file path instead i.e. you can replace dge_url in the code below with a path to file you have on your computer like: file.path("results", "SRP078441_differential_expression_results.tsv").

    +dge_url <- "https://refinebio-examples.s3.us-east-2.amazonaws.com/03-rnaseq/results/SRP123625/SRP123625_differential_expression_results.tsv"
    +

    Read in the file that has differential expression results. Here we are using the URL we set up above, but this can be a local file path instead i.e. you can replace dge_url in the code below with a path to file you have on your computer like: file.path("results", "SRP123625_differential_expression_results.tsv").

    # Read in the contents of your differential expression results file
     # `dge_url` can be replaced with a file path to a TSV file with your
     # desired gene list results
     dge_df <- readr::read_tsv(dge_url)
    ## 
    -## ── Column specification ──────────────────────────────────────────────────────────────────────────────────
    +## ── Column specification ────────────────────────────────────────────────────────────────────
     ## cols(
     ##   Gene = col_character(),
     ##   baseMean = col_double(),
    @@ -3956,7 +3955,7 @@ 

    4.2 Import data

    dge_df
    @@ -3979,15 +3978,16 @@

    4.3 Getting familiar with c C6: oncogenic signatures C7: immunologic signatures

    The data we’re interested in here comes from human samples, so we can obtain just the gene sets (from all of the gene set collections listed above) relevant to Homo sapiens by specifying species = "Homo sapiens".

    -
    hs_gene_sets <- msigdbr(
    -  species = "Homo sapiens", # Replace with species name relevant to your data
    -)
    +
    mm_gene_sets <- msigdbr(
    +  species = "Mus musculus", # Replace with species name relevant to your data
    +  category = "H"
    +)

    If you run the chunk above with specifying category = "H" to the msigdbr() function, it will return only the Hallmark gene sets for Homo sapiens. See ?msigdbr for more options.

    Let’s preview what’s in hs_gene_sets.

    -
    head(hs_gene_sets)
    +
    head(mm_gene_sets)

    Looks like we have a data frame of gene sets with associated gene symbols and Entrez IDs.

    @@ -3998,20 +3998,19 @@

    4.4 Gene identifier conversionWe’re going to convert our identifiers in dge_df to gene symbols, but you can, with the change of a single argument, use the same code to convert to many other types of identifiers!

    The annotation package org.Hs.eg.db contains information for different identifiers (Carlson 2020). org.Hs.eg.db is specific to Homo sapiens – this is what the Hs in the package name is referencing.

    We can see what types of IDs are available to us in an annotation package with keytypes().

    -
    keytypes(org.Hs.eg.db)
    +
    keytypes(org.Mm.eg.db)
    ##  [1] "ACCNUM"       "ALIAS"        "ENSEMBL"      "ENSEMBLPROT"  "ENSEMBLTRANS"
     ##  [6] "ENTREZID"     "ENZYME"       "EVIDENCE"     "EVIDENCEALL"  "GENENAME"    
    -## [11] "GO"           "GOALL"        "IPI"          "MAP"          "OMIM"        
    -## [16] "ONTOLOGY"     "ONTOLOGYALL"  "PATH"         "PFAM"         "PMID"        
    -## [21] "PROSITE"      "REFSEQ"       "SYMBOL"       "UCSCKG"       "UNIGENE"     
    -## [26] "UNIPROT"
    +## [11] "GO" "GOALL" "IPI" "MGI" "ONTOLOGY" +## [16] "ONTOLOGYALL" "PATH" "PFAM" "PMID" "PROSITE" +## [21] "REFSEQ" "SYMBOL" "UNIGENE" "UNIPROT"

    Even though we’ll use this package to convert from Ensembl gene IDs (ENSEMBL) to gene symbols (SYMBOL), we could just as easily use it to convert to and from any of these keytypes() listed above.

    The function we will use to map from Ensembl gene IDs to gene symbols is called mapIds().

    Let’s create a data frame that shows the mapped gene symbols along with the differential expression stats for the respective Ensembl IDs.

    # First let's create a mapped data frame we can join to the differential expression stats
     dge_mapped_df <- data.frame(
       "gene_symbol" = mapIds(
    -    org.Hs.eg.db, # Replace with annotation package for the organism relevant to your data
    +    org.Mm.eg.db, # Replace with annotation package for the organism relevant to your data
         keys = dge_df$Gene,
         column = "SYMBOL", # Replace with the type of gene identifiers you would like to map to
         keytype = "ENSEMBL", # Replace with the type of gene identifiers in your data
    @@ -4031,7 +4030,7 @@ 

    4.4 Gene identifier conversion
    head(dge_mapped_df)

    We will want to keep in mind that GSEA requires that genes are ranked from most highly positive to most highly negative and weighted according to their gene-level statistic, which is essential to the calculation of the enrichment score (ES), a pathway-level statistic. GSEA also requires unique gene identifiers to produce the most accurate results. This means if any duplicate gene identifiers are found in our dataset, we will want to retain the instance with the higher absolute value as this will be the instance most likely to be ranked most highly negative or most highly positive. Otherwise the enrichment score results may be skewed and the GSEA() function will throw a warning.

    @@ -4048,7 +4047,7 @@

    4.4 Gene identifier conversion dplyr::arrange(gene_symbol)

    We can see that the associated values vary for each row.

    @@ -4084,14 +4083,14 @@

    4.5.1 Determine our pre-ranked ge

    Let’s preview our pre-ranked named vector.

    # Look at first entries of the ranked vector
     head(ranked_vector)
    -
    ##     UTS2     ALPL   GRIN2B      ADM    KRT23    IL1R2 
    -## 6.174579 5.824919 4.172007 3.952953 3.731020 3.717043
    +
    ##   Lpgat1   Lgals7    Gm973     Bbs7     Clnk   Zfp575 
    +## 13.34941 12.64196 12.51824 12.19278 11.52481 10.20900

    4.5.2 Run GSEA using the GSEA() function

    Genes were ranked from most highly positive to most highly negative, weighted according to their gene-level statistic, in the previous section. In this section, we will implement GSEA to calculate the enrichment score (ES) for each gene set using our pre-ranked gene list.

    We can use the GSEA() function to perform GSEA with any generic set of gene sets, but there are several functions for using specific, commonly used gene sets (e.g., gseKEGG()).

    -
    gene_terms <- hs_gene_sets %>%
    +
    gene_terms <- mm_gene_sets %>%
       dplyr::select(
         gs_name,
         gene_symbol
    @@ -4105,11 +4104,15 @@ 

    4.5.2 Run GSEA using the GS eps = 0, # boundary for calculating the p value seed = TRUE, # set seed to make results reproducible pAdjustMethod = "BH", # Benjamini-Hochberg correction - TERM2GENE = gene_terms -)

    + TERM2GENE = dplyr::select( + mm_gene_sets, + gs_name, + gene_symbol + ) +)
    ## preparing geneSet collections...
    ## GSEA analysis...
    -
    ## Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.01% of the list).
    +
    ## Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.19% of the list).
     ## The order of those tied genes will be arbitrary, which may produce unexpected results.
    ## leading edge analysis...
    ## done...
    @@ -4118,7 +4121,7 @@

    4.5.2 Run GSEA using the GS head(gsea_results@result)

    Significance is assessed by permutating the gene labels of the pre-ranked gene list and recomputing the ES of the gene set for the permutated data, which generates a null distribution for the ES. The ES for each gene set is then normalized to account for the size of the set, resulting in a normalized enrichment score (NES), and an FDR (false discovery rate) value is calculated to account for multiple hypothesis testing.

    @@ -4138,23 +4141,23 @@

    4.6.1 Most Positive NES

    dplyr::slice_max(NES, n = 3)
    -

    The gene set HP_VERTEBRAL_CLEFTING has the most positive NES score.

    +

    The gene set HALLMARK_MYC_TARGETS_V2 has the most positive NES score.

    most_positive_nes_plot <- enrichplot::gseaplot(
       gsea_results,
    -  geneSetID = "HP_VERTEBRAL_CLEFTING",
    -  title = "HP_VERTEBRAL_CLEFTING",
    +  geneSetID = "HALLMARK_MYC_TARGETS_V2",
    +  title = "HALLMARK_MYC_TARGETS_V2",
       color.line = "#0d76ff"
     )
     
     most_positive_nes_plot
    -

    +

    The red dashed line indicates the peak ES score (the ES is the maximum deviation from zero). As mentioned earlier, an ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. In this case, the most highly positive enrichment score’s data are being displayed.

    The plots returned by enrichplot::gseaplot are ggplots, so we can use ggplot2::ggsave() to save them to file.

    Let’s save to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_positive_plot.png"),
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP123625_gsea_enrich_positive_plot.png"),
       plot = most_positive_nes_plot
     )
    ## Saving 7 x 5 in image
    @@ -4168,88 +4171,36 @@

    4.6.2 Most Negative NES

    dplyr::slice_min(NES, n = 3)
    -

    The gene set GO_LATERAL_PLASMA_MEMBRANE has the most negative NES.

    +

    The gene set HALLMARK_HYPOXIA has the most negative NES.

    most_negative_nes_plot <- enrichplot::gseaplot(
       gsea_results,
    -  geneSetID = "GO_LATERAL_PLASMA_MEMBRANE",
    -  title = "GO_LATERAL_PLASMA_MEMBRANE",
    +  geneSetID = "HALLMARK_HYPOXIA",
    +  title = "HALLMARK_HYPOXIA",
       color.line = "#0d76ff"
     )
     
     most_negative_nes_plot
    -

    +

    Again, the red dashed line here indicates the maximum deviation from zero, in other words, the most negative ES score. As we know, the ES is calculated by starting with the most highly ranked genes (according to the gene-level log2 fold change values) and increasing the score when a gene is in the pathway and decreasing the score when a gene is not in the pathway. A negative enrichment score will be returned when not many of the genes are found at the top of the list, as this would mean decreasing the score a great deal thus producing a negative value. In this case, the most negative enrichment score’s data are being displayed.

    Let’s save this plot to PNG.

    -
    ggplot2::ggsave(file.path(plots_dir, "SRP078441_gsea_enrich_negative_plot.png"),
    +
    ggplot2::ggsave(file.path(plots_dir, "SRP123625_gsea_enrich_negative_plot.png"),
       plot = most_negative_nes_plot
     )
    ## Saving 7 x 5 in image
    -
    -

    4.7 Plot other pathways

    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    -  title = "HP_DECREASED_CIRCULATING_CORTISOL_LEVEL",
    -  color.line = "#0d76ff"
    -)
    -

    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "BENPORATH_NOS_TARGETS",
    -  title = "BENPORATH_NOS_TARGETS",
    -  color.line = "#0d76ff"
    -)
    -

    -
    benporath_genes <- hs_gene_sets %>%
    -  dplyr::filter(gs_name == "BENPORATH_NOS_TARGETS")
    -
    -sum(filtered_dge_mapped_df$gene_symbol %in% benporath_genes$gene_symbol)
    -
    ## [1] 177
    -
    length(benporath_genes$gene_symbol)
    -
    ## [1] 179
    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "GO_REGULATION_OF_BINDING",
    -  title = "GO_REGULATION_OF_BINDING",
    -  color.line = "#0d76ff"
    -)
    -

    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_APOPTOSIS",
    -  title = "KEGG_APOPTOSIS",
    -  color.line = "#0d76ff"
    -)
    -

    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    -  title = "KEGG_AMINOACYL_TRNA_BIOSYNTHESIS",
    -  color.line = "#0d76ff"
    -)
    -

    -
    enrichplot::gseaplot(
    -  gsea_results,
    -  geneSetID = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    -  title = "KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY",
    -  color.line = "#0d76ff"
    -)
    -

    -
    -

    4.8 Write results to file

    -
    readr::write_tsv(
    -  gsea_result_df,
    -  file.path(
    -    results_dir,
    -    "SRP078441_gsea_results.tsv"
    -  )
    -)
    +

    4.7 Write results to file

    +
    readr::write_tsv(
    +  gsea_result_df,
    +  file.path(
    +    results_dir,
    +    "SRP123625_gsea_results.tsv"
    +  )
    +)
    @@ -4264,8 +4215,8 @@

    5 Resources for further learning<

    6 Session info

    At the end of every analysis, before saving your notebook, we recommend printing out your session info. This helps make your code more reproducible by recording what versions of software and packages you used to run this.

    -
    # Print session info
    -sessioninfo::session_info()
    +
    # Print session info
    +sessioninfo::session_info()
    ## ─ Session info ───────────────────────────────────────────────────────────────
     ##  setting  value                       
     ##  version  R version 4.0.2 (2020-06-22)
    @@ -4276,7 +4227,7 @@ 

    6 Session info

    ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC -## date 2020-12-04 +## date 2020-12-07 ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date lib source @@ -4338,7 +4289,7 @@

    6 Session info

    ## msigdbr * 7.2.1 2020-10-02 [1] RSPM (R 4.0.2) ## munsell 0.5.0 2018-06-12 [1] RSPM (R 4.0.0) ## optparse * 1.6.6 2020-04-16 [1] RSPM (R 4.0.0) -## org.Hs.eg.db * 3.12.0 2020-12-02 [1] Bioconductor +## org.Mm.eg.db * 3.12.0 2020-12-02 [1] Bioconductor ## pillar 1.4.6 2020-07-10 [1] RSPM (R 4.0.2) ## pkgconfig 2.0.3 2019-09-22 [1] RSPM (R 4.0.0) ## plyr 1.8.6 2020-03-03 [1] RSPM (R 4.0.2) @@ -4405,9 +4356,6 @@

    References

    Love M. I., W. Huber, and S. Anders, 2014 Moderated estimation of fold change and dispersion for RNA-Seq data with DESeq2. Genome Biology 15. https://doi.org/10.1186/s13059-014-0550-8

    -
    -

    Micol J. B., A. Pastore, D. Inoue, N. Duployez, and E. Kim et al., 2017 ASXL2 is essential for haematopoiesis and acts as a haploinsufficient tumour suppressor in leukemia. Nature Communications 8: 15429. https://doi.org/10.1038/ncomms15429

    -

    Subramanian A., P. Tamayo, V. K. Mootha, S. Mukherjee, and B. L. Ebert et al., 2005 Gene set enrichment analysis: A knowledge-based approach for interpreting genome-wide expression profiles. Proceedings of the National Academy of Sciences 102: 15545–15550. https://doi.org/10.1073/pnas.0506580102