Chapter 15. Matrix manipulation
130
The mread function accepts one string parameter: the name of the (plain text) file from which the
matrix is to be read. The file in question may start with any number of comment lines, defined
as lines that start with the hash mark, “#”; such lines are ignored. Beyond that, the content must
conform to the following rules:
1. The first non-comment line must contain two integers, separated by a space or a tab, indicat-
ing the number of rows and columns, respectively.
2. The columns must be separated by spaces or tab characters.
3. The decimal separator must be the dot “.” character.
Should an error occur (such as the file being badly formatted or inaccessible), an empty matrix (see
section15.2) is returned.
The complementary function mwrite produces text filesformattedas described above. The column
separator is the tab character, so import into spreadsheets should be straightforward. Usage is
illustrated in example15.2. Matrices stored via the mwrite command can be easily read by other
programs; the following table summarizes the appropriate commands for reading a matrix A from
afile called a.mat in some widely-used programs.
3
Note that the Python example requires that the
numpy module is loaded.
Program
Sample code
GAUSS
tmp[] = load a.mat;
A = reshape(tmp[3:rows(tmp)],tmp[1],tmp[2]);
Octave
fd = fopen("a.mat");
[r,c] = fscanf(fd, "%d %d", "C");
A = reshape(fscanf(fd, "%g", r*c),c,r)’;
fclose(fd);
Ox
decl A = loadmat("a.mat");
R
A <- as.matrix(read.table("a.mat", skip=1))
Python
A = numpy.loadtxt(’a.mat’, skiprows=1)
Julia
A = readdlm("a.mat", skipstart=1)
Optionally, the mwrite and mread functions can use gzip compression: this is invoked if the name
of the matrix file has the suffix“.gz.” In this case the elements of the matrix are written in a single
column. Note, however, that compression should not be applied when writing matrices for reading
by third-party software unless you are sure that the software can handle compressed data.
15.7 Matrix accessors
In addition to the matrix functions discussed above, various “accessor” strings allow you to create
copies of internal matrices associated with models previously estimated. These are set out in
Table15.4.
Many of the accessors in Table15.4 behave somewhat differently depending on the sort of model
that is referenced, as follows:
 Single-equation models: $sigma gets a scalar (the standard error of the regression); $coeff
and $stderr get column vectors; $uhat and $yhat get series.
3
Matlabusersmayfind the Octave example helpful,sincethetwoprogramsare mostly compatible with oneanother.
Export pdf to powerpoint - Library application component:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Export pdf to powerpoint - Library application component:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
Chapter 15. Matrix manipulation
131
Example 15.2: Matrixinput/output via text files
nulldata 64
scalar n = 3
string f1 = "a.csv"
string f2 = "b.csv"
matrix a = mnormal(n,n)
matrix b = inv(a)
err = mwrite(a, f1)
if err != 0
fprintf "Failed to write %s\n", f1
else
err = mwrite(b, f2)
endif
if err != 0
fprintf "Failed to write %s\n", f2
else
c = mread(f1)
d = mread(f2)
a = c*d
printf "The following matrix should be an identity matrix\n"
print a
endif
$coeff
matrix of estimated coefficients
$compan
companion matrix (after VAR or VECM estimation)
$jalpha
matrix  (loadings) from Johansen’s procedure
$jbeta
matrix  (cointegration vectors) from Johansen’s procedure
$jvbeta
covariance matrix for the unrestricted elements of  from Johansen’s procedure
$rho
autoregressive coefficients for error process
$sigma
residual covariance matrix
$stderr
matrix of estimated standard errors
$uhat
matrix of residuals
$vcv
covariance matrix of parameter estimates
$vma
VMA matrices in stacked form (see section26.2)
$yhat
matrix of fitted values
Table 15.4: Matrix accessors formodel data
Library application component:Online Convert PowerPoint to PDF file. Best free online export
Online Powerpoint to PDF Converter. Download Free Trial. Then just wait until the conversion from Powerpoint to PDF is complete and download the file.
www.rasteredge.com
Library application component:C# WPF PDF Viewer SDK to convert and export PDF document to other
Viewer & Editor. WPF: View PDF. WPF: Annotate PDF. WPF: Export PDF. WPF: Print PDF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint
www.rasteredge.com
Chapter 15. Matrix manipulation
132
 System estimators: $sigma gets the cross-equation residual covariance matrix; $uhat and
$yhat get matrices with one column per equation. The format of $coeff and $stderr de-
pends on the nature of the system: for VARs and VECMs (where the matrix of regressors is
the same for all equations) these return matrices with one column per equation, but for other
system estimators they return a big column vector.
 VARs and VECMs: $vcv is not available, but X
0
X
1
(where X is the common matrix of regres-
sors) is available as $xtxinv.
Ifthe accessors are given without any prefix, they retrieve results from the last model estimated, if
any. Alternatively, they may be prefixed with the name of a saved model plus a period (.), in which
case they retrieve results from the specified model. Here are some examples:
matrix u = $uhat
matrix b = m1.$coeff
matrix v2 = m1.$vcv[1:2,1:2]
The first command grabs the residuals from the last model; the second grabs the coefficient vector
from model m1; and the third (which uses the mechanism of sub-matrix selection described above)
grabs a portion of the covariance matrix from model m1.
Ifthe model in question a VAR or VECM (only) $compan and $vma return the companion matrixand
the VMA matrices in stacked form, respectively (see section26.2 for details). After a vector error
correction model is estimated via Johansen’s procedure, the matrices $jalpha and $jbeta are also
available. These have a number of columns equal to the chosen cointegration rank; therefore, the
product
matrix Pi = $jalpha * $jbeta’
returns the reduced-rank estimate of A1. Since  is automatically identified via the Phillips nor-
malization (see section27.5), its unrestricted elements do have a proper covariance matrix, which
can be retrieved through the $jvbeta accessor.
15.8 Namespace issues
Matrices share a common namespace with data series and scalar variables. In other words, no two
objects of any of these types can have the same name. It is an error to attempt to change the type
of an existing variable, for example:
scalar x = 3
matrix x = ones(2,2) # wrong!
It is possible, however, to delete or rename an existing variable then reuse the name for a variable
of a different type:
scalar x = 3
delete x
matrix x = ones(2,2) # OK
15.9 Creating a data series from a matrix
Section15.1 above describes how to create a matrix from a data series or set of series. You may
sometimes wish to go in the opposite direction, that is, to copy values from a matrix into a regular
data series. The syntax for this operation is
series sname = mspec
Library application component:VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
PDF in WPF. Annotate PDF in WPF. Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create
www.rasteredge.com
Library application component:VB.NET PDF Converter Library SDK to convert PDF to other file
PDF Export. |. Home ›› XDoc.PDF ›› VB.NET PDF: PDF Export. for converting MicroSoft Office Word, Excel and PowerPoint document to PDF file in VB
www.rasteredge.com
Chapter 15. Matrix manipulation
133
where sname is the name of the series to create and mspec is the name of the matrix to copy from,
possibly followed by a matrixselection expression. Here are two examples.
series s = x
series u1 = U[,1]
It is assumed that x and U are pre-existing matrices. In the second example the series u1 is formed
from the first column of the matrix U.
For this operation to work, the matrix (or matrix selection) must be a vector with length equal to
either the full length of the current dataset, n, or the length of the current sample range, n
0
. If
n
0
<n then only n
0
elements are drawn from the matrix; if the matrix or selection comprises n
elements, the n
0
values starting at element t
1
are used, where t
1
represents the startingobservation
of the sample range. Any values in the series that are not assigned from the matrix are set to the
missing code.
15.10 Matrices and lists
To facilitate the manipulation of named lists of variables (see Chapter14), it is possible to convert
between matrices and lists. In section15.1 above we mentioned the facility for creating a matrix
from a list of variables, as in
matrix M = { listname }
That formulation, with the name ofthe list enclosedin braces, builds a matrix whose columns hold
the variables referenced in the list. What we are now describing is a different matter: if we say
matrix M = listname
(without the braces), we get a row vector whose elements are the ID numbers of the variables in the
list. This special case of matrix generation cannot be embedded in a compound expression. The
syntax must be as shown above, namely simple assignment of a list to a matrix.
To go in the other direction, you can include a matrix on the right-hand side of an expression that
defines a list, as in
list Xl = M
where M is a matrix. The matrix must be suitable for conversion; that is, it must be a row or column
vector containing non-negative integer values, none of which exceeds the highest ID number of a
series in the current dataset.
Example15.3 illustrates theuse of this sort ofconversion to“normalize” a list, movingthe constant
(variable 0) to first position.
15.11 Deleting a matrix
To delete a matrix, just write
delete M
where M is the name of the matrix to be deleted.
15.12 Printing a matrix
To print a matrix, the easiest way is to give the name of the matrix in question on a line by itself,
which is equivalent to using the print command:
Library application component:C# PDF Converter Library SDK to convert PDF to other file formats
PDF Export. |. Home ›› XDoc.PDF ›› C# PDF: PDF Export. Able to export PDF document to HTML file. Able to create convert PDF to SVG file.
www.rasteredge.com
Library application component:C# HTML5 PDF Viewer SDK to convert and export PDF document to
Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create PDF from Tiff. Create PDF from
www.rasteredge.com
Chapter 15. Matrix manipulation
134
Example 15.3: Manipulating a list
function void normalize_list (matrix *x)
# If the matrix (representing a list) contains var 0,
# but not in first position, move it to first position
if (x[1] != 0)
scalar k = cols(x)
loop for (i=2; i<=k; i++) --quiet
if (x[i] = 0)
x[i] = x[1]
x[1] = 0
break
endif
endloop
endif
end function
open data9-7
list Xl = 2 3 0 4
matrix x = Xl
normalize_list(&x)
list Xl = x
matrix M = mnormal(100,2)
M
print M
You can get finer control on the formatting ofoutput by using the printf command, as illustrated
in the interactive session below:
? matrix Id = I(2)
matrix Id = I(2)
Generated matrix Id
? print Id
print Id
Id (2 x 2)
1
0
0
1
? printf "%10.3f", Id
1.000
0.000
0.000
1.000
For presentation purposes you may wish to give titles to the columns of a matrix. For this you can
use the colnames function: the first argument is a matrix and the second is either a named list of
variables, whose names will be used asheadings,or a string that contains asmany space-separated
substrings as the matrix has columns. For example,
? matrix M = mnormal(3,3)
? colnames(M, "foo bar baz")
? print M
M (3 x 3)
Library application component:C# WPF PDF Viewer SDK to view, annotate, convert and print PDF in
Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create PDF from Tiff. Create PDF from
www.rasteredge.com
Library application component:VB.NET PDF- HTML5 PDF Viewer for VB.NET Project
PDF in WPF. Annotate PDF in WPF. Export PDF in WPF. Print PDF in WPF. PDF Create. Create PDF from Word. Create PDF from Excel. Create PDF from PowerPoint. Create
www.rasteredge.com
Chapter 15. Matrix manipulation
135
foo
bar
baz
1.7102
-0.76072
0.089406
-0.99780
-1.9003
-0.25123
-0.91762
-0.39237
-1.6114
15.13 Example: OLS using matrices
Example15.4 shows how matrix methods can be used to replicate gretl’s built-in OLS functionality.
Example 15.4: OLS via matrix methods
open data4-1
matrix X = { const, sqft }
matrix y = { price }
matrix b = invpd(X’X) * X’y
print "estimated coefficient vector"
b
matrix u = y - X*b
scalar SSR = u’u
scalar s2 = SSR / (rows(X) - rows(b))
matrix V = s2 * inv(X’X)
V
matrix se = sqrt(diag(V))
print "estimated standard errors"
se
# compare with built-in function
ols price const sqft --vcv
Chapter 16
Cheat sheet
This chapter explains how to perform some common—and some not so common—tasks in gretl’s
scripting language, hansl. Some but not all of the techniques listed here are also available through
the graphical interface. Although the graphical interface may be more intuitive and less intimidat-
ing at first,we encourage usersto take advantage of the power of gretl’s scripting language as soon
as they feel comfortable with the program.
16.1 Dataset handling
“Weird” periodicities
Problem: You havedata sampledeach 3 minutesfrom 9am onwards; you’ll probably want to specify
the hour as 20 periods.
Solution:
setobs 20 9:1 --special
Comment: Now functions like sdiff() (“seasonal” difference) or estimation methods like seasonal
ARIMA will work as expected.
Generating a panel dataset of given dimensions
Problem: You want to generate via nulldata a panel dataset and specify in advance the number of
units and the time length of your series via two scalar variables.
Solution:
scalar n_units = 100
scalar T = 12
scalar NT = T * n_units
nulldata NT --preserve
setobs T 1:1 --stacked-time-series
Comment: The essential ingredient that we use here is the --preserve option: it protects existing
scalars (and matrices, for that matter) from being trashed by nulldata, thus making it possible to
use the scalar T in the setobs command.
Help, my data are backwards!
Problem: Gretl expects time series data to be in chronological order (most recent observation last),
but you have imported third-party data that are in reverse order (most recent first).
Solution:
setobs 1 1 --cross-section
series sortkey = -obs
dataset sortby sortkey
setobs 1 1950 --time-series
136
Chapter 16. Cheat sheet
137
Comment: The first line is required only if the data currently have a time series interpretation: it
removes that interpretation, because (for fairly obvious reasons) the dataset sortby operation is
not allowed for time series data. The following two lines reverse the data, using the negative of the
built-in index variable obs. The last line is just illustrative: it establishes the data as annual time
series, starting in 1950.
If you have a dataset that is mostly the right way round, but a particular variable is wrong, you can
reverse that variable as follows:
x = sortby(-obs, x)
Dropping missing observations selectively
Problem: You have a dataset with many variables and want to restrict the sample to those observa-
tions for which there are no missing observations for the variables x1, x2 and x3.
Solution:
list X = x1 x2 x3
smpl --no-missing X
Comment: You can now save the file via a store command to preserve a subsampled version of
the dataset. Alternative solutions based on the ok function, such as
list X = x1 x2 x3
series sel = ok(X)
smpl sel --restrict
are perhaps less obvious, but more flexible. Pick your poison.
“By” operations
Problem: You have a discretevariable dandyou want to runsome commands(forexample,estimate
amodel) by splitting the sample according to the values of d.
Solution:
matrix vd = values(d)
m = rows(vd)
loop i=1..m
scalar sel = vd[i]
smpl d==sel --restrict --replace
ols y const x
endloop
smpl --full
Comment: The main ingredient here is a loop. You can have gretl perform as many instructions as
you want for each value of d, as long as they are allowed inside a loop. Note, however, that if all
you want is descriptive statistics, the summary command does have a --by option.
Adding a time series to a panel
Problem: You have a panel dataset (comprising observations of n indidivuals in each of T periods)
and you want to add a variable which is available in straight time-series form. For example, you
want to add annual CPI data to a panel in order to deflate nominal income figures.
In gretl a panel is represented in stacked time-series format, so in effect the task is to create a new
variable which holds n stacked copies ofthe original time series. Let’s say the panel comprises500
individuals observed in the years 1990, 1995 and 2000 (n  500, T  3), and we have these CPI
data in the ASCII file cpi.txt:
Chapter 16. Cheat sheet
138
date cpi
1990 130.658
1995 152.383
2000 172.192
What we need is for the CPI variable in the panel to repeat these three values 500 times.
Solution: Simple! With the panel dataset open in gretl,
append cpi.txt
Comment: If the length of the time series is the same as the length of the time dimension in the
panel (3 in this example), gretl will perform the stacking automatically. Rather than using the
append command you could use the “Append data” item under the File menu in the GUI program.
For this to work, your main dataset must be recognized as a panel. This can be arranged via the
setobs command or the “Dataset structure” item under the Data menu.
Easter
Problem: I have a 7-day daily dataset. How do Icreate an “Easter” dummy?
Solution: We have the easterday() function, which returns month and day of Easter given the
year. The following is an example script which uses this function and a few string magic tricks:
series Easter = 0
loop y=2011..2016
a = easterday(y)
m = floor(a)
d = round(100*(a-m))
ed_str = sprintf("%04d-%02d-%02d", y, m, d)
Easter["@ed_str"] = 1
endloop
Comment: The round() function is necessary for the “day” component because otherwise floating-
point problems may ensue. Try the year 2015, for example.
16.2 Creating/modifying variables
Generating a dummy variable for a specific observation
Problem: Generate d
t
0 for all observation but one, for which d
t
1.
Solution:
series d = (t=="1984:2")
Comment: The internal variable t is used to refer to observations in string form, so if you have a
cross-section sample you may just use d = (t=="123"). If the dataset has observation labels you
can use the corresponding label. For example, if you open the dataset mrw.gdt, supplied with gretl
among the examples, a dummy variable for Italy could be generated via
series DIta = (t=="Italy")
Note that this methoddoes not require scripting at all. In fact, you might as well use the GUI Menu
“Add/Define new variable” for the same purpose, with the same syntax.
Chapter 16. Cheat sheet
139
Generating a discrete variable out of a set of dummies
Problem: The dummify function (also available as a command) generates a set of mutually exclusive
dummies from a discrete variable. The reverse functionality, however, seems to be absent.
Solution:
series x = lincomb(D, seq(1, nelem(D)))
Comment: Suppose you have a list D of mutually exclusive dummies, that is a full set of 0/1 vari-
ables coding for the value of some characteristic, such that the sum of the values of the elements
of D is 1 at each observation. This is, by the way, exactly what the dummify command produces.
The reverse job of dummify can be performed neatly by using the lincomb function.
The code above multiplies the first dummy variable in the list D by 1, the second one by 2, and so
on. Hence, the return value is a series whose value is i if andonly if the i-th member of D has value
1.
If you want your coding to start from 0 instead of 1, you’ll have to modify the code snippet above
into
series x = lincomb(D, seq(0, nelem(D)-1))
Recoding a variable
Problem: You want to perform a 1-to-1 recode on a variable. For example, consider tennis points:
you may have a variable x holding values 1 to 3 and you want to recode it to 15, 30, 40.
Solution 1:
series x = replace(x, 1, 15)
series x = replace(x, 2, 30)
series x = replace(x, 3, 40)
Solution 2:
matrix tennis = {15, 30, 40}
series x = replace(x, seq(1,3), tennis)
Comment: There are many equivalent ways to achieve the same effect, but for simple cases such
as this, the replace function is simple and transparent. If you don’t mind using matrices, scripts
using replace can also be remarkably compact. Note that replace also performs n-to-1 (“surjec-
tive”) replacements, such as
series x = replace{z, {2, 3, 5, 11, 22, 33}, 1)
which would turn all entries equal to 2, 3, 5, 11, 22 or 33 to 1 andleave the other ones unchanged.
Generating a “subset of values” dummy
Problem: You have a dataset which contains a fine-grained coding for some qualitative variable
and you want to “collapse” this to a relatively small set of dummy variables. Examples: you have
place of work by US state and you want a small set of regional dummies; or you have detailed
occupational codes from a census dataset and you want a manageable number of occupational
category dummies.
Let’s call the source series src and one of the target dummies D1. And let’s say that the values of
src to be grouped under D1 are 2, 13, 14 and 25.
“Longhand” solution:
Documents you may be interested
Documents you may be interested