Course Context: These projects are designed to build familiarity with major genomic and transcriptomic data repositories (GEO, TCGA) and standard analysis pipelines. Each project should be completable in approximately 3–5 hours. You are encouraged to use University of Michigan-provided AI tools to assist with coding and interpretation (see the AI Tools section at the bottom).
Single-dataset differential expression studies are notoriously sensitive to cohort composition, platform differences, and batch effects. This project asks: how reproducible are differentially expressed gene (DEG) signatures across independent COVID-19 datasets? You will perform differential expression analysis on multiple GEO datasets individually and then integrate them into a meta-analysis, critically evaluating where results converge and where they diverge.
- Navigate GEO to locate, evaluate, and download RNA-seq count data and metadata
- Perform and critically interpret differential expression analysis
- Understand the effect of batch correction and data integration on results
- Apply gene set and pathway enrichment analysis
- Synthesize multi-dataset results into a biologically coherent interpretation
Download the following two COVID-19 datasets from GEO. You are required to find and add at least one additional COVID-19 GEO dataset of your choice (justify your selection briefly in your report).
| Accession | Description |
|---|---|
| GSE202805 | Required |
| GSE227116 | Required |
| (your choice) | At least 1 additional COVID-19 dataset |
Data access: Use the GEOquery R package, or download count matrices and metadata directly from the GEO web interface.
Before any analysis, critically examine each dataset:
- What tissue or cell type was profiled? What sequencing platform was used?
- What are the case and control group definitions? Are they consistent across datasets?
- Perform basic QC: library size distributions, PCA or UMAP colored by dataset, sample, and condition.
- Inspect for and document any obvious batch effects between datasets.
Checkpoint question: Based on QC alone, do you anticipate strong or weak concordance across datasets? Why?
Perform differential expression analysis independently on each dataset comparing COVID-19 cases to appropriate controls. Use one of the following tools: DESeq2, edgeR, or limma/voom. Apply consistent thresholds across all datasets:
- Adjusted p-value < 0.05
- |log₂ fold change| ≥ 1 (i.e., 2-fold change)
For each dataset, report:
- Total number of DEGs (up- and down-regulated separately)
- A volcano plot
- A heatmap of the top 50 DEGs
Concatenate the raw count matrices from all datasets into a single combined matrix. Before performing differential expression:
- Apply a batch correction method (e.g.,
ComBat-seqfrom thesvapackage in R, orHarmonyin Python) to address inter-dataset technical variation. - Re-run PCA/UMAP after correction to confirm batch effects are reduced.
Then perform differential expression on the integrated dataset using the same tool and thresholds as Part 2.
Comparative analysis:
- Generate a Venn diagram comparing DEG lists across all individual datasets and the meta-analysis result.
- Report the number of DEGs unique to each dataset and the number shared across all datasets.
- Do the meta-analysis results more closely resemble any single dataset? Discuss why.
Apply gene set enrichment or over-representation analysis to each DEG list (individual datasets and meta-analysis). Acceptable tools include: fgsea, clusterProfiler, GSEA, SPIA, or equivalent Python tools (e.g., GSEApy).
Use at least one of the following gene set collections: KEGG, Reactome, Hallmark (MSigDB), or GO Biological Process.
- Generate a Venn diagram of dysregulated pathways across datasets and the meta-analysis.
- Report pathways that are consistently identified (across 3+ datasets) and those that are dataset-specific.
- Are the dataset-specific pathways biologically meaningful, or do they appear to reflect noise or cohort-specific confounders?
Formulate and answer one novel question using the data you have collected. Your question should go beyond replicating the steps above. Examples of the type of question expected (do not simply copy these):
- Are the consistently dysregulated genes enriched for any specific biological process not captured by standard pathway databases (e.g., using a custom gene set)?
- Do datasets that share a tissue type show higher DEG concordance than datasets from different tissues?
- Does the direction of fold change for shared DEGs agree across datasets, or are there discordant genes?
- Can the top meta-analysis DEGs distinguish COVID-19 from other respiratory diseases if validated against a publicly available influenza dataset?
Clearly state your question, your analytical approach, your result, and your interpretation.
- A written report (~2–3 pages, not counting figures) covering all five parts
- All figures (volcano plots, heatmaps, Venn diagrams, PCA/UMAP plots)
- A brief methods section describing tools, versions, and parameter choices
- Well-commented code (R script, Python script, or Jupyter/Rmd notebook)
Prostate cancer is clinically heterogeneous: patients with similar histological grade can have vastly different outcomes. This project asks: do molecular subtypes defined from transcriptomic data align with established clinical classifications? You will download TCGA prostate adenocarcinoma (PRAD) data, perform unsupervised clustering to discover transcriptomic subtypes, evaluate how well those subtypes correspond to clinical labels, and optionally build a supervised classifier.
- Access and process TCGA RNA-seq data and associated clinical metadata
- Perform normalization and dimensionality reduction on large expression matrices
- Apply and evaluate unsupervised clustering methods
- Compare data-driven subtypes to clinically defined categories
- Optionally: build and evaluate a supervised machine learning classifier
Download TCGA-PRAD RNA-seq data (raw counts or FPKM/TPM) using one of the following:
- R:
TCGAbiolinks(preferred) orTCGA2STAT - Python:
gdc-clientorpytcga
Download the associated clinical metadata. Inspect the metadata to identify relevant clinical grouping variables. You must use at least two of the following to define sample groups:
| Variable | Notes |
|---|---|
| Gleason score | Standard threshold: ≤6 (low), 7 (intermediate), ≥8 (high) |
| Pathologic T stage | pT2 vs. pT3/T4 |
| PSA level at diagnosis | Common threshold: <10, 10–20, >20 ng/mL |
| Biochemical recurrence status | Available as a binary label |
Document how many samples fall into each group and flag any samples with missing clinical data (decide whether to exclude or impute, and justify your choice).
If you downloaded raw counts: normalize to CPM, TPM, or FPKM before proceeding, and briefly explain why normalization is necessary.
High-dimensional expression data requires reduction before clustering is interpretable.
- Filter to a biologically informative gene subset (e.g., top 2,000–5,000 most variably expressed genes, or a curated list of known prostate cancer marker genes).
- Apply PCA and either UMAP or t-SNE.
- Visualize samples colored by each of your clinical grouping variables.
Checkpoint question: Do any clinical labels show visible separation in reduced-dimensional space before clustering? What does this suggest about the transcriptomic signal for that variable?
Apply at least two unsupervised clustering approaches from the list below and compare their results:
- k-means clustering
- Hierarchical clustering (with your choice of linkage and distance metric — justify)
- Consensus clustering (e.g.,
ConsensusClusterPlusin R) - Gaussian mixture models
For k-means or similar methods, use the elbow method, silhouette scores, or gap statistic to select the number of clusters k. Do not simply assume that k equals the number of clinical groups.
Evaluation:
- Compute the Adjusted Rand Index (ARI) or Normalized Mutual Information (NMI) between your cluster assignments and each clinical grouping variable.
- Generate a clustered heatmap of the top differentially expressed genes across clusters.
- Do your data-driven subtypes correspond to a specific clinical variable more than others? Are any clusters clinically ambiguous?
Split the dataset into training (70%) and test (30%) sets, stratified by your primary clinical grouping variable. Build a classifier to predict clinical subtype from expression data using at least one of the following:
- R:
caret,randomForest,e1071(SVM), orglmnet - Python:
scikit-learn(Random Forest, SVM, Logistic Regression, or Elastic Net)
Report on the test set:
- Accuracy, precision, recall, and F1 score (per class and macro-averaged)
- A confusion matrix
- For tree-based or regularized models: feature importance or top contributing genes
Reflection question: Compare the genes most important to your classifier with the genes driving cluster separation in Part 3. Do they overlap? What does this agreement or disagreement tell you?
Formulate and answer one novel question using the data. Your question must involve an analysis not already performed in Parts 1–4. Examples of the type of question expected:
- Are patients whose transcriptomic subtype is discordant with their clinical label (e.g., high Gleason but low-risk cluster) associated with different survival outcomes in the TCGA clinical follow-up data?
- Can you identify a minimal gene signature (e.g., 10–20 genes) that achieves classification performance comparable to using all variable genes?
- Does incorporating somatic mutation burden or copy number variation (also available via TCGAbiolinks) improve subtype prediction?
- How does classifier performance degrade if trained on one clinical variable (e.g., Gleason score) and tested on another (e.g., recurrence status)?
Clearly state your question, analytical approach, result, and interpretation.
- A written report (~2–3 pages, not counting figures) covering all five parts
- All figures (PCA/UMAP, heatmaps, cluster evaluation plots, confusion matrix)
- A brief methods section describing tools, versions, and parameter choices
- Well-commented code (R script, Python script, or Jupyter/Rmd notebook)
The immune landscape of a tumor is not static — it shifts with disease progression, histological grade, and clinical outcome. This project asks: does immune cell composition in prostate tumors change with clinical risk? You will access public single-cell RNA-seq (scRNA-seq) data from prostate cancer patients, reconstruct the tumor microenvironment (TME) through cell-type deconvolution and clustering, and test whether the abundance of specific immune populations — cytotoxic T cells, regulatory T cells, macrophage polarization states, NK cells, or myeloid-derived suppressor cells — correlates with Gleason score or biochemical recurrence status.
- Navigate public scRNA-seq repositories (GEO, Zenodo) to locate and evaluate suitable prostate cancer datasets
- Apply standard single-cell analysis pipelines (quality control, normalization, dimensionality reduction, clustering)
- Annotate cell clusters using canonical marker genes for major tumor microenvironment populations
- Quantify cell-type abundance per patient and link it to clinical metadata
- Perform statistical association tests between TME composition and clinical risk variables
Download at least one of the following publicly available prostate cancer scRNA-seq datasets:
| Accession | Description |
|---|---|
| GSE141445 | scRNA-seq of human prostate tumors and adjacent normal tissue |
| GSE176031 | Single-cell profiling of prostate cancer TME across risk groups |
| (your choice) | At least 1 additional prostate cancer or relevant pan-cancer scRNA-seq dataset |
You are required to identify and include at least one additional dataset of your choice. Justify your selection briefly in your report (e.g., shared tissue type, complementary clinical annotations, or overlapping patient risk strata).
Data access: Use the GEOquery R package or download count matrices directly from the GEO web interface. For Python, scanpy and anndata are the recommended ecosystem.
Before any analysis, critically inspect each dataset:
- What tissue compartment was profiled (tumor core, adjacent normal, peripheral blood)?
- What single-cell platform was used (10x Chromium, Smart-seq2, etc.)?
- What clinical metadata is available — is Gleason score, PSA, or recurrence status recorded per patient?
Perform standard per-cell QC:
- Filter cells by number of detected genes, total UMI counts, and mitochondrial read fraction
- Identify and remove likely doublets (e.g., using
DoubletFinderorscrublet) - Generate QC summary plots (violin plots, scatter plots) before and after filtering
Checkpoint question: How do QC thresholds differ across datasets or patients, and what does this variability imply for cross-sample comparisons?
Apply a standard single-cell preprocessing pipeline to each dataset:
- Normalize (e.g., scran normalization or library-size normalization to 10,000 counts per cell)
- Log-transform and identify highly variable genes (typically 2,000–5,000)
- Scale data and apply PCA; use the elbow plot to select the number of principal components
- Construct a k-nearest neighbor graph and apply UMAP or t-SNE for visualization
- Cluster cells using Leiden or Louvain community detection; explore a range of resolution parameters
Visualize clusters colored by sample of origin, patient, and clinical group. Evaluate whether any clusters are driven by technical rather than biological factors.
Annotate each cluster using canonical marker genes for the major TME cell populations:
| Cell Type | Example Markers |
|---|---|
| CD8+ cytotoxic T cells | CD8A, GZMB, PRF1 |
| CD4+ T helper / Tregs | CD4, FOXP3, IL2RA |
| NK cells | NCAM1, KLRB1, NKG7 |
| Macrophages (M1/M2) | CD68, CD163, MRC1, IL1B |
| Dendritic cells | CLEC9A, FCER1A, CD1C |
| B cells | CD19, MS4A1 |
| Myeloid-derived suppressor cells | S100A8, S100A9, ITGAM |
| Epithelial / tumor cells | KLK3 (PSA), AMACR, NKX3-1 |
| Fibroblasts / stroma | COL1A1, FAP, ACTA2 |
Generate dot plots and feature plots for each marker set. Produce a final annotated UMAP. Quantify each patient's cell-type composition as a proportion of total profiled cells.
Checkpoint question: Are any cell populations absent or dramatically underrepresented in certain samples? Is this likely biological or a technical artifact of the profiling protocol?
Using your per-patient cell-type proportion matrix and the associated clinical metadata:
- Define clinical groupings for at least two of the following variables:
| Variable | Grouping |
|---|---|
| Gleason score | ≤6 (low risk), 7 (intermediate), ≥8 (high risk) |
| Biochemical recurrence | Recurrent vs. non-recurrent |
| Pathologic T stage | Organ-confined (pT2) vs. extraprostatic (pT3/T4) |
| PSA at diagnosis | <10, 10–20, >20 ng/mL |
- Test for differences in cell-type abundance across groups using Wilcoxon rank-sum tests or linear models; apply multiple testing correction (Benjamini-Hochberg)
- Generate box plots or violin plots of cell-type proportions stratified by clinical group
- Compute a pairwise correlation matrix of all cell-type proportions; visualize as a heatmap
Reflection question: Which immune populations most strongly track with clinical risk? Are these associations consistent across datasets, or dataset-specific?
Formulate and answer one novel question using the data you have collected. Your question must go beyond the steps above. Examples of the type of question expected (do not simply copy these):
- Within the macrophage compartment, do M1-like and M2-like states shift in proportion with Gleason score, and does this polarization ratio predict recurrence better than total macrophage abundance?
- Are there T cell exhaustion signatures (e.g., PDCD1, HAVCR2, TIGIT) enriched in high-Gleason tumors, and does exhaustion score correlate with CD8+ T cell abundance?
- Can you identify a small panel of cell-type proportion features that classifies high-risk from low-risk patients with reasonable accuracy using a simple classifier?
- Do immune composition patterns differ between tumor core and adjacent normal tissue within the same patient, and does this difference vary with clinical stage?
Clearly state your question, your analytical approach, your result, and your interpretation.
- A written report (~2–3 pages, not counting figures) covering all five parts
- All figures: QC plots, UMAP with cell-type annotations, marker dot plots, proportion box plots, association test results
- A brief methods section describing tools, versions, and key parameter choices
- Well-commented code (R script using
Seurat/SingleCellExperiment, Python script usingscanpy, or a Jupyter/Rmd notebook)
You are encouraged to use AI tools to assist with coding, debugging, and interpretation. The following tools are available to U-M students at no additional cost and require no personal subscription:
| Tool | Access | Best for |
|---|---|---|
| Microsoft Copilot | Free with U-M email (sign in with uniqname@umich.edu) | Code generation, debugging, explaining error messages |
| U-M GPT | U-M login required | General analysis planning, interpreting results |
Note: Perplexity.ai and rtutor.ai are also useful free resources, though they are not U-M-specific. You can use them without a subscription for most tasks.
For students who want to go further, consider using an AI coding assistant in an agentic workflow — where the AI iteratively writes, runs, and refines code in response to intermediate results. This is achievable using tools already available to you:
Option A — GitHub Copilot in VS Code U-M students have access to GitHub Copilot for free through the GitHub Student Developer Pack. Use it inside VS Code with the Copilot Chat extension to interactively build and debug your analysis pipeline step-by-step.
Option B — Microsoft Copilot in a Notebook Use Copilot to iteratively interpret QC output, suggest next steps, and generate downstream code blocks based on your actual results. Paste figures or summary tables into the chat and ask follow-up analytical questions.
What makes it "agentic": Rather than generating all code upfront, you feed real intermediate outputs (PCA plots, error messages, DEG tables) back to the AI and ask it to revise the approach. Document these iterations in your notebook as a mini-log of your AI-assisted workflow.
Assessment of your AI use: In your report, include a brief paragraph describing how you used AI tools, what worked well, what required correction, and what you ultimately had to solve yourself.
| Component | Weight |
|---|---|
| Data acquisition and QC | 15% |
| Core analysis (Parts 2–4) | 40% |
| Original research question (Part 5) | 25% |
| Code quality and reproducibility | 10% |
| Report clarity and interpretation | 10% |