Chapter 16. Cheat sheet
140
series D1 = src==2 || src==13 || src==14 || src==25
Comment: The above works fine if the number ofdistinct valuesin the source to be condensed into
each dummy variable is fairly small, but it becomes cumbersome ifa single dummy must comprise
dozens of source values.
Clever solution:
matrix sel = {2,13,14,25}
series D1 = maxr({src} .= vec(sel)’) .> 0
Comment: The subset of values to be grouped together can be written out as a matrix relatively
compactly (first line). The magic that turns this into the desired series (second line) relies on the
versatility of the “dot” (element-wise) matrix operators. The expression “{src}” gets a column-
vector version of the input series—call this x—and “vec(sel)’” gets the input matrix as a row
vector, in case it’s a column vector or a matrix with both dimensions greater than 1—call this s. If
xis n1 and s is 1m, the “.=” operator produces an n m result, each element i;j of which
equals 1 if x
i
s
j
,otherwise 0. The maxr() function along with the “.>” operator (see chapter15
for both) then produces the result we want.
Of course,whichever procedure you use, you have to repeat for each ofthe dummy series you want
to create (but keep reading—the “proper” solution is probably what you want if you plan to create
several dummies).
Further comment: Note that the clever solution depends on converting what is “naturally” a vector
result into a series. This will fail if there are missing values in src, since (by default) missing values
will be skipped when converting src to x, and so the number of rows in the result will fall short
of the number of observations in the dataset. One fix is then to subsample the dataset to exclude
missing values before employing this method; another is to adjust the skip_missing setting via
the set command (see the Gretl Command Reference).
Proper solution:
The best solution, in terms of both computational efficiency and code clarity, would be using a
“conversion table” and the replace function, to produce a series on which the dummify command
can be used. For example, suppose we want to convert from a series called fips holding FIPS
codes
1
for the 50 US states plus the District of Columbia to a series holding codes for the four
standard US regions. We could create a 2 51 matrix—call it srmap—with the 51 FIPS codes on
the first row and the corresponding region codes on the second, and then do
series region = replace(fips, srmap[1,], srmap[2,])
Generating an ARMA(1,1)
Problem: Generate y
t
0:9y
t 1
"
t
0:5"
t 1
,with "
t
NIID0;1.
Recommended solution:
alpha = 0.9
theta = -0.5
series y = filter(normal(), {1, theta}, alpha)
“Bread and butter” solution:
alpha = 0.9
theta = -0.5
series e = normal()
1
FIPS is the Federal Information Processing Standard: it assigns numeric codes from 1 to 56 to the US states and
outlying areas.
Pdf to powerpoint - software application dll: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
Pdf to powerpoint - software application dll: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 16. Cheat sheet
141
series y = 0
series y = alpha * y(-1) + e + theta * e(-1)
Comment: The filter function is specifically designed for this purpose so in most cases you’ll
want to take advantage of its speed and flexibility. That said, in some cases you may want to
generate the series in a manner which is more transparent (maybe for teaching purposes).
In the second solution, the statement series y = 0 is necessary because the next statement eval-
uates y recursively, so y[1] must be set. Note that you must use the keyword series here instead
of writing genr y = 0 or simply y = 0, to ensure that y is a series and not a scalar.
Recoding a variable by classes
Problem: You want to recode a variable by classes. For example, you have the age of a sample of
individuals (x
i
)andyou need to compute age classes (y
i
)as
y
i
1 for x
i
<18
y
i
2 for 18 x
i
<65
y
i
3 for x
i
65
Solution:
series y = 1 + (x >= 18) + (x >= 65)
Comment: True and false expressions are evaluated as 1 and 0 respectively, so they can be ma-
nipulated algebraically as any other number. The same result could also be achieved by using the
conditional assignment operator (see below), but in most cases it would probably lead to more
convoluted constructs.
Conditional assignment
Problem: Generate y
t
via the following rule:
y
t
(
x
t
for d
t
>a
z
t
for d
t
a
Solution:
series y = (d > a) ? x : z
Comment: There are several alternatives to the one presented above. One is a brute force solution
using loops. Another one, more efficient but still suboptimal, would be
series y = (d>a)*x + (d<=a)*z
However, the ternary conditional assignment operator is not only the most numerically efficient
way to accomplish what we want, it is also remarkably transparent to read when one gets used to
it. Some readersmay find it helpful to note that the conditional assignment operator works exactly
the same way as the =IF() function in spreadsheets.
Generating a time index for panel datasets
Problem: gretl has a $unit accessor, but not the equivalent for time. What should I use?
Solution:
series x = time
Comment: The special construct genr time and its variants are aware of whether a dataset is a
panel.
software application dll: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
software application dll:RasterEdge XDoc.PowerPoint for .NET - SDK for PowerPoint Document
Able to view and edit PowerPoint rapidly. Convert. Convert PowerPoint to PDF. Convert PowerPoint to HTML5. Convert PowerPoint to Tiff. Convert PowerPoint to Jpeg
www.rasteredge.com
Chapter 16. Cheat sheet
142
Generating the “hat” values after an OLS regression
Problem: I’ve just run an OLS regression, and now I need the so-called the leverage values (also
known as the “hat” values). I know you can access residuals and fitted values through “dollar”
accessors, but nothing like that seems to be available for “hat” values.
Solution: “Hat” values are can be thought of as the diagonal of the projection matrix P
X
,or more
explicitly as
h
i
x
0
i
X
0
X
1
x
i
where X is the matrix of regressors and x
0
i
is its i-th row.
The reader is invited to study the code below, which offers four different solutions to the problem:
open data4-1.gdt --quiet
list X = const sqft bedrms baths
ols price X
# method 1
leverage --save --quiet
series h1 = lever
# these are necessary for what comes next
matrix mX
= {X}
matrix iXX = invpd(mX’mX)
# method 2
series h2 = diag(qform(mX, iXX))
# method 3
series h3 = sumr(mX .* (mX*iXX))
# method 4
series h4 = NA
loop i=1..$nobs --quiet
matrix x = mX[i,]’
h4[i] = x’iXX*x
endloop
# verify
print h1 h2 h3 h4 --byobs
Comment: Solution 1 is the preferable one: it relies on the built-in leverage command, which
computes the requested series quite efficiently, taking care of missing values, possible restrictions
to the sample, etcetera.
However,threemoreare shown fordidactical purposes,mainly to showthe user howto manipulate
matrices. Solution 2 first constructs the P
X
matrix explicitly,via the qform function, and then takes
its diagonal; this is definitely not recommended (despite its compactness), since you generate a
much bigger matrix than you actually need and waste a lot of memory and CPU cycles in the
process. It doesn’t matter very much in the present case, since the sample size is very small, but
with a big dataset this could be a very bad idea.
Solution 3 is more clever, and relies on the fact that, if you define Z  X  X
0
X
1
,then h
i
could
also be written as
h
i
x
0
i
z
i
Xk
i1
x
ik
z
i
k
which is in turn equivalent to the sum of the elements of the i-th row of X  Z, where  is the
element-by-element product. In this case, your clever usage of matrix algebra would produce a
solution computationally much superior to solution 2.
software application dll:C# WinForms Viewer: Load, View, Convert, Annotate and Edit
C#: Create PDF from PowerPoint; C#: Create PDF from Tiff; C#: Convert PDF to Word; C#: Convert PDF to Tiff; Convert Microsoft Office PowerPoint to PDF (.pdf).
www.rasteredge.com
software application dll:How to C#: Overview of Using XDoc.PowerPoint
How to C#: Overview of Using XDoc.PowerPoint. Overview for How to Use XDoc.PowerPoint in C# .NET Programming Project. PowerPoint Conversion.
www.rasteredge.com
Chapter 16. Cheat sheet
143
Solution 4 is the most old-fashioned one, and employs an indexed loop. While this wastes practi-
cally no memory and employs no more CPU cycles in algebraic operations than strictly necessary,
it imposes a much greater burden on the hansl interpreter, since handling a loop is conceptually
more complex than a single operation. In practice, you’ll find that for any realistically-sized prob-
lem, solution 4 is much slower that solution 3.
16.3 Neat tricks
Interaction dummies
Problem: You want to estimate the model y
i
x
i
1
z
i
2
d
i
3
d
i
z
i

4
"
t
,where d
i
is a
dummy variable while x
i
and z
i
are vectors of explanatory variables.
Solution: As of version 1.9.12, gretl provides the ^ operator to make this operation easy. See
section14.1 for details (especially example script14.1). But back in my day, we used loops to do
that! Here’s how:
list X = x1 x2 x3
list Z = z1 z2
list dZ = null
loop foreach i Z
series d$i = d * $i
list dZ = dZ d$i
endloop
ols y X Z d dZ
Comment: It’s amazing what string substitution can do for you, isn’t it?
Realized volatility
Problem: Given data by the minute, you want to compute the “realized volatility” for the hour as
RV
t
1
60
P
60
1
y
2
t:
.Imagine your sample starts at time 1:1.
Solution:
smpl --full
genr time
series minute = int(time/60) + 1
series second = time % 60
setobs minute second --panel
series rv = psd(y)^2
setobs 1 1
smpl second==1 --restrict
store foo rv
Comment: Here we trick gretl into thinking that our dataset is a panel dataset, where the minutes
are the “units” and the seconds are the “time”; this way, we can take advantage of the special
function psd(),panel standarddeviation. Then wesimply dropall observationsbut one per minute
and save the resulting data (store foo rv translates as “store in the gretl datafile foo.gdt the
series rv”).
Looping over two paired lists
Problem: Suppose you have two lists with the same number of elements, and you want to apply
some command to corresponding elements over a loop.
Solution:
software application dll:C# HTML5 Viewer: Load, View, Convert, Annotate and Edit PowerPoint
Such as load and view PowerPoint without Microsoft Office software installed, convert PowerPoint to PDF file, Tiff image and HTML file, as well as add
www.rasteredge.com
software application dll:C# powerpoint - Convert PowerPoint to PDF in C#.NET
C# PowerPoint - Convert PowerPoint to PDF in C#.NET. Online C# Tutorial for Converting PowerPoint to PDF (.pdf) Document. PowerPoint to PDF Conversion Overview.
www.rasteredge.com
Chapter 16. Cheat sheet
144
list L1 = a b c
list L2 = x y z
k1 = 1
loop foreach i L1 --quiet
k2 = 1
loop foreach j L2 --quiet
if k1 == k2
ols $i 0 $j
endif
k2++
endloop
k1++
endloop
Comment: The simplest way to achieve the result is to loop over all possible combinations and
filter out the unneeded ones via an if condition, as above. That said, in some cases variable names
can help. For example, if
list Lx = x1 x2 x3
list Ly = y1 y2 y3
then we could just loop over the integers—quite intuitive and certainly more elegant:
loop i=1..3
ols y$i const x$i
endloop
Dropping collinear variables
Problem: I’m writing my own estimator and I’d like to have a function that automatically drops
collinear variables from a list.
Solution: The neatest way to achieve this is to use Gram-Schmidt orthogonalization, which is per-
formed by the matrix function qrdecomp(). The function below defines a user-level function that
(i) converts the list to a matrix (ii) spots collinear columns and (iii) removes them if any.
function list autodrop(list X, scalar criterion[1.0e-12])
list drop = null
matrix R
qrdecomp({X}, &R)
scalar ndrop = 0
loop i=1..nelem(X) --quiet
if criterion > abs(R[i,i])
drop += X[i]
ndrop++
endif
endloop
if ndrop > 0
printf "%d collinear variables dropped (%s)\n", \
ndrop, varname(drop)
return X - drop
else
return X
endif
end function
software application dll:VB.NET PowerPoint: Read, Edit and Process PPTX File
How to convert PowerPoint to PDF, render PowerPoint to SVG, transform PowerPoint to TIFF and convert PowerPoint to raster images with featured rendering
www.rasteredge.com
software application dll:C# PDF Convert: How to Convert MS PPT to Adobe PDF Document
C#: Create PDF from PowerPoint; C#: Create PDF from Tiff; C#: Convert PDF to Word; C#: Convert PDF to Tiff; C# Tutorial: How to Convert PowerPoint to PDF.
www.rasteredge.com
Chapter 16. Cheat sheet
145
Comment: The function also accepts a secondoptional argument which sets a criterion for deciding
how strict the decision rule must be. Usage example:
nulldata 20
x1 = normal()
x2 = normal()
x3 = x1 + x2
x4 = x1 + 1
list A = const x1 x2 x3 x4
list C = autodrop(A)
Running the code above will create a list C containing just const, x1 andx2.
Comparing two lists
Problem: How can I tell iftwo lists contain the same variables (not necessarily in the same order)?
Solution: Under many respects, lists are like sets, so it makes sense to use the so-called “symmetric
difference” operator; this, in turn can be defined as
A4B  AnB[BnA:
In practice: we first check if there are series in A but not in B, then we perform the reverse check.
If the union of the two results is an empty set, then the lists contain the same variables. The hansl
syntax for this would be something like
scalar NotTheSame = nelem((A-B) || (B-A)) > 0
Part II
Econometric methods
146
Chapter 17
Robust covariance matrix estimation
17.1 Introduction
Consider (once again) the linear regression model
y Xu
(17.1)
where y and u are T-vectors, X is a T k matrix of regressors, and  is a k-vector of parameters.
As is well known, the estimator of  given by Ordinary Least Squares (OLS) is
ˆ
 X
0
X
1
X
0
y
(17.2)
If the condition EujX  0 is satisfied, this is an unbiased estimator; under somewhat weaker
conditions the estimator is biased but consistent. It is straightforward to show that when the OLS
estimator is unbiased (that is, when E
ˆ
  0), its variance is
Var
ˆ
 E
ˆ
 
ˆ
 
0
X
0
X
1
X
0
ÚXX
0
X
1
(17.3)
where Ú  Euu0 is the covariance matrix of the error terms.
Under the assumption that the error terms are independently and identically distributed (iid) we
can write Ú 
2
I, where 
2
is the (common) variance of the errors (and the covariances are zero).
In that case (17.3) simplifies to the “classical” formula,
Var
ˆ
 
2
X
0
X
1
(17.4)
Ifthe iid assumption isnot satisfied, two things follow. First, it is possible in principle to construct
amore efficient estimator than OLS—for instance some sort of Feasible Generalized Least Squares
(FGLS). Second, the simple “classical” formula for the variance of the least squares estimator is no
longer correct, and hence the conventional OLS standard errors—which are just the square roots
of the diagonal elements of the matrix defined by (17.4)—do not provide valid means of statistical
inference.
In the recent history of econometrics there are broadly two approaches to the problem of non-
iid errors. The “traditional” approach is to use an FGLS estimator. For example, if the departure
from the iid condition takes the form of time-series dependence, and if one believes that this
could be modeled as a case of first-order autocorrelation, one might employ an AR(1) estimation
method such as Cochrane–Orcutt, Hildreth–Lu, or Prais–Winsten. If the problem is that the error
variance is non-constant across observations, one might estimate the variance as a function of the
independent variables and then perform weighted least squares, using as weights the reciprocals
of the estimated variances.
While these methods are still in use, an alternative approach has found increasing favor: that is,
use OLS but compute standard errors (or more generally, covariance matrices) that are robust with
respect to deviations from the iid assumption. This is typically combined with an emphasis on
using large datasets—large enough that the researcher can place some reliance on the (asymptotic)
consistency property ofOLS.Thisapproach has been enabledby the availability ofcheapcomputing
power. The computation of robust standard errors and the handling of very large datasets were
daunting tasks at one time, but now they are unproblematic. The other point favoring the newer
methodology is that while FGLS offers an efficiency advantage in principle, it often involves making
147
Chapter 17. Robust covariance matrix estimation
148
additional statistical assumptions which may or may not be justified, which may not be easy to test
rigorously, and which may threaten the consistency of the estimator—for example, the “common
factor restriction” that is implied by traditional FGLS “corrections” for autocorrelated errors.
James Stock and Mark Watson’s Introduction toEconometrics illustratesthis approach at the level of
undergraduate instruction: many ofthe datasetsthey use comprise thousandsortensofthousands
ofobservations; FGLS isdownplayed; androbust standarderrors are reportedas a matter ofcourse.
In fact, the discussion of the classical standarderrors (labeled“homoskedasticity-only”) isconfined
to an Appendix.
Against this background it may be useful to set out and discuss all the various options offered
by gretl in respect of robust covariance matrix estimation. The first point to notice is that gretl
produces “classical” standard errors by default (in all cases apart from GMM estimation). In script
mode you can get robust standard errorsby appendingthe --robust flag to estimation commands.
In the GUI program the model specification dialog usually contains a “Robust standard errors”
check box,alongwith a “configure” button that isactivated when the box is checked. The configure
button takes you to a configuration dialog (which can also be reached from the main menu bar:
Tools ! Preferences ! General ! HCCME). There you can select from a set of possible robust
estimation variants, and can also choose to make robust estimation the default.
The specifics of the available options depend on the nature of the data under consideration—
cross-sectional, time series or panel—and also to some extent the choice of estimator. (Although
we introducedrobust standarderrors in the context of OLS above, they may be used in conjunction
with other estimators too.) The following three sections of this chapter deal with matters that are
specific to the three sortsof data just mentioned. Note that additional details regardingcovariance
matrix estimation in the context of GMM are given in chapter22.
We close this introduction with a brief statement of what “robust standard errors” can and cannot
achieve. They can provide for asymptotically valid statistical inference in models that are basically
correctly specified, but in which the errors are not iid. The “asymptotic” part means that they
may be of little use in small samples. The “correct specification” part means that they are not a
magic bullet: if the error term is correlated with the regressors, so that the parameter estimates
themselves are biased and inconsistent, robust standard errors will not save the day.
17.2 Cross-sectional data and the HCCME
With cross-sectional data, the most likely departure from iid errors is heteroskedasticity (non-
constant variance).1 In some cases one may be able to arrive at a judgment regarding the likely
form of the heteroskedasticity, and hence to apply a specific correction. The more common case,
however, is where the heteroskedasticity is of unknown form. We seek an estimator of the covari-
ance matrix of the parameter estimates that retains its validity, at least asymptotically, in face of
unspecified heteroskedasticity. It is not obvious, a priori, that this should be possible, butWhite
(1980) showed that
d
Var
h
ˆ
 X
0
X
1
X
0
ˆ
ÚXX
0
X
1
(17.5)
does the trick. (As usual in statistics, we need to say “under certain conditions”, but the conditions
are not very restrictive.)
ˆ
Ú is in this context a diagonal matrix, whose non-zero elements may be
estimated using squared OLS residuals. White referred to (17.5) as a heteroskedasticity-consistent
covariance matrix estimator (HCCME).
Davidson and MacKinnon (2004, chapter 5) offer a useful discussion of several variants on White’s
HCCME theme. They refer to the original variant of (17.5)—in which the diagonal elements of
ˆ
Ú
are estimated directly by the squared OLS residuals, ˆu
2
t
—as HC
0
. (The associated standard errors
are often called “White’s standard errors”.) The various refinements of White’s proposal share a
common point of departure, namely the idea that the squared OLS residuals are likely to be “too
1
In some specialized contexts spatial autocorrelation may be an issue. Gretl doesnot have any built-in methods to
handle this and wewillnotdiscuss ithere.
Chapter 17. Robust covariance matrix estimation
149
small” on average. This point is quite intuitive. The OLS parameter estimates,
ˆ
, satisfy by design
the criterion that the sum of squared residuals,
X
ˆu
2
t
X
y
t
X
t
ˆ
2
is minimized for given X and y. Suppose that
ˆ
 . This is almost certain to be the case: even if
OLS is not biased, it wouldbe a miracle if the
ˆ
calculatedfrom any finite sample were exactly equal
to . But in that case the sum of squares of the true, unobserved errors,
P
u
2
t
P
y
t
X
t

2
is
bound to be greater than
P
ˆu
2
t
.The elaboratedvariants on HC
0
take this point on board asfollows:
 HC
1
:Applies a degrees-of-freedom correction, multiplying the HC
0
matrix by T=T  k.
 HC
2
: Instead of using ˆu
2
t
for the diagonal elements of
ˆ
Ú, uses ˆu
2
t
=1   h
t
, where h
t
X
t
X0X 1X
0
t
, the tth diagonal element of the projection matrix, P, which has the property
that P y  ˆy. The relevance of h
t
is that if the variance of all the u
t
is 2, the expectation
of ˆu
2
t
is 
2
1  h
t
, or in other words, the ratio ˆu
2
t
=1  h
t
has expectation 
2
. As Davidson
and MacKinnon show, 0  h
t
<1 for all t, so this adjustment cannot reduce the the diagonal
elements of
ˆ
Úandin general revises them upward.
 HC
3
: Uses
ˆ
u
2
t
=1   h
t
2
. The additional factor of 1   h
t
in the denominator, relative to
HC
2
,may be justified on the grounds that observations with large variances tend to exert a
lot of influence on the OLS estimates, so that the corresponding residuals tend to be under-
estimated. See Davidson and MacKinnon for a fuller explanation.
The relative merits of these variants have been explored by means of both simulations and the-
oretical analysis. Unfortunately there is not a clear consensus on which is “best”. Davidson and
MacKinnon argue that the original HC
0
is likely to perform worse than the others; nonetheless,
“White’s standard errors” are reported more often than the more sophisticated variants and there-
fore, for reasons of comparability, HC
0
is the default HCCME in gretl.
If you wish to use HC
1
,HC
2
or HC
3
you can arrange for this in either of two ways. In script mode,
you can do, for example,
set hc_version 2
In the GUI program you can go to the HCCME configuration dialog, as noted above, and choose any
of these variants to be the default.
17.3 Time series data and HAC covariance matrices
Heteroskedasticity may be an issue with time series data too, but it is unlikely to be the only, or
even the primary, concern.
One form of heteroskedasticity is common in macroeconomic time series, but is fairly easily dealt
with. That is, in the case of strongly trending series such as Gross Domestic Product, aggregate
consumption, aggregate investment, and so on, higher levels of the variable in question are likely
to be associated with higher variability in absolute terms. The obvious “fix”, employed in many
macroeconometric studies, is to use the logs ofsuch series rather than the raw levels. Provided the
proportional variability of such series remains roughly constant over time, the log transformation
is effective.
Other forms of heteroskedasticity may resist the log transformation, but may demand a special
treatment distinct from the calculation of robust standard errors. We have in mind here autore-
gressive conditional heteroskedasticity, for example in the behavior of asset prices, where large
disturbances to the market may usher in periods of increased volatility. Such phenomena call for
specific estimation strategies, such as GARCH (see chapter25).
Documents you may be interested
Documents you may be interested