Możliwe jest uzyskanie dokładnego prawdopodobieństwa określonego podsekwencji za pomocą reprezentacji problemu przez łańcuch Markowa. Specyfika tego, jak skonstruować łańcuch, zależy od konkretnego podsekwencji zainteresowania, ale podam kilka przykładów, jak to zrobić.
A,T,C,GknWHaaa<kk+1
State 0State 1State 2State 3⋮State k−1State kW¯∩H0, W¯∩H1, W¯∩H2, W¯∩H3, ⋮W¯∩Hk−1,W.
Ponieważ zakłada się, że sekwencja wyników jest wymienna, mamy wyniki niezależne od ich prawdopodobieństw . Twój interesujący proces może być reprezentowany jako dyskretne łańcuchy Markowa, które zaczynają się w przy i przechodzą zgodnie z macierzą prawdopodobieństwa, która zależy od konkretnego podciągu będącego przedmiotem zainteresowania. Macierz przejścia będzie zawsze aθA+θT+θC+θG=1State 0n=0(k+1)×(k+1)macierz reprezentująca prawdopodobieństwa przejścia przy użyciu powyższych stanów. Jeśli podciąg nie jest osiągnięty, każde przejście może przybliżyć cię o jeden krok do podciągu lub może przywrócić poprzedni stan, który zależy od konkretnego podciągu. Po osiągnięciu podciągu jest to stan pochłaniający łańcucha, reprezentujący fakt, że wystąpiło interesujące zdarzenie.
Na przykład, jeśli podciągiem będącym przedmiotem zainteresowania jest wówczas macierz przejścia to:AAAAAA
P=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1−θA1−θA1−θA1−θA1−θA1−θA0θA0000000θA0000000θA0000000θA0000000θA0000000θA1.⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
Przeciwnie, jeśli podciągu przedmiotem zainteresowania jest wówczas macierz przejścia to:ACTAGC
P=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1−θA1−θA−θC1−θA−θT1−θA1−θA−θC−θG1−θA−θC0θAθAθA0θAθA00θC00θC0000θT0000000θA0000000θG000000θC1.⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
Jak można zobaczyć powyżej, konstruowanie macierzy przejściowej wymaga zwrócenia uwagi na określony substrat. Niepoprawny wynik powoduje powrót do poprzedniego stanu w ciągu, który zależy od konkretnego interesującego cię podciągu. Po zbudowaniu macierzy przejścia, dla danej wartości prawdopodobieństwo wystąpienia podłańcucha w łańcuchu wynosi . (To prawdopodobieństwo wynosi zero dla wszystkich .)nP(W|n)={Pn}0,kn<k
Programowanie w R: Możesz zaprogramować to jako funkcję w R
, tworząc funkcję, która generuje macierz przejścia dla łańcucha Markowa i tablicę jego mocy do pewnej pożądanej liczby prób. Następnie można odczytać odpowiednie prawdopodobieństwo przejścia dla wartości która jest przedmiotem zainteresowania. Oto przykład takiego kodu:n
#Create function to give n-step transition matrix for n = 1...N
#We will use the example of the substring of interest "AAAAAA"
#a is the probability of A
#t is the probability of T
#c is the probability of C
#g is the probability of G
#N is the last value of n
PROB <- function(N,a,t,c,g) { TOT <- a+t+c+g;
a <- a/TOT;
t <- t/TOT;
c <- c/TOT;
g <- g/TOT;
P <- matrix(c(1-a, a, 0, 0, 0, 0, 0,
1-a, 0, a, 0, 0, 0, 0,
1-a, 0, 0, a, 0, 0, 0,
1-a, 0, 0, 0, a, 0, 0,
1-a, 0, 0, 0, 0, a, 0,
1-a, 0, 0, 0, 0, 0, a,
0, 0, 0, 0, 0, 0, 1),
nrow = 7, ncol = 7,
byrow = TRUE);
PPP <- array(0, dim = c(7,7,N));
PPP[,,1] <- P;
for (n in 2:N) { PPP[,,n] <- PPP[,,n-1] %*% P; }
PPP }
#Calculate probability for N = 100 for equiprobable outcomes
N <- 100;
a <- 1/4;
t <- 1/4;
c <- 1/4;
g <- 1/4;
PROB(N,a,t,c,g)[1,7,N];
[1] 0.01732435
Jak widać z tego obliczenia, prawdopodobieństwo otrzymania podłańcucha w wynikami wynosi . To tylko jeden przykład z zastosowaniem określonego podłańcucha i danej liczby prób, ale można go zmieniać, aby uzyskać prawdopodobieństwa w odniesieniu do innych interesujących podłańcuchów.AAAAAAn=1000.01732435