【问题标题】:How to obtain transition probability matrix in MATLAB?如何在MATLAB中获得转移概率矩阵?
【发布时间】:2016-05-05 15:42:28
【问题描述】:

假设我有一个序列 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)处于状态i和 x(t+1) 在状态 j)/(观察对的数量 x(t) 和 x(t+1),其中 x(t) 在状态 i 和 x(t+1) 在任何一个状态1......秒)。 我尝试了这段代码,但它给出了错误

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

【问题讨论】:

  • 我想你可以自己解决这个问题;这样你会学到更多。用每对 i,j 的出现次数填充 p 矩阵,然后将行除以行和以获得概率。

标签: matlab matrix markov-chains


【解决方案1】:

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

这两种方法都使用unique() 函数来查找状态空间。请注意,顺序不同,例如你的 [1 3 2 4 5] 与我的 [1 2 3 4 5] 但这不是一个限制性问题。我将获取转换counts与转换probabilities分开来说明一些技巧。


方法 1:矢量化方法
此方法使用unique()accumarray() 函数。

% 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 的行之和为1 (sum(P,2))。

请注意,计数矩阵使用 1 步偏移来计算转换。输出是一个NumU x NumU 数组,其中以n 中给出的索引为单位的转换数 - 来自unique() 的输出。


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

States = unique(X);   % <--- can be anything
                      % e.g. try: States = [1 3 2 4 5];

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

使用您的状态空间排序:如果您将 方法 2States = [1 3 2 4 5]; 一起使用,则生成的概率转移矩阵 P 与您手动计算的矩阵相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2020-03-28
    • 2012-02-27
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多