Вероятности перехода в цепи Маркова не суммируются с 1 - PullRequest
0 голосов
/ 04 мая 2018

У меня возникла небольшая проблема с переходами в цепочке Маркова, когда условные вероятности, которые описывают переходы, имеют более одной значащей цифры. Например, если условные вероятности:

eps_a <- 0.3 #    Pr(a leaves)
eps_b <- 0.4 #    Pr(b leaves)
gam_c <- 0.2 #    Pr(c arrives)
eps_b_a <- 0.4 #  Pr(b leaves | a)
gam_c_a <- 0.9 #  Pr(c arrives | a)
eps_a_b <- 0.2 #  Pr(a leaves | b)
gam_c_b <- 0.9 #  Pr(c arrives | b)
gam_c_ab <- 0.7 # Pr(c arrives | ab)

А переходы между 8 различными состояниями:

tm <- rep(0,8)
# Assuming AB was state in last time step
tm[1] <- eps_a * eps_b * (1 - gam_c) #----------------------|U
tm[2] <- (1 - eps_a) * eps_b_a * (1 - gam_c_a) #------------|A
tm[3] <- eps_a_b * (1 - eps_b) * (1 - gam_c_b) #------------|B
tm[4] <- eps_a * eps_b * gam_c #----------------------------|C
tm[5] <- (1 - eps_a_b) * (1 - eps_b_a) * (1 - gam_c_ab) #---|AB
tm[6] <- (1 - eps_a) * eps_b_a * gam_c_a #------------------|AC
tm[7] <- eps_a_b * (1 - eps_b) * gam_c_b #------------------|BC
tm[8] <- (1 - eps_a_b) * (1 - eps_b_a) * gam_c_ab #---------|ABC

Тогда tm сумм до 1.

sum(tm)
[1] 1

Однако, если условные вероятности имеют более значимые цифры (даже на 1 больше), то вероятности перехода больше не составляют 1.

eps_a <-     0.3216542
eps_b <-     0.4123442
gam_c <-     0.2145621
eps_b_a <-   0.4231564
gam_c_a <-   0.9943285
eps_a_b <-   0.2321542
gam_c_b <-   0.9978964
gam_c_ab <-  0.7777662

При использовании этих условных вероятностей переходы в tm теперь суммируются с 0,9990323. Используя другие числа, я видел, что они колеблются между 0,97 и 1,08. Я думал, что это может быть проблемой недостаточного значения, но суммирование журналов этих вероятностей также не исправляет это.

# Using the probabilities with more digits above.
tm_log <- rep(0,8)
tm_log[1] <- log(eps_a) + log(eps_b) + log((1 - gam_c)) #------------------|U
tm_log[2] <- log(1 - eps_a) + log(eps_b_a) + log(1 - gam_c_a) #------------|A
tm_log[3] <- log(eps_a_b) + log(1 - eps_b) + log(1 - gam_c_b) #------------|B
tm_log[4] <- log(eps_a) + log(eps_b) + log(gam_c) #------------------------|C
tm_log[5] <- log(1 - eps_a_b) + log(1 - eps_b_a) + log(1 - gam_c_ab) #-----|AB
tm_log[6] <- log(1 - eps_a) + log(eps_b_a) + log(gam_c_a) #----------------|AC
tm_log[7] <- log(eps_a_b) + log(1 - eps_b) + log(gam_c_b) #----------------|BC
tm_log[8] <- log(1 - eps_a_b) + log(1 - eps_b_a) + log(gam_c_ab) #---------|ABC
sum(exp(tm_log))
[1] 0.9990323

Это наводит меня на мысль, что я либо неправильно кодировал вероятности перехода, либо есть другая проблема, о которой я не знаю. Я всегда мог вычислить один из переходов как 1 минус сумму всех остальных, это единственный способ обойти это?

...