关于数据挖掘:R语言用隐马尔可夫Profile-HMM模型进行生物序列分析和模拟可视化

69次阅读

共计 3894 个字符,预计需要花费 10 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=27258 

摘要

本文 开发和利用用于生物序列剖析的隐马尔可夫模型和 HMM。它蕴含多个和成对序列比对、模型构建和参数优化、文件导入 / 导出、实现条件序列概率的前向、后向和 Viterbi 算法、基于树的序列加权和序列模仿的性能。

介绍

隐马尔可夫模型 (HMM) 是计算生物学中许多最重要工作的根底,包含多序列比对、基因组正文以及越来越多的序列数据库搜寻。最后是为语音辨认算法开发的,因为计算能力的提高使得齐全概率分析代替启发式近似成为可能,因而它们在分子生物学畛域的利用急剧减少。

在这里,咱们展现了  用于在 R 环境中剖析暗藏马尔可夫模型

隐马尔可夫模型

隐马尔可夫模型是一个序列或一组序列的概率数据生成机制。它由 _状态_网络描述,其值特定于每个状态。这些状态由一组互连的 _转换概率_遍历,其中包含放弃在任何给定状态的概率以及转换到每个其余连贯状态的概率。

Durbin et al (1998) 第 3.2 章给出了一个简略 HMM 的例子。一个假想的赌场有两个骰子,一个偏心的,一个加权的。偏心骰子从字母表 {1, 2, 3, 4, 5, 6} 中以相等的概率收回(每个 1/6)。加权骰子掷出“6”的概率为 0.5,而其余 5 个的概率为 0.1。如果庄家有偏心骰子,他可能会在每次掷骰后以 0.05 的概率偷偷切换到装好的骰子,留下 95% 的机会保留偏心骰子。或者,如果他有加权的骰子,他将以 0.1 的概率切换回偏心骰子,或者更有可能以 0.9 的概率保留加权骰子。

这个例子能够用一个简略的两态隐马尔可夫模型来示意。以下代码手动构建和绘制“HMM”对象。

### 定义转移概率矩阵 A

diamnsames(A) <- lidst(from = sdtatases, to = statddes)

### 定义概率矩阵 E

dimnsdamesas(E) <- aslist(sdtateass = stasdates\[-1\])

### 创立 HMM 对象

 图 1:不诚实赌场示例的简略隐马尔可夫模型。 plot.HMM 办法将转换概率形容为加权线。在这个例子中没有模仿开始 / 完结状态。

对于一系列察看到的掷骰,咱们能够应用维特比算法建设最可能的暗藏状态序列(包含最有可能产生骰子切换的工夫)。在 Durbin 等人 (1998) 第 3.2 章给出的示例中,察看到的 300 次滚动的序列为:

一些可察看到的 6 簇表明加载的骰子在某个阶段呈现了,然而骰子切换是什么时候产生的呢?在上面的代码中,Viterbi 算法用于在给定模型的状况下找到最可能的暗藏状态序列。

 c("Fd", "La")\[mastch(namdes(casasinao), c("Fsair", "Loasadded"))\]

### 找到预测门路

viat1 <- Vitedsbi(xasd)

预测 <- c("Fa", "aL")\[vist1$dpaath + 1\]

### 留神输入维特比对象的门路元素是一个整数向量

将预测门路与理论暗藏序列进行比拟,Viterbi 算法并不边远:

咱们还能够应用 forward 和 / 或 backward 算法计算给定模型的序列的残缺概率和后验概率:

casasino.dspost <asd- posterassdior(xa, asdcasino)

plot(1:300, saseq(0, 1, lasdength.ouast = 300)

 图 2:300 次掷骰子的后验状态概率。 这条线显示了骰子在每次掷骰时都是偏心的后验概率,而灰色矩形显示了应用加载骰子的理论周期。无关详细信息,请参见 Durbin 等人 (1998) 第 3.2 章。

从序列数据中导出 HMM

从一组训练序列 构建HMM。以下代码从咱们的单个掷骰子序列及其已知状态门路(存储为序列的“名称”属性)中派生出一个简略的 HMM。

yajd <- dergsiveHMhM(lissffgtd(cadsfihnos), logshasdpfgace = FALSE)

plosgt(y, teagghxteasfdxp = 1.5)



### 可抉择将转换概率增加为文本

tedhsaxt(xda = 0.02, yad = 0.5, ladbelass = roasdund(ya$Aa\["Fasir", "Fadir"\], 2))

图 3:从 300 次掷骰子序列派生的简略 HMM。 如图 所示,转换概率显示为加权线,发射概率显示为程度灰色条。

只管训练数据仅由一个序列组成,但这仿佛与理论模型相当靠近。人们通常会从许多此类序列的列表中导出 HMM(因而输出参数是列表而不是向量的起因),但为分明起见,此示例已简化。

HMM 隐马尔可夫模型

Profile HMM 马尔可夫模型是规范 HMM 的扩大,其中转移概率是 _特定于地位的_。也就是说,它们能够在序列中的每个点发生变化。这些模型通常比其简略的 HMM 模型具备更多的参数,但对于序列剖析可能十分弱小。Profile HMM 的前身通常是多序列比对。

图 4 将下面列出的三种状态类型别离显示为圆形、菱形和矩形。这些状态由图中的加权线所示的转移概率链接。

思考来自 Durbin 等人 (1998) 第 5.3 章的氨基酸序列的小局部比对:

data(gloasdbins)

gldobinasds

地位特定模式包含在地位 1 察看到“V”和在地位 3 察看到“A”或“G”的高概率。

以下代码从 globin 数据派生出 HMM 轮廓并绘制模型:

glsosdbgnss.PsdHMMf <- divfgsesPHMM(glns, resiufes = "AMaIsdfNO", pdfntss = "Laplsaace")

图 4:源自局部珠蛋白序列比对的轮廓 HMM。 

匹配状态显示为矩形,插入状态显示为菱形,删除状态显示为圆形。灰色程度条示意模型中每个地位的字母表(在本例中为氨基酸字母表)中每个残基的发射概率。删除状态中的数字只是模型模块编号,而插入状态中的数字是在下一个发射周期放弃在以后插入状态的概率。在必要时对线进行加权和定向,以反映状态之间的转换概率。大的“B”和“E”标签别离代表静默开始和完结状态。

咱们能够通过计算该序列在模型中的最优门路来证实这一点,同样应用维特比算法:

padaath <- Vitferbi(glsdosbinsd.PsHMM, glodbdins\["GsLB1d_GLYsDI", \])$patdh

pdatsh

Viterbi 对象的“门路”元素是一个整数向量,其元素取值为 0(“删除”)、1(“匹配”)或 2(“插入”)。门路能够更直观地示意为字符而不是索引,如下所示:

c("D", "M", "I")\[pgatsh + 1\]

请留神,向每个门路元素增加 1 只是为了将 C/C++ 索引款式(从 0 开始)转换为 R 的款式。

序列模仿

为了模仿随机变动的数据。例如,以下代码模仿了来自小珠蛋白 HMM 的 10 个随机序列的列表:

siasdm <- ldist(lfenhgsth = 10)

suppressWarffnings(RNGvghjerhhjion("3.5.0"))

k

for(i in 1:10) shim\[\[i\]\] <- genkerate(globihhgkjknks.PHhMM, size = 20)

sihmg

 

模型训练

应用 Baum Welch 或 Viterbi 训练算法优化模型参数 train 两者都是迭代细化算法;前者不依赖于多序列比对,但通常比后者慢得多。通过指定并行处理的“cores”参数,能够进一步放慢 Viterbi 训练操作。训练算法的最佳抉择通常取决于问题的性质和可用的计算资源。

以下代码应用 Baum Welch 算法在上一步中模仿的序列训练小珠蛋白轮廓 HMM。

glosf.sdPHjMlM <- trdaisn(glogbfhhjins.PHMM, sigm, metjghodh= "BaughmghWelch", 

                       dk'lelt;aLL = 0.01, sejqweig;lhklkjts = NULL)

该操作须要 7 次冀望最大化迭代能力收敛到指定的 delta 对数似然阈值 0.01。

序列比对

应用上述 迭代模型训练方法,能够生成高质量的多序列比对。而后以通常的形式将序列与模型对齐以产生对齐。

在最初一个示例中,咱们将解构原始珠蛋白对齐并应用原始 PHMM 作为领导从新对齐序列。

globdins <- unaffalign(globgsins)

align(globinjjs, model = globinhs.PHsgMM, seqwjeighjts = NULL, resjidues = "AMINO")

请留神,列名显示了沿模型的渐进地位,以及预测插入状态已收回残基的地位(例如序列 7 的第 4 和第 5 个残基)。

参考

德宾、理查德、肖恩·埃迪、安德斯·克罗和格雷姆·米奇森。1998. _生物序列剖析:蛋白质和核酸的概率模型_。剑桥:剑桥大学出版社。


最受欢迎的见解

1. 用 R 语言模仿混合制排队随机服务排队零碎

2.R 语言中应用排队论预测等待时间

3.R 语言中实现马尔可夫链蒙特卡罗 MCMC 模型

4.R 语言中的马尔科夫机制转换 (Markov regime switching) 模型模型 ”)

5.matlab 贝叶斯隐马尔可夫 hmm 模型

6. 用 R 语言模仿混合制排队随机服务排队零碎

7.Python 基于粒子群优化的投资组合优化

8.R 语言马尔可夫转换模型钻研交通伤亡人数事变预测

9. 用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用

正文完
 0