From 42ec50e2caf02fa5e95fa8f9197b187c51c8b4c1 Mon Sep 17 00:00:00 2001 From: fredjaya Date: Wed, 8 Oct 2025 15:51:04 +1100 Subject: [PATCH 1/8] DOC: clarify study data page --- 20-example.Rmd | 43 -------------------------------- 20-study.Rmd | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 43 deletions(-) delete mode 100644 20-example.Rmd create mode 100644 20-study.Rmd diff --git a/20-example.Rmd b/20-example.Rmd deleted file mode 100644 index bb3be68..0000000 --- a/20-example.Rmd +++ /dev/null @@ -1,43 +0,0 @@ -# Example Experiment {#exampleexperiment} - -## Background - -This workshop will use data from paper *Macrophage and neutrophil heterogeneity -at single-cell spatial resolution in human inflammatory bowel disease* -(Garrido-Trigo et al. 2023)[^1]. - -[^1]: https://doi.org/10.1038/s41467-023-40156-6 - -**Hypothesis: There is a difference in immune cell localisation between healthy -donors vs donors with active inflammatory bowel disease (IBD)** - -The authors have made their raw and annotated data available (and their -[code](https://github.com/HelenaLC/CosMx-SMI-IBD)). There is also a browsable -interface here: https://servidor2-ciberehd.upc.es/external/garrido/app/. - -## The samples and study design - -Inflammatory bowel disease (IBD) cohort includes Crohn's disease (CD) and -ulcerative colitis (UC). - -```{r, echo=F} -knitr::include_graphics( - here::here("images/garrido-trigo_fig1a.png") -) -``` - -_Fig 1a from Garrido-Trigo et al. (2023)._ - -The study included 9 CosMx slides of colonic biopsies, from a total of 9 donors: - -| Cohorts | Abbreviated | Number of samples | -| ---------------------- | ----------- | ----------------- | -| **Healthy controls** | HC | 3 | -| Ulcerative colitis | UC | 3 | -| **Crohn's disease** | DC | 3 | - -In the original paper, the CosMX SMI cells were annotated via label transfer from -the scRNA data. For the workshop, we will process the spatial transcriptomics -data independently, on the healthy control (HC) and Chrohn's disease (CD) samples. - - diff --git a/20-study.Rmd b/20-study.Rmd new file mode 100644 index 0000000..d1dbc1a --- /dev/null +++ b/20-study.Rmd @@ -0,0 +1,67 @@ +# Study overview + +## Learning objectives + +- Recall the main types of inflammatory bowel disease (IBD) +- Explain why spatial transcriptomics is used to study immune cell organisation +in IBD +- Describe how the data set is structured with healthy and disease cohorts +- Evaluate how replicates and blaance sampling improve the reliability of +spatial transcriptomic studies + +## Background + +This workshop will use CosMx Spatial Molecular Imager (SMI) data from the paper +_Macrophage and neutrophil heterogeneity +at single-cell spatial resolution in human inflammatory bowel disease_ +(Garrido-Trigo et al. 2023)[^1]. + +[^1]: https://doi.org/10.1038/s41467-023-40156-6 + +This data set was chosen because the authors have made their raw and +annotated data available, along with the corresponding analysis +[code](https://github.com/HelenaLC/CosMx-SMI-IBD)) and a browsable +[data interface](https://servidor2-ciberehd.upc.es/external/garrido/app/). + +The study provides a clear biological contrast between health and disease +states. This disease cohort consists of donors with active inflammatory bowel +disease (IBD), a chronic inflammatory condition of the gastrointestinal tract, +where **immune cell organisation within the tissue plays a central role in +disease pathogenesis.** + +Spatial transcriptomic technologies enable gene expression to be measured at +subcellular resolution while preserving the tissue architecture, allowing +researchers to uncover spatial patterns and cell-cell interactions that would be +lost in conventional bulk or single-cell RNA-seq data. + +## The experimental design and cohorts + +**Inflammatory bowel disease (IBD) is an umbrella term** that includes two main inflammatory disorders of the gastrointenstinal tract: **Chrohn's disease (CD)** and **ulcerative colitis (UC)**. + +```{r echo=F,fig.align='center',out.width='90%'} +knitr::include_graphics( + here::here("images/garrido-trigo_fig1a.png") +) +``` + +_Fig 1a from Garrido-Trigo et al. (2023)._ + +The study included 9 CosMx slides of colonic biopsies, from a total of 9 donors: + +| Cohorts | Abbreviated | Number of samples | +| ---------------------- | ----------- | ----------------- | +| **Healthy controls** | HC | 3 | +| Ulcerative colitis | UC | 3 | +| **Crohn's disease** | CD | 3 | + +The study includes three biological replicates per condition (HC, UC, CD). This +provides enough variation to capture differences between individuals while +maintaining manageable data size for hands-on analysis. + +In this workshop, we will focus on the **healthy control (HC)** +and **Crohn's disease (CD)** samples. + +In the original paper, the CosMX SMI cells were annotated via label transfer from +the scRNA data. The spatial transcriptomics data will be processed independent of the scRNA data to demonstrate how differences in cellular composition and spatial organisation can be inferred directly from the spatial CosMx data. + +TODO: Include image of plots that will be created in downstream steps. From 67c27e6d4f87ce234d9127c1ae527242d169d0e7 Mon Sep 17 00:00:00 2001 From: fredjaya Date: Wed, 8 Oct 2025 16:08:47 +1100 Subject: [PATCH 2/8] MAINT: typos, reorder test --- 20-study.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/20-study.Rmd b/20-study.Rmd index d1dbc1a..c64c5ea 100644 --- a/20-study.Rmd +++ b/20-study.Rmd @@ -6,7 +6,7 @@ - Explain why spatial transcriptomics is used to study immune cell organisation in IBD - Describe how the data set is structured with healthy and disease cohorts -- Evaluate how replicates and blaance sampling improve the reliability of +- Evaluate how replicates and balanced sampling improves the reliability of spatial transcriptomic studies ## Background @@ -25,10 +25,12 @@ annotated data available, along with the corresponding analysis The study provides a clear biological contrast between health and disease states. This disease cohort consists of donors with active inflammatory bowel -disease (IBD), a chronic inflammatory condition of the gastrointestinal tract, +disease (IBD), a chronic inflammatory condition of the gastrointestinal (GI) tract, where **immune cell organisation within the tissue plays a central role in disease pathogenesis.** +**Inflammatory bowel disease (IBD) is an umbrella term** that includes two main GI tract disorders with different characteristics: **Crohn's disease (CD)** and **ulcerative colitis (UC)**. + Spatial transcriptomic technologies enable gene expression to be measured at subcellular resolution while preserving the tissue architecture, allowing researchers to uncover spatial patterns and cell-cell interactions that would be @@ -36,8 +38,6 @@ lost in conventional bulk or single-cell RNA-seq data. ## The experimental design and cohorts -**Inflammatory bowel disease (IBD) is an umbrella term** that includes two main inflammatory disorders of the gastrointenstinal tract: **Chrohn's disease (CD)** and **ulcerative colitis (UC)**. - ```{r echo=F,fig.align='center',out.width='90%'} knitr::include_graphics( here::here("images/garrido-trigo_fig1a.png") From e047312e3fd462705896a43b6d5625de072b504f Mon Sep 17 00:00:00 2001 From: fredjaya Date: Thu, 9 Oct 2025 14:53:27 +1100 Subject: [PATCH 3/8] wip: QC text clarifications --- 20-study.Rmd | 11 +++-- 40-QC.Rmd | 86 ++++++++++++++++++++++++------------- images/hatton2023_fig3.jpg | Bin 0 -> 942783 bytes 3 files changed, 60 insertions(+), 37 deletions(-) create mode 100644 images/hatton2023_fig3.jpg diff --git a/20-study.Rmd b/20-study.Rmd index c64c5ea..ca2b24f 100644 --- a/20-study.Rmd +++ b/20-study.Rmd @@ -2,7 +2,6 @@ ## Learning objectives -- Recall the main types of inflammatory bowel disease (IBD) - Explain why spatial transcriptomics is used to study immune cell organisation in IBD - Describe how the data set is structured with healthy and disease cohorts @@ -20,12 +19,12 @@ at single-cell spatial resolution in human inflammatory bowel disease_ This data set was chosen because the authors have made their raw and annotated data available, along with the corresponding analysis -[code](https://github.com/HelenaLC/CosMx-SMI-IBD)) and a browsable +[code](https://github.com/HelenaLC/CosMx-SMI-IBD) and a browsable [data interface](https://servidor2-ciberehd.upc.es/external/garrido/app/). The study provides a clear biological contrast between health and disease -states. This disease cohort consists of donors with active inflammatory bowel -disease (IBD), a chronic inflammatory condition of the gastrointestinal (GI) tract, +states. This disease cohort consists of donors with active **inflammatory bowel +disease (IBD)**, a chronic inflammatory condition of the gastrointestinal (GI) tract, where **immune cell organisation within the tissue plays a central role in disease pathogenesis.** @@ -54,8 +53,8 @@ The study included 9 CosMx slides of colonic biopsies, from a total of 9 donors: | Ulcerative colitis | UC | 3 | | **Crohn's disease** | CD | 3 | -The study includes three biological replicates per condition (HC, UC, CD). This -provides enough variation to capture differences between individuals while +The study includes **three biological replicates per condition** (HC, UC, CD). +This **provides enough variation to capture differences between individuals** while maintaining manageable data size for hands-on analysis. In this workshop, we will focus on the **healthy control (HC)** diff --git a/40-QC.Rmd b/40-QC.Rmd index a8448d1..70f4344 100644 --- a/40-QC.Rmd +++ b/40-QC.Rmd @@ -1,6 +1,14 @@ # Quality control and filtering -```{r setup, include=FALSE} +## Learning objectives + +## Overview + +* Basic QC plots + filtering (20min) +* (Negative probes if using cosmx) +* Identify low quality cells + +```{r} knitr::opts_chunk$set( echo = TRUE, warning = FALSE @@ -12,40 +20,37 @@ library(tidyverse) library(here) ``` -## Overview - -* Basic QC plots + filtering (20min) -* (Negative probes if using cosmx) -* Identify low quality cells - Read in subsampled seurat object ## Identifying potential technical artefacts ```{r} -so_path <- here("data", "GSE234713_CosMx_IBD_seurat_00_raw_subsampled.RDS") +# Read in the subsampled data for this lesson +so_path <- here("data", "GSE234713_CosMx_IBD_seurat_00_raw_subsampled.RDS") so <- readRDS(so_path) ``` Library size (total transcripts) and cell areas are good indicators of technical artefacts introduced during data generation steps. -Possible artefacts: -- low quality cells -- cell segmentation challenges (combining two cells, not aligned with real cell -boundaries, leading to high area and low RNA count) +Possible artefacts can include: + +- Low quality cells +- Cell segmentation challenges (combining two cells, not aligned with real cell +boundaries, leading to high cell area and low RNA count) + +Understanding how these are prevalent in your data can help with biological +interpretation downstream. For example, discerning whether differences in cells +are due to e.g. cell type differences, or technical artefacts. -Understanding these can help with biological interpretation downstream, -for example, discerning whether differences in cells are due to e.g. cell type -differences, or technical artefacts. +### Library size (transcript counts) ```{r warning=F} -# Total counts per cell -ggplot(so@meta.data, aes(x=nCount_RNA, col=orig.ident)) + +ggplot(so@meta.data, aes(x = nCount_RNA, col = tissue_sample)) + geom_density() + scale_x_log10() + theme_bw() + - annotation_logticks(sides = "b") + + annotation_logticks(sides = "b", colour = "lightgrey") + ggtitle("Transcript counts per cell") ``` @@ -54,6 +59,8 @@ The transcripts per cell all display a log-normal distribution with shifting med Indicates no largely low-quality cells, and a good example of library size effects that should be normalised downstream, prior to analyses. +### Cell surface area + ```{r warning=F} # Total counts per cell ggplot(so@meta.data, aes(x=Area, col=orig.ident)) + @@ -68,6 +75,8 @@ Areas also follow log-normal distributions with medians ranging between 3,000 - 4,000px^2. Sample/FOV `CD.c` has slightly smaller cell area with a median of ~2,000px^2. +## Bivariate QC + Useful to view bivariate metrics - the larger the cell, the more transcripts, in general. @@ -97,6 +106,14 @@ so@meta.data %>% The more transcripts detected `nCount_RNA`, the more mapped genes there should be. +::: {.callout-note title="Cell size variability"} +Cautious of samples with highly variable varying sizes. Total transcript +counts and cell areas can vary substantially. Applying "standard" QC or +filtering thresholds uniformly across all cells may remove valid cells. + +![](images/hatton2023_fig3.jpg){width=90%} +::: + Point out where bad quality cells would reside ## Filtering low-quality cells @@ -305,16 +322,23 @@ so_borders %>% ## Summary -- QC is not prescriptive -- Explore your data and ITERATE -- Be permissive, especially if it's your first look at the data -- There are more sources of technical variation in spatial, in comparison to older techs. While you don't need to filter in every step, it is useful to understand these sources of variation to interpret your biological analyses, and inform the subsequent rounds of QC. These differ across techs. For example, CosMX have FOVs which adds another dimension in comparison to Xenium - -Notes: - -You can also conduct QC in low dimensional steps following the -normalisation and dimension reduction steps in this workshop. However, -we will proceed directly with the pre-processing steps. - -Also you can consider filtering each sample separately. Applying a single, strict threshold based on a high-quality sample might inappropriately filter out valid cells from a technically lower-quality sample. -- TODO: fact check +Quality control (QC) in spatial transcriptomics is a highly iterative and +context-dependent process. It requires continual exploration of your data rather +than following a prescriptive set of rules. When examining and filtering your +data for the first time, we recommend setting permissive threshold so +meaningful cells are not removed. After a preliminary look at the data, QC steps +can be revisted. + +In comparison to older transcriptomics technologies, spatial technologies introduce +new sources of technical variation that can make interpretation of your results +tricky, and even obscure true, biological signals in the data. While you do not +need to filter in every step, it is useful to understand these potential sources +of bias, and inform subsequent rounds of QC. + +Sources of technical variation are also platform dependent and should be +accounted for. For example, CosMx contains FOVs which adds another dimension, +compared to Xenium. + +Quality control is not a step you conduct once during a pre-processing pipeline. +Throughout the following steps in the workshop, you will continue to conduct QC +steps. diff --git a/images/hatton2023_fig3.jpg b/images/hatton2023_fig3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80435e16d021f6259ce4e21f4ea1216bf79ca14b GIT binary patch literal 942783 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