我有状态K = 8的状态转移概率矩阵,
trans =
0.9245 0.0755 0 0 0 0 0 0
0.0176 0.9399 0.0425 0 0 0 0 0
0 0.0290 0.9263 0.0447 0 0 0 0
0 0 0.0465 0.9228 0.0307 0 0 0
0 0 0 0.0731 0.8979 0.0290 0 0
0 0 0 0 0.0907 0.8857 0.0236 0
0 0 0 0 0 0.1080 0.8750 0.0170
0 0 0 0 0 0 0.1250 0.8750
我需要使用Matlab从转换矩阵生成时间向量/时间序列。任何人都可以建议我如何从Matlab中的状态转移概率矩阵生成时间序列。
答案 0 :(得分:0)
如果通过生成你的意思是来自转换矩阵的样本,这应该有效:
function [chain,state] = simulate_markov(x,P,pi0,T);
%% x = the quantity corresponding to each state, typical element x(i)
%% P = Markov transition matrix, typical element p(i,j) i,j=1,...n
%% pi0 = probability distribution over initial state
%% T = number of periods to simulate
%%
%% chain = sequence of realizations from the simulation
%% Modification of progam by L&S.
n = length(x); %% what is the size of the state vector?
E = rand(T,1); %% T-vector of draws from independent uniform [0,1]
cumsumP = P*triu(ones(size(P)));
%% creates a matrix whose rows are the cumulative sums of
%% the rows of P
%%%%% SET INITIAL STATE USING pi0
E0 = rand(1,1);
ppi0 = [0,cumsum(pi0)];
s0 = ((E0<=ppi0(2:n+1)).*(E0>ppi0(1:n)))';
s = s0;
%%%%% ITERATE ON THE CHAIN
for t=1:T,
state(:,t) = s;
ppi = [0,s'*cumsumP];
s = ((E(t)<=ppi(2:n+1)).*(E(t)>ppi(1:n)))';
end
chain = x'*state;
来源:http://www-scf.usc.edu/~ngarnold/Markov%20Chains%20Notes.pdf