wolffd@0: function [likXandY, likYgivenX, post] = cwr_prob(cwr, X, Y); wolffd@0: % CWR_EVAL_PDF cluster weighted regression: evaluate likelihood of Y given X wolffd@0: % function [likXandY, likYgivenX, post] = cwr_prob(cwr, X, Y); wolffd@0: % wolffd@0: % likXandY(t) = p(x(:,t), y(:,t)) wolffd@0: % likXgivenY(t) = p(x(:,t)| y(:,t)) wolffd@0: % post(c,t) = p(c | x(:,t), y(:,t)) wolffd@0: wolffd@0: [nx N] = size(X); wolffd@0: nc = length(cwr.priorC); wolffd@0: wolffd@0: if nc == 1 wolffd@0: [mu, Sigma] = cwr_predict(cwr, X); wolffd@0: likY = gaussian_prob(Y, mu, Sigma); wolffd@0: likXandY = likY; wolffd@0: likYgivenX = likY; wolffd@0: post = ones(1,N); wolffd@0: return; wolffd@0: end wolffd@0: wolffd@0: wolffd@0: % likY(c,t) = p(y(:,t) | c) wolffd@0: likY = clg_prob(X, Y, cwr.muY, cwr.SigmaY, cwr.weightsY); wolffd@0: wolffd@0: % likX(c,t) = p(x(:,t) | c) wolffd@0: [junk, likX] = mixgauss_prob(X, cwr.muX, cwr.SigmaX); wolffd@0: likX = squeeze(likX); wolffd@0: wolffd@0: % prior(c,t) = p(c) wolffd@0: prior = repmat(cwr.priorC(:), 1, N); wolffd@0: wolffd@0: post = likX .* likY .* prior; wolffd@0: likXandY = sum(post, 1); wolffd@0: post = post ./ repmat(likXandY, nc, 1); wolffd@0: %loglik = sum(log(lik)); wolffd@0: %loglik = log(lik); wolffd@0: wolffd@0: likX = sum(likX .* prior, 1); wolffd@0: likYgivenX = likXandY ./ likX;