Use this skill when you have **longitudinal patient omics data** and want to: - ✅ Reconstruct disease progression trajectories from time-series data - ✅ Order samples by disease stage (pseudotime) with irregular sampling - ✅ Identify biomarkers changing along disease trajectory - ✅ Stratify patients as fast vs. slow progressors - ✅ Predict clinical outcomes from trajectory position - ✅ Validate computational staging against clinical measures
Scanned 9/4/2026
Install to Claude Code
npx -y skills add gabrielmoreira/agent-skills-mirror --skill disease-progression-longitudinal --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Disease Progression Longitudinal?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-disease-progression-longitudinal)More formats (shields.io, HTML) on the badges page.
---
id: disease-progression-longitudinal
name: Disease Progression Trajectory Analysis
category: multi_omics
short-description: Reconstruct disease progression trajectories from longitudinal patient omics data.
detailed-description: Analyze time-series patient data (RNA-seq, proteomics, metabolomics) to reconstruct consensus disease trajectories using TimeAx multiple alignment. Orders samples by disease pseudotime, identifies trajectory-associated features, and validates against clinical outcomes. Handles irregular sampling patterns and works with cross-sectional or longitudinal cohorts.
starting-prompt: Analyze disease progression trajectories from longitudinal patient omics data
---
# Disease Progression Trajectory Analysis
## When to Use This Skill
Use this skill when you have **longitudinal patient omics data** and want to:
- ✅ Reconstruct disease progression trajectories from time-series data
- ✅ Order samples by disease stage (pseudotime) with irregular sampling
- ✅ Identify biomarkers changing along disease trajectory
- ✅ Stratify patients as fast vs. slow progressors
- ✅ Predict clinical outcomes from trajectory position
- ✅ Validate computational staging against clinical measures
**Required data:**
- Minimum 10 patients with 3+ timepoints each
- Omics data: RNA-seq, proteomics, metabolomics, or clinical biomarkers
- Metadata: Patient IDs, timepoints (days/months/years), optional outcomes
**Primary method:** TimeAx multiple trajectory alignment (handles irregular sampling)
**Feature identification:** Polynomial regression (linear/quadratic/cubic) per the TimeAx paper (Frishberg et al., Nat Commun 2023), with FDR-corrected Q-value filtering. Captures both monotonic and non-monotonic dynamics.
**Alternative methods:** Linear Mixed Models (regular sampling), Hidden Markov Models (discrete stages)
## Installation
**R ≥ 4.0** with the TimeAx package (primary trajectory method):
```r
# Install TimeAx from GitHub
install.packages("remotes")
remotes::install_github("amitfrish/TimeAx")
# Required for plotting
install.packages(c("ggplot2", "ggprism"))
# Required for demo dataset (GSE128959 batch correction)
BiocManager::install("sva")
```
**Python ≥ 3.9** for the workflow wrapper and analysis pipeline:
```bash
# Core analysis packages
pip install numpy pandas scipy scikit-learn statsmodels lifelines
# Visualization packages
pip install seaborn matplotlib
# PDF report generation (optional)
pip install reportlab
# Optional
pip install hmmlearn # Hidden Markov Models alternative
```
**For Linear Mixed Models alternative:** R packages `lme4`, `lmerTest`
**License compliance:** All packages use permissive licenses (MIT, BSD, Apache 2.0) - commercial AI agent use permitted.
For detailed installation and troubleshooting, see [troubleshooting_guide.md](references/troubleshooting_guide.md)
## Inputs
**Required files:**
1. **Data matrix** (features × samples)
- CSV/TSV format with features as rows, samples as columns
- Feature types: genes, proteins, metabolites, or clinical biomarkers
- Normalized counts or continuous measurements
- ⚠️ **TimeAx requires all-positive values** (e.g., log2-normalized, RMA). Do NOT Z-score normalize before TimeAx — it creates negative values that disable the `ratio` mechanism.
2. **Sample metadata** (CSV/TSV)
- Required columns: `sample_id`, `patient_id`, `timepoint`
- Optional: `outcome`, `treatment`, `batch`, clinical covariates
- Timepoints: numeric values (days, months, years from baseline)
**Data requirements:**
- ≥10 patients minimum (20+ recommended)
- ≥3 timepoints per patient minimum
- Handles irregular sampling (different timepoints per patient)
- Works with cross-sectional + longitudinal cohorts
## Outputs
**Primary results:**
- `pseudotime_assignments.csv` - Disease pseudotime for each sample
- `trajectory_features.csv` - Features changing along trajectory, with polynomial degree, R², and direction
- `patient_summaries.csv` - Per-patient progression statistics
- `all_feature_statistics.csv` - Statistics for all tested features
**Analysis objects (for downstream use):**
- `timeax_model.pkl` - Complete TimeAx model object
- Load with: `model = pickle.load(open('timeax_model.pkl', 'rb'))`
- Required for: Projecting new samples, downstream trajectory analysis
**Reports:**
- `analysis_report.pdf` - Publication-quality PDF with Introduction, Methods, Results, Conclusions
- Requires: `pip install reportlab` (optional — markdown report generated regardless)
- `SUMMARY.txt` - Plain-text summary report
**TimeAx R plots (PNG + SVG, generated in Step 2):**
- `timeax_pseudotime_vs_time.png/.svg` - Per-patient pseudotime vs actual time trajectories
- `timeax_progression_rates.png/.svg` - Patient progression rate comparison (fast vs slow)
- `timeax_seed_dynamics.png/.svg` - Seed feature expression trends along pseudotime
- `timeax_uncertainty.png/.svg` - Pseudotime uncertainty distribution
**Python plots (PNG + SVG, generated in Step 3):**
- `patient_trajectories_pca.png/.svg` - PCA with pseudotime coloring and patient trajectory lines
- `patient_trajectories_umap.png/.svg` - UMAP nonlinear projection
- `trajectory_heatmap.png/.svg` - Feature expression clustermap
- `trajectory_trends.png/.svg` - Polynomial fit trends for top features
- `pseudotime_vs_stage.png/.svg` - Pseudotime vs clinical tumor stage (biological validation)
- `patient_progression.png/.svg` - Per-patient pseudotime spaghetti plot
- `seed_feature_heatmap.png/.svg` - TimeAx seed feature dynamics heatmap
**Metadata:**
- `model_metadata.json` - Analysis parameters, quality metrics (monotonicity, robustness)
## Clarification Questions
🚨 **ALWAYS ask Question 1 FIRST. Do not ask about data type, study design, or analysis parameters before the user has answered Question 1.**
### 1. Input Files (ASK THIS FIRST)
- **Do you have longitudinal patient omics data to analyze?**
- If uploaded: Are these your data matrix and sample metadata files?
- Expected: Data matrix (features × samples) + metadata (sample_id, patient_id, timepoint)
- **Or use example/demo data?**
- **GSE128959 bladder cancer recurrence** (18 patients, 84 samples, 17K genes) — from the TimeAx paper (Frishberg et al. 2023). Requires R + `sva` package. Downloads ~5MB on first run.
> 🚨 **IF EXAMPLE DATA SELECTED:** All parameters are pre-defined (bladder cancer microarray, 18 patients, 4-6 timepoints, tumor recurrence, TimeAx method with ComBat batch correction). **DO NOT ask questions 2-6.** Proceed directly to Step 1.
**Questions 2-6 are ONLY for users providing their own data:**
### 2. **Data Type**: Bulk RNA-seq, proteomics, metabolomics, clinical biomarkers, or multi-omics?
### 3. **Study Design**: Number of patients (min 10, recommend 20+)? Timepoints per patient (min 3)? Sampling pattern (regular/irregular)? Time units and range?
### 4. **Disease Context**: Disease type? Treatment status? Available clinical outcomes (survival, relapse, response)? Known clinical staging?
### 5. **Analysis Goals**: Pseudotime ordering, patient stratification, biomarker discovery, outcome prediction, or trajectory comparison?
### 6. **Method Preference**: TimeAx (recommended), Linear Mixed Models, Hidden Markov Models, or not sure?
## Standard Workflow
> **Note:** Run from the OmicsClaw root directory and add the workflow scripts to `sys.path`:
> ```python
> import sys; import os; sys.path.insert(0, os.path.abspath('knowledge_base/scripts/disease-progression-longitudinal'))
> ```
🚨 **MANDATORY: USE SCRIPTS EXACTLY AS SHOWN - DO NOT WRITE INLINE CODE** 🚨
**Step 1 - Load and preprocess data:**
**For example/demo data (GSE128959 bladder cancer):**
```python
from load_and_preprocess import load_example_data, load_and_preprocess_data
# Load GSE128959 (downloads and preprocesses via R on first run)
data, metadata = load_example_data()
# Save to files for the standard pipeline
data.to_csv('gse128959_expression.csv')
metadata.to_csv('gse128959_metadata.csv', index=False)
# Run through standard preprocessing
data, metadata, preprocessing_stats = load_and_preprocess_data(
data_file='gse128959_expression.csv',
metadata_file='gse128959_metadata.csv',
data_type='rnaseq',
min_patients=10,
min_timepoints=3
)
```
**For your own data:**
```python
from load_and_preprocess import load_and_preprocess_data
data, metadata, preprocessing_stats = load_and_preprocess_data(
data_file="patient_expression.csv",
metadata_file="sample_metadata.csv",
data_type='rnaseq', # 'rnaseq', 'proteomics', 'metabolomics', 'clinical'
min_patients=10,
min_timepoints=3
)
```
**DO NOT write inline data loading or preprocessing code. Just use the script.**
**✅ VERIFICATION:** You MUST see: `"✓ Data loaded and preprocessed successfully!"`
**Step 2 - Run trajectory analysis:**
```python
from run_trajectory_analysis import run_trajectory_analysis
# Run TimeAx alignment and identify trajectory features
results = run_trajectory_analysis(
data,
metadata,
method='timeax', # 'timeax', 'lmm', 'hmm'
patient_column='patient_id',
time_column='timepoint'
)
# Extract: pseudotime, trajectory_features, model, robustness_score
```
**DO NOT write inline TimeAx or trajectory code. Just use the script.**
**✅ VERIFICATION:** You MUST see: `"✓ Trajectory analysis completed successfully!"`
**Step 3 - Generate visualizations:**
```python
from generate_all_plots import generate_all_plots
# Generate all plots (PNG + SVG with graceful fallback)
generate_all_plots(
data,
metadata,
results,
output_dir='trajectory_results'
)
```
🚨 **DO NOT write inline plotting code (plt.savefig, seaborn, etc.). Just use the script.** 🚨
**The script handles PNG + SVG export with graceful fallback for SVG dependencies.**
**✅ VERIFICATION:** You MUST see: `"✓ All visualizations generated successfully!"`
**Step 4 - Export results:**
```python
from export_results import export_all
# Export all results, model object, and metadata
export_all(
data=data,
metadata=metadata,
results=results,
output_dir='trajectory_results'
)
```
**DO NOT write custom export code. Use export_all().**
**✅ VERIFICATION:** You MUST see: `"=== Export Complete ==="`
---
⚠️ **CRITICAL - DO NOT:**
- ❌ **Write inline data loading code** → **STOP: Use `load_and_preprocess_data()`**
- ❌ **Write inline TimeAx/trajectory code** → **STOP: Use `run_trajectory_analysis()`**
- ❌ **Write inline plotting code** → **STOP: Use `generate_all_plots()`**
- ❌ **Write custom export code** → **STOP: Use `export_all()`**
**⚠️ IF SCRIPTS FAIL - Script Failure Hierarchy:**
1. **Fix and Retry (90%)** - Install missing package, re-run script
2. **Modify Script (5%)** - Edit the script file itself, document changes
3. **Use as Reference (4%)** - Read script, adapt approach, cite source
4. **Write from Scratch (1%)** - Only if genuinely impossible, explain why
**NEVER skip directly to writing inline code without trying the script first.**
---
## Detailed Methodology
For comprehensive details on algorithms, parameters, and methods:
- **TimeAx algorithm:** [timeax_methodology.md](references/timeax_methodology.md)
- **Alternative methods (LMM, HMM):** [lmm_hmm_alternatives.md](references/lmm_hmm_alternatives.md)
- **Method comparison and selection:** [method_comparison.md](references/method_comparison.md)
- **Data preprocessing by type:** [data_preprocessing_guide.md](references/data_preprocessing_guide.md)
- **Validation framework:** [validation_framework.md](references/validation_framework.md)
## Quality Control
**Quick checklist:**
- ✅ ≥10 patients with ≥3 timepoints each
- ✅ Within-patient monotonicity >0.5 (good) or 0.3-0.5 (moderate)
- ✅ Pseudotime correlates with clinical measures (r >0.2, p <0.05)
- ✅ Trajectory features identified (seed feature fallback if FDR <0.05 yields 0)
- ✅ Samples don't cluster by batch (check PCA)
**Note on robustness:** The TimeAx `robustness()` function (v0.1.1) can produce misleading negative values even on valid data. Use **within-patient monotonicity** as the primary quality metric instead.
For comprehensive QC guidelines, see [validation_framework.md](references/validation_framework.md)
## Common Issues
| Error | Cause | Solution |
|-------|-------|----------|
| **Negative robustness score** | Known TimeAx v0.1.1 bug | **Normal.** The `robustness()` function is unreliable. Use **within-patient monotonicity** (>0.5 = good) as the primary quality metric instead. |
| **0 trajectory features (FDR <0.05)** | FDR too stringent for genome-wide test | **Normal with real data.** The script automatically falls back to testing TimeAx seed features (reduced FDR burden) and nominal p < 0.05. |
| **Memory error during alignment** | Too many features (>20,000) | Reduce to 5000-10000 most variable features before TimeAx. Script does this automatically. |
| **SVG export failed** | Missing cairo system library | **Normal - PNG still generated.** Script handles fallback automatically. DO NOT try to install cairo manually. |
| **Samples cluster by batch not time** | Uncorrected batch effects | Run ComBat batch correction before trajectory analysis. Set `batch_correction=True` in preprocessing. |
| **Negative values disable `ratio` mode** | Z-score or log-fold-change normalization | TimeAx `ratio=TRUE` requires positive values. Use log2 counts, RMA, or TPM — NOT Z-scores. |
| **"R TimeAx not available"** | R or TimeAx R package not installed | **STOP: Install R, then run:** `Rscript -e 'remotes::install_github("amitfrish/TimeAx")'`. See Installation section. |
| **PDF report not generated** | reportlab not installed | **Normal.** Install with `pip install reportlab`. SUMMARY.txt is always generated as fallback. |
For complete troubleshooting, see [troubleshooting_guide.md](references/troubleshooting_guide.md)
## Suggested Next Steps
After trajectory analysis, consider these downstream analyses:
1. **Functional enrichment** → Use `functional-enrichment-gprofiler` skill
- Input: `trajectory_features.csv` (top up/down-regulated features)
- Find pathways changing along disease trajectory
2. **Tissue expression analysis** → Use `tissue-expression-from-degs` skill
- Input: `trajectory_features.csv`
- Identify tissue-specific trajectory markers
3. **Transcription factor activity** → Use `tf-activity-dorothea` skill
- Input: `pseudotime_assignments.csv` + original expression data
- Find TFs driving disease progression
4. **Survival analysis** → Built into clinical validation
- Input: `pseudotime_assignments.csv` + survival data
- Stratify patients by pseudotime tertiles/quartiles
5. **Project new samples** → Use `scripts/timeax_inference.py`
- Load: `timeax_model.pkl`
- Stage new patients on trained trajectory
## Related Skills
**Upstream (data generation):**
- `bulk-rnaseq-counts-to-de-deseq2` - Generate expression data
- `proteomics-differential-expression` - Proteomics quantification
- `metabolomics-preprocessing` - Metabolite data
**Downstream (interpretation):**
- `functional-enrichment-gprofiler` - Pathway analysis of trajectory features
- `tissue-expression-from-degs` - Tissue-specific markers
- `tf-activity-dorothea` - Transcription factor drivers
- `grn-pyscenic` - Gene regulatory networks along trajectory
**Alternative trajectory methods:**
- `pseudotime-monocle` - For single-cell RNA-seq trajectories
- `trajectory-inference-slingshot` - Branching trajectories
## References
### Primary Citations
1. **TimeAx:** Frishberg A, van den Munckhof ICL, Ter Horst R, et al. Reconstructing disease dynamics for mechanistic insights and clinical benefit. *Nat Commun*. 2023;14(1):6940. [https://doi.org/10.1038/s41467-023-42354-8](https://doi.org/10.1038/s41467-023-42354-8)
2. **Linear Mixed Models:** Bates D, Mächler M, Bolker B, Walker S. Fitting Linear Mixed-Effects Models Using lme4. *J Stat Softw*. 2015;67(1):1-48.
3. **Disease Trajectories Review:** Schmidt AF, Heerspink HJL, Denig P, et al. Disease trajectory browser for exploring temporal, population-wide disease progression patterns. *Nat Commun*. 2020;11:4952.
### Software
| Software | Version | License | Commercial Use |
|----------|---------|---------|----------------|
| TimeAx | ≥0.1.0 | MIT | ✅ Permitted |
| NumPy | ≥1.21 | BSD | ✅ Permitted |
| Pandas | ≥1.3 | BSD | ✅ Permitted |
| scikit-learn | ≥1.0 | BSD | ✅ Permitted |
| seaborn | ≥0.11 | BSD | ✅ Permitted |
| matplotlib | ≥3.5 | BSD | ✅ Permitted |
| ggprism (R) | ≥1.0.3 | GPL (≥3) | ✅ Permitted |
| sva (R) | ≥3.40 | Artistic-2.0 | ✅ Permitted |
| reportlab | ≥3.6 | BSD | ✅ Permitted |
### Online Resources
- TimeAx GitHub: [https://github.com/amitfrish/TimeAx](https://github.com/amitfrish/TimeAx)
- TimeAx Documentation: [https://timeax.readthedocs.io/](https://timeax.readthedocs.io/)
- Disease Progression Modeling Review: [https://www.annualreviews.org/content/journals/10.1146/annurev-biodatasci-110123-041001](https://www.annualreviews.org/content/journals/10.1146/annurev-biodatasci-110123-041001)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!