我试图从转换矩阵中提取的给定概率向量计算下一个状态。
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"))
当probs代表概率向量时,下一步是计算给定二项分布的输出。
set.seed(1)
rbinom(n = 5,size = 1,prob = probs)
其中n是观察次数(在这种情况下状态1 - >状态5),大小是试验次数(1次成功或0次失败),概率是每次观察成功的概率,并且函数返回以下输出:
1,0,0,0,0
所以我假设更可能的输出是一步之后的状态1,但有时我会得到以下结果:
1,0,1,0,0
但那是不可能的,因为这个人应该只从他上一步走到某个州。
任何人都知道如何解决这个问题?
感谢您的时间
解决: 我应该使用rmultinom而不是rbinom
答案 0 :(得分:0)
rbinom
函数不计算马尔可夫过程中的转换。它以特定的概率从一系列可能性中随机抽取。如果你想要一个5状态转换过程的单次运行,其中在开始时状态1中有5个项目,你将创建一个起始值为c(5,0,0,0,0)的向量。然后,您将指定一个转换矩阵,其中指定了所有可能转换的概率。在这种情况下,它需要是一个5x5矩阵。您的概率向量可能是第一行,然后是在下一个时间间隔内从状态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
现在您可以将其应用于计数的起始(或连续)向量。那么结果将是序列中的下一个状态。它可以通过随机抽取的确定性方法来完成。