如何计算Stata或R中的“复合”马尔可夫转移矩阵?

时间:2016-06-14 03:08:07

标签: r stata transitions markov-chains markov

“复合”我的意思是转移矩阵满足马尔可夫属性,即我有两列s_ts_t+k代表两个句点t和{{}中每个人的状态1}}分别。 我想要的是找到矩阵M

t+k

使矩阵s_t+k = M^k * s_t 满足马尔可夫属性。

我的默认工作语言是Stata,其中Mtabsvy:tab等命令可以生成一个句点转换矩阵,但这些矩阵不会必然满足马尔可夫财产。所以我想知道如何在Stata或其他常用语言(如R或Python)中实现我的目标。

PS:这个问题来自于a paper,研究了许多国家从1960年到2010年的GDP_per_capita过渡动态。比如说,在每个十年开始时,我们将所有国家分为5组(从1:非常贫穷的国家)到5:高收入国家),所以我们分布有5个州的国家。如果我简单地使用markovchain类来估计十年到十年的转换矩阵,这很容易。但是,提交人声称(第11页,脚注4)

  

“十年平均转移矩阵的估算基于   从1960年到2010年采用的五十年过渡矩阵   数值优化程序。而不是采取简单的平均值   对于五个过渡矩阵(遭受Jensen的影响)   不等式),我们估计一个可以给出精确的转移矩阵   5年期限转换矩阵(1960年进入,2010年退出)   通过它的力量5 。“

3 个答案:

答案 0 :(得分:1)

R中,您可以使用markovchain包来获取满足markov属性的转换矩阵。您可以使用以下示例代码...

library(markovchain)
data(rain)
mysequence<-rain$rain
createSequenceMatrix(mysequence)
myFit<-markovchainFit(data=mysequence,,method="bootstrap",nboot=5, name="Bootstrap Mc")
myFit

myFit是您估算的转换矩阵。此示例使用Alofi降雨数据集。

答案 1 :(得分:0)

  R中矩阵的乘法不是*而是%*%

  我在 R 中编写了一个简单的函数来解决问题。     

trans_mat = function(k,s_t,M){
      for(i in 1:k){
       M = M % * % M
         }
      return(M%*%s_t)}
现在,您需要做的是键入k(您想要的时间长度),s_t(原始状态)和M(马尔可夫属性)。     
s_t+k  = trans_mat(k,s_t,M)

答案 2 :(得分:0)

markovchain包直接实现任何markovchain对象的能力:

require(markovchain)
#creating the MC
myMatr<-matrix(data=c(0.2,0.8,.6,.4),ncol=2,byrow=TRUE)
myMc<-as(myMatr,"markovchain")
#5th power of the MC
myMc5<-myMc^5
myMc5