как сделать скрытую марковскую модель в R программировании - PullRequest
0 голосов
/ 03 июля 2018

Я хочу сделать HMM для последовательности ДНК, используя R. Цель этого состоит в том, чтобы иметь возможность искать небольшую последовательность в большей последовательности. Я пытаюсь использовать HMM-Rpackage, но я не знаю, как определить, какие это состояния или символы.

1 Ответ

0 голосов
/ 03 июля 2018

Состояния - это скрытое состояние, которое вы не наблюдаете и хотите угадать. Следовательно, матрица переходов - это эволюция состояний (например, если длина состояний равна n, тогда матрица перехода будет иметь nxn) Символы - это фактическое наблюдаемое состояние. Матрица излучения - это вероятность наблюдения символа в данном состоянии. Следовательно, матрица излучения будет иметь размер nxm, равный m длины вектора символов.

Примером этого является пример, реализованный в пакете с нечестным объяснением казино:

В нечестном казино используются два кубика, один из которых честный, другой загружен. Вероятности справедливого кубика (1/6, ..., 1/6) для метания ("1", ..., "6"). Вероятности загруженного штампа (1/10, ..., 1 / 10,1 / 2) для броска ("1", ... "5", "6"). Наблюдатель не знает, какой кубик на самом деле взят (состояние скрыто), но последовательность бросков (наблюдений) может использоваться для определения, какой кубик (состояние) использовался.

В нашем случае мы собираемся сделать так, чтобы после замены кубика, по крайней мере, он использовался три раза подряд. Для этого был реализован следующий код:

library(HMM)



States<- c("die1_1","die1_2","die1_3","die2_1","die2_2","die2_3") 
Symbols<-1:6 
Trans<-matrix(c(0.5,0.5,0,0,0,0, 
                0,0.5,0.5,0,0,0, 
                0,0,0.5,0.5,0,0, 
                0,0,0,0.5,0.5,0, 
                0,0,0,0,0.5,0.5, 
                0.5,0,0,0,0,0.5),6,6, byrow =TRUE)
Emission<-matrix(NA,6,6) 
Emission[1:3,]<- rep(1/6,6) # Fair dice 
Emission[4,]<- c(1/10,1/10,1/10,1/10,1/10,1/2) 
Emission[5,]<- c(1/10,1/10,1/10,1/10,1/10,1/2) 
Emission[6,]<- c(1/10,1/10,1/10,1/10,1/10,1/2)# Fair dice 
startprobs<- c(0.5,0,0,0.5,0,0) # It starts in position 1 or 4, which means first dice first throw or 2nd 


myhmm<- initHMM(States, Symbols, startprobs, Trans, Emission) 
##Sampling 
simHMM(myhmm, 50)

# $`states`
# [1] "die2_1" "die2_2" "die2_2" "die2_2" "die2_2" "die2_3" "die1_1" "die1_2" "die1_2"
# [10] "die1_2" "die1_3" "die1_3" "die1_3" "die2_1" "die2_2" "die2_3" "die2_3" "die2_3"
# [19] "die2_3" "die1_1" "die1_2" "die1_2" "die1_3" "die2_1" "die2_1" "die2_2" "die2_3"
# [28] "die1_1" "die1_2" "die1_2" "die1_3" "die2_1" "die2_2" "die2_2" "die2_2" "die2_3"
# [37] "die1_1" "die1_1" "die1_1" "die1_2" "die1_3" "die2_1" "die2_2" "die2_2" "die2_2"
# [46] "die2_2" "die2_3" "die1_1" "die1_1" "die1_2"
# 
# $observation
# [1] 6 6 6 6 6 6 1 5 5 2 6 3 6 6 3 4 4 6 6 4 4 4 3 6 6 6 4 2 4 3 2 1 6 3 6 6 3 1 3 3 4 5
# [43] 6 6 6 6 6 6 4 6

Надеюсь, это поможет понять основы пакета. Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...