home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / scripts / statistics / ols.m < prev    next >
Text File  |  1996-09-28  |  2KB  |  70 lines

  1. # Copyright (C) 1994, 1995 John W. Eaton
  2. #
  3. # This file is part of Octave.
  4. #
  5. # Octave is free software; you can redistribute it and/or modify it
  6. # under the terms of the GNU General Public License as published by the
  7. # Free Software Foundation; either version 2, or (at your option) any
  8. # later version.
  9. #
  10. # Octave is distributed in the hope that it will be useful, but WITHOUT
  11. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12. # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13. # for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with Octave; see the file COPYING.  If not, write to the Free
  17. # Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19. function [BETA, SIGMA, R] = ols (Y, X)
  20.  
  21. # usage: [BETA, SIGMA [, R]] = ols (Y, X)
  22. #
  23. # Ordinary Least Squares (OLS) estimation for the multivariate model
  24. #
  25. #     Y = X*B + E,  mean(E) = 0,  cov(vec(E)) = kron(S,I)
  26. #
  27. # with Y ... T x p     As usual, each row of Y and X is an observation
  28. #      X ... T x k     and each column a variable.
  29. #      B ... k x p
  30. #      E ... T x p.
  31. #
  32. # BETA is the OLS estimator for B, i.e.
  33. #
  34. #   BETA = pinv(X)*Y,
  35. #
  36. # where pinv(X) denotes the pseudoinverse of X.
  37. # SIGMA is the OLS estimator for the matrix S, i.e.
  38. #
  39. #   SIGMA = (Y - X*BETA)'*(Y - X*BETA) / (T - rank(X)).
  40. #
  41. # R = Y - X*BETA is the matrix of OLS residuals.
  42.  
  43. # Written by Teresa Twaroch (twaroch@ci.tuwien.ac.at) May 1993.
  44. # Dept of Probability Theory and Statistics TU Wien, Austria.
  45.  
  46.   if (nargin != 2)
  47.     error("usage : [BETA, SIGMA [, R]] = ols (Y, X)");
  48.   endif
  49.  
  50.   [nr, nc] = size (X);
  51.   [ry, cy] = size (Y);
  52.   if (nr != ry)
  53.     error ("ols: incorrect matrix dimensions");
  54.   endif
  55.  
  56.   Z = X' * X;
  57.   r = rank (Z);
  58.  
  59.   if (r == nc)
  60.     BETA = inv (Z) * X' * Y;
  61.   else
  62.     BETA = pinv (X) * Y;
  63.   endif
  64.  
  65.   R = Y - X * BETA;
  66.   SIGMA = R' * R / (nr - r);
  67.  
  68. endfunction
  69.  
  70.