2013-05-13 126 views
1

我有狀態K = 8個狀態轉移概率矩陣,時間序列中有限狀態空間馬爾可夫鏈

反式=

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

做以下工作的解決方案? – 2013-05-14 06:29:21

+0

@HarshalPandya我已經有了你給的代碼,但不幸的是,這不適合我的情況。我的問題是我需要從轉換矩陣生成時間序列向量。在這裏,我沒有找到時間序列向量。 – 2013-05-14 08:19:00

+0

糾正我,如果我錯了,但不是一個時間序列只是一個向量的連續狀態樣本給定的轉換概率和初始狀態。如果是這樣,那麼在下面的代碼設置T = 100會給你一個鏈中的長度爲100的向量,這將是你的時間序列。 – 2013-05-14 21:49:34

回答

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