r - 计算观察的下一个状态
问题描述
我正在尝试根据从转换矩阵中提取的给定概率向量计算下一个状态。
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),size 是试验次数(1 次成功或 0 次失败),prob 是每次观察成功的概率,函数返回以下输出:
1,0,0,0,0
所以我假设更可能的输出是一步后的状态 1,但有时我会得到以下信息:
1,0,1,0,0
但那是不可能的,因为这个人应该只能从他的上一步进入某个状态。
任何人都知道如何解决这个问题?
谢谢你的时间
已解决:我应该使用 rmultinom 而不是 rbinom
解决方案
该rbinom
函数不计算马尔可夫过程中的转换。它以特定概率从各种可能性中随机抽取。如果您想要单次运行 5 状态转换过程,其中一开始有 5 个项目处于状态 1,您将创建一个起始值 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
现在您可以将其应用于计数的起始(或连续)向量。然后该结果将是序列中的下一个状态。它可以通过随机抽签的确定性方法来完成。
推荐阅读
- installation - 创新设置。是否可以在安装前在设置中询问用户输入,然后将输入与互联网上的原始数据进行比较?
- java - MimeMessageHelper 无法使用 JavaMail 发送同一文件的两个附件?
- llvm - 是否可以将 LLVM IR 重新编译为另一个三元组和数据布局?
- html - 如何从报纸 3k 对象中删除不需要的类和标签?
- css - Bootstrap 4 - 卡片布局中的文本对齐
- angular - Angular 组件继承和继承订阅
- python - 为什么 pandas 在简单的数学运算上比 numpy 快?
- javascript - 这里需要 Redux 还是不需要?
- machine-learning - 无法理解这个 k-fold 验证算法是如何工作的?
- python - 小数点后只有两位数的条目