I am using margins after an estimation that has time-series operators in the
independent variable list. How does margins calculate the means of the
independent variables?
|
Title
|
|
Marginal effects and time-series operators
|
|
Author
|
May Boggess, StataCorp
|
|
Date
|
April 2004; updated July 2009
|
The way Stata commands can interact with time-series operators is really neat.
For example, you can
summarize the first difference of a variable without having to create a
new variable containing the first differences. So,
margins has no
trouble getting the means:
. sysuse auto, clear
(1978 Automobile Data)
. generate t=_n
. tsset t
time variable: t, 1 to 74
delta: 1 unit
. regress mpg L(0/2).turn
Source | SS df MS Number of obs = 72
-------------+------------------------------ F( 3, 68) = 25.40
Model | 1281.09504 3 427.031681 Prob > F = 0.0000
Residual | 1143.2244 68 16.8121235 R-squared = 0.5284
-------------+------------------------------ Adj R-squared = 0.5076
Total | 2424.31944 71 34.1453443 Root MSE = 4.1003
------------------------------------------------------------------------------
mpg | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
turn |
--. | -.9320462 .1237537 -7.53 0.000 -1.178993 -.6850996
L1. | -.1183241 .1266935 -0.93 0.354 -.3711369 .1344888
L2. | .0993164 .1244224 0.80 0.428 -.1489645 .3475974
|
_cons | 59.04122 5.622999 10.50 0.000 47.8207 70.26173
------------------------------------------------------------------------------
. summarize turn if e(sample)
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn | 72 39.63889 4.460486 31 51
. summarize L.turn if e(sample)
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L1. | 72 39.68056 4.449486 31 51
. summarize L2.turn if e(sample)
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L2. | 72 39.73611 4.427803 31 51
. margins, dydx(_all) atmeans nose
Conditional marginal effects Number of obs = 72
Expression : Linear prediction, predict()
dy/dx w.r.t. : turn L.turn L2.turn
at : turn = 39.63889 (mean)
L.turn = 39.68056 (mean)
L2.turn = 39.73611 (mean)
------------------------------------------------------------------------------
| dy/dx
-------------+----------------------------------------------------------------
turn |
--. | -.9320462
L1. | -.1183241
L2. | .0993164
------------------------------------------------------------------------------
Note the if e(sample) on each
summarize.
We can double-check how many observations were used in the estimation, only
72, even though there are no missing values in mpg
or turn. Yet there are two observations
missing.
This is because we have used the lag L2, so L2.turn
is missing in the first and second observation, and thus, those two will not
be used in the estimation.
You can be forgiven for thinking that I could have been more efficient if I
have just thrown away the observations that are not in the e(sample)
before I used summarize. That would be OK if it
weren’t for the time-series operators:
. sysuse auto, clear
(1978 Automobile Data)
. generate t=_n
. tsset t
time variable: t, 1 to 74
delta: 1 unit
. regress mpg L(2/3).turn
Source | SS df MS Number of obs = 71
-------------+------------------------------ F( 2, 68) = 2.85
Model | 187.429767 2 93.7148836 Prob > F = 0.0648
Residual | 2236.45756 68 32.8890817 R-squared = 0.0773
-------------+------------------------------ Adj R-squared = 0.0502
Total | 2423.88732 70 34.6269618 Root MSE = 5.7349
------------------------------------------------------------------------------
mpg | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
turn |
L2. | -.2030227 .1684267 -1.21 0.232 -.539113 .1330675
L3. | -.2356865 .1698156 -1.39 0.170 -.5745484 .1031753
|
_cons | 38.7856 7.345561 5.28 0.000 24.12776 53.44344
------------------------------------------------------------------------------
. summarize L2.turn if e(sample)
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L2. | 71 39.73239 4.459205 31 51
. summarize L3.turn if e(sample)
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L3. | 71 39.80282 4.422733 31 51
. margins, eydx(_all) atmeans nose
Conditional marginal effects Number of obs = 71
Expression : Linear prediction, predict()
ey/dx w.r.t. : L2.turn L3.turn
at : L2.turn = 39.73239 (mean)
L3.turn = 39.80282 (mean)
------------------------------------------------------------------------------
| ey/dx
-------------+----------------------------------------------------------------
turn |
L2. | -.0095146
L3. | -.0110454
------------------------------------------------------------------------------
. keep if e(sample)
(3 observations deleted)
. summarize L2.turn
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L2. | 69 39.7971 4.48717 31 51
. summarize L3.turn
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
turn |
L3. | 68 39.86765 4.481819 31 51
Now we can see that the means obtained after throwing observations away are
not the correct ones. This is because we need all the observations to create
L2.turn and
L3.turn the same way they were during the
estimation.
|