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 三者的关系与取舍

这三者不是互相替代的关系,是互补的。我一般按这个顺序做质量评估:

  1. 先看 S/B,低于 3 直接跳过后续计算
  2. 然后算 Z',确认体系的分离度是否达标
  3. 最后补算 SSMD,如果 Z' 模棱两可(比如 0.3-0.4)

一句话总结: S/B 是信号够不够强,Z' 是分离度够不够好,SSMD 是效应量够不够可靠。三者一起看,才能全面评估一个批次的 Q。

自动化建议: 在流程中用脚本自动计算这三个指标。我习惯在每个批次的数据导入后,立即生成一个质控报告,报告中必须包含三个指标的直方图。

质量指标关系图 质量指标选择流程 实验数据 / 孔板读数 S/B 是否 ≥ 3 ? 否 (体系不可用) 是 (进入分离度评估) 中止实验 / 排查条件 计算 Z' 值 Z' ≥ 0.5 ? 批次可用 / 继续筛选 计算 SSMD 核查 说明:S/B 作为第一道过滤器,Z' 决定体系分离度,SSMD 用于异常情况下的辅助验证

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)

这个函数我用了好几年,一直没改过。你拿过去可以直接用。