拟合并评估R中的二阶转移矩阵(Markov过程)?

时间:2015-04-19 10:09:22

标签: r markov-chains

我正在尝试构建二阶马尔可夫链模型,现在我尝试从以下数据中找到转换矩阵。

dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))

现在我知道如何使用markovchainFit(dat)包中的函数markovchain来拟合一阶马尔可夫转移矩阵。

有没有办法适合二阶转换矩阵?

如何评估马尔可夫链模型?即我应该选择一阶模型还是二阶模型?

1 个答案:

答案 0 :(得分:1)

此函数应生成马尔可夫链转换矩阵,以满足您希望的任何滞后顺序。

dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))

Markovmatrix <- function(X,l=1){
  tt <- table(X[,-c((ncol(X)-l+1):ncol(X))] , c(X[,-c(1:l)]))
  tt <- tt / rowSums(tt)
  return(tt)
}


Markovmatrix(as.matrix(dat),1)
Markovmatrix(as.matrix(dat),2)

其中l是滞后。

e.g。二阶矩阵,输出为:

         A         B         C         D
  A 0.2422803 0.2185273 0.2446556 0.2945368
  B 0.2426304 0.2108844 0.2766440 0.2698413
  C 0.2146119 0.2716895 0.2123288 0.3013699
  D 0.2480000 0.2560000 0.2320000 0.2640000

至于如何测试什么订单模型。有几个建议。 Gottman和Roy(1990)在他们的顺序分析入门书中提出的一个是使用信息值。有一章有关 - 章节的大部分内容可在线获取。

您还可以执行似然比率chi-Square 测试。这与卡方检验非常相似,因为您将观察到的预期转换频率进行比较。但是,公式如下:

enter image description here

自由度是代码数减去1的平方。在你的情况下你有4个代码,所以(4-1)^ 2 = 9.然后你可以查找相关的p值。

我希望这会有所帮助。