вычисление следующего состояния наблюдения - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь вычислить следующее состояние из заданного вектора вероятности, извлеченного из матрицы перехода.

probs <- structure(c(0.876896837675484, 0.101918293545303, 0.0189210190005101, 
0.00220982524291829, 5.40245357842536e-05), .Names = c("State 1", 
"State 2", "State 3", "State 4", "State 5"))

Если пробники обозначают вектор вероятности, следующим шагом будет вычисление выходных данных с учетом биномиального распределения.

set.seed(1)
rbinom(n = 5,size = 1,prob = probs)

Где n - количество наблюдений (в данном случае состояние 1 -> Состояние 5), размер - количество испытаний (1 успешный или 0 неудачных), а prob - вероятность успеха каждого наблюдения, а функция возвращает следующее выход:

1,0,0,0,0

Итак, я предполагаю, что наиболее вероятным результатом является состояние 1 после одного шага, но иногда я получаю следующее:

1,0,1,0,0

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

У кого-нибудь есть идеи, как решить эту проблему?

Спасибо за ваше время

Решено: Я должен был использовать rmultinom вместо rbinom

1 Ответ

0 голосов
/ 02 мая 2018

Функция rbinom не вычисляет переходы в марковском процессе. Это обеспечивает случайное использование вселенной возможностей с определенной вероятностью. Если вы хотите выполнить один запуск процесса перехода из 5 состояний, в котором в начале состояния было 5 элементов, вы бы создали вектор начальных значений c (5,0,0,0,0). Затем вы должны указать матрицу переходов, в которой были определены вероятности для всех возможных переходов. В этом случае это должна быть матрица 5х5. Ваш вектор вероятностей может быть первой строкой, которая затем будет вероятностью перехода из состояния 1 в любое другое состояние в следующем интервале времени. Но вам также необходимо указать, каковы вероятности перехода из в другие состояния. Если они поглощают состояния, то их i-й элемент будет равен 1, поэтому это может быть матрица:

  trans <- matrix( c(0.876896837675484, 0.101918293545303, 0.0189210190005101, 0.00220982524291829, 5.40245357842536e-05,

                     0,1,0,0,0,
                     0,0,1,0,0,
                     0,0,0,1,0,
                     0,0,0,0,1), nrow=5, byrow=TRUE, dimnames= list( from=c("State 1", 
"State 2", "State 3", "State 4", "State 5") , to = c("State 1", 
"State 2", "State 3", "State 4", "State 5") ))

trans
         to
from        State 1   State 2    State 3     State 4      State 5
  State 1 0.8768968 0.1019183 0.01892102 0.002209825 5.402454e-05
  State 2 0.0000000 1.0000000 0.00000000 0.000000000 0.000000e+00
  State 3 0.0000000 0.0000000 1.00000000 0.000000000 0.000000e+00
  State 4 0.0000000 0.0000000 0.00000000 1.000000000 0.000000e+00
  State 5 0.0000000 0.0000000 0.00000000 0.000000000 1.000000e+00

Теперь вы можете применить это к начальному (или последовательному) вектору отсчетов. Тогда этот результат будет следующим состоянием в последовательности. Это можно сделать с помощью любого детерминированного метода путем случайного розыгрыша.

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