草庐IT

生信地基系列--PWM位置权重矩阵

可能性之兽 2023-09-21 原文

位置权重矩阵(PWM)又称位置特异性权重矩阵(position-specific weight matrix ,PSWM)或位置特异性评分矩阵(position-specific scoring matrix ,PSSM) ,是生物序列中常用的基序(motif)表示。

PWM 通常来源于一组被认为是功能相关的对齐序列,并且已经成为许多用于计算基序发现的软件工具的重要组成部分。

变换顺序如下
序列转换为位置频数矩阵(position frequency matrix),然后转换为位置概率矩阵(position probability matrix,PPM)———>将位置转移矩阵转换为位置权重矩阵

序列到位置概率矩阵的转换

PWM 对字母表的每个符号都有一行(DNA 序列中的核苷酸为 4 行,蛋白质序列中的氨基酸为 20 行),模式中的每个位置为一列。在构建 PWM 的第一步中,通过计算每个位置上每个核苷酸的出现次数来创建基本位置频数矩阵 (c position frequency matrix,PFM)。从 PFM 中,现在可以通过将每个位置的先前核苷酸计数除以序列数来创建位置概率矩阵 (PPM),从而对值进行归一化。形式上,给定长度为 l 的 N 个对齐序列的集合 X,计算 PPM M 的元素:

image.png

其中i 属于 (1,...,N) (1,...,N), j 属于 (1,...,l), k是字母表中的符号集,I(a=k)是一个指标函数,如果a=k,I(a=k)为1,否则为0。

例如,给定以下DNA序列。

例如,给定以下 DNA 序列:

image.png

image.png

PPMs和PWMs都假定图案中各位置之间的统计独立性,因为每个位置的概率都是独立于其他位置计算的。从上面的定义可以看出,一个特定位置的数值之和(也就是所有符号的总和)是1,因此每一列可以被视为一个独立的多项分布。这使得计算给定PPM的序列的概率变得很容易,只要将每个位置的相关概率相乘就可以了。例如,鉴于上述PPM M,可以计算序列S = GAGGTAAAC的概率。

image.png

在计算PPM时,如果基于小数据集,通常会应用伪计数(或拉普拉斯估计),以避免矩阵条目的值为0。[2] 这相当于将PPM的每一列乘以Dirichlet分布,并允许对新序列(即不属于原始数据集的序列)计算概率。在上面的例子中,如果没有伪计数,任何在第4位没有G或在第5位没有T的序列的概率都是0,不管其他位置如何。

位置概率矩阵到位置权重矩阵的转换

大多数情况下,PWM中的元素被计算为对数似然。也就是说,一个PPM的元素使用背景模型b进行转换,这样。

image.png

这公式描述了如何计算PWM(左)中的一个元素,M_{k,j},。最简单的背景模型假设每个字母在数据集中出现的频率相同。也就是说,字母表中所有符号的b_{k}=1/k(核苷酸为0.25,氨基酸为0.05)。将这一转换应用于上面的PPM M(没有添加假数),就可以得到。


image.png

矩阵中的 无穷 项清楚地表明了添加伪计数的优势,尤其是在使用小型数据集构建 M 时。背景模型不需要为每个符号具有相同的值:例如,当研究具有高GC 含量,C 和 G 的值可能会随着 A 和 T 值的相应降低而增加。

当使用对数似然计算 PWM 元素时,可以通过将 PWM 中每个位置的相关值相加(而不是相乘)来计算序列的分数。序列分数表明该序列与随机序列的不同程度。如果序列作为功能位点和随机位点的概率相同,则得分为 0。如果它更可能是一个功能站点而不是一个随机站点,则得分大于 0,如果它更可能是一个随机站点而不是功能站点,则得分小于 0。 [1]序列分数也可以在物理框架中解释为该序列的结合能。

有关生信地基系列--PWM位置权重矩阵的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  6. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  7. ruby - 下载位置 Selenium-webdriver Cucumber Chrome - 2

    我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1

  8. ruby - Heroku production.log 文件位置 - 2

    我想在heroku.com上查看我的应用程序日志的内容,所以我关注了thisexcellentadvice并拥有我所有的日志内容。但是我现在很想知道我的日志文件实际在哪里,因为“log/production.log”似乎是空的:C:\>herokuconsoleRubyconsoleforajpbrevx.heroku.com>>files=Dir.glob("*")=>["public","tmp","spec","Rakefile","doc","config.ru","app","config","lib","README","Gemfile.lock","vendor","sc

  9. ruby - 在 Ruby 中查找多个正则表达式匹配的模式和位置 - 2

    这应该是一个简单的问题,但我找不到任何相关信息。给定一个Ruby中的正则表达式,对于每个匹配项,我需要检索匹配的模式$1、$2,但我还需要匹配位置。我知道=~运算符为我提供了第一个匹配项的位置,而string.scan(/regex/)为我提供了所有匹配模式。如果可能,我需要在同一步骤中获得两个结果。 最佳答案 MatchDatastring.scan(regex)do$1#Patternatfirstposition$2#Patternatsecondposition$~.offset(1)#Startingandendingpo

  10. ruby-on-rails - 尝试打开 .gitignore 以在文本编辑器中对其进行编辑,但在 OS X Mountain Lion 上找不到文件位置 - 2

    我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位

随机推荐