代谢组学数据预处理与归一化¶
一句话说明¶
代谢组学数据预处理就是把质谱仪吐出来的"乱七八糟的信号"清洗干净、对齐整齐,让不同样本之间可以公平比较——就像考试改卷前先统一评分标准。
核心知识点¶
要点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让所有特征等权重 |