take sum log of probability matrix

1 回表示 (過去 30 日間)
Jay Hanuman
Jay Hanuman 2016 年 11 月 10 日
回答済み: Guillaume 2016 年 11 月 10 日
I have data
m= 1 8 3 3 3 8 4 1 8 4 1 6 7 10 10 8 6 8 6 8 6 3 3 8 3 9......2000
with sequence length 2000. with this data I made transition probability matrix p
1 2 3 4 5 6 7 8 9 10
1 0.0781 0.1317 0.0489 0.0652 0.1222 0.0713 0.1371 0.2077 0.0339 0.1039
2 0.0681 0.1482 0.1012 0.0669 0.0319 0.0783 0.0892 0.1163 0.1398 0.1602
3 0.0421 0.1672 0.1125 0.0798 0.0679 0.0805 0.0773 0.1898 0.0974 0.0855
4 0.1421 0.1099 0.0465 0.0661 0.0357 0.0420 0.1528 0.1698 0.1939 0.0411
5 0.1809 0.1485 0.0477 0.0486 0.0837 0.0594 0.1206 0.1773 0.0774 0.0558
6 0.0545 0.0881 0.1186 0.0401 0.1154 0.1202 0.2588 0.0777 0.0897 0.0369
7 0.1935 0.0494 0.0445 0.1698 0.0327 0.1044 0.0661 0.1079 0.0445 0.1872
8 0.0612 0.0564 0.1830 0.0858 0.0828 0.2106 0.0390 0.0318 0.0828 0.1668
9 0.2055 0.0522 0.3804 0.0449 0.0353 0.0449 0.0955 0.0385 0.0425 0.0602
10 0.0781 0.2253 0.0525 0.1133 0.1824 0.0456 0.0394 0.0871 0.0961 0.0802
and initial probability matrix r
1 2 3 4 5 6 7 8 9 10
0.1052 0.1186 0.1136 0.0799 0.0794 0.0892 0.1026 0.1191 0.0890 0.1034
now I want to select data with window size 10, so 10 elements of m i.e. 1 8 3 3 3 8 4 1 8 4 are selected. I want to take sum of log of transition probability and initial probability of corresponding selected elements of m. i.e. 1 8 3 3 3 8 4 1 8 4 are selected so
log(r1)+log(r3)+log(r4)+log(r8)+log(p11)+log(p13)+log(14)+log(18)+log(31)+log(33)+log(34)+log(38)+log(41)+log(43)+log(44)+log(48)+log(81)+log(83)+log(84)+log(88)
in above r1,r3,r4,r8 are initial probability and p11,p13... are transition probability. so above result would be one single value, now same above thing I want to do with sliding window by 1 position to next i.e. skipping previous element and adding next element so selected elements of m will be 8 3 3 3 8 4 1 8 4 1. how to do this for sliding window upto end. each window operation give one value so window operation value should be accumulate in one variable. how to do this.

回答 (1 件)

Guillaume
Guillaume 2016 年 11 月 10 日
This function will calculate the probability for a window:
function lp = logprobability(window, p, r)
uv = unique(window); %get unique values in window
[row, col] = ndgrid(uv); %generate all combinations of unique values
lp = sum(log(r(uv))) + sum(log(p(sub2ind(size(p), row(:), col(:)))));
end
To apply that to consecutive windows of size 10 of m:
windowsize = 10;
assert(mod(numel(m) / windowsize), 1) == 0, 'number of elements of m not a multiple of window size')
lps = cellfun(@(w) logprobability(w, p, r), mat2cell(m, 1, ones(1, numel(m)/windowsize) * windowsize));

カテゴリ

Help Center および File ExchangeTime Series Events についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by