#include "libscl.h" 

using namespace scl;

using std::cout;

int main(int argc, char** argp, char** envp)
{

  realmat raw_data;
  vecread("var.dat",raw_data);

  INTEGER n = raw_data.ncol() - 1;
  INTEGER m = raw_data.nrow();
  INTEGER K = m + 1;
  
  realmat X(n,K);
  realmat Y(n,m);

  for (INTEGER t = 2; t<=n ; t++) {
    for (INTEGER j = 1; j<=m; j++) {
      Y(t,j) = raw_data(j,t);
      X(t,1) = 1.0;
      X(t,1+j) = raw_data(j,t-1);
    }
  }

  realmat B = invpsd(T(X)*X)*T(X)*Y;

  realmat S = T(Y - X*B)*(Y - X*B);

  INTEGER rank;
  
  realmat XX = inv(T(X)*X,rank);

  cout << starbox("/rank, B, S, (X'X)^{-1}//");

  cout << "\n     rank = " << rank << '\n';
  cout << "\n     nobs = " << Y.nrow() << '\n';

  cout << B << S << XX;
  
  return 0;
}
