Вычисление следующего состояния наблюдения
Я пытаюсь вычислить следующее состояние из заданного вектора вероятности, извлеченного из матрицы перехода.
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), size - количество испытаний (1 успешное или 0 неудачных), а prob - вероятность успеха каждого наблюдения, а функция возвращает следующий результат:
1,0,0,0,0
Поэтому я предполагаю, что наиболее вероятным результатом является состояние 1 после одного шага, но иногда я получаю следующее:
1,0,1,0,0
Но это было бы невозможно, потому что человек должен перейти в определенное состояние с его предыдущего шага.
У кого-нибудь есть идеи, как это решить?
Спасибо за ваше время
Решено: я должен был использовать rmultinom вместо rbinom
1 ответ
rbinom
функция не вычисляет переходы в марковском процессе. Это обеспечивает случайное получение из вселенной возможностей с определенной вероятностью. Если вы хотите выполнить один запуск процесса перехода из 5 состояний, в котором было 5 элементов в состоянии 1 в начале, вы должны создать вектор начальных значений 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
Теперь вы можете применить это к начальному (или последовательному) вектору отсчетов. Тогда этот результат будет следующим состоянием в последовательности. Это может быть сделано с помощью любого детерминированного метода путем случайного розыгрыша.