3. 质量控制核心指标:Z因子、SSMD、信噪比
做高通量筛选,说白了就是跟成千上万个孔打交道。你不可能挨个去看每块板子做得好不好。那靠什么来判断?就得靠几个硬指标。今天我跟你聊三个我用了多年的核心指标:Z因子、SSMD和信噪比。
这三个指标,是判断一个筛选体系“行不行”的照妖镜。我在项目中吃过不少亏,有些板子看起来数据挺漂亮,拿Z因子一算,直接不合格。嗯,咱们一个一个说。
3.1 Z因子:质检界的黄金标准
Z因子是我个人最常用的指标。它衡量的是你的信号窗口到底有多大,大到能不能把"阳性"和"阴性"样本清清楚楚地分开。
3.1.1 Z因子的计算公式
说白了,Z因子看的是信号均值的差,跟两边数据波动的比值。公式是这个样子:
Z' = 1 - (3 * σ_p + 3 * σ_n) / |μ_p - μ_n|
其中,μ_p 和 σ_p 是阳性对照(Positive Control)的均值和标准差。
μ_n 和 σ_n 是阴性对照(Negative Control)的均值和标准差。
3.1.2 Z因子的解读
Z因子的取值落在 0 到 1 之间。我一般这么看:
| Z' 值范围 | 含义 | 我的评价 |
|---|---|---|
| 0.5 ~ 1.0 | 信号窗口极佳,分群明显 | 体系可靠,放心做全库筛选 |
| 0.2 ~ 0.5 | 信号窗口可用,但边缘模糊 | 需要优化条件,否则假阳性高 |
| < 0.2 | 信号窗口太小,基本不可用 | 建议立即停止,排查实验体系 |
Z' ≥ 0.5 是我个人判断筛选用体系可用的底线。低于这个值,我不会启动正式筛选。
实操技巧: 建议每次实验至少设 16-32 个阳性对照孔和阴性对照孔。孔数太少,标准差估计会偏大,Z' 值会虚低。
3.1.3 我踩过的坑:Z因子的一致性
Z因子最怕什么?最怕单块板子算出来很高,但不同批次的板子间忽高忽低。我见过一个实验,第一天 Z'=0.7,第二天 Z'=0.3。最后发现是孵育时间有 2 分钟的偏差。
所以我建议:
- 每块板子独立计算 Z'
- 观察 Z' 随时间的变化趋势,而不是只看平均值
- 如果连续 3 块板子的 Z' 都低于 0.5,马上停手排查
3.2 SSMD:另一种视角
Z因子好用,但它依赖于信号分布在均值两侧的对称性。如果你的数据不是正态分布,或者阳性比例很小时,Z 因子就会失真。这就是 SSMD 登场的时候了。
SSMD(Strictly Standardized Mean Difference),翻译过来叫“严格标准化均值差”。
3.2.1 SSMD 与 Z因子的区别
| 指标 | 数学基础 | 适用场景 | 备注 |
|---|---|---|---|
| Z' | 基于 3-sigma 规则 | 大批量、稳定体系 | 对极端值敏感 |
| SSMD | 基于效应量 | 高变异数据、小效应检测 | 对分布形态鲁棒 |
3.2.2 什么时候用 SSMD
我一般在以下情况会放弃 Z',转用 SSMD:
- 阳性对照的变异系数(CV)超过 20%
- 目标效应量很小,比如抑制剂活性只有 30%
- 你怀疑你的数据有离群值干扰
注意: SSMD 是一个基于效应量的指标,它不直接告诉你“这个板子能不能用”。它更多用来比较不同体系间的分离能力。我个人习惯是先看 Z',如果 Z' 表达不清楚,再补算 SSMD。
3.3 信噪比(S/B, S/N, S/B)
信噪比是三个指标里最直观的一个。说白了就是让你的阳性信号尽量大,阴性背景尽量小。高通量筛选中,我主要关注三个变种:
3.3.1 三种信噪比的定义
| 指标 | 公式 | 解读 |
|---|---|---|
| S/B | μ_p / μ_n | 信号与背景的比值,简单粗暴 |
| S/N | (μ_p - μ_n) / σ_n | 信号与噪声的比值,考虑波动 |
| Z' | 1 - (3σ_p + 3σ_n) / |μ_p - μ_n| | 综合了分离度与变异度 |
你看,Z因子虽然名字里有“因子”,但其实它也是一种特殊的信噪比。我经常把 S/B 当作快速过滤指标:如果 S/B 小于 3,我会直接认为这个实验体系有硬伤。
3.3.2 真实案例:信噪比怎么用
我记得以前有一个酶活抑制筛选项目。阳性对照的活性在 90%,阴性背景的变异度很低。第一天跑完,S/B = 8,Z' = 0.6,看起来不错。
但后来我改了一点点实验条件——把底物浓度减半。结果 S/B 直接掉到 2.5,Z' 变成 0.1。
为什么会这样?
因为底物少了,阳性信号的绝对强度下降了,但阴性背景的变异度没变。S/B 锐减,Z' 跟着崩。所以信噪比这类指标,对实验条件的微小变化非常敏感,这也正是它能当质控工具的原因。
3.4 三者的关系与取舍
这三者不是互相替代的关系,是互补的。我一般按这个顺序做质量评估:
- 先看 S/B,低于 3 直接跳过后续计算
- 然后算 Z',确认体系的分离度是否达标
- 最后补算 SSMD,如果 Z' 模棱两可(比如 0.3-0.4)
一句话总结: S/B 是信号够不够强,Z' 是分离度够不够好,SSMD 是效应量够不够可靠。三者一起看,才能全面评估一个批次的 Q。
自动化建议: 在流程中用脚本自动计算这三个指标。我习惯在每个批次的数据导入后,立即生成一个质控报告,报告中必须包含三个指标的直方图。
3.5 实战:用一个 Python 函数计算这三个指标
下面我贴一个我常用的函数。你直接把阳性和阴性对照的数据传进去,它会返回三个指标的结果。
import numpy as np
def calc_quality_metrics(pos, neg):
"""
计算 Z'、SSMD 和 S/B 三个质控指标
:param pos: 阳性对照数据 (list or ndarray)
:param neg: 阴性对照数据 (list or ndarray)
:return: dict with 'Z_prime', 'SSMD', 'S_over_B'
"""
mu_p = np.mean(pos)
mu_n = np.mean(neg)
sigma_p = np.std(pos, ddof=1)
sigma_n = np.std(neg, ddof=1)
# Z' 因子
denominator = abs(mu_p - mu_n)
if denominator == 0:
z_prime = 0.0
else:
z_prime = 1.0 - (3.0 * (sigma_p + sigma_n)) / denominator
# SSMD
ssmd = (mu_p - mu_n) / np.sqrt(sigma_p**2 + sigma_n**2)
# S/B
s_over_b = mu_p / mu_n if mu_n != 0 else float('inf')
return {
'Z_prime': round(z_prime, 4),
'SSMD': round(ssmd, 4),
'S_over_B': round(s_over_b, 4)
}
# 示例调用
pos_control = [150.2, 148.7, 153.1, 149.5, 151.8]
neg_control = [12.1, 11.5, 13.0, 12.8, 11.9]
result = calc_quality_metrics(pos_control, neg_control)
print(result)
这个函数我用了好几年,一直没改过。你拿过去可以直接用。