SEA-AD Single-Cell Analysis: Cell-Type Vulnerability in Alzheimer's Disease¶
Notebook ID: nb-SDA-2026-04-04-analysis_sea_ad_001 · Analysis: SDA-2026-04-04-analysis_sea_ad_001 · Generated: 2026-04-21T18:47:35
Research question¶
What are the cell-type specific vulnerability mechanisms in Alzheimer's disease based on SEA-AD single-cell data?
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.88 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'GFAP', 'name': 'glial fibrillary acidic protein', 'summary': 'This gene encodes one of the major intermediate filament proteins of mature astrocytes. It is used as a marker to distin'}, {'gene': 'PDGFRA', 'name': 'platelet derived growth factor receptor alpha', 'summary': 'This gene encodes a cell surface tyrosine kinase receptor for members of the platelet-derived growth factor family. Thes'}, {'gene': 'PDGFRB', 'name': 'platelet derived growth factor receptor beta', 'summary': 'The protein encoded by this gene is a cell surface tyrosine kinase receptor for members of the platelet-derived growth f'}, {'gene': 'SLC17A7', 'name': 'solute carrier family 17 member 7', 'summary': 'The protein encoded by this gene is a vesicle-bound, sodium-dependent phosphate transporter that is specifically express'}, {'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 | GFAP | glial fibrillary acidic protein | This gene encodes one of the major intermediat... |
| 1 | PDGFRA | platelet derived growth factor receptor alpha | This gene encodes a cell surface tyrosine kina... |
| 2 | PDGFRB | platelet derived growth factor receptor beta | The protein encoded by this gene is a cell sur... |
| 3 | SLC17A7 | solute carrier family 17 member 7 | The protein encoded by this gene is a vesicle-... |
| 4 | 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': 'Regulation Of Chemotaxis (GO:0050920)', 'p_value': 2.4524031741490827e-08, 'odds_ratio': 1198.2, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 2, 'term': 'Positive Regulation Of Phosphatidylinositol 3-Kinase Signaling (GO:0014068)', 'p_value': 3.910300962858894e-07, 'odds_ratio': 452.9318181818182, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 3, 'term': 'Regulation Of Kinase Activity (GO:0043549)', 'p_value': 7.362661898698642e-07, 'odds_ratio': 364.2621951219512, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 4, 'term': 'Regulation Of Phosphatidylinositol 3-Kinase Signaling (GO:0014066)', 'p_value': 8.754097364195951e-07, 'odds_ratio': 343.2413793103448, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 5, 'term': 'Positive Regulation Of Kinase Activity (GO:0033674)', 'p_value': 1.3555383337379294e-06, 'odds_ratio': 295.45544554455444, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 6, 'term': 'Regulation Of Phospholipase C Activity (GO:1900274)', 'p_value': 2.7474478975315667e-06, 'odds_ratio': 1480.4444444444443, 'genes': ['PDGFRB', 'PDGFRA']}, {'rank': 7, 'term': 'Positive Regulation Of Transferase Activity (GO:0051347)', 'p_value': 3.54171663205272e-06, 'odds_ratio': 212.73214285714286, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 8, 'term': 'Negative Regulation Of Cell Activation (GO:0050866)', 'p_value': 3.895617501090222e-06, 'odds_ratio': 1211.1515151515152, 'genes': ['PDGFRA', 'TREM2']}, {'rank': 9, 'term': 'Cardiac Myofibril Assembly (GO:0055003)', 'p_value': 5.243069539504879e-06, 'odds_ratio': 1024.7179487179487, 'genes': ['PDGFRB', 'PDGFRA']}, {'rank': 10, 'term': 'Platelet-Derived Growth Factor Receptor Signaling Pathway (GO:0048008)', 'p_value': 5.243069539504879e-06, 'odds_ratio': 1024.7179487179487, 'genes': ['PDGFRB', 'PDGFRA']}]
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 | Regulation Of Chemotaxis (GO:0050920) | 3 | 2.45e-08 | 1198.2 | PDGFRB, PDGFRA, TREM2 |
| 1 | Positive Regulation Of Phosphatidylinositol 3-... | 3 | 3.91e-07 | 452.9 | PDGFRB, PDGFRA, TREM2 |
| 2 | Regulation Of Kinase Activity (GO:0043549) | 3 | 7.36e-07 | 364.3 | PDGFRB, PDGFRA, TREM2 |
| 3 | Regulation Of Phosphatidylinositol 3-Kinase Si... | 3 | 8.75e-07 | 343.2 | PDGFRB, PDGFRA, TREM2 |
| 4 | Positive Regulation Of Kinase Activity (GO:003... | 3 | 1.36e-06 | 295.5 | PDGFRB, PDGFRA, TREM2 |
| 5 | Regulation Of Phospholipase C Activity (GO:190... | 2 | 2.75e-06 | 1480.4 | PDGFRB, PDGFRA |
| 6 | Positive Regulation Of Transferase Activity (G... | 3 | 3.54e-06 | 212.7 | PDGFRB, PDGFRA, TREM2 |
| 7 | Negative Regulation Of Cell Activation (GO:005... | 2 | 3.90e-06 | 1211.2 | PDGFRA, TREM2 |
| 8 | Cardiac Myofibril Assembly (GO:0055003) | 2 | 5.24e-06 | 1024.7 | PDGFRB, PDGFRA |
| 9 | Platelet-Derived Growth Factor Receptor Signal... | 2 | 5.24e-06 | 1024.7 | PDGFRB, PDGFRA |
import matplotlib.pyplot as plt
import numpy as np
go_bp = [{'rank': 1, 'term': 'Regulation Of Chemotaxis (GO:0050920)', 'p_value': 2.4524031741490827e-08, 'odds_ratio': 1198.2, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 2, 'term': 'Positive Regulation Of Phosphatidylinositol 3-Kinase Signaling (GO:0014068)', 'p_value': 3.910300962858894e-07, 'odds_ratio': 452.9318181818182, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 3, 'term': 'Regulation Of Kinase Activity (GO:0043549)', 'p_value': 7.362661898698642e-07, 'odds_ratio': 364.2621951219512, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 4, 'term': 'Regulation Of Phosphatidylinositol 3-Kinase Signaling (GO:0014066)', 'p_value': 8.754097364195951e-07, 'odds_ratio': 343.2413793103448, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 5, 'term': 'Positive Regulation Of Kinase Activity (GO:0033674)', 'p_value': 1.3555383337379294e-06, 'odds_ratio': 295.45544554455444, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 6, 'term': 'Regulation Of Phospholipase C Activity (GO:1900274)', 'p_value': 2.7474478975315667e-06, 'odds_ratio': 1480.4444444444443, 'genes': ['PDGFRB', 'PDGFRA']}, {'rank': 7, 'term': 'Positive Regulation Of Transferase Activity (GO:0051347)', 'p_value': 3.54171663205272e-06, 'odds_ratio': 212.73214285714286, 'genes': ['PDGFRB', 'PDGFRA', 'TREM2']}, {'rank': 8, 'term': 'Negative Regulation Of Cell Activation (GO:0050866)', 'p_value': 3.895617501090222e-06, 'odds_ratio': 1211.1515151515152, 'genes': ['PDGFRA', '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-duc66_ju 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': 'PDGFRA', 'protein2': 'PDGFRB', 'score': 0.969, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.457, 'dscore': 0.9, 'tscore': 0.477}]
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)
1 STRING edges
| protein1 | protein2 | score | escore | tscore | |
|---|---|---|---|---|---|
| 0 | PDGFRA | PDGFRB | 0.969 | 0.457 | 0.477 |
import math
ppi = [{'protein1': 'PDGFRA', 'protein2': 'PDGFRB', 'score': 0.969, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.457, 'dscore': 0.9, 'tscore': 0.477}]
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': 'GFAP', 'n_pathways': 2, 'top_pathway': 'Nuclear signaling by ERBB4'}, {'gene': 'PDGFRA', 'n_pathways': 8, 'top_pathway': 'PIP3 activates AKT signaling'}, {'gene': 'PDGFRB', 'n_pathways': 6, 'top_pathway': 'PIP3 activates AKT signaling'}, {'gene': 'SLC17A7', 'n_pathways': 2, 'top_pathway': 'Glutamate Neurotransmitter Release Cycle'}, {'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 | |
|---|---|---|---|
| 1 | PDGFRA | 8 | PIP3 activates AKT signaling |
| 2 | PDGFRB | 6 | PIP3 activates AKT signaling |
| 4 | TREM2 | 4 | Immunoregulatory interactions between a Lympho... |
| 0 | GFAP | 2 | Nuclear signaling by ERBB4 |
| 3 | SLC17A7 | 2 | Glutamate Neurotransmitter Release Cycle |
5. Hypothesis ranking (5 hypotheses)¶
hyp_data = [('Heterogeneous astrocyte activation states differentiall', 0.64), ('Vascular mural cell degeneration precedes and exacerbat', 0.637), ('Layer V excitatory neurons show selectively enhanced vu', 0.632), ('Microglial TREM2 downregulation impairs damage-associat', 0.628), ('OPC differentiation blockade contributes to white matte', 0.599)]
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("SEA-AD Single-Cell Analysis: Cell-Type Vulnerability in Alzheimer's Disease")
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['Heterogeneous astrocyte activation state', 'Vascular mural cell degeneration precede', 'Layer V excitatory neurons show selectiv', 'Microglial TREM2 downregulation impairs ', 'OPC differentiation blockade contributes']
matrix = np.array([[0.75, 0.7, 0.82, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.75, 0.7, 0.82, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.75, 0.7, 0.82, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.75, 0.7, 0.82, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.75, 0.7, 0.82, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]])
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: Heterogeneous astrocyte activation states differentially impact neuron¶
Target genes: GFAP · Composite score: 0.64
Heterogeneous astrocyte activation states differentially impact neuronal survival across AD progression¶
Overview¶
Alzheimer's disease (AD) is characterized by progressive neurodegeneration driven by accumulation of amyloid-beta (Aβ) and tau pathology, accompanied by profound alterations in the
lit_data = [{'year': '2012', 'journal': 'Neuroscience', 'title': 'Valproic acid induces the glutamate transporter excitatory amino acid transporte', 'pmid': '23041758'}]
if lit_data:
df = pd.DataFrame(lit_data)
print(f'{len(lit_data)} PubMed results')
display(df)
else:
print('No PubMed results')
1 PubMed results
| year | journal | title | pmid | |
|---|---|---|---|---|
| 0 | 2012 | Neuroscience | Valproic acid induces the glutamate transporte... | 23041758 |
Hypothesis 2: Vascular mural cell degeneration precedes and exacerbates parenchymal¶
Target genes: PDGFRB · Composite score: 0.637
Vascular mural cell degeneration precedes and exacerbates parenchymal pathology¶
Overview¶
The neurovascular unit represents a complex, integrated system essential for maintaining central nervous system homeostasis, comprised of endothelial cells, pericytes, smooth muscle cells (collectively te
print('No PubMed results for hypothesis h_seaad_005')
No PubMed results for hypothesis h_seaad_005
Hypothesis 3: Layer V excitatory neurons show selectively enhanced vulnerability thr¶
Target genes: SLC17A7 · Composite score: 0.632
Layer V excitatory neurons show selectively enhanced vulnerability through dysregulated calcium signaling¶
Overview¶
Cortical layer V excitatory neurons, particularly those of the extratelencephalic (ET) projection subtype, represent a functionally specialized population characterized by large
print('No PubMed results for hypothesis h_seaad_003')
No PubMed results for hypothesis h_seaad_003
Hypothesis 4: Microglial TREM2 downregulation impairs damage-associated response in¶
Target genes: TREM2 · Composite score: 0.628
Microglial TREM2 downregulation impairs damage-associated response in late-stage Alzheimer's disease¶
Overview¶
Alzheimer's disease (AD) represents a progressive neurodegenerative disorder characterized by the pathological accumulation of amyloid-beta (Aβ) plaques and tau tangles, accompanied b
print('No PubMed results for hypothesis h_seaad_001')
No PubMed results for hypothesis h_seaad_001
Hypothesis 5: OPC differentiation blockade contributes to white matter degeneration¶
Target genes: PDGFRA · Composite score: 0.599
OPC differentiation blockade contributes to white matter degeneration in early-stage AD¶
Overview¶
Alzheimer's disease (AD) is classically characterized by amyloid-β (Aβ) and tau pathology concentrated in gray matter structures, yet emerging evidence indicates that white matter degeneration rep
lit_data = [{'year': '2012', 'journal': 'Neuroscience', 'title': 'Valproic acid induces the glutamate transporter excitatory amino acid transporte', 'pmid': '23041758'}]
if lit_data:
df = pd.DataFrame(lit_data)
print(f'{len(lit_data)} PubMed results')
display(df)
else:
print('No PubMed results')
1 PubMed results
| year | journal | title | pmid | |
|---|---|---|---|---|
| 0 | 2012 | Neuroscience | Valproic acid induces the glutamate transporte... | 23041758 |
7. Knowledge graph edges (6 total)¶
edge_data = [{'source': 'DAP12', 'relation': 'involved_in', 'target': 'UPR', 'strength': 0.6}, {'source': 'MAPK', 'relation': 'co_discussed', 'target': 'TYROBP', 'strength': 0.4}, {'source': 'DAP12', 'relation': 'co_discussed', 'target': 'STAT3', 'strength': 0.4}, {'source': 'C3', 'relation': 'co_discussed', 'target': 'TREM2', 'strength': 0.4}, {'source': 'C4', 'relation': 'co_discussed', 'target': 'GFAP', 'strength': 0.4}, {'source': 'APOE4', 'relation': 'co_discussed', 'target': 'GFAP', '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