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 CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by