Transition Matrix that compares two elements to the next two elements.
1 view (last 30 days)
Show older comments
Ellie
on 27 Jul 2015
Commented: Walter Roberson
on 28 Jul 2015
Hi all, I am trying to modify this code to create a transition matrix that compares two elements to the next two elements. As of now the code successfully compares two elements to the next one element. I have been trying to modify it, but have not had any luck. Any help would be greatly appreciated. Thanks.
close all
clc
dataset = [1 2 1 1 1 2 2 2 1 1 1 2 2];
precision = 1;
markovChain = (round(dataset/precision)).*precision;
%number of states
Nstates = max(markovChain);
%get Norder-contiguous sequences of the markov chain
ngrams = [];
for i = 0:1
ngrams = [ngrams, circshift(markovChain,[0 -1*(i)])'];
end
ngrams = cellstr(num2str( ngrams));
ngrams = ngrams(1:end-2);
%create all combinations of Norder-contiguous sequences
[x{1:2}] = ndgrid(1:Nstates);
%format x to cell
evalStr = ['xCell = cellstr(num2str(['];
for i = 1:2
evalStr = [evalStr 'x{' num2str(i) '}(:) '];
end
evalStr = [evalStr ']));'];
eval(evalStr);
%map ngrams to numbers
[gn,~,g]=unique([xCell;ngrams]);
s1 = g(Nstates^2+1:end);
%states following the ngrams
s2 = markovChain(3:end);
%get transition matrix
tm = full(sparse(s1,s2,1,Nstates^2,Nstates^2) );
transitionMatrix = bsxfun(@rdivide, tm, sum(tm,2));
9 Comments
Walter Roberson
on 28 Jul 2015
I have given a solution in http://uk.mathworks.com/matlabcentral/answers/231381-error-using-accumarray-third-input-sz-must-be-a-full-row-vector-with-one-element-for-each-column-of to the form of the question presented there, which does not use those messy eval().
Accepted Answer
Azzi Abdelmalek
on 27 Jul 2015
Edited: Azzi Abdelmalek
on 27 Jul 2015
a=[1 2 1 1 1 2 2 2 1 1 1 2 2];
b=[0 1 0 0; 0.5 0 0 0.5; 1 0 0 0; 0.5 0 0.5 0];
state=[1 1;1 2;2 1;2 2];
q=zeros(4);
for k=1:4
for p=1:4
q(p,k)=numel(strfind(a,[state(k,:) state(p,:)]));
end
q(:,k)=q(:,k)/sum(q(:,k));
end
q
The result
q =
0 0.5000 1.0000 0.5000
0.5000 0 0 0
0 0 0 0.5000
0.5000 0.5000 0 0
0 Comments
More Answers (0)
See Also
Categories
Find more on Filter Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!