R - 流线型马尔可夫链

时间:2018-02-07 23:30:04

标签: r optimization markov-chains

我有两个数据集,年度转移概率和初始值。目标是利用这些来形成公司五年后的样子。

初始值的格式为:

|     Age       |      Gender    |     Initial     |
----------------------------------------------------
|  18           | F              |  30             |
|  19           | M              |  35             |
|  20           | F              |  40             |
...             |                |
|  Out          |                |  400            |

其中Initial值包含有关未来招聘的数据。这个数字可以根据解决方案的需要进行修改,但目前它代表了每年的招聘数量。

转换概率的形式为

|   Age        |    Gender    |   Hire       |    Terminate    |
----------------------------------------------------------------
|   18         |    F         |   0.025      |    0.3          |     
|   18         |    M         |   0.03       |    0.1          |
|   19         |    F         |   0.01       |    0.4          |
...

也就是说,所有招聘人员中有2.5%是女性18岁,所有18岁女性中有30%将离开公司。

使用马尔可夫转移概率

p(Out, 18F) = 0.025
p(18F,Out) = 0.3
p(18F,19F) = 0.7 #The complement action to leaving the company is staying and getting a year older

假设没有性别变化或时间机器,所有其他转换概率将为0。

是否有一种简化预测流程的方法,以便我不需要生成转换矩阵,并不是必须大部分都是零?你会怎么做? (使用或不使用" markovchain"包)

PS:在我写这篇文章的时候,我意识到有两个表更有效率,一个用于男性,另一个用于女性并分别计算,但这仍然不完全在哪里我想要它。

1 个答案:

答案 0 :(得分:0)

稍后解决:最简单的是,每个年龄/性别组都有一个马尔可夫链,可以简化为数据框。

初始值可以left_join转换为数据结构d的转换概率。

d$temp <- lag(d$Initial * d$Terminate)
d$temp[1] <- 0 #Gets rid of NA
d$temp <- d$temp + d$hire*TotHires[1]
#where TotHires[1] represents the number hired in year 1

这给出了一年后的结果。 n年,我们有

d$temp <- d$Initial
for (y in 1:n) {
  d$temp <- lag(d$temp * d$Terminate)
  d$temp[1] <- 0 #Gets rid of NA
  d$temp <- d$temp + d$hire*TotHires[n]
  #where TotHires[n] represents the number hired in year n
}