STEP 10 / 15

空間細胞通訊:把距離納入 ligand-receptor

scRNA 的 CellChat / CellPhoneDB 是「全組織配對」;ST 上「鄰近」才是真實。

scRNA's CellChat / CellPhoneDB pair across the entire tissue; in ST, "neighborhood" is what is real.

一、空間 CCC 跟 scRNA CCC 的根本不同

細胞通訊的核心是「ligand 表達在 A,receptor 表達在 B,且 A 和 B 真的接觸到」。在 scRNA,因為失去座標,第三個條件被忽略:CellPhoneDB 與 CellChat 假設「同 cluster 內所有細胞都可能跟另一 cluster 全部細胞互動」。

在 ST 我們可以把「實體距離」加進去——只接受「物理上相鄰」的 LR 互動。這對於 paracrine/juxtacrine 訊號(如 Notch、ECM 接觸)特別關鍵。

Core CCC requires "ligand in A, receptor in B, and A & B actually touch". scRNA, lacking coordinates, drops the third requirement: CellPhoneDB and CellChat assume any cell in cluster A may interact with any cell in cluster B.

In ST we can add physical distance — only credit LR interactions whose cells are spatially adjacent. This is especially crucial for paracrine / juxtacrine signaling (Notch, ECM contact).

互動:距離閾值如何改變 LR 推論

下圖:紅點 = 表達 ligand 的細胞(A 細胞群);藍點 = 表達 receptor 的細胞(B 細胞群)。線條 = 推論的互動。當距離閾值 = ∞ 時,所有 A-B 對都連起來(像 scRNA);縮小閾值 → 只剩物理上鄰近的對。

Red dots = ligand-expressing cells (A); blue dots = receptor-expressing cells (B); lines = inferred interactions. With distance cutoff = ∞, every A-B pair is linked (scRNA-like); shrinking the cutoff keeps only physically nearby pairs.

三、選工具決策

Q1:
已經跑過 scRNA CellChat 嗎? → 是 → 直接升級 CellChat v2 spatial
Q2:
需要處理 ligand/receptor 競爭(一個 ligand 多個受體)? → 是 → COMMOT
Q3:
想看 下游基因網路NicheNet 回追 target gene。
Q4:
Image-based 平台 (Xenium / MERFISH)? 因為單細胞解析度高,CellChat v2 spatial 與 COMMOT 都能直接用 cell-level 互動。
Q1:
Already used scRNA CellChat? → Yes → just upgrade to CellChat v2 spatial.
Q2:
Need to model ligand/receptor competition? → Yes → COMMOT.
Q3:
Want downstream regulatory networks? pair with NicheNet.
Q4:
Image-based (Xenium / MERFISH)? Single-cell resolution lets CellChat v2 spatial and COMMOT operate directly cell-by-cell.

實作

# CellChat v2 spatial
library(CellChat)
cellchat <- createCellChat(object = vis, group.by = "celltype",
                            datatype = "spatial",
                            coordinates = vis@meta.data[, c("x","y")])
cellchat <- setIdent(cellchat, ident.use = "celltype")
cellchat@DB <- CellChatDB.human
cellchat <- subsetData(cellchat) |> identifyOverExpressedGenes() |> identifyOverExpressedInteractions()
cellchat <- computeCommunProb(cellchat, type = "truncatedMean",
                                  distance.use = TRUE, scale.distance = 0.01)
netVisual_circle(cellchat@net$count); netVisual_aggregate(cellchat, signaling = "VEGF")
import commot as ct
# 準備 LR DB
df_ligrec = ct.pp.ligand_receptor_database(species="human", signaling_type="Secreted Signaling")
ct.tl.spatial_communication(adata, database_name="cellchat",
                             df_ligrec=df_ligrec, dis_thr=500, heteromeric=True)
ct.pl.plot_cell_communication(adata, summary="sender", lr_pair=("VEGFA","KDR"))

📝 自我檢測

1. CellChat v2 spatial 與 v1 的核心差別?

1. Key difference between CellChat v2 spatial and v1?

A. v2 不再支援 scRNAA. v2 no longer supports scRNA
B. v2 可以把空間距離納入 LR 推論B. v2 incorporates spatial distance into LR inference
C. v2 不需要 ligandC. v2 doesn't need ligands
D. 兩者完全相同D. They are identical

2. 想要研究「一個 ligand 同時被多個受體競爭」的情境,最適合?

2. Best choice for "one ligand competed for by multiple receptors"?

A. CellPhoneDBA. CellPhoneDB
B. Seurat anchorsB. Seurat anchors
C. COMMOT (collective optimal transport)C. COMMOT (collective optimal transport)
D. Moran's ID. Moran's I

3. NicheNet 在 spatial 流程裡的典型角色?

3. Typical role of NicheNet in a spatial pipeline?

A. 接在 spatial CCC 之後,回追 LR 下游 target gene 與訊號路徑A. After spatial CCC, traces LR's downstream targets and signaling pathways
B. 取代 deconvolutionB. Replaces deconvolution
C. 取代 spatial domain identificationC. Replaces spatial domain identification
D. 做 segmentationD. Performs segmentation