File size: 4,149 Bytes
925ee3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# scPTR

**Single-Cell Post-Transcriptional Regulatory Decomposition**

scPTR estimates per-cell, per-gene mRNA degradation rates from scRNA-seq spliced/unspliced counts and uses them as a primary analytical axis — complementary to RNA velocity.

## What scPTR does

- **Degradation rate estimation**: Per-cell, per-gene gamma from kinetic steady-state relationships with kNN Gaussian-kernel smoothing
- **Expression-invisible states**: Discovers cell subpopulations with distinct post-transcriptional programs undetectable by standard expression analysis
- **Post-transcriptional velocity**: Neighbor-averaged gamma gradient that captures degradation dynamics orthogonal to RNA velocity
- **RBP-target networks**: Library-size-corrected inference of RNA-binding protein regulatory networks with elastic net
- **DeepPTR**: Structured VAE with a kinetic decoder that disentangles transcriptional and post-transcriptional latent spaces

## Installation

```bash
pip install .
```

Optional dependencies:

```bash
pip install ".[deep]"      # PyTorch for DeepPTR
pip install ".[datasets]"  # Pooch for dataset downloads
pip install ".[dev]"       # pytest for testing
```

## Quick start

```python
import scptr

# Load data with spliced/unspliced layers
adata = scptr.read_h5ad("your_data.h5ad")

# Preprocessing
scptr.pp.filter_genes(adata)
scptr.pp.normalize_layers(adata)
scptr.pp.neighbors(adata)
scptr.pp.smooth_layers(adata)

# Estimate rates
scptr.tl.estimate_beta(adata)
scptr.tl.estimate_gamma(adata)

# Downstream analysis
scptr.tl.variance_decomposition(adata)
scptr.tl.pt_states(adata)
scptr.tl.pt_velocity(adata)
scptr.tl.infer_network(adata)
```

## Pipeline overview

```
Raw scRNA-seq (spliced + unspliced)
  -> Gene/cell filtering
  -> Library-size normalization (per layer)
  -> kNN graph + Gaussian smoothing
  -> Beta estimation (quantile regression on u/s phase portraits)
  -> Gamma estimation (gamma = beta * u / s, per cell per gene)
  -> Variance decomposition (transcriptional vs post-transcriptional)
  -> PT states (PCA + Leiden clustering in gamma-space)
  -> PT velocity (neighbor-averaged gamma gradient)
  -> RBP-target network inference (elastic net, library-size corrected)
```

## Validation

scPTR gamma estimates have been validated against:

| Validation | Result |
|------------|--------|
| Published mRNA half-lives | ρ = −0.81 (sci-fate), −0.33 to −0.40 (10x developmental) |
| Method comparison | Outperforms scVelo steady-state (−0.37) and velVI (−0.28) |
| miRNA target enrichment | 59% of 215 families enriched (p = 4.7×10⁻⁶⁵) |
| 3′ UTR sequence features | UTR length ρ = 0.34 (p < 10⁻²⁰⁰), AU content ρ = 0.30 |
| DepMap CRISPR essentiality | Hub RBPs more essential (p = 6.4×10⁻⁵) |
| Subsampling robustness | r > 0.97 at 20% subsampling |

## Key findings

- **Expression-invisible states**: 3/8 pancreatic and 6/11 hippocampal cell types harbor post-transcriptional subpopulations undetectable by expression analysis (confirmed by zero-permutation control, ARI ≈ 0), enriched for ER stress/autophagy and synaptic plasticity pathways
- **Temporal precedence**: degradation-rate changes precede expression changes for 54% of transition genes in pancreas (p < 10⁻⁵⁷) and 78% in dentate gyrus (p = 9.9×10⁻¹³)
- **RBP networks**: library-size-corrected inference identifies essential hub regulators (HNRNPA1, YBX1, ELAVL1/HuR); neuroblastoma shows 66% stabilizing edges vs. destabilizing bias in developmental tissues

## Datasets

Built-in dataset loaders (downloaded via Pooch):

```python
adata = scptr.datasets.pancreas()        # Mouse endocrinogenesis (3,696 cells)
adata = scptr.datasets.dentate_gyrus()   # Mouse hippocampal neurogenesis (2,930 cells)
adata = scptr.datasets.sci_fate()        # Human A549 dexamethasone response (7,404 cells)
```

## Requirements

- Python >= 3.9
- anndata >= 0.8, scanpy >= 1.9, numpy >= 1.21, scipy >= 1.7, numba >= 0.55
- Optional: torch >= 2.0 (DeepPTR), pooch >= 1.6 (datasets)

## Citation

If you use scPTR, please cite:

> scPTR: Decomposing Post-Transcriptional Regulation at Single-Cell Resolution (2026)