Cell type vulnerability in Alzheimer's Disease (SEA-AD data - v2)¶
Notebook ID: nb-SDA-2026-04-03-gap-seaad-v2-20260402032945 · Analysis: SDA-2026-04-03-gap-seaad-v2-20260402032945 · Generated: 2026-04-21T18:46:43
Research question¶
What cell types are most vulnerable in Alzheimer's Disease based on SEA-AD transcriptomic data from the Allen Brain Cell Atlas? Identify mechanisms of cell-type-specific vulnerability in neurons, microglia, astrocytes, and oligodendrocytes. Focus on gene expression patterns, pathway dysregulation, and therapeutic implications.
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.95 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'AND', 'name': '—', 'summary': '—'}, {'gene': 'APOE', 'name': 'apolipoprotein E', 'summary': 'The protein encoded by this gene is a major apoprotein of the chylomicron. It binds to a specific liver and peripheral c'}, {'gene': 'BMP4', 'name': 'bone morphogenetic protein 4', 'summary': 'This gene encodes a secreted ligand of the TGF-beta (transforming growth factor-beta) superfamily of proteins. Ligands o'}, {'gene': 'BMPR1A', 'name': 'bone morphogenetic protein receptor type 1A', 'summary': 'The bone morphogenetic protein (BMP) receptors are a family of transmembrane serine/threonine kinases that include the t'}, {'gene': 'C3', 'name': 'complement C3', 'summary': 'Complement component C3 plays a central role in the activation of complement system. Its activation is required for both'}, {'gene': 'COMPLEX', 'name': 'HLA complex P5', 'summary': '—'}, {'gene': 'CX3CR1', 'name': 'C-X3-C motif chemokine receptor 1', 'summary': 'Fractalkine is a transmembrane protein and chemokine involved in the adhesion and migration of leukocytes. The protein e'}, {'gene': 'DLX1', 'name': 'distal-less homeobox 1', 'summary': 'This gene encodes a member of a homeobox transcription factor gene family similiar to the Drosophila distal-less gene. T'}, {'gene': 'EIF2AK3', 'name': 'eukaryotic translation initiation factor 2 alpha kinase 3', 'summary': 'The protein encoded by this gene phosphorylates the alpha subunit of eukaryotic translation-initiation factor 2, leading'}, {'gene': 'EIF2B', 'name': 'eukaryotic translation initiation factor 2B subunit beta', 'summary': 'This gene encodes the beta subunit of eukaryotic initiation factor-2B (EIF2B). EIF2B is involved in protein synthesis an'}, {'gene': 'PARP1', 'name': 'poly(ADP-ribose) polymerase 1', 'summary': 'This gene encodes a chromatin-associated enzyme, poly(ADP-ribosyl)transferase, which modifies various nuclear proteins b'}, {'gene': 'SLC1A2', 'name': 'solute carrier family 1 member 2', 'summary': 'This gene encodes a member of a family of solute transporter proteins. The membrane-bound protein is the principal trans'}, {'gene': 'SOX10', 'name': 'SRY-box transcription factor 10', 'summary': 'This gene encodes a member of the SOX (SRY-related HMG-box) family of transcription factors involved in the regulation o'}, {'gene': 'SYN1', 'name': 'synapsin I', 'summary': 'This gene is a member of the synapsin gene family. Synapsins encode neuronal phosphoproteins which associate with the cy'}, {'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'}, {'gene': 'XRCC1', 'name': 'X-ray repair cross complementing 1', 'summary': 'The protein encoded by this gene is involved in the efficient repair of DNA single-strand breaks formed by exposure to i'}]
pd.DataFrame(ann_rows)
| gene | name | summary | |
|---|---|---|---|
| 0 | AND | — | — |
| 1 | APOE | apolipoprotein E | The protein encoded by this gene is a major ap... |
| 2 | BMP4 | bone morphogenetic protein 4 | This gene encodes a secreted ligand of the TGF... |
| 3 | BMPR1A | bone morphogenetic protein receptor type 1A | The bone morphogenetic protein (BMP) receptors... |
| 4 | C3 | complement C3 | Complement component C3 plays a central role i... |
| 5 | COMPLEX | HLA complex P5 | — |
| 6 | CX3CR1 | C-X3-C motif chemokine receptor 1 | Fractalkine is a transmembrane protein and che... |
| 7 | DLX1 | distal-less homeobox 1 | This gene encodes a member of a homeobox trans... |
| 8 | EIF2AK3 | eukaryotic translation initiation factor 2 alp... | The protein encoded by this gene phosphorylate... |
| 9 | EIF2B | eukaryotic translation initiation factor 2B su... | This gene encodes the beta subunit of eukaryot... |
| 10 | PARP1 | poly(ADP-ribose) polymerase 1 | This gene encodes a chromatin-associated enzym... |
| 11 | SLC1A2 | solute carrier family 1 member 2 | This gene encodes a member of a family of solu... |
| 12 | SOX10 | SRY-box transcription factor 10 | This gene encodes a member of the SOX (SRY-rel... |
| 13 | SYN1 | synapsin I | This gene is a member of the synapsin gene fam... |
| 14 | TREM2 | triggering receptor expressed on myeloid cells 2 | This gene encodes a membrane protein that form... |
| 15 | XRCC1 | X-ray repair cross complementing 1 | The protein encoded by this gene is involved i... |
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()
/home/ubuntu/.config/matplotlib is not a writable directory
Matplotlib created a temporary cache directory at /tmp/matplotlib-8ept7gxj because there was an issue with the default path (/home/ubuntu/.config/matplotlib); it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
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': 'AND', 'n_pathways': 0, 'top_pathway': '—'}, {'gene': 'APOE', 'n_pathways': 8, 'top_pathway': 'Nuclear signaling by ERBB4'}, {'gene': 'BMP4', 'n_pathways': 8, 'top_pathway': 'Molecules associated with elastic fibres'}, {'gene': 'BMPR1A', 'n_pathways': 1, 'top_pathway': 'Signaling by BMP'}, {'gene': 'C3', 'n_pathways': 8, 'top_pathway': 'Alternative complement activation'}, {'gene': 'COMPLEX', 'n_pathways': 0, 'top_pathway': '—'}, {'gene': 'CX3CR1', 'n_pathways': 4, 'top_pathway': 'Chemokine receptors bind chemokines'}, {'gene': 'DLX1', 'n_pathways': 0, 'top_pathway': '—'}, {'gene': 'EIF2AK3', 'n_pathways': 5, 'top_pathway': 'PERK regulates gene expression'}, {'gene': 'EIF2B', 'n_pathways': 8, 'top_pathway': 'L13a-mediated translational silencing of Ceruloplasmin expression'}, {'gene': 'PARP1', 'n_pathways': 8, 'top_pathway': 'POLB-Dependent Long Patch Base Excision Repair'}, {'gene': 'SLC1A2', 'n_pathways': 3, 'top_pathway': 'Astrocytic Glutamate-Glutamine Uptake And Metabolism'}, {'gene': 'SOX10', 'n_pathways': 4, 'top_pathway': 'EGR2 and SOX10-mediated initiation of Schwann cell myelination'}, {'gene': 'SYN1', 'n_pathways': 3, 'top_pathway': 'Serotonin Neurotransmitter Release Cycle'}, {'gene': 'TREM2', 'n_pathways': 4, 'top_pathway': 'Immunoregulatory interactions between a Lymphoid and a non-Lymphoid ce'}, {'gene': 'XRCC1', 'n_pathways': 5, 'top_pathway': 'Resolution of AP sites via the single-nucleotide replacement pathway'}]
pd.DataFrame(pw_rows).sort_values('n_pathways', ascending=False)
| gene | n_pathways | top_pathway | |
|---|---|---|---|
| 1 | APOE | 8 | Nuclear signaling by ERBB4 |
| 2 | BMP4 | 8 | Molecules associated with elastic fibres |
| 4 | C3 | 8 | Alternative complement activation |
| 9 | EIF2B | 8 | L13a-mediated translational silencing of Cerul... |
| 10 | PARP1 | 8 | POLB-Dependent Long Patch Base Excision Repair |
| 8 | EIF2AK3 | 5 | PERK regulates gene expression |
| 15 | XRCC1 | 5 | Resolution of AP sites via the single-nucleoti... |
| 6 | CX3CR1 | 4 | Chemokine receptors bind chemokines |
| 14 | TREM2 | 4 | Immunoregulatory interactions between a Lympho... |
| 12 | SOX10 | 4 | EGR2 and SOX10-mediated initiation of Schwann ... |
| 11 | SLC1A2 | 3 | Astrocytic Glutamate-Glutamine Uptake And Meta... |
| 13 | SYN1 | 3 | Serotonin Neurotransmitter Release Cycle |
| 3 | BMPR1A | 1 | Signaling by BMP |
| 7 | DLX1 | 0 | — |
| 0 | AND | 0 | — |
| 5 | COMPLEX | 0 | — |
5. Hypothesis ranking (7 hypotheses)¶
hyp_data = [('Microglial TREM2-Complement Axis Modulation', 0.726), ('Oligodendrocyte DNA Repair Enhancement Therapy', 0.665), ('Astrocyte Metabolic Reprogramming via APOE4 Correction', 0.636), ('BMP4 Pathway Inhibition for Oligodendrocyte Myelination', 0.62), ('Cross-Cell Type Synaptic Rescue via Tripartite Synapse ', 0.62), ('Neuronal Integrated Stress Response Modulation', 0.618), ('Spatial Transcriptome-Guided Precision Cell Therapy', 0.578)]
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 - v2)")
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['Microglial TREM2-Complement Axis Modulat', 'Oligodendrocyte DNA Repair Enhancement T', 'Astrocyte Metabolic Reprogramming via AP', 'BMP4 Pathway Inhibition for Oligodendroc', 'Cross-Cell Type Synaptic Rescue via Trip', 'Neuronal Integrated Stress Response Modu', 'Spatial Transcriptome-Guided Precision C']
matrix = np.array([[0.75, 0.9, 0.85, 0.85, 0.0, 0.85, 0.8, 0.95, 0.75], [0.8, 0.7, 0.65, 0.6, 0.0, 0.6, 0.65, 0.75, 0.45], [0.95, 0.25, 0.85, 0.75, 0.0, 0.65, 0.4, 0.3, 0.3], [0.85, 0.6, 0.6, 0.65, 0.0, 0.45, 0.55, 0.8, 0.5], [0.9, 0.4, 0.8, 0.75, 0.0, 0.7, 0.6, 0.45, 0.55], [0.75, 0.55, 0.65, 0.7, 0.0, 0.55, 0.6, 0.65, 0.5], [0.95, 0.2, 0.7, 0.6, 0.0, 0.6, 0.3, 0.25, 0.35]])
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: Microglial TREM2-Complement Axis Modulation¶
Target genes: TREM2 and C3 · Composite score: 0.726
Molecular Mechanism¶
The microglial TREM2-complement axis represents a fundamental regulatory network controlling neuroinflammation and synaptic homeostasis in neurodegenerative diseases. TREM2 (Triggering Receptor Expressed on Myeloid cells 2) is a type I transmembrane glycoprotein exclusively e
print('No PubMed results for hypothesis h-3616325a')
No PubMed results for hypothesis h-3616325a
Hypothesis 2: Oligodendrocyte DNA Repair Enhancement Therapy¶
Target genes: PARP1 and XRCC1 · Composite score: 0.665
Molecular Mechanism and Rationale¶
The oligodendrocyte DNA repair enhancement therapy is predicated on emerging evidence that white matter pathology, particularly oligodendrocyte dysfunction, represents an early and potentially causative event in Alzheimer's disease neurodegeneration. Oligodendro
print('No PubMed results for hypothesis h-fa7ac9cb')
No PubMed results for hypothesis h-fa7ac9cb
Hypothesis 3: Astrocyte Metabolic Reprogramming via APOE4 Correction¶
Target genes: APOE · Composite score: 0.636
Molecular Mechanism and Rationale¶
The APOE4 variant disrupts astrocyte-specific metabolic pathways through altered lipid trafficking and cholesterol homeostasis, fundamentally impairing the astrocytes' ability to support neuronal function. Unlike APOE3, the APOE4 protein exhibits domain interact
lit_data = [{'year': '2013', 'journal': 'J Inflamm (Lond)', 'title': 'BMP4 is increased in the aortas of diabetic ApoE knockout mice and enhances upta', 'pmid': '24107300'}, {'year': '2021', 'journal': 'Redox Biol', 'title': 'BMP4-mediated browning of perivascular adipose tissue governs an anti-inflammato', 'pmid': '33895484'}, {'year': '2006', 'journal': 'Circ Res', 'title': 'Thrombin and NAD(P)H oxidase-mediated regulation of CD44 and BMP4-Id pathway in ', 'pmid': '16601225'}, {'year': '2022', 'journal': 'Sci Rep', 'title': 'Integrated bioinformatic analysis of gene expression profiling data to identify ', 'pmid': '35393522'}, {'year': '2019', 'journal': 'Differentiation', 'title': 'Gremlin-1 potentiates the dedifferentiation of VSMC in early stages of atheroscl', 'pmid': '31494396'}]
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 | 2013 | J Inflamm (Lond) | BMP4 is increased in the aortas of diabetic Ap... | 24107300 |
| 1 | 2021 | Redox Biol | BMP4-mediated browning of perivascular adipose... | 33895484 |
| 2 | 2006 | Circ Res | Thrombin and NAD(P)H oxidase-mediated regulati... | 16601225 |
| 3 | 2022 | Sci Rep | Integrated bioinformatic analysis of gene expr... | 35393522 |
| 4 | 2019 | Differentiation | Gremlin-1 potentiates the dedifferentiation of... | 31494396 |
Hypothesis 4: BMP4 Pathway Inhibition for Oligodendrocyte Myelination Support¶
Target genes: BMP4 and BMPR1A · Composite score: 0.62
Molecular Mechanism and Rationale¶
The bone morphogenetic protein 4 (BMP4) pathway represents a critical regulatory mechanism in cerebrovascular homeostasis and white matter integrity. Under physiological conditions, BMP4 signaling through its cognate receptor BMPR1A maintains appropriate oligode
print('No PubMed results for hypothesis h-e064f134')
No PubMed results for hypothesis h-e064f134
Hypothesis 5: Cross-Cell Type Synaptic Rescue via Tripartite Synapse Restoration¶
Target genes: SYN1, SLC1A2, and CX3CR1 · Composite score: 0.62
Molecular Mechanism and Rationale¶
The Cross-Cell Type Synaptic Rescue hypothesis addresses Alzheimer's disease through coordinated restoration of tripartite synapse function, targeting the synchronized dysfunction that occurs between neurons, astrocytes, and microglia. At the neuronal level, syn
print('No PubMed results for hypothesis h-019c56c1')
No PubMed results for hypothesis h-019c56c1
Hypothesis 6: Neuronal Integrated Stress Response Modulation¶
Target genes: EIF2AK3 (PERK) and EIF2B complex · Composite score: 0.618
Molecular Mechanism and Rationale¶
The integrated stress response (ISR) represents a critical cellular surveillance mechanism that monitors protein folding homeostasis through four upstream kinases: EIF2AK3 (PERK), PKR, GCN2, and HRI. Under proteotoxic stress conditions characteristic of neurodeg
print('No PubMed results for hypothesis h-5137be61')
No PubMed results for hypothesis h-5137be61
Hypothesis 7: Spatial Transcriptome-Guided Precision Cell Therapy¶
Target genes: SOX10 and DLX1/2 · Composite score: 0.578
Molecular Mechanism and Rationale¶
The Spatial Transcriptome-Guided Precision Cell Therapy hypothesis leverages region-specific transcriptomic vulnerabilities by targeting SOX10-mediated oligodendrogenesis in the middle temporal gyrus and DLX1/2-regulated GABAergic interneuron development in the
print('No PubMed results for hypothesis h-0bdc3803')
No PubMed results for hypothesis h-0bdc3803
7. Knowledge graph edges (75 total)¶
edge_data = [{'source': 'h-3616325a', 'relation': 'targets', 'target': 'C3', 'strength': 0.8}, {'source': 'h-3616325a', 'relation': 'implicated_in', 'target': 'neurodegeneration', 'strength': 0.8}, {'source': 'TREM2 dysregulation', 'relation': 'causes (disease-associate', 'target': 'microglial dysfunction', 'strength': 0.8}, {'source': 'h-3616325a', 'relation': 'targets', 'target': 'TREM2', 'strength': 0.8}, {'source': 'DNA damage', 'relation': 'causes (DNA damage in oli', 'target': 'oligodendrocyte degeneration', 'strength': 0.75}, {'source': 'TREM2 enhancement', 'relation': 'causes (enhancing TREM2 e', 'target': 'tau pathology reduction', 'strength': 0.75}, {'source': 'complement activation', 'relation': 'causes (excessive complem', 'target': 'synapse elimination', 'strength': 0.75}, {'source': 'APOE4', 'relation': 'causes (APOE4 disrupts li', 'target': 'astrocyte dysfunction', 'strength': 0.72}, {'source': 'oligodendrocyte degeneration', 'relation': 'causes (oligodendrocyte d', 'target': 'myelin breakdown', 'strength': 0.7}, {'source': 'h-d8f2bbc9', 'relation': 'targets', 'target': 'APOE', 'strength': 0.7}, {'source': 'h-d8f2bbc9', 'relation': 'implicated_in', 'target': 'neurodegeneration', 'strength': 0.7}, {'source': 'PARP1 activation', 'relation': 'causes (PARP1 activation ', 'target': 'DNA repair enhancement', 'strength': 0.7}, {'source': 'tripartite synapse dysfunction', 'relation': 'causes (coordinated dysfu', 'target': 'synaptic failure', 'strength': 0.7}, {'source': 'APOE4', 'relation': 'causes (APOE4 mediates my', 'target': 'myelin breakdown', 'strength': 0.7}, {'source': 'integrated stress response dys', 'relation': 'causes (dysregulated ISR ', 'target': 'protein synthesis shutdown', 'strength': 0.68}, {'source': 'h-019c56c1', 'relation': 'targets', 'target': 'CX3CR1', 'strength': 0.65}, {'source': 'h-019c56c1', 'relation': 'implicated_in', 'target': 'neurodegeneration', 'strength': 0.65}, {'source': 'h-019c56c1', 'relation': 'targets', 'target': 'SYN1', 'strength': 0.65}, {'source': 'BMP4', 'relation': 'causes (pericyte-derived ', 'target': 'white matter damage', 'strength': 0.65}, {'source': 'chronic hypoperfusion', 'relation': 'causes (chronic hypoperfu', 'target': 'BMP4 release', 'strength': 0.65}, {'source': 'h-019c56c1', 'relation': 'targets', 'target': 'SLC1A2', 'strength': 0.65}, {'source': 'h-5137be61', 'relation': 'targets', 'target': 'EIF2AK3 (PERK)', 'strength': 0.6}, {'source': 'h-5137be61', 'relation': 'targets', 'target': 'EIF2B complex', 'strength': 0.6}, {'source': 'h-5137be61', 'relation': 'implicated_in', 'target': 'neurodegeneration', 'strength': 0.6}, {'source': 'h-fa7ac9cb', 'relation': 'targets', 'target': 'PARP1', 'strength': 0.55}]
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