如何获得矩阵中的转移概率矩阵?

时间:2016-05-05 15:42:29

标签: matlab markov-chains

假设我有一个序列x = 1,3,3,1,2,1,4,2,3,1,4,2,4,4,4,3,1,2,5,1和它有五个状态1 3 2 4 5.我必须通过这个等式在MATLAB中获得转移概率矩阵,概率=(观察对的数量x(t)& x(t + 1),其中x(t)处于状态状态j中的i和x(t + 1)/(观察对的数量x(t)& x(t + 1),其中x(t)处于状态i,x(t + 1)处于任何一个状态国家1 ...... s)。 我试过这段代码,但它给出了错误

x=[1 3 3 1 2 1 4 2 3 1 4 2 4 4 4 3 1 2 5 1]
n = length(x)-1
p = zeros(5,5)
for t = 1:n
if x(t)=x(t+1);
   a(t)=count (x(t)=x(t+1)) % Here i am trying to count how many number of times pair of that states occur in sequence.
   q(t)=sum(x==x(t)) % (Here i am trying to count Number of observation pairs x(t) & x(t+1), with x(t) in state i and x(t+1) in any one of the states 1......s)
end
for i=1:5
p(i, :) = a(t)/q(t)
end

由我手动计算的转移概率矩阵如下

                     1      3     2    4     5

                1    0     1/5   2/5  2/5    0

                3    3/4   1/4    0    0     0

                2    1/4   1/4    0    1/4   1/4

                4     0    1/5   2/5   2/5   0

                5     1     0     0     0    0

1 个答案:

答案 0 :(得分:0)

由于已经有一段时间了,所以我认为现在对此提供答案是安全的。以下两种方法均不需要工具箱。假设transition probability matrixDiscrete Time Markov Chain (DTMC)的基本知识。

两种方法都使用unique函数来查找状态空间。请注意,顺序是不同的,例如您的[1 3 2 4 5]与我的[1 2 3 4 5],但这不是限制性问题。我将获取过渡计数与过渡概率分开了,以说明一些技巧。


方法1:矢量化方法
这种方法使用uniqueaccumarray函数。

% MATLAB 2018b
X =[1 3 3 1 2 1 4 2 3 1 4 2 4 4 4 3 1 2 5 1];
[u,~,n] = unique(X);
NumU = length(u);     % Number of Unique Observations
Counts = accumarray([n(1:end-1),n(2:end)],1,[NumU,NumU]);

P = Counts./sum(Counts,2);   % Probability transition matrix

验证:您可以验证sum(sum(Counts)) == length(X)-1P的行总和为一个(sum(P,2))。

请注意,计数矩阵使用1步偏移量对转换进行计数。输出是NumU x NumU的{​​{1}}输出中的n数组,该数组的数量取决于索引。


方法2:单个unique循环
这是一种直接方法,可以使用状态空间的任何顺序(请参见下文)。

for

使用状态空间排序:如果您将方法2 States = unique(X); Counts = zeros(length(States)); for k = 2:length(X) Counts(find(X(k-1) == States),find(X(k) == States)) = ... Counts(find(X(k-1) == States),find(X(k) == States)) + 1; end P = Counts./sum(Counts,2); % Probability transition matrix 一起使用,则结果概率转换矩阵States = [1 3 2 4 5];与您所选择的匹配手动计算。