我正在尝试构建二阶马尔可夫链模型,现在我尝试从以下数据中找到转换矩阵。
dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))
现在我知道如何使用markovchainFit(dat)
包中的函数markovchain
来拟合一阶马尔可夫转移矩阵。
有没有办法适合二阶转换矩阵?
如何评估马尔可夫链模型?即我应该选择一阶模型还是二阶模型?
答案 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 测试。这与卡方检验非常相似,因为您将观察到的预期转换频率进行比较。但是,公式如下:
自由度是代码数减去1的平方。在你的情况下你有4个代码,所以(4-1)^ 2 = 9.然后你可以查找相关的p值。
我希望这会有所帮助。