跳转至

代谢组学数据预处理与归一化


一句话说明

代谢组学数据预处理就是把质谱仪吐出来的"乱七八糟的信号"清洗干净、对齐整齐,让不同样本之间可以公平比较——就像考试改卷前先统一评分标准。


核心知识点

要点1:原始数据处理流程

  • 峰检测(Peak Detection):从连续信号中找出真正的代谢物信号峰,类似从噪音中挑出有意义的"山丘"
  • 峰对齐(Alignment):不同样本的同一个代谢物可能出现在稍微不同的时间/质荷比位置,需要对齐到一起
  • 峰积分(Integration):计算每个峰的面积或高度,代表代谢物的相对含量
  • 去卷积(Deconvolution):把重叠在一起的峰分开,就像把两首同时播放的歌分开

要点2:缺失值处理

  • 产生原因:信号太弱低于检测限、随机技术误差
  • 处理方法
  • 删除缺失率>50%的特征
  • KNN填补(用相似样本估计)
  • 最小值的1/5填补(保守估计)
  • 随机森林填补(missForest,精度较高)

要点3:归一化方法

  • 样本归一化:消除样本间的系统差异
  • 总离子流归一化(TIC):每个值除以该样本所有峰面积之和
  • 中位数归一化:每个值除以该样本中位数
  • PQN(概率商归一化):以参考样本为基准,计算每个特征的商的中位数
  • 特征归一化:让不同量级的代谢物可比
  • 自动缩放(Auto-scaling):减均值除标准差,即Z-score
  • Pareto缩放:减均值除标准差的平方根,保留部分原始差异
  • 对数变换(Log transformation):压缩数据范围,让分布更接近正态

要点4:质控样本(QC)的作用

  • 混合QC(Pooled QC):混合所有样本等量制备,穿插在序列中
  • 作用:监控仪器漂移、评估数据质量、用于批次校正
  • QC-RSD过滤:QC样本中RSD(相对标准差)>30%的特征通常剔除

实战代码

# === 代谢组学数据预处理 Python 示例 ===
import pandas as pd
import numpy as np
from sklearn.impute import KNNImputer

# 读取代谢组学数据矩阵(行=样本,列=代谢物特征)
df = pd.read_csv("metabolomics_data.csv", index_col=0)

# 1. 过滤缺失率>50%的特征
threshold = 0.5  # 缺失率阈值
missing_rate = df.isnull().sum() / len(df)  # 计算每列缺失率
df_filtered = df.loc[:, missing_rate < threshold]  # 保留缺失率<50%的列
print(f"过滤前特征数: {df.shape[1]}, 过滤后: {df_filtered.shape[1]}")

# 2. KNN填补缺失值(k=5个最近邻)
imputer = KNNImputer(n_neighbors=5)  # 创建KNN填补器
df_imputed = pd.DataFrame(
    imputer.fit_transform(df_filtered),  # 执行填补
    columns=df_filtered.columns,
    index=df_filtered.index
)

# 3. 对数变换(log2)
df_log = np.log2(df_imputed + 1)  # +1避免log(0),用log2便于理解倍数变化

# 4. Pareto缩放
mean_vals = df_log.mean()  # 每列均值
std_vals = df_log.std()  # 每列标准差
df_pareto = (df_log - mean_vals) / np.sqrt(std_vals)  # Pareto缩放公式

# 5. QC样本RSD过滤
qc_samples = df_pareto.loc[df_pareto.index.str.contains("QC")]  # 提取QC样本
rsd = qc_samples.std() / qc_samples.mean() * 100  # 计算RSD百分比
df_final = df_pareto.loc[:, rsd < 30]  # 保留RSD<30%的特征
print(f"QC-RSD过滤后特征数: {df_final.shape[1]}")

面试常问点

Q1: 为什么代谢组学数据需要归一化?

参考答案:因为不同样本的总代谢物浓度、进样量、仪器响应可能不同。比如一个样本进样多一点,所有峰面积都会偏大,但这不代表代谢物真的多。归一化就是消除这种"不公平因素",让我们比的是真正的生物学差异,而不是技术噪音。

Q2: Auto-scaling和Pareto缩放怎么选?

参考答案:Auto-scaling(标准化)会让所有代谢物权重一样,适合探索性分析;但它会放大低丰度噪音特征的影响。Pareto缩放是折中方案,既减少高丰度特征的主导效应,又不会过度放大噪音。一般做PCA/PLS-DA时推荐先试Pareto,如果效果不好再换Auto-scaling。

Q3: QC样本的RSD阈值为什么是30%?

参考答案:30%是代谢组学领域的经验共识。RSD>30%说明这个特征在重复测量中波动太大,可能是噪音信号而非真实代谢物。有些严格的研究会用20%作为阈值。不过这个数字不是绝对的,要结合实验具体情况判断。


速查卡片

问题一句话答案
TIC归一化原理?每个峰面积除以该样本所有峰面积之和
PQN归一化优势?对异常值和极端代谢物不敏感,比TIC更稳健
为什么要做对数变换?压缩数据范围,让数据分布更接近正态,便于后续统计分析
缺失值填补首选方法?KNN填补或missForest(随机森林),比简单用最小值填补更准确
QC样本建议插入频率?每5-10个样本插入1个QC样本
Pareto vs Auto-scaling?Pareto保留部分原始差异,Auto-scaling让所有特征等权重