function [probExclusive, pA, pB] = calcProbExclusive(class, exclusive,distribA, distribB,... inputsDistribA, inputsDistribB, typeProbability) % Calculates the probability(true or empirical) of AnotB, or BnotA % Inputs % 0. class: 'AnotB' or 'BnotA' - indicates whether the vector is AnotB or BnotA % 1. vector representing AnotB or BnotA % 2. distribA: A's distribution. % 3. distribB: B's distribution % 4. inputsDistribA: input parameters to A's distribution % 5. inputsDistribB: input parameters to B's distribution % 6. typeProbability: 0 => true probability. 1 => empirical probability dim = length(exclusive); if(typeProbability == 0) % pA(i) = P(A(i) = 1) pA = trueProbability(distribA, inputsDistribA); pB = trueProbability(distribB, inputsDistribB); else pA = empiricalProbability(distribA, inputsDistribA); pB = empiricalProbability(distribB, inputsDistribB); end probExclusive = 1; for i=1:dim if(class == 'AnotB') % p1 = P(A(i) = 1) . P(B(i) = 0) p1=pA(i) .* (1-pB(i)); % p0 = P(A(i) = 0) . P(B(i) = 1) p0 = (1-pA(i)) .* pB(i); else % p1 = P(B(i) = 1) . P(A(i) = 0) p1=pB(i) .* (1-pA(i)); % p0 = P(B(i) = 0) . P(A(i) = 1) p0 = (1-pB(i)) .* pA(i); end if(exclusive(i) == 1) probExclusive = probExclusive .* p1; elseif(exclusive(i) == 0) probExclusive = probExclusive .* p0; else % exclusive(i) = null, ie A and B share this feature %probExclusive = probExclusive .* (1-p1-p0); probExclusive = probExclusive * 1; end end