6

I have 11 states, and a transition probability matrix, but I don't have emissions as my model is not hidden. It consists only of states (1,2,3, ..., 11)
I want to generate random states based on my transition probability matrix, but the HMM tool box requires an emission probability matrix. What should I do?

[seq, states] = hmmgenerate(100, Trans, Emis) 
1
  • 1
    if you don't have the hidden component of HMM, then its simply a Markov Chain Commented Jun 15, 2012 at 18:55

1 Answer 1

7

Consider the following:

%# number of states N = 11; %# some random transition matrix trans = rand(N,N); trans = bsxfun(@rdivide, trans, sum(trans,2)); %# fake emission matrix (only one symbol) emis = ones(N,1); %# get a sample of length = 10 [~,states] = hmmgenerate(10, trans, emis) 

The sequence of states generated:

>> states states = 10 1 3 11 9 4 11 1 4 6 

EDIT:

In fact working with a Markov chain is relatively easy, that we can do it ourselves. Here is another example without using HMM functions from the stats toolbox.

%# number of states N = 3; %# transition matrix trans = rand(N,N); trans = bsxfun(@rdivide, trans, sum(trans,2)); %# probability of being in state i at time t=0 prior = rand(1,N); prior = prior ./ sum(prior); %# generate a sequence of states len = 100; %# length of sequence states = zeros(1,len); states(1) = randsample(N, 1, true, prior); for t=2:len states(t) = randsample(N, 1, true, trans(states(t-1),:)); end %# show sequence stairs(states, 'LineWidth',2) set(gca, 'YGrid','on', 'YLim',[0 N+1]) xlabel('time'), ylabel('states') title('sequence of states') 

sequence of states

I am using RANDSAMPLE function to sample at each iteration. If you want to use only core functions (no toolboxes), see Weighted random numbers in MATLAB for an alternative.

Sign up to request clarification or add additional context in comments.

7 Comments

Thanks a lot for your helpful answer, I tried it but it is not giving me a satisfaction final result, coz I am applying it on monte carlo simulation and compare the results to something and there's a big error.
@RadwaMohamed: When you say "error" I have to ask how are you comparing the results? Remember that the sampling here involves randomness so its unlikely you will ever get the same result on two different runs...
If you are interested, see here for an example application of Markov chains to generate random words (the implementation is very similar to the one I added)
yes I know that I will not get the same result on two different runs, but if u run this experiment for 2500 times you will get the same average. That's how monte carlo works. So I am comparing the average to the actual results I have. It should be the same. That's what I mean. Thanks a lot for your help.
@RadwaMohamed: there is no way for us to compare the results unless you share your actual code...
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.