我有两个数据集,年度转移概率和初始值。目标是利用这些来形成公司五年后的样子。
初始值的格式为:
| 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:在我写这篇文章的时候,我意识到有两个表更有效率,一个用于男性,另一个用于女性并分别计算,但这仍然不完全在哪里我想要它。答案 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
}