summaryrefslogtreecommitdiff
path: root/macros/autoreg_matrix.sci
blob: 95eb35647419141385588b77096cfc7cb19b154a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function x = autoreg_matrix (y, k)
// Given a time series (vector) Y, return a matrix with ones in the first column and the first K lagged values of Y in the other columns.
//Calling Sequence:
//autoreg_matrix(Y, K)
//Parameters:
//Y: vector
//K: scalar
//Description:
// Given a time series (vector) Y, return a matrix with ones in the first column and the first K lagged values of Y in the other columns.
//In other words, for T > K, '[1, Y(T-1), ..., Y(T-K)]' is the t-th row of the result.
//The resulting matrix may be used as a regressor matrix in autoregressions.
//Examples:
//autoreg_matrix([1,2,3], 2)
//ans =
//      1.    0.    0.
//      1.    1.    0.
//      1.    2.    1.

  funcprot(0);

  if (argn(2) ~= 2)
    error("autoreg_matrix: wrong number of input arguments") ;
  end

  if (~ (isvector (y)))
    error ("autoreg_matrix: y must be a vector");
  end

  T = length (y);
  y = matrix(y, T, 1);
  x = ones (T, k+1);
  for j = 1 : k
    x(:, j+1) = [(zeros(j, 1)); y(1:T-j)];
  end

endfunction

//input validation:
//assert_checkerror("autoreg_matrix(1)", "autoreg_matrix: wrong number of input arguments");
//assert_checkerror("autoreg_matrix(1, 2, 3)", "Wrong number of input arguments.");
//assert_checkerror("autoreg_matrix(1, 2)", "autoreg_matrix: y must be a vector");
//assert_checkerror("autoreg_matrix([1, 2; 3, 4], 2)", "autoreg_matrix: y must be a vector");

//tests:
//assert_checkequal(autoreg_matrix([1, 2], -1), []);
//assert_checkequal(autoreg_matrix([1, 2, 3], 2), [1, 0, 0; 1, 1, 0; 1, 2, 1]);
//assert_checkequal(autoreg_matrix([1, 2, 3], 2), autoreg_matrix([1; 2; 3], 2));
//assert_checkequal(autoreg_matrix([1, 2, 3, 4, 5], 0), [1; 1; 1; 1; 1]);
//assert_checkequal(autoreg_matrix([-1; -3; -5; -7; -9], 5), [1 0 0 0 0 0;1 -1 0 0 0 0;1 -3 -1 0 0 0;1 -5 -3 -1 0 0;1 -7 -5 -3 -1 0])
//assert_checkequal(autoreg_matrix([1+2*%i, 5+4*%i, -4*%i, -1-6*%i], 1), [1, 0; 1, 1 + 2*%i; 1, 5 + 4*%i; 1, -4*%i]);
//assert_checkequal(autoreg_matrix([1+2*%i, 5+4*%i, -4*%i, -1-6*%i], 3), autoreg_matrix([1+2*%i; 5+4*%i; -4*%i; -1-6*%i], 3));
//assert_checkequal(autoreg_matrix([-%i; -3-%i; 5+6*%i; 7+9*%i;], 3), [1 0 0 0;1 -%i 0 0;1 -3-%i -%i 0;1 5+6*%i -3-%i -%i]);
//assert_checkequal(autoreg_matrix([-%i; -3-%i; 5+6*%i; 7+9*%i;], 0), [1; 1; 1; 1]);