design ============================================== Purpose ---------------- Creates a design matrix of 0's and 1's from a column vector of numbers specifying the columns in which the 1's should be placed. Format ---------------- .. function:: y = design(x) :param x: Vector specifying the columns in which 1's for the design matrix should be placed. :type x: Nx1 vector :return y: each row of *y* will contain a single 1, and the rest 0's. The one in the ith row will be in the :code:`round(x[i, 1])` column. The dimension *K* is such that :code:`K = maxc(x)`. :rtype y: NxK matrix Examples ---------------- Example 1: Create dummy variables +++++++++++++++++++++++++++++++++ :func:`design` makes it easy to create dummy variables from a vector of integers. :: // Vector of classes c = { 3, 1, 1, 3, 2 }; // Create dummy variable d = design(c); After the above code: :: d = 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 Example 2: Create a permutation matrix ++++++++++++++++++++++++++++++++++++++ This example uses design to interchange the rows of a matrix. :: // Suppress printing of digits after the decimal place format /rd 6,0; // Set the rng seed for repeatable random numbers rndseed 345425235; /* ** Create a 4x4 matrix of random integers with a standard ** deviation of 10 */ x = round(10*rndn(4, 4)); print x; The code above returns: :: 4 12 -1 -10 5 -3 12 8 12 -2 21 -21 -7 -13 0 -1 Continuing with the example: :: // The order of the rows we want row_order = { 3, 1, 4, 2 }; // Create a permutation matrix from 'row_order' p = design(row_order); print p; This section returns: :: 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 We can use ``p`` to permutate the matrix ``x`` :: /* ** Create a permuted version of 'x' with our preferred row ** order */ x2 = p*x; print x2; This final section returns: :: 12 -2 21 -21 4 12 -1 -10 -7 -13 0 -1 5 -3 12 8 This last print statement shows us that we have indeed changed the order of the rows. In *x* the row order is 1, 2, 3, 4. However, in *x2*, the row order is 3, 1, 4, 2 (i.e. the third row is now first, the first row is now second, etc.) Remarks ------- Note that *x* does not have to contain integers: it will be rounded to nearest integer if necessary. Source ------ design.src .. seealso:: Functions :func:`cumprodc`, :func:`cumsumc`, :func:`recserrc`