跳转至

406_放射组学Radiomics与基因组关联


一句话说明

放射组学就是从CT/MRI医学影像中提取海量定量特征,再与基因组数据关联,实现"看图知基因"。


核心知识点

放射组学特征分类

类别特征例子含义
形态特征肿瘤体积、球形度肿瘤的形状
强度特征均值、偏度、峰度像素值分布
纹理特征GLCM、GLRLM像素空间关系
小波特征高频/低频分解多尺度纹理

与基因组关联的意义

  • 无创基因型预测:通过影像预测EGFR/KRAS突变状态
  • 影像基因组学:找与放射组学特征关联的基因变异(QTL思想)
  • 治疗响应预测:结合影像特征和基因表达预测药物疗效

分析流程

  1. 医学影像 → 分割感兴趣区域(ROI)
  2. ROI → 提取放射组学特征(PyRadiomics)
  3. 放射组学特征 → 与基因组数据关联(相关分析/回归)
  4. 构建影像基因组学模型

实战代码

# ========== 放射组学特征提取与基因组关联示例 ==========
import numpy as np
import pandas as pd
from scipy import stats
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# ========== 1. 模拟放射组学特征 ==========
np.random.seed(42)
n_patients = 100  # 患者数
n_radiomic_features = 200  # 放射组学特征数(实际可达1000+)

# 生成放射组学特征矩阵(患者 x 特征)
radiomic_features = pd.DataFrame(
    np.random.randn(n_patients, n_radiomic_features),
    columns=[f"Radiomic_{i}" for i in range(n_radiomic_features)]
)

# ========== 2. 模拟基因组数据 ==========
n_genes = 500  # 基因数

# 基因表达数据(患者 x 基因)
gene_expression = pd.DataFrame(
    np.random.lognormal(3, 1, size=(n_patients, n_genes)),
    columns=[f"Gene_{i}" for i in range(n_genes)]
)

# 模拟EGFR突变状态(二分类)
egfr_status = pd.Series(
    np.random.binomial(1, 0.3, n_patients),  # 30%突变率
    name="EGFR_mutation"
)

# ========== 3. 放射组学特征提取(PyRadiomics示例框架) ==========
# 实际使用时需要安装:pip install pyradiomics
# import radiomics
# from radiomics import featureextractor

# 这里演示特征提取后的处理流程
# 真实代码:
# extractor = radiomics.featureextractor.RadiomicsFeatureExtractor()
# result = extractor.execute(image_path, mask_path)  # 输入影像和分割掩码

# ========== 4. 特征选择(去除高度相关特征) ==========
# 计算特征间相关系数矩阵
corr_matrix = radiomic_features.corr().abs()  # 取绝对值

# 找出相关系数>0.9的特征对(高度冗余)
upper_tri = corr_matrix.where(
    np.triu(np.ones(corr_matrix.shape), k=1).astype(bool)  # 只看上三角
)
highly_correlated = [
    col for col in upper_tri.columns 
    if any(upper_tri[col] > 0.9)  # 与任何特征相关系数>0.9
]
print(f"高度相关特征数(待删除): {len(highly_correlated)}")

# 删除冗余特征
radiomic_filtered = radiomic_features.drop(columns=highly_correlated)
print(f"过滤后特征数: {radiomic_filtered.shape[1]}")

# ========== 5. 放射组学特征与EGFR突变关联 ==========
# 对每个放射组学特征做Mann-Whitney U检验(比较突变vs野生型)
association_results = []

for feature in radiomic_filtered.columns:
    mutant_values = radiomic_filtered[feature][egfr_status == 1]    # EGFR突变患者
    wildtype_values = radiomic_filtered[feature][egfr_status == 0]  # 野生型患者

    # Mann-Whitney U检验(不假设正态分布)
    u_stat, p_value = stats.mannwhitneyu(
        mutant_values, wildtype_values, alternative="two-sided"
    )

    # 计算效应量(AUC = U/(n1*n2),AUC>0.7表示较强区分能力)
    auc = u_stat / (len(mutant_values) * len(wildtype_values))
    auc = max(auc, 1 - auc)  # 确保AUC>0.5

    association_results.append({
        "feature": feature,
        "p_value": p_value,
        "AUC": auc
    })

assoc_df = pd.DataFrame(association_results)

# FDR校正
from scipy.stats import rankdata
p_vals = assoc_df["p_value"].values
ranks = rankdata(p_vals)
fdr = np.minimum(p_vals * len(p_vals) / ranks, 1.0)
assoc_df["FDR"] = fdr

# 筛选显著关联特征
sig_features = assoc_df[(assoc_df["FDR"] < 0.05) & (assoc_df["AUC"] > 0.65)]
print(f"\n与EGFR突变显著关联的放射组学特征数: {len(sig_features)}")

# ========== 6. 构建预测模型 ==========
from sklearn.linear_model import LogisticRegressionCV
from sklearn.model_selection import cross_val_score

# 用显著特征构建EGFR突变预测模型
if len(sig_features) > 0:
    X = radiomic_filtered[sig_features["feature"].tolist()].values
    y = egfr_status.values

    # 标准化
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # Lasso逻辑回归(自动特征选择)
    model = LogisticRegressionCV(
        cv=5,            # 5折交叉验证
        penalty="l1",   # Lasso正则化,自动选特征
        solver="liblinear",
        random_state=42
    )

    # 5折交叉验证评估AUC
    cv_scores = cross_val_score(model, X_scaled, y, cv=5, scoring="roc_auc")
    print(f"预测EGFR突变的AUC: {cv_scores.mean():.3f} ± {cv_scores.std():.3f}")

面试常问点

  1. Q: 放射组学特征提取的关键步骤? A: 图像预处理(去噪、重采样)→ 感兴趣区域分割(ROI)→ 特征提取(形态/强度/纹理)→ 特征选择→ 建模。

  2. Q: 放射组学研究中最常见的偏倚来源? A: 扫描仪差异(不同设备/参数)、分割者间差异(ROI勾画不一致)、过拟合(特征多样本少)。

  3. Q: 影像基因组学(Radiogenomics)和放射组学有什么区别? A: 放射组学侧重影像特征提取和预测建模;影像基因组学专指影像表型与基因变异(SNP/表达量)的关联分析。


速查表

工具功能
PyRadiomicsPython放射组学特征提取
SimpleITK医学影像处理
3D Slicer影像可视化与分割
IBEX放射组学分析平台
TCIA癌症影像数据库(公开数据集)