R - 流线型马尔可夫链
R - Streamlined Markov Chain
我有两个数据集,年度转移概率和初始值。我们的目标是利用这些来了解一家公司在五年后会是什么样子。
初始值的格式为:
| Age | Gender | Initial |
----------------------------------------------------
| 18 | F | 30 |
| 19 | M | 35 |
| 20 | F | 40 |
... | |
| Out | | 400 |
其中初始值包含有关未来招聘的数据。这个数字可以根据解决方案的需要进行修改,但目前它代表的是每年的招聘人数。
转移概率的形式为
| 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:在我写这篇文章时,我意识到拥有两张表,一张用于男性,另一张用于女性,并分别计算它们的效率更高了一步,但这仍然不是我的目标想要。
后来解决了:最简单的是每个 age/gender 组都有一个马尔可夫链,可以简化为一个数据框。
可以将初始值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
}
我有两个数据集,年度转移概率和初始值。我们的目标是利用这些来了解一家公司在五年后会是什么样子。
初始值的格式为:
| Age | Gender | Initial |
----------------------------------------------------
| 18 | F | 30 |
| 19 | M | 35 |
| 20 | F | 40 |
... | |
| Out | | 400 |
其中初始值包含有关未来招聘的数据。这个数字可以根据解决方案的需要进行修改,但目前它代表的是每年的招聘人数。
转移概率的形式为
| 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:在我写这篇文章时,我意识到拥有两张表,一张用于男性,另一张用于女性,并分别计算它们的效率更高了一步,但这仍然不是我的目标想要。
后来解决了:最简单的是每个 age/gender 组都有一个马尔可夫链,可以简化为一个数据框。
可以将初始值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
}