我试图在每个步骤中增加离散马尔可夫链中的初始状态向量,以便在未来某个时间点求解状态向量元素,这似乎很麻烦。
举一个简单的例子,假设一家公司有一个初始状态向量,由入门级员工组成,具有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包似乎不能在每个步骤中求解特定值的状态向量,所以我只是运行了一个基线马尔可夫链,并迭代地向每个初始状态向量中添加新的雇员,以获得我在每个步骤中想要的目标。
有没有更好的方法来做这件事?马尔可夫链是我想要实现的模型的正确选择吗?
发布于 2017-09-27 04:34:35
我不确定您所说的“马尔可夫链是我试图实现的模型的正确选择吗?”是什么意思,因为我实际上并不理解您试图实现的目标,也不完全清楚您所说的“马尔可夫链”是什么意思,尽管我猜您想要从初始状态向量迭代一系列“马尔可夫”转换。对于1000个新雇佣的起始向量状态,n迭代后的状态将为:
library(expm)
initialstate %*% (transitionmatrix %^% n)expm-package实现了一个矩阵指数运算符%^%,它允许您在一个步骤中计算马尔可夫转移矩阵的n迭代的结果。
因此,在25次迭代之后,将会有:
> initialstate %*% (transitionmatrix %^% 25)
[,1] [,2] [,3]
[1,] 2.980232e-05 400 600……400名提拔人员和600名“离职者”。这都是线性的,所以如果你从2000开始,那么在这两个状态下分别会有800和1200。它们的比率是2:3也就不足为奇了,因为这也是由于第一列的第二和第三个元素而发生转换的数字的比率。请注意,列2和列3的对角线上的1构成了这些“吸收状态”。一旦你被“提拔”,你将继续被提拔。没有出口。就像加州旅馆如果你是老鹰队的球迷。一旦你“离开”,也就不可能再回来了。
https://stackoverflow.com/questions/46434953
复制相似问题