Kaggle生物信息学挑战:酶稳定性预测大赛

背景介绍

  • 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。
  • 预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。

概念解释 

X 残基:假设 它用 红色表示 , Y 残基:假设它用 蓝色表示 , Z 残基:假设它用 紫色表示 
  1. 突变前的角度 θ

    • 在突变发生之前,红色的 X 残基 位于中心,蓝色的 Y 残基紫色的 Z 残基 分别位于它的两侧。它们之间形成了一个特定的角度 θ
    • 这个角度 θ 表示的是 YZ 残基通过中心残基 X 的空间几何关系。这个角度可能与蛋白质的功能(如活性位点的构象)密切相关。
  2. 突变后的角度 θ'

    • 红色的 X 残基 发生突变时(例如从一种氨基酸变为另一种氨基酸),它的侧链结构或电荷特性发生变化,导致其在三维空间中的位置发生移动。
    • X 残基 的移动可能会牵拉或推动相邻的 蓝色 Y 残基紫色 Z 残基,导致它们之间的角度发生变化。新的角度用 θ' 表示。
    • 突变后的角度 θ' 可能与原先的角度 θ 不同,这种变化可能会影响蛋白质的整体结构和功能。

数据解释

  • train.csv和train_updates_20220929.csv: 训练数据集,包含已知序列及其稳定性(熔点tm)的数据。模型可以从中学习序列与稳定性之间的关系。

  • test.csv: 测试数据集,包含目标酶(GenBank: KOC15878.1)的2,413个单点突变体的序列。参赛者需要预测这些突变体的tm值。

  • sample_submission.csv: 预测结果提交的格式示例文件。

  • wildtype_structure_prediction_af2.pdb: 目标酶的野生型三维结构,由AlphaFold2预测得到。这为基于结构的特征提取和建模提供了重要先验信息

test.more.csv

这个数据中包含了对某个蛋白质序列(protein_sequence)进行突变(mutation)后的稳定性预测信息。解释下各列的具体含义:

  1. seq_id: 突变的唯一编号,可能是为了区分不同的突变而设置的流水号。

  2. protein_sequence: 完整的蛋白质氨基酸序列。

  3. pH: 进行稳定性预测时设定的pH值,这里为8。蛋白质的稳定性会受pH影响。

  4. location: 发生突变的位点,即突变前的氨基酸在序列中的位置。

  5. wild_type: 突变前的野生型氨基酸。

  6. mutation: 突变后的氨基酸。如果该列为空,表示是一个deletion突变,即缺失突变。

  7. mutation_type: 突变的类型,这里有substitution(替换突变)和deletion(缺失突变)两种。

因此这个数据详细记录了在某pH值下,蛋白质序列中的特定位点发生特定突变后,对其稳定性产生的影响。这种计算突变对蛋白质稳定性影响的方法,可用于指导蛋白质工程和定向进化实验,筛选出稳定性更高的蛋白质突变体。

wildtype_structure_prediction_af2.deepddg.ddg

这个数据展示了蛋白质的一个位点(ResID为1,野生型氨基酸为V)发生不同突变后,对蛋白质稳定性的影响。详细解释:

  1. chain: 表示这些突变发生在蛋白质的A链上。蛋白质可能由多条肽链组成,用不同字母区分。

  2. WT: 表示Wild Type,即野生型氨基酸,这里为V(Valine,缬氨酸)。

  3. ResID: 表示Residue ID,即残基编号,这里为1,表示突变发生在肽链的第一个氨基酸上。

  4. Mut: 表示Mutant,即突变后的氨基酸。这里列出了除V以外的19种氨基酸,分别用它们的单字母代码表示。

  5. ddG (kcal/mol): 表示每个突变对蛋白质稳定性的影响,单位为kcal/mol。

    • ddG > 0表示突变后蛋白质变得更稳定
    • ddG < 0表示突变后蛋白质变得更不稳定

从数据可以看出,所有可能的单点突变(即V突变为其他19种氨基酸)都会降低蛋白质的稳定性(ddG都为负值)。

方案一

DeepDDG方法简介

  • DeepDDG是一个用于预测蛋白质点突变引起的稳定性变化(ΔΔG值)的深度学习方法。
  • 它基于蛋白质的三维结构,提取突变位点及其周围残基的结构特征和进化特征,用神经网络建模并预测突变引起的ΔΔG值。
  • 提取的特征包括:二面角(φ,ψ,ω)、溶剂可及表面积(SASA)、二级结构(onehot编码)、氢键数量、残基间Ca-Ca距离、残基间取向(Ca-Ca,Ca-C,Ca-N的单位向量)、位置特异性打分矩阵(PSSM)、多序列比对位点出现频率(PFS)、深度突变扫描(DMS)等。
  • DeepDDG利用了蛋白质数据库中大量已有的实验测定的ΔΔG数据进行训练。训练数据集中包含了与待预测蛋白质同源性较高的一些蛋白质。

测试集新增列

  • 每个突变体的 edit 数量(除了一个完全匹配野生型序列的)
  • 点突变的类型:插入(insertion)、缺失(deletion)或替换(substitution)
  • 突变发生在野生型序列中的位置索引
  • 野生型该位置的氨基酸残基
  • 突变体中插入或替换的氨基酸残基(如有)
import Levenshtein
def get_mutation_info(_row, _wildtype="VPVNPEPDATSVENVALKTGSGDSQSDPIKADLEVKGQSALPFDVDCWAILCKGAPNVLQ" \
                                      "RVNEKTKNSNRDRSGANKGPFKDPQKWGIKALPPKNPSWSAQDFKSPEEYAFASSLQGGT" \
                                      "NAILAPVNLASQNSQGGVLNGFYSANKVAQFDPSKPQQTKGTWFQITKFTGAAGPYCKAL" \
                                      "GSNDKSVCDKNKNIAGDWGFDPAKWAYQYDEKNNKFNYVGK"):
    terminology_map = {"replace":"substitution", "insert":"insertion", "delete":"deletion"}
    req_edits = Levenshtein.editops(_wildtype, _row["protein_sequence"])
    _row["n_edits"] = len(req_edits)  # 计算突变数量

    if _row["n_edits"]==0:  # 如果没有突变,则其他突变信息为空
        _row["edit_type"] = _row["edit_idx"] = _row["wildtype_aa"] = _row["mutant_aa"] = pd.NA
    else:
        _row["edit_type"] = terminology_map[req_edits[0][0]]  # 获取突变类型
        _row["edit_idx"] = req_edits[0][1]  # 获取突变位置索引
        _row["wildtype_aa"] = _wildtype[_row["edit_idx"]]  # 获取野生型氨基酸
        _row["mutant_aa"] = _row["protein_sequence"][req_edits[0][2]] if _row["edit_type"]!="deletion" else pd.NA  # 获取突变型氨基酸
    return _row

def revert_to_wildtype(protein_sequence, edit_type, edit_idx, wildtype_aa, mutant_aa):
    if pd.isna(edit_type):
        return protein_sequence
    elif edit_type!="insertion":
        new_wildtype_base = protein_sequence[:edit_idx]
        if edit_type=="deletion":
            new_wildtype=new_wildtype_base+wildtype_aa+protein_sequence[edit_idx:]
        else:
            new_wildtype=new_wildtype_base+wildtype_aa+protein_sequence[edit_idx+1:]
    else:
        new_wildtype=protein_sequence[:edit_idx]+wildtype_aa+protein_sequence[edit_idx:]
    return new_wildtype

test_df = test_df.progress_apply(get_mutation_info, axis=1)  # 对测试集逐行进行突变信息提取
test_df[["protein_sequence", "edit_type", "edit_idx", "wildtype_aa", "mutant_aa"]]

在原有 test_df 的基础上增加了一些新的列,包括:

  • n_edits: 突变的数量
  • edit_type: 突变的类型(substitution, insertion, deletion)
  • edit_idx: 突变发生的位置索引
  • wildtype_aa: 突变位置的野生型氨基酸
  • mutant_aa: 突变后的氨基酸(如果是deletion则为空)

DeepDDG服务器预测ΔΔG

DeepDDG服务器预测单点突变引起的折叠自由能变化(ΔΔG)具体步骤为:

  • 使用 AlphaFold2 预测野生型酶的3D结构
  • 将野生型结构文件提交到 DeepDDG 服务器
  • 服务器预测每个可能的突变位点的 ΔΔG 值
  • 将预测结果与测试集突变数据匹配,得到每个突变体的预测 ΔΔG
import pandas as pd
import numpy as np

#helper function
def read_list_from_file(list_file):
    with open(list_file) as f:
        lines  = f.readlines()
    return lines

#读取DeepDDG预测结果
ddg = read_list_from_file('../input/submit-novozymes-00/wildtype_structure_prediction_af2.deepddg.ddg.txt')

header = ddg[0]
data = [s.split() for s in ddg[1:]]

df = pd.DataFrame(data, columns = ['chain', 'WT', 'ResID', 'Mut', 'ddG'])
df.ddG = df.ddG.astype(np.float32)
df.ResID = df.ResID.astype(int)  
df.loc[:,'location'] = df.ResID -1  #change to 0-indexing

#读取测试集突变信息
test_df = pd.read_csv('../input/submit-novozymes-00/test.more.csv')
test_df.location = test_df.location.fillna(-1)
test_df.location = test_df.location.astype(int)

#生成提交文件 
if 1:
    df.loc[:,'mut_string'] = df.WT+df.location.astype(str)+df.Mut
    test_df.loc[:,'mut_string'] =  test_df.wild_type+test_df.location.astype(str)+test_df.mutation
    
    test_df = test_df.merge(df[['ddG','mut_string']], on='mut_string',how='left')  # 将预测的ddG值与测试集突变信息匹配
    submit_df = pd.DataFrame({
        'seq_id': test_df.seq_id.values,
        'tm': test_df.ddG.values,  # 直接使用ddG作为Tm预测值
    })
    submit_df.tm = submit_df.tm.fillna(0)
    submit_df.to_csv('deepddg-ddg.csv', index=False) #lb0.335
    print(submit_df)
  
print('submit_df ok!')

问题思考

  • DeepDDG 的训练数据中是否包含与测试酶相似的蛋白?
  • ΔΔG 与目标值 ΔTm 之间有何关联?
  • AlphaFold2 预测的结构特征对本次比赛的作用如何?
  • DeepDDG 的网络结构是怎样的?

方案二

特征工程

1.使用突变残基周围21个残基的三维坐标信息构建结构特征,包括相对距离、夹角。

 受这篇论文[1]的启发,我选择了离突变残基最近的21个残基来构建结构特征

2.利用B-factor、BLOSUM矩阵、DeMaSk、SASA等已有特征。

3.使用Facebook预训练的蛋白质transformer ESM提取序列嵌入特征。

4.使用PCA对嵌入特征进行降维。

构建三个XGB模型

1.XGB1:使用1800+行的训练集,特征包括ESM提取特征、B_factor、相对距离等。

2.XGB2:使用来自30个同源、相同pH组的986个突变的训练集,特征与XGB1相同。

3.XGB3:使用外部数据集中6000多行不稳定突变样本,仅使用结构特征。

集成多个公共模型

1.NESP 3D geometry:使用突变残基与蛋白质中心之间的距离作为特征。

2.FoldX:利用FoldX软件计算ddG值。

3.ThermoNet v2:使用体素化的3D结构特征和辅助的dTm目标训练CNN模型。

4.Relaxed rosetta scores:使用Rosetta软件计算relax结构的能量分数。

5.RMSD:根据分子动力学模拟轨迹计算每个残基的RMSD。

6.Different pLDDT:计算突变型与野生型的pLDDT差异。

XGB模型和公共模型进行加权集成

构建三个XGBoost模型的策略允许利用不同的数据集和特征,从多个角度学习蛋白质稳定性与突变之间的关系,并通过集成学习提高最终预测的鲁棒性和准确性。这种方法在处理复杂的生物学问题时非常有效。

相关知识

Lesson1:酶预测大赛1_蛋白质tm值-CSDN博客

kaggle酶稳定性预测第三名解决方案分享_侧链表面积与每个残基的无规卷曲值的比例 溶剂暴露-CSDN博客

残基接触图_残基接触图分析-CSDN博客

[lb0.335] DeepDGG server benchmark | Kaggle (方案一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT 应用开发实战:十一、知乎日报项目接口使用指南

在本篇博文中&#xff0c;我们将带您完成一个简单的知乎日报项目&#xff0c;主要关注如何使用 h_request库与后端接口进行交互。我们将快速搭建起项目&#xff0c;并利用该库的优势提高开发效率。 选择 h_request 的理由 在进行 HarmonyOS 开发时&#xff0c;原始的 ohos.net…

STM32——串口

1、串口是什么 串口呢&#xff0c;作为硬件调试的时候&#xff0c;是很有用的&#xff0c;我觉得搞嵌入式是经常和串口打交道的 串口&#xff08;Serial Port&#xff09;是一种用于计算机和外部设备之间进行数据通信的接口。它通过串行通信方式传输数据&#xff0c;即一次只…

sparkSQL的UDF,最常用的regeister方式自定义函数和udf注册方式定义UDF函数 (详细讲解)

- UDF&#xff1a;一对一的函数【User Defined Functions】 - substr、split、concat、instr、length、from_unixtime - UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 - count、sum、max、min、avg、collect_set/list - UDTF&#xff1a;…

水库大坝安全监测预警方法

一、监测目标 为了确保水库大坝的结构安全性和运行稳定性&#xff0c;我们需要采取一系列措施来预防和减少因自然灾害或其他潜在因素所引发的灾害损失。这不仅有助于保障广大人民群众的生命财产安全&#xff0c;还能确保水资源的合理利用和可持续发展。通过加强大坝的监测和维护…

Java:网络原理-TCP/IP

1.应用层 主要涉及两种情况: (1)使用大佬们已经创建好的应用层协议. (2)自己定义应用层协议. [1]明确前后端交互过程中,需要传递哪些信息. 比如开发一个外卖软件,展示"商家列表" 此处就需要先确定传递的信息是啥. a.请求:用户id; 用户所处的位置 b.响应:商家…

C++类的多重继承演示

一个派生类可以继承多个基类 以下代码演示派生类zzj继承两个基类people、student #include <iostream>using namespace std;class people { private:int m_age; public:people(int age);void print();~people(); };people::people(int age) {cout << "peopl…

信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)

1 概述 1.1 项目简介 1.2 测评依据 2 被测信息系统情况 2.1 定级情况 2.2 承载的业务情况 2.3 网络结构 2.4 被测对象资产 2.5 上次测评问题整改情况说明 3 测评范围与方法 3.1 测评指标 3.1.1 安全通用要求指标 3.1.2 安全扩展要求指标 3.1.3 其他安全要求指标 3.1.4 不适用安…

vue3学习---案例实现学习

目录 一&#xff0c;京东秒杀导航栏 1&#xff0c;静态样式展示 2&#xff0c;设计步骤 1&#xff0c;html骨架 2&#xff0c;css样式设计 3&#xff0c;vue3动态样式设计 1&#xff0c;v-for使用 1&#xff0c;先在js模块做如下准备 2&#xff0c;v-for遍历 2&#xff…

架构师:如何提高web网站的请求并发响应量?

文章目录 一、提出问题二、相关概念三、如何提高网站请求响应能力&#xff1f;四、负载均衡有那些方式&#xff1f;五、常用微服务架构图及推荐书籍 一、提出问题 今天&#xff0c;突然想到一个问题&#xff0c;双十一&#xff0c;那些电商网站的并发量是多大&#xff1f; 简…

中酱:健康生活的先行者

中酱&#xff1a;健康生活的先行者 在追求品质生活的道路上&#xff0c;健康是永恒的主题。每一个关乎健康的选择&#xff0c;都像是为生活点亮一盏明灯&#xff0c;指引我们走向更美好的生活。而在饮食这个与健康息息相关的领域&#xff0c;调味品的选择至关重要。中酱 —— 作…

使用CentOS宝塔面板docker搭建EasyTier内网穿透服务

0. 前言 EasyTier是一个简单、安全、去中心化的内网穿透 VPN 组网方案&#xff0c;部署方便&#xff0c;支持 MacOS/Linux/Windows/FreeBSD/Android平台&#xff0c;而且作者搭建了一个公共服务器&#xff0c;不想折腾自建服务&#xff0c;可以使用默认的公共服务器地址 tcp:/…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到&#xff0c;生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换&#xff0c;全行业或将迎来一次全新的科技变革周期&#xff0c;可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后&#xff0c;如何真正落…

计算机毕业设计Python+图神经网络手机推荐系统 手机价格预测 手机可视化 手机数据分析 手机爬虫 Django Flask Spark 知识图谱

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【C语言】分支和循环详解(下)猜数字游戏

与诸君共进步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 1. 随机数的生成2. 猜数字小游戏的实现 1. 随机数的生成 掌握了前⾯学习的这些知识&#xff0c;我们就可以写⼀些稍微有趣的代码了&#xff0c;⽐如&#xff1a; 写⼀个猜数字游戏 游戏要求…

iOS灵动岛动画小组件怎么播放动画

这个灵动岛相关的展示位置分几个地方&#xff1a; 紧凑型&#xff0c;最小化&#xff0c;扩展型&#xff0c;还有锁屏位置 我们先来看一下我这边实现的动画效果 demo下载&#xff1a; iOS灵动岛GIF动画 灵动岛样式 灵动岛有三种渲染模式&#xff1a; 第一种是 紧凑型&…

西门子KTP系列HMI用户自定义弹窗-多弹窗共用

接上一个文章内容《西门子KTP系列HMI用户自定义弹窗》西门子KTP系列HMI用户自定义弹窗-CSDN博客 当我需要别的操作并且需要弹窗时&#xff0c;整个弹窗的内容和变量都需要重复重新绑定&#xff1b;如下图所示&#xff1a; 由上图可看出当前的自定义弹窗有以下缺点&#xff1a; …

Unity使用Spine导致设备发烫

spine制作过程中&#xff0c;美术同学使用裁剪技术 将一个特效文件做固定范围显示&#xff0c;实际上非常消耗CPU算力。 解决办法&#xff1a; 交给程序来实现裁剪&#xff0c;只要加Mask组件即可

您与此网站之间建立的连接不安全解决方法

如果你打开网站&#xff0c;地址栏有警告&#xff0c;点进去是这样的提示&#xff1a;您与此网站之间建立的连接不安全&#xff0c;了解详细信息。 请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。 …

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

R7:糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、实验目的&#xff1a; 探索本案例是否还有进一步优化的空间 二、实验环境&#xff1a; 语言环境&#xff1a;python 3.8编译器&#xff1a;Jupyter notebo…