為什麼 flow 結果常被質疑?
現代流式儀可同時偵測 28+ 色 (Cytek Aurora spectral),但 compensation/unmixing 的微小錯誤會被高參數放大。Cossarizza et al. (2021) 在 Eur J Immunol 發表的「Guidelines for the use of flow cytometry and cell sorting in immunological studies (3rd ed.)」是當前最權威指引,搭配 ISAC 的 MIFlowCyt 報告規範。
2025 年 spectral flow cytometry 已成主流,可將「自體螢光」當作獨立參數萃取,但要求 reference controls 必須含真細胞(不能只用 bead)。
Modern instruments can read 28+ colors (Cytek Aurora spectral). High parameter counts amplify even tiny compensation / unmixing errors. The Cossarizza et al. (2021, Eur J Immunol) "Guidelines for the use of flow cytometry and cell sorting in immunological studies, 3rd ed." are the current authority, alongside ISAC's MIFlowCyt.
By 2025, spectral cytometry is mainstream and can extract autofluorescence as an independent parameter — but it requires reference controls on real cells, not beads alone.
一、三種定量輸出
% positive
陽性細胞佔比。對 marker 為「有/無」二元時最自然。須先以 FMO 設 gate。報告時須含母群定義(例如 % of CD3⁺ T cells)。
Fraction of positive cells. Natural for binary markers. Set gate from FMO. Always state the parent population (e.g., % of CD3⁺ T cells).
MFI
「平均」表現強度,多用 median(mean 受 outlier 影響)。比較時需確保 cytometer setting 與 voltage 相同;不同實驗的 MFI 不可直接比,需做 MESF/QuantiBrite bead 校正。
"Average" expression intensity — use median (mean is outlier-sensitive). Comparable only across runs with identical voltages; cross-day comparison needs MESF/QuantiBrite bead calibration.
Absolute count
每 μL 細胞數。需用 counting beads 或體積式儀器。比例 (%) 變化可能反映其他細胞群增減,唯有絕對數能說明該群體本身是否擴增。
Cells per μL. Requires counting beads or volumetric instrument. Percentages can change because other populations shift; only absolute counts confirm true expansion of a subset.
Gating 閾值的影響
拖動閾值,觀察 % positive 與 MFI 變化。綠色點為通過 gate 的細胞。可以看到:對 MFI 而言,閾值只影響「哪些細胞被計入平均」,對極端 outlier 不敏感(用 median)。
Drag the threshold — see % positive and MFI shift. Green dots pass the gate. Note: median MFI is robust to outliers.
X:CD8 強度 | Y:cell count
二、Flow 資料分析程式碼
# R: flowWorkspace + ggcyto library(flowWorkspace); library(ggcyto) fs <- read.flowSet(list.files("fcs/", pattern="\\.fcs$", full.names=TRUE)) gs <- GatingSet(fs) # Compensation 與 transform(logicle) comp <- spillover(fs[[1]]) gs <- compensate(gs, comp) trans <- estimateLogicle(gs[[1]], colnames(comp$SPILL)) gs <- transform(gs, trans) # 加 gate:CD3+ → CD8+ gs_pop_add(gs, rectangleGate("CD3-A"=c(2,4.5)), parent="root", name="CD3+") gs_pop_add(gs, rectangleGate("CD8-A"=c(2.5,4.5)), parent="CD3+", name="CD8+") recompute(gs) # 萃取統計 stats <- gs_pop_get_stats(gs, nodes="CD8+", type="percent") mfi <- gs_pop_get_stats(gs, nodes="CD8+", type=function(x) median(exprs(x)[,"CD8-A"]))
# Python: FlowKit (Cytek/BD 推薦) import flowkit as fk, numpy as np sample = fk.Sample("sample01.fcs") sample.apply_compensation(spill_matrix) xform = fk.transforms.LogicleTransform("logicle", param_t=262144, param_w=0.5, param_m=4.5, param_a=0) sample.apply_transform(xform) df = sample.as_dataframe(source="xform") # Gating cd3_pos = df.query("`CD3-A` > 2") cd8_pos = cd3_pos.query("`CD8-A` > 2.5") pct = len(cd8_pos) / len(cd3_pos) * 100 mfi = np.median(cd8_pos["CD8-A"]) print(f"%CD8+ of CD3+: {pct:.2f}, median MFI: {mfi:.2f}")
三、reviewer 必問清單
❌ isotype 設 gate
Isotype antibody 親和力、螢光標記比例與你的抗體不同;改用 FMO。
Isotype antibodies differ in affinity and F/P ratio from your antibody. Use FMO.
❌ 無活/死染色
死細胞非特異結合任何抗體,造成假陽性;放 LIVE/DEAD 或 7-AAD/PI gate 是基本要求。
Dead cells bind non-specifically to all antibodies → false positives. LIVE/DEAD or 7-AAD/PI gating is mandatory.
❌ 未報告儀器設定
MIFlowCyt 要求列出 instrument、voltages、laser 設定、compensation matrix。不同日量的 MFI 必須以 MESF bead 校正。
MIFlowCyt requires reporting instrument, voltages, lasers, compensation matrix. Cross-day MFI needs MESF bead calibration.
❌ 報告 mean MFI
螢光分布右偏 + outlier 拉高平均。應報 median 或 geometric mean。
Fluorescence is right-skewed with outliers. Report median or geometric mean, not arithmetic mean.
🎯 章末小測驗
1. 現代設 gate 的標準是?
2. 報告 MFI 應使用?
3. 只報告 % positive 的問題?