ourMELONS/matlab/spatial/private/computeTotalLogml.m

42 lines
1.3 KiB
Mathematica
Raw Normal View History

2019-12-16 16:47:21 +01:00
function logml = computeTotalLogml
% compute the log marginal likelihood of the data
% Lu Cheng, 15.12.2012
global LOGML_TABLE;
global LOC_CQ_COUNTS;
global LOC_SP_COUNTS;
notEmpty = any(LOC_CQ_COUNTS,1);
npops = length(find(notEmpty == 1));
% the following codes added by Lu Cheng, 15.12.2012
% some lines might all be zero if some sequence is deleted
tmpIndsCq = find(any(LOC_CQ_COUNTS,2));
tmpIndsSp = find(any(LOC_SP_COUNTS,2));
locCqCounts = LOC_CQ_COUNTS(tmpIndsCq,notEmpty);
locSpCounts = LOC_SP_COUNTS(tmpIndsSp,notEmpty);
sumcliq=sum(locCqCounts, 2);
sumsep=sum(locSpCounts, 2);
ncliq = length(tmpIndsCq);
nsep = length(tmpIndsSp);
cliqsizes = sum(locCqCounts, 2)';
sepsizes = sum(locSpCounts, 2)';
cliqsizes = min([cliqsizes; npops*ones(1,ncliq)])';
sepsizes = min([sepsizes; npops*ones(1,nsep)])';
klikkitn = sum(sum(gammaln(locCqCounts + repmat(1./cliqsizes, [1 npops])))) ...
- sum(npops*(gammaln(1./cliqsizes))) ...
- sum(gammaln(sumcliq + 1));
septn = sum(sum(gammaln(locSpCounts + repmat(1./sepsizes, [1 npops])))) ...
- sum(npops*(gammaln(1./sepsizes))) ...
- sum(gammaln(sumsep + 1));
spatialPrior = (klikkitn - septn);
logml = sum(LOGML_TABLE) + spatialPrior;