Cell type vulnerability in Alzheimer's Disease (SEA-AD data)¶
Notebook ID: nb-SDA-2026-04-03-gap-seaad-20260402025452 · Analysis: SDA-2026-04-03-gap-seaad-20260402025452 · Generated: 2026-04-20T13:46:41
Research question¶
What cell types are most vulnerable in Alzheimers Disease based on SEA-AD transcriptomic data? Use Allen Brain Cell Atlas evidence. Identify mechanisms of cell-type-specific vulnerability in AD pathology.
Approach¶
This notebook is generated programmatically from real Forge tool calls and SciDEX debate data. Forge tools used: PubMed Search, MyGene, STRING PPI, Reactome pathways, Enrichr.
Debate Summary¶
Quality score: 0.92 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'TREM2', 'name': 'triggering receptor expressed on myeloid cells 2', 'summary': 'This gene encodes a membrane protein that forms a receptor signaling complex with the TYRO protein tyrosine kinase bindi'}]
pd.DataFrame(ann_rows)
| gene | name | summary | |
|---|---|---|---|
| 0 | TREM2 | triggering receptor expressed on myeloid cells 2 | This gene encodes a membrane protein that form... |
2. GO Biological Process enrichment (Enrichr)¶
go_bp = [{'rank': 1, 'term': 'Chemokine (C-X-C Motif) Ligand 12 Signaling Pathway (GO:0038146)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 2, 'term': 'Negative Regulation Of Sequestering Of Triglyceride (GO:0010891)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 3, 'term': 'Negative Regulation Of Toll-Like Receptor 2 Signaling Pathway (GO:0034136)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 4, 'term': 'Regulation Of Resting Membrane Potential (GO:0060075)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 5, 'term': 'Positive Regulation Of Lipoprotein Particle Clearance (GO:0010986)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 6, 'term': 'Regulation Of Fat Cell Proliferation (GO:0070344)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 7, 'term': 'Negative Regulation Of Astrocyte Differentiation (GO:0048712)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 8, 'term': 'Positive Regulation Of Microglial Cell Activation (GO:1903980)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 9, 'term': 'Positive Regulation Of Microglial Cell Migration (GO:1904141)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 10, 'term': 'Positive Regulation Of Amyloid-Beta Clearance (GO:1900223)', 'p_value': 0.0002999905873105514, 'odds_ratio': 19994.0, 'genes': ['TREM2']}]
go_df = pd.DataFrame(go_bp)[['term','p_value','odds_ratio','genes']]
go_df['p_value'] = go_df['p_value'].apply(lambda p: f'{p:.2e}')
go_df['odds_ratio'] = go_df['odds_ratio'].round(1)
go_df['term'] = go_df['term'].str[:60]
go_df['n_hits'] = go_df['genes'].apply(len)
go_df['genes'] = go_df['genes'].apply(lambda g: ', '.join(g))
go_df[['term','n_hits','p_value','odds_ratio','genes']]
| term | n_hits | p_value | odds_ratio | genes | |
|---|---|---|---|---|---|
| 0 | Chemokine (C-X-C Motif) Ligand 12 Signaling Pa... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 1 | Negative Regulation Of Sequestering Of Triglyc... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 2 | Negative Regulation Of Toll-Like Receptor 2 Si... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 3 | Regulation Of Resting Membrane Potential (GO:0... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 4 | Positive Regulation Of Lipoprotein Particle Cl... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 5 | Regulation Of Fat Cell Proliferation (GO:0070344) | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 6 | Negative Regulation Of Astrocyte Differentiati... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 7 | Positive Regulation Of Microglial Cell Activat... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 8 | Positive Regulation Of Microglial Cell Migrati... | 1 | 2.50e-04 | 19995.0 | TREM2 |
| 9 | Positive Regulation Of Amyloid-Beta Clearance ... | 1 | 3.00e-04 | 19994.0 | TREM2 |
import matplotlib.pyplot as plt
import numpy as np
go_bp = [{'rank': 1, 'term': 'Chemokine (C-X-C Motif) Ligand 12 Signaling Pathway (GO:0038146)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 2, 'term': 'Negative Regulation Of Sequestering Of Triglyceride (GO:0010891)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 3, 'term': 'Negative Regulation Of Toll-Like Receptor 2 Signaling Pathway (GO:0034136)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 4, 'term': 'Regulation Of Resting Membrane Potential (GO:0060075)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 5, 'term': 'Positive Regulation Of Lipoprotein Particle Clearance (GO:0010986)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 6, 'term': 'Regulation Of Fat Cell Proliferation (GO:0070344)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 7, 'term': 'Negative Regulation Of Astrocyte Differentiation (GO:0048712)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}, {'rank': 8, 'term': 'Positive Regulation Of Microglial Cell Activation (GO:1903980)', 'p_value': 0.0002499917995416556, 'odds_ratio': 19995.0, 'genes': ['TREM2']}]
terms = [t['term'][:45] for t in go_bp][::-1]
neglogp = [-np.log10(max(t['p_value'], 1e-300)) for t in go_bp][::-1]
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.barh(terms, neglogp, color='#4fc3f7')
ax.set_xlabel('-log10(p-value)')
ax.set_title('Top GO:BP enrichment (Enrichr)')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
3. STRING protein interaction network¶
ppi = [{'protein1': 'APOE', 'protein2': 'TREM2', 'score': 0.986, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.514, 'dscore': 0, 'tscore': 0.974}, {'protein1': 'APOE', 'protein2': 'CLU', 'score': 0.991, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.72, 'tscore': 0.971}, {'protein1': 'TYROBP', 'protein2': 'SIRPA', 'score': 0.8, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.8, 'tscore': 0}, {'protein1': 'TYROBP', 'protein2': 'SIRPG', 'score': 0.8, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.8, 'tscore': 0}, {'protein1': 'TYROBP', 'protein2': 'TREM2', 'score': 0.998, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.526, 'dscore': 0.8, 'tscore': 0.982}, {'protein1': 'TYROBP', 'protein2': 'SYK', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.886, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'FCER1G', 'protein2': 'IGKV1-33', 'score': 0.52, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.081}, {'protein1': 'FCER1G', 'protein2': 'IGKV1D-33', 'score': 0.52, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.081}, {'protein1': 'FCER1G', 'protein2': 'TREM2', 'score': 0.977, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.977}, {'protein1': 'FCER1G', 'protein2': 'SYK', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.886, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'SIRPG', 'protein2': 'TREM2', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SIRPG', 'protein2': 'SYK', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SIRPG', 'protein2': 'SIRPA', 'score': 0.966, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.495, 'dscore': 0.9, 'tscore': 0.397}, {'protein1': 'CLU', 'protein2': 'TREM2', 'score': 0.954, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.292, 'dscore': 0, 'tscore': 0.938}, {'protein1': 'TREM2', 'protein2': 'IGHV3-16', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'IGKV1-33', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'IGKV1D-33', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'SIRPA', 'score': 0.91, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.141}, {'protein1': 'TREM2', 'protein2': 'SYK', 'score': 0.929, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.323}, {'protein1': 'SYK', 'protein2': 'IGKV1-33', 'score': 0.4, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.4, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'IGKV1D-33', 'score': 0.4, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.4, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'SIRPA', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'IGHV3-16', 'protein2': 'IGKV1-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}, {'protein1': 'IGHV3-16', 'protein2': 'IGKV1D-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}, {'protein1': 'IGKV1-33', 'protein2': 'IGKV1D-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}]
ppi_df = pd.DataFrame(ppi).sort_values('score', ascending=False)
display_cols = [c for c in ['protein1','protein2','score','escore','tscore'] if c in ppi_df.columns]
print(f'{len(ppi_df)} STRING edges')
ppi_df[display_cols].head(20)
25 STRING edges
| protein1 | protein2 | score | escore | tscore | |
|---|---|---|---|---|---|
| 5 | TYROBP | SYK | 0.999 | 0.886 | 0.982 |
| 9 | FCER1G | SYK | 0.999 | 0.886 | 0.982 |
| 4 | TYROBP | TREM2 | 0.998 | 0.526 | 0.982 |
| 1 | APOE | CLU | 0.991 | 0.000 | 0.971 |
| 0 | APOE | TREM2 | 0.986 | 0.514 | 0.974 |
| 8 | FCER1G | TREM2 | 0.977 | 0.000 | 0.977 |
| 12 | SIRPG | SIRPA | 0.966 | 0.495 | 0.397 |
| 13 | CLU | TREM2 | 0.954 | 0.292 | 0.938 |
| 23 | IGHV3-16 | IGKV1D-33 | 0.952 | 0.900 | 0.000 |
| 24 | IGKV1-33 | IGKV1D-33 | 0.952 | 0.900 | 0.000 |
| 22 | IGHV3-16 | IGKV1-33 | 0.952 | 0.900 | 0.000 |
| 18 | TREM2 | SYK | 0.929 | 0.000 | 0.323 |
| 17 | TREM2 | SIRPA | 0.910 | 0.000 | 0.141 |
| 16 | TREM2 | IGKV1D-33 | 0.900 | 0.900 | 0.000 |
| 15 | TREM2 | IGKV1-33 | 0.900 | 0.900 | 0.000 |
| 14 | TREM2 | IGHV3-16 | 0.900 | 0.900 | 0.000 |
| 11 | SIRPG | SYK | 0.900 | 0.000 | 0.000 |
| 10 | SIRPG | TREM2 | 0.900 | 0.000 | 0.000 |
| 21 | SYK | SIRPA | 0.900 | 0.000 | 0.000 |
| 2 | TYROBP | SIRPA | 0.800 | 0.000 | 0.000 |
import math
ppi = [{'protein1': 'APOE', 'protein2': 'TREM2', 'score': 0.986, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.514, 'dscore': 0, 'tscore': 0.974}, {'protein1': 'APOE', 'protein2': 'CLU', 'score': 0.991, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.72, 'tscore': 0.971}, {'protein1': 'TYROBP', 'protein2': 'SIRPA', 'score': 0.8, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.8, 'tscore': 0}, {'protein1': 'TYROBP', 'protein2': 'SIRPG', 'score': 0.8, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.8, 'tscore': 0}, {'protein1': 'TYROBP', 'protein2': 'TREM2', 'score': 0.998, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.526, 'dscore': 0.8, 'tscore': 0.982}, {'protein1': 'TYROBP', 'protein2': 'SYK', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.886, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'FCER1G', 'protein2': 'IGKV1-33', 'score': 0.52, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.081}, {'protein1': 'FCER1G', 'protein2': 'IGKV1D-33', 'score': 0.52, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.081}, {'protein1': 'FCER1G', 'protein2': 'TREM2', 'score': 0.977, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.977}, {'protein1': 'FCER1G', 'protein2': 'SYK', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.886, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'SIRPG', 'protein2': 'TREM2', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SIRPG', 'protein2': 'SYK', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SIRPG', 'protein2': 'SIRPA', 'score': 0.966, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.495, 'dscore': 0.9, 'tscore': 0.397}, {'protein1': 'CLU', 'protein2': 'TREM2', 'score': 0.954, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.292, 'dscore': 0, 'tscore': 0.938}, {'protein1': 'TREM2', 'protein2': 'IGHV3-16', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'IGKV1-33', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'IGKV1D-33', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0, 'tscore': 0}, {'protein1': 'TREM2', 'protein2': 'SIRPA', 'score': 0.91, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.141}, {'protein1': 'TREM2', 'protein2': 'SYK', 'score': 0.929, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.323}, {'protein1': 'SYK', 'protein2': 'IGKV1-33', 'score': 0.4, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.4, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'IGKV1D-33', 'score': 0.4, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.4, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'SIRPA', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'IGHV3-16', 'protein2': 'IGKV1-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}, {'protein1': 'IGHV3-16', 'protein2': 'IGKV1D-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}, {'protein1': 'IGKV1-33', 'protein2': 'IGKV1D-33', 'score': 0.952, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.9, 'dscore': 0.54, 'tscore': 0}]
if ppi:
nodes = sorted({p for e in ppi for p in (e['protein1'], e['protein2'])})
n = len(nodes)
pos = {n_: (math.cos(2*math.pi*i/n), math.sin(2*math.pi*i/n)) for i, n_ in enumerate(nodes)}
fig, ax = plt.subplots(figsize=(7, 7))
for e in ppi:
x1,y1 = pos[e['protein1']]; x2,y2 = pos[e['protein2']]
ax.plot([x1,x2],[y1,y2], color='#888', alpha=0.3+0.5*e.get('score',0))
for name,(x,y) in pos.items():
ax.scatter([x],[y], s=450, color='#ffd54f', edgecolors='#333', zorder=3)
ax.annotate(name, (x,y), ha='center', va='center', fontsize=8, fontweight='bold', zorder=4)
ax.set_aspect('equal'); ax.axis('off')
ax.set_title(f'STRING PPI network ({len(ppi)} edges)')
plt.tight_layout(); plt.show()
4. Reactome pathway footprint¶
pw_rows = [{'gene': 'TREM2', 'n_pathways': 4, 'top_pathway': 'Immunoregulatory interactions between a Lymphoid and a non-Lymphoid ce'}]
pd.DataFrame(pw_rows).sort_values('n_pathways', ascending=False)
| gene | n_pathways | top_pathway | |
|---|---|---|---|
| 0 | TREM2 | 4 | Immunoregulatory interactions between a Lympho... |
5. Hypothesis ranking (1 hypotheses)¶
hyp_data = [('TREM2-Mediated Microglial Checkpoint Therapy', 0.534)]
titles = [h[0] for h in hyp_data][::-1]
scores = [h[1] for h in hyp_data][::-1]
fig, ax = plt.subplots(figsize=(10, max(8, len(titles)*0.4)))
colors = ['#ef5350' if s >= 0.6 else '#ffa726' if s >= 0.5 else '#66bb6a' for s in scores]
ax.barh(range(len(titles)), scores, color=colors)
ax.set_yticks(range(len(titles))); ax.set_yticklabels(titles, fontsize=7)
ax.set_xlabel('Composite Score'); ax.set_title("Cell type vulnerability in Alzheimer's Disease (SEA-AD data)")
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['TREM2-Mediated Microglial Checkpoint The']
matrix = np.array([[0.8, 0.7, 0.6, 0.7, 0.0, 0.7, 0.6, 0.8, 0.5]])
dims = ['novelty_score', 'feasibility_score', 'impact_score', 'mechanistic_plausibility_score', 'clinical_relevance_score', 'data_availability_score', 'reproducibility_score', 'druggability_score', 'safety_profile_score']
if matrix.size:
fig, ax = plt.subplots(figsize=(10, 5))
im = ax.imshow(matrix, cmap='RdYlGn', aspect='auto', vmin=0, vmax=1)
ax.set_xticks(range(len(dims)))
ax.set_xticklabels([d.replace('_score','').replace('_',' ').title() for d in dims],
rotation=45, ha='right', fontsize=8)
ax.set_yticks(range(len(labels))); ax.set_yticklabels(labels, fontsize=7)
ax.set_title('Score dimensions — hypotheses')
plt.colorbar(im, ax=ax, shrink=0.8)
plt.tight_layout(); plt.show()
else:
print('No score data available')
6. PubMed literature per hypothesis¶
Hypothesis 1: TREM2-Mediated Microglial Checkpoint Therapy¶
Target genes: TREM2 · Composite score: 0.534
TREM2-Mediated Microglial Checkpoint Therapy: Expanded Hypothesis¶
Molecular Mechanism of Action¶
TREM2 (Triggering Receptor Expressed on Myeloid Cells 2) is a single-pass type I transmembrane receptor belonging to the immunoglobulin superfamily, expressed predominantly on microglia within th
lit_data = [{'year': '2021', 'journal': 'Mech Ageing Dev', 'title': "TREM2, microglia, and Alzheimer's disease.", 'pmid': '33516818'}, {'year': '2023', 'journal': 'Semin Immunol', 'title': 'TREM2: A new player in the tumor microenvironment.', 'pmid': '36989543'}, {'year': '2017', 'journal': 'Cell', 'title': "TREM2 Maintains Microglial Metabolic Fitness in Alzheimer's Disease.", 'pmid': '28802038'}, {'year': '2017', 'journal': 'Trends Mol Med', 'title': 'TREM2, Microglia, and Neurodegenerative Diseases.', 'pmid': '28442216'}, {'year': '2024', 'journal': 'Neuropharmacology', 'title': 'Microglia and TREM2.', 'pmid': '38821351'}]
if lit_data:
df = pd.DataFrame(lit_data)
print(f'{len(lit_data)} PubMed results')
display(df)
else:
print('No PubMed results')
5 PubMed results
| year | journal | title | pmid | |
|---|---|---|---|---|
| 0 | 2021 | Mech Ageing Dev | TREM2, microglia, and Alzheimer's disease. | 33516818 |
| 1 | 2023 | Semin Immunol | TREM2: A new player in the tumor microenvironm... | 36989543 |
| 2 | 2017 | Cell | TREM2 Maintains Microglial Metabolic Fitness i... | 28802038 |
| 3 | 2017 | Trends Mol Med | TREM2, Microglia, and Neurodegenerative Diseases. | 28442216 |
| 4 | 2024 | Neuropharmacology | Microglia and TREM2. | 38821351 |
7. Knowledge graph edges (2 total)¶
edge_data = [{'source': 'h-722ec547', 'relation': 'targets', 'target': 'TREM2', 'strength': 0.5}, {'source': 'TREM2', 'relation': 'involved_in', 'target': 'trem2_tyrobp_microglial_signal', 'strength': 0.4}]
if edge_data:
pd.DataFrame(edge_data).head(25)
else:
print('No KG edge data available')
Caveats¶
This notebook uses real Forge tool calls from live APIs:
- Enrichment is against curated gene-set libraries (Enrichr)
- STRING/Reactome/HPA/MyGene reflect curated knowledge
- PubMed literature is search-relevance ranked, not systematic review