Infer Functional Cell Cell Communication¶
This notebook walks through infering cell-cell communication events that drive specific cell states
SpaceTravLR can model how a genetic perturbation in one cell modulates the gene expression in neighboring cells
%load_ext autoreload
%autoreload 2
%config InlineBackend.figure_format = 'retina'
import pandas as pd
import scanpy as sc
import sys
import seaborn as sns
import matplotlib.pyplot as plt
sys.path.append('/Users/koush/Projects/jishnulab/SpaceTravLR/src')
from SpaceTravLR.beta import Betabase
adata = sc.read_h5ad('/Volumes/SSD/training_data/snrna_human_melanoma.h5ad')
adata
bdb = Betabase(
adata=adata,
folder='/Volumes/SSD/lasso_runs/human_melanoma_v2',
auto_load=False
)
positive_interactions = bdb.collect_interactions(cell_type='CD8+ T', aggregate='positive')
negative_interactions = bdb.collect_interactions(cell_type='CD8+ T', aggregate='negative')
activation_genes = [
'CD8A', 'GZMK', 'IFNG', 'PRF1',
'CD69', 'TBX21', 'GZMA', 'GZMB'
]
positive_interactions.sort_values(
by='beta',
ascending=False,
key=abs).query('gene in @activation_genes')
| interaction | gene | beta | interaction_type | |
|---|---|---|---|---|
| CD8+ T | ||||
| 12745 | beta_THRB | GZMK | 6.914885e+00 | tf |
| 303406 | beta_ANGPT2$ITGB1 | GZMA | 5.198300e+00 | ligand-receptor |
| 281935 | beta_IL7$IL2RG | GZMA | 3.815622e+00 | ligand-receptor |
| 20738 | beta_GRHL2 | GZMA | 3.753025e+00 | tf |
| 12678 | beta_THRB | CD8A | 3.655421e+00 | tf |
| ... | ... | ... | ... | ... |
| 265644 | beta_SEMA4A$PLXNA3 | TBX21 | 2.035810e-08 | ligand-receptor |
| 272200 | beta_THY1$ITGAV | CD8A | 1.479332e-08 | ligand-receptor |
| 436033 | beta_COL1A2$ITGA9 | IFNG | 8.826670e-09 | ligand-receptor |
| 167988 | beta_COL6A2$ITGA10 | GZMA | 5.215077e-09 | ligand-receptor |
| 21963 | beta_IFNG#GLIS3 | TBX21 | 6.802419e-10 | ligand-tf |
2738 rows × 4 columns
df = positive_interactions.sort_values(
by='beta',
ascending=False,
key=abs).query(
'gene in @activation_genes and interaction_type == "ligand-receptor"')
cd8_means = adata.to_df(layer='imputed_count')[adata.obs['cell_type'] == "CD8+ T"].mean()
genes = df.interaction.str.split("$").str.get(1)
receptor_expr = genes.map(cd8_means)
df['weighted_beta'] = df['beta'] * receptor_expr
df_cd8 = df.copy()
df_cd8.interaction = df_cd8.interaction.str.replace('beta_', '')
df_cd8.interaction = df_cd8.interaction.str.replace('$', '-')
top_interactions = (
df_cd8[['interaction', 'weighted_beta']].groupby(
'interaction').mean().sort_values(by='weighted_beta', ascending=False)
.head(15)
)
sns.set_theme(style="white", context="talk")
plt.figure(figsize=(9, 6))
ax = sns.barplot(
data=top_interactions,
x="weighted_beta",
y="interaction",
hue="interaction",
palette="Greens_r",
linewidth=2,
edgecolor='black',
legend=False
)
ax.set_title("Top Interactions\nPromoting CD8 Activation", fontweight='bold', pad=20)
ax.set_xlabel("Weighted Beta (Interaction Strength)", fontsize=14)
ax.set_ylabel("")
sns.despine(ax=ax, left=True, bottom=True)
plt.tight_layout()
plt.show()