diff toolboxes/FullBNT-1.0.7/KPMstats/cwr_predict.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_predict.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function  [mu, Sigma, weights, mask] = cwr_predict(cwr, X, mask_data)
+% CWR_PREDICT cluster weighted regression: predict Y given X 
+% function  [mu, Sigma] = cwr_predict(cwr, X)
+% 
+% mu(:,t) = E[Y|X(:,t)] = sum_c P(c | X(:,t)) E[Y|c, X(:,t)]
+% Sigma(:,:,t) = Cov[Y|X(:,t)]
+%
+% [mu, Sigma, weights, mask] = cwr_predict(cwr, X, mask_data)
+% mask(i) = sum_t sum_c p(mask_data(:,i) | X(:,t), c) P(c|X(:,t))
+% This evaluates the predictive density on a set of points
+% (This is only sensible if T=1, ie. X is a single vector)
+
+[nx T] = size(X);
+[ny nx nc] = size(cwr.weightsY);
+mu = zeros(ny, T);
+Sigma = zeros(ny, ny, T);
+
+if nargout == 4
+  comp_mask = 1;
+  N = size(mask_data,2);
+  mask = zeros(N,1);
+else
+  comp_mask = 0;
+end
+
+if nc==1
+  if isempty(cwr.weightsY)
+    mu = repmat(cwr.muY, 1, T);
+    Sigma = repmat(cwr.SigmaY, [1 1 T]);
+  else
+    mu = repmat(cwr.muY, 1, T) + cwr.weightsY * X;
+    Sigma = repmat(cwr.SigmaY, [1 1 T]);
+    %for t=1:T
+    %  mu(:,t) = cwr.muY + cwr.weightsY*X(:,t);
+    %  Sigma(:,:,t) = cwr.SigmaY;
+    %end
+  end
+  if comp_mask, mask = gaussian_prob(mask_data, mu, Sigma); end
+  weights = [];
+  return;
+end
+
+
+% likX(c,t) = p(x(:,t) | c)
+likX = mixgauss_prob(X, cwr.muX, cwr.SigmaX);
+weights = normalize(repmat(cwr.priorC, 1, T) .* likX, 1);
+for t=1:T
+  mut = zeros(ny, nc);
+  for c=1:nc
+    mut(:,c) = cwr.muY(:,c) + cwr.weightsY(:,:,c)*X(:,t);
+    if comp_mask
+      mask = mask + gaussian_prob(mask_data, mut(:,c), cwr.SigmaY(:,:,c)) * weights(c);
+    end
+  end
+  %w = normalise(cwr.priorC(:)  .* likX(:,t));
+  [mu(:,t), Sigma(:,:,t)] = collapse_mog(mut, cwr.SigmaY, weights(:,t));
+end