0

我试图在每个步骤中增加离散马尔可夫链中的初始状态向量,以便在未来某个时间点求解状态向量元素,这似乎很麻烦。

举个简单的例子,假设一家公司有一个初始状态向量,它由具有 3 个过渡状态(入门级、晋升、离职公司)的入门级员工组成。具有 1000 名入门级员工的初始状态向量定义为:

initialstate <- t(as.matrix(c(1000,0,0)))

剩余入门级别、升职或离开公司的转换矩阵由下式给出:

transitionmatrix <- matrix(c(0.5,0,0,0.2,1,0,0.3,0,1),nrow = 3,ncol = 3)

两次迭代后:

step1state <- initialstate%*%transitionmatrix

(剩余 500 名入门级员工)

step2state <- step1state%*%transitionmatrix

(剩余 250 名入门级员工)

之后step2state,我还有 250 名入门级员工,但假设我希望在第 1 步之后有 1,300 名入门级员工,在第 2 步之后需要 2,000 名入门级员工。为此,我通过增加状态向量来雇用更多员工。现在这变成了一个繁琐的过程,我在步骤 1 中增加initialstate矩阵以考虑新员工,在步骤 2 中观察入门级员工的数量,然后增加step1state以实现步骤 2 的目标。

例如,在运行之前的马尔可夫链之后,我再次运行它并在步骤 1 中添加 800 名新员工:

step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix

根据需要,第 1 步有 1,300 名入门级员工,但第 2 步现在需要雇用 1,350 名入门级员工(从最初的 1,750 名减少)。以下满足我在每个时期的招聘目标:

step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix + t(as.matrix(c(1350,0,0)))

如果我的入门级员工目标在任何一步发生变化,我必须在之后的每一步都重新运行马尔可夫链,因为入门级员工的数量取决于前几期的员工数量(但转移概率不会)。R 中的 MarkovChain 包似乎无法解决每个步骤中特定值的状态向量,所以我只是运行基线 Markov Chain 并迭代地将新员工添加到每个初始状态向量以获得我想要的目标每一步。

有一个更好的方法吗?马尔可夫链是我想要实现的模型的正确选择吗?

4

1 回答 1

0

我不确定您所说的“马尔可夫链是我想要实现的模型的正确选择吗?”,因为我实际上并不了解您想要实现的目标,也不完全清楚什么您的意思是“马尔可夫链”,尽管我猜您想从初始状态向量迭代一系列“马尔可夫”转换。对于 1000 名新员工的初始向量状态,n迭代后的状态将是:

 library(expm)
 initialstate %*% (transitionmatrix %^% n)

-packageexpm实现了一个矩阵指数运算符%^%,它允许您一步计算n马尔可夫转移矩阵的迭代结果。

所以在 25 次迭代之后,将会有:

> initialstate %*% (transitionmatrix %^% 25)
             [,1] [,2] [,3]
[1,] 2.980232e-05  400  600

.... 400 名晋升者和 600 名“离职者”。这都是线性的,所以如果你从 2000 开始,那么在这些州你将分别有 800 和 1200。他们的比率为 2:3 也就不足为奇了,因为这也是由于第一列的第二个和第三个元素而进行转换的数字的比率。请注意,第 2 列和第 3 列的对角线中的 1 构成了这些“吸收状态”。一旦你被“提升”,你将继续被提升。没有出口。如果你是老鹰队的球迷,就像加州酒店一样。一旦你“离开”,也没有回报的可能。

于 2017-09-26T20:34:35.060 回答