Advertisement

【生物信息学】PyTorch 环境下的基因富集分析

阅读量:

在 PyTorch 环境中实现 基因富集分析(Gene Enrichment Analysis, GEA) ,可以结合深度学习的优势,实现更灵活的分析流程,例如基因表达数据的降维、聚类、富集预测等。

1. 环境准备

在开始基因富集分析前,您需要配置适当的环境:

复制代码
 pip install torch torchvision torchaudio pandas numpy scipy matplotlib seaborn

    
 pip install gseapy # GSEA 工具包,用于基因富集分析
    
    
    
    
2. 数据准备
  • 输入数据格式
    • RNA-Seq 或微阵列数据,通常以矩阵形式表示:行代表基因,列代表样本。
    • 每个基因的表达值可用于排序(GSEA)或显著性筛选(ORA)。

示例加载数据:

复制代码
 import pandas as pd

    
  
    
 # 假设输入数据为差异表达分析结果
    
 diff_expr_data = pd.read_csv('diff_expr_results.csv')  # 包含基因名、log2FC、p-value 等
    
 gene_list = diff_expr_data['Gene Name'].tolist()  # 基因名称列表
    
    
    
    

以下是一个简单的模拟基因表达分析结果数据集,可以作为测试数据使用。这个数据集包含基因名称、对数2倍数变化(log2FC)和P值等列。

示例数据集内容(diff_expr_results.csv

Gene Name log2FC P-value
Gene1 2.5 0.0001
Gene2 -1.8 0.003
Gene3 0.5 0.02
Gene4 -2.1 0.00005
Gene5 1.3 0.04

如何生成这个文件

可以使用以下代码生成一个 diff_expr_results.csv 文件:

复制代码
 import pandas as pd

    
  
    
 # 构建模拟数据
    
 data = {
    
     "Gene Name": ["Gene1", "Gene2", "Gene3", "Gene4", "Gene5"],
    
     "log2FC": [2.5, -1.8, 0.5, -2.1, 1.3],
    
     "P-value": [0.0001, 0.003, 0.02, 0.00005, 0.04]
    
 }
    
  
    
 # 创建 DataFrame
    
 df = pd.DataFrame(data)
    
  
    
 # 保存为 CSV 文件
    
 df.to_csv("diff_expr_results.csv", index=False)
    
  
    
 print("文件已生成:diff_expr_results.csv")
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/irfzvJGqlcQ4xOgM0moTWSy2ZP3a.png)

生成文件后的操作

  1. 上述代码后,文件 diff_expr_results.csv 会保存到当前脚本的工作目录中。
  2. 确保新生成的文件与代码的环境路径一致,或根据需要调整路径。

3. 基于 PyTorch 的数据预处理
  • 数据标准化 : 基因表达数据通常需要标准化,以便适应深度学习模型。
复制代码
 import torch

    
  
    
 # 转换为张量并归一化
    
 expression_data = torch.tensor(diff_expr_data['log2FC'].values, dtype=torch.float32)
    
 normalized_data = (expression_data - torch.mean(expression_data)) / torch.std(expression_data)
    
    
    
    
  • 构建基因排序 : 根据基因的 log2FC 对基因进行排序,这是 GSEA 分析的基础。
复制代码
    sorted_genes = [gene for _, gene in sorted(zip(normalized_data.tolist(), gene_list), reverse=True)]
    
    

4. 深度学习应用

在 PyTorch 中,可以使用神经网络方法增强传统基因富集分析,例如预测功能注释或构建新的基因集间关系。

4.1 降维分析

使用自编码器对高维基因表达数据进行降维,以捕获主要特征。

复制代码
 import torch.nn as nn

    
  
    
 # 定义自编码器结构
    
 class Autoencoder(nn.Module):
    
     def __init__(self, input_dim, latent_dim):
    
     super(Autoencoder, self).__init__()
    
     self.encoder = nn.Sequential(
    
         nn.Linear(input_dim, 128),
    
         nn.ReLU(),
    
         nn.Linear(128, latent_dim)
    
     )
    
     self.decoder = nn.Sequential(
    
         nn.Linear(latent_dim, 128),
    
         nn.ReLU(),
    
         nn.Linear(128, input_dim)
    
     )
    
  
    
     def forward(self, x):
    
     latent = self.encoder(x)
    
     reconstructed = self.decoder(latent)
    
     return latent, reconstructed
    
  
    
 # 模型初始化
    
 input_dim = len(diff_expr_data)  # 基因数量
    
 latent_dim = 10  # 降维目标维度
    
 model = Autoencoder(input_dim, latent_dim)
    
  
    
 # 生成潜在空间数据
    
 data_tensor = normalized_data.unsqueeze(0)  # 添加批次维度
    
 latent_space, reconstructed_data = model(data_tensor)
    
  
    
 # 将潜在空间转换为 NumPy 数组
    
 latent_space_np = latent_space.detach().numpy()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/afVeP0qtDrsmACRYnUJdBWXZMGuo.png)
4.2 富集特征预测

通过深度学习模型预测基因集富集特征,例如特定条件下的功能活动。

复制代码
 # 定义简单的预测网络

    
 class EnrichmentPredictor(nn.Module):
    
     def __init__(self, input_dim, output_dim):
    
     super(EnrichmentPredictor, self).__init__()
    
     self.network = nn.Sequential(
    
         nn.Linear(input_dim, 128),
    
         nn.ReLU(),
    
         nn.Linear(128, output_dim)
    
     )
    
  
    
     def forward(self, x):
    
     return self.network(x)
    
  
    
 # 初始化预测模型
    
 output_dim = 5  # 目标富集类别数
    
 predictor = EnrichmentPredictor(latent_dim, output_dim)
    
  
    
 # 生成预测分布
    
 predicted_output = predictor(latent_space)
    
 predicted_output_np = predicted_output.squeeze().detach().numpy()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/8UJoDiMEkBZXbCO20gqaF4WTjxPh.png)

在上述代码中,我们已经定义了一个自编码器和一个预测网络,用于基因富集分析。为了可视化分析结果,可以采用以下方法:


富集结果可视化
复制代码
 import matplotlib.pyplot as plt

    
 # 富集结果柱状图
    
 categories = [f"Category {i+1}" for i in range(output_dim)]
    
 plt.bar(categories, predicted_output_np, color='green', alpha=0.7)
    
 plt.xlabel("Enrichment Categories")
    
 plt.ylabel("Predicted Scores")
    
 plt.title("Predicted Enrichment Scores for Categories")
    
 plt.show()
    
    
    
    

5. 基因富集分析
5.1 基于排序的 GSEA 分析

使用 GSEAPy 工具直接 GSEA 分析,并将其整合到 PyTorch 中。(要用真实的基因数据或者按照规则生成的测试数据)

复制代码
 from gseapy import prerank

    
  
    
 # 保存排序好的基因列表
    
 with open('sorted_genes.rnk', 'w') as f:
    
     for gene, score in zip(sorted_genes, normalized_data.tolist()):
    
     f.write(f"{gene}\t{score}\n")
    
  
    
 # 使用 GSEAPy  GSEA
    
 prerank_res = prerank(
    
     rnk='sorted_genes.rnk',
    
     gene_sets='KEGG_2019_Human',  # 可选:GO_BP、Reactome 等
    
     outdir='gsea_results',
    
     permutation_num=1000
    
 )
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/Q0IG3mcbOeHD4XCv8dZgwfzujniP.png)
5.2 富集结果可视化

PyTorch 结合 Matplotlib 绘制 GSEA 结果。

复制代码
 import matplotlib.pyplot as plt

    
  
    
 # 加载富集结果
    
 enrichment_score = prerank_res.res2d['nes'].values  # 富集评分
    
 p_values = prerank_res.res2d['pval'].values
    
  
    
 # 绘制富集条形图
    
 plt.barh(prerank_res.res2d.index, enrichment_score, color='skyblue', alpha=0.8)
    
 plt.xlabel('Normalized Enrichment Score (NES)')
    
 plt.title('GSEA Results')
    
 plt.show()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/DNshugp7CGozW9Kv60iXMQwardfA.png)

6. 优化与扩展
  • 多任务学习 :同时预测多个功能注释类别。
  • 多组学整合 :结合转录组、蛋白质组数据进行分析。
  • 自定义损失函数 :引入基于生物学知识的正则化项。

7. 总结

在 PyTorch 中实现基因富集分析,不仅可以复用深度学习的强大功能,还能增强传统分析方法的灵活性和扩展性。通过引入神经网络、自编码器等模型,研究者可以:

  • 降维高维组学数据;
  • 预测新的功能注释关系;
  • 提高富集分析的鲁棒性。

PyTorch 环境为基因富集分析提供了更多的可能性,有助于深入挖掘基因组数据背后的生物学意义。

全部评论 (0)

还没有任何评论哟~