Daniel@0: function [ypred, ll, mse] = eval_AR_perf(coef, C, y, model) Daniel@0: % Evaluate the performance of an AR model. Daniel@0: % Daniel@0: % Inputs Daniel@0: % coef(:,:,k,m) - coef. matrix to use for k steps back, model m Daniel@0: % C(:,:,m) - cov. matrix for model m Daniel@0: % y(:,t) - observation at time t Daniel@0: % model(t) - which model to use at time t (defaults to 1 if not specified) Daniel@0: % Daniel@0: % Outputs Daniel@0: % ypred(:,t) - the predicted value of y at t based on the evidence thru t-1. Daniel@0: % ll - log likelihood Daniel@0: % mse - mean squared error = sum_t d_t . d_t, where d_t = pred(y_t) - y(t) Daniel@0: Daniel@0: [s T] = size(y); Daniel@0: k = size(coef, 3); Daniel@0: M = size(coef, 4); Daniel@0: Daniel@0: if nargin<4, model = ones(1, T); end Daniel@0: Daniel@0: ypred = zeros(s, T); Daniel@0: ypred(:, 1:k) = y(:, 1:k); Daniel@0: mse = 0; Daniel@0: ll = 0; Daniel@0: for j=1:M Daniel@0: c(j) = log(normal_coef(C(:,:,j))); Daniel@0: invC(:,:,j) = inv(C(:,:,j)); Daniel@0: end Daniel@0: coef = reshape(coef, [s s*k M]); Daniel@0: Daniel@0: for t=k+1:T Daniel@0: m = model(t-k); Daniel@0: past = y(:,t-1:-1:t-k); Daniel@0: ypred(:,t) = coef(:, :, m) * past(:); Daniel@0: d = ypred(:,t) - y(:,t); Daniel@0: mse = mse + d' * d; Daniel@0: ll = ll + c(m) - 0.5*(d' * invC(:,:,m) * d); Daniel@0: end Daniel@0: mse = mse / (T-k+1); Daniel@0: