jkkkkyuedtrt's picture
Upload 381 files
bd52a47 verified
|
Raw
History Blame Contribute Delete
7.38 kB
# Squidpy Spatial Analysis
Comprehensive spatial analysis tools for single-cell and spatial transcriptomics data using Squidpy.
## When to Use Squidpy
| Analysis Type | Tool |
|---------------|------|
| Build spatial graph | `squidpy_spatial_neighbors` |
| Cell type colocalization | `squidpy_nhood_enrichment` |
| Co-occurrence patterns | `squidpy_co_occurrence` |
| Spatially variable genes | `squidpy_spatial_autocorr` |
| Point pattern analysis | `squidpy_ripley` |
| Network topology | `squidpy_centrality` |
| Cell-cell interactions | `squidpy_ligrec` |
---
## Workflow Overview
1. **Build spatial neighbors graph** (required first step)
2. **Analyze spatial patterns** (choose based on question)
3. **Interpret results**
---
## Step 1: Build Spatial Neighbors Graph
**Tool**: `squidpy_spatial_neighbors`
This is required before any other Squidpy analysis.
### Parameters
| Parameter | Description | Default |
|-----------|-------------|---------|
| `coord_type` | `"visium"` (hex), `"grid"` (square), or `"generic"` (any) | `"generic"` |
| `n_neighs` | Number of neighbors for generic/KNN | 6 |
| `n_rings` | Number of hex/grid rings for visium/grid | 1 |
| `delaunay` | Use Delaunay triangulation | False |
| `radius` | Radius cutoff (0 = disabled) | 0 |
### Tips
- For **Visium data**: Use `coord_type="visium"`, `n_rings=1` (6 neighbors)
- For **generic spatial data**: Use `coord_type="generic"`, `n_neighs=6-10`
- For **Delaunay triangulation**: Set `delaunay=True` for natural neighbor connections
- For **radius-based neighbors**: Set `radius` to distance threshold (e.g., 100 microns)
---
## Step 2: Choose Analysis Based on Question
### A. Are certain cell types colocalized?
**Tool**: `squidpy_nhood_enrichment`
Tests whether cells of one type are more/less likely to neighbor cells of another type.
**Output**:
- Z-scores: positive = enriched, negative = depleted
- Heatmap showing cell type interactions
**Example questions**:
- "Are T cells enriched near tumor cells?"
- "Which cell types cluster together?"
---
### B. Do cell types co-occur spatially?
**Tool**: `squidpy_co_occurrence`
Measures co-occurrence probability at different spatial distances.
**Parameters**:
- `interval`: Number of distance bins (default 50)
- `n_splits`: Split for computation (default 2)
**Output**:
- Co-occurrence scores per distance
- Shows spatial range of interactions
**Example questions**:
- "At what distance do T cells and tumor cells interact?"
- "How does co-occurrence change with distance?"
---
### C. Which genes are spatially variable?
**Tool**: `squidpy_spatial_autocorr`
Identifies genes with spatial patterns using Moran's I or Geary's C statistics.
**Parameters**:
- `mode`: `"moran"` (default) or `"geary"`
- `genes`: List of genes or "highly_variable" or None (all)
- `n_perms`: Permutations for p-value (default 100)
- `n_jobs`: Parallel jobs (default 1)
**Output**:
- Moran's I: 1 = clustered, 0 = random, -1 = dispersed
- Geary's C: 0 = clustered, 1 = random
- p-values from permutation test
**Example questions**:
- "Which genes show spatial clustering?"
- "Are marker genes spatially organized?"
---
### D. What are the spatial patterns? (Point Process)
**Tool**: `squidpy_ripley`
Characterizes point patterns using Ripley's statistics.
**Parameters**:
- `mode`: `"F"`, `"G"`, or `"L"`
- F: Empty space function
- G: Nearest neighbor distribution
- L: Ripley's L (cluster detection)
- `n_simulations`: Bootstrap simulations (default 100)
**Output**:
- L > 0: Clustering at that distance
- L < 0: Dispersion/regularity
- L = 0: Complete spatial randomness
**Example questions**:
- "Are tumor cells clustered or dispersed?"
- "At what scale do clusters form?"
---
### E. What is the network structure?
**Tool**: `squidpy_centrality`
Computes graph centrality metrics per cell type.
**Parameters**:
- `mode`: `"closeness"` or `"degree"`
- closeness: How central in the network
- degree: Number of connections
**Output**:
- Centrality scores per cell type
- Identifies spatially central vs peripheral populations
**Example questions**:
- "Which cell types are most central?"
- "Are tumor cells at the network periphery?"
---
### F. How do cell types interact physically?
**Tool**: `squidpy_interaction_matrix`
Computes cell-cell contact/interaction matrix.
**Parameters**:
- `normalized`: Normalize by cell counts (default True)
**Output**:
- Interaction counts/frequencies between all cell type pairs
---
### G. What ligand-receptor interactions occur?
**Tool**: `squidpy_ligrec`
Permutation-based ligand-receptor analysis with spatial context.
**Parameters**:
- `n_perms`: Number of permutations (default 1000)
- `threshold`: Expression threshold (default 0.01)
- `corr_method`: Multiple testing correction (default "fdr_bh")
- `gene_symbols`: Column with gene symbols (optional)
**Output**:
- Significant LR pairs between cell types
- P-values from permutation test
- Mean expression values
---
## Complete Workflow Examples
### Example 1: Tumor Microenvironment Analysis
```
1. squidpy_spatial_neighbors(coord_type="generic", n_neighs=6)
2. squidpy_nhood_enrichment(cluster_key="cell_type")
β†’ Find which immune cells infiltrate tumor
3. squidpy_co_occurrence(cluster_key="cell_type")
β†’ Measure distance-dependent interactions
4. squidpy_ligrec(cluster_key="cell_type")
β†’ Identify signaling between tumor and immune cells
```
### Example 2: Spatial Gene Expression Analysis
```
1. squidpy_spatial_neighbors(coord_type="visium", n_rings=1)
2. squidpy_spatial_autocorr(mode="moran", genes="highly_variable")
β†’ Find spatially variable genes
3. squidpy_ripley(cluster_key="cell_type", mode="L")
β†’ Characterize spatial clustering
```
### Example 3: Tissue Organization Analysis
```
1. squidpy_spatial_neighbors(coord_type="generic", delaunay=True)
2. squidpy_centrality(cluster_key="cell_type", mode="closeness")
β†’ Find central cell populations
3. squidpy_nhood_enrichment(cluster_key="cell_type")
β†’ Identify neighborhood preferences
```
---
## Output Files
All tools save results to the specified `save_path`:
| Tool | Outputs |
|------|---------|
| `squidpy_spatial_neighbors` | Updated AnnData with spatial graph |
| `squidpy_nhood_enrichment` | Heatmap PNG, Z-scores CSV |
| `squidpy_co_occurrence` | Co-occurrence plot PNG, scores CSV |
| `squidpy_spatial_autocorr` | Autocorrelation results CSV |
| `squidpy_ripley` | Ripley's statistics plot PNG, CSV |
| `squidpy_centrality` | Centrality scores CSV |
| `squidpy_interaction_matrix` | Interaction matrix PNG, CSV |
| `squidpy_ligrec` | LR results CSV, dotplot PNG |
---
## Tips
1. **Always run `squidpy_spatial_neighbors` first** - Other tools depend on the spatial graph.
2. **Choose coord_type carefully**:
- Visium: Use `"visium"` for hex grid
- Slide-seq, MERFISH: Use `"generic"`
3. **Moran's I interpretation**:
- High positive I β†’ Gene is spatially clustered
- Near zero β†’ Random distribution
- High negative I β†’ Gene is spatially dispersed (rare)
4. **Neighborhood enrichment interpretation**:
- Positive z-score β†’ Cell types colocalize more than expected
- Negative z-score β†’ Cell types avoid each other
- Near zero β†’ Random spatial distribution
5. **For large datasets**: Use `n_jobs > 1` for parallel computation in spatial_autocorr.