Hi guys,

I am trying to work with counterfactuals using margins and I'm having a hard time including gen into the margins command. As an example I'll use the union data to show what I mean.


Code:
. sysuse nlsw88, clear
(NLSW, 1988 extract)

.
. keep if !missing(wage, age, race, married, tenure)
(15 observations deleted)

. summ wage ttl_exp tenure

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
        wage |      2,231    7.792448    5.764505   1.004952   40.74659
     ttl_exp |      2,231    12.55485    4.606011   .1153846   28.88461
      tenure |      2,231     5.97785    5.510331          0   25.91667

.
. reg wage age i.race i.married

      Source |       SS           df       MS      Number of obs   =     2,231
-------------+----------------------------------   F(4, 2226)      =      8.38
       Model |  1099.58655         4  274.896637   Prob > F        =    0.0000
    Residual |  73002.2411     2,226  32.7952566   R-squared       =    0.0148
-------------+----------------------------------   Adj R-squared   =    0.0131
       Total |  74101.8276     2,230  33.2295191   Root MSE        =    5.7267

------------------------------------------------------------------------------
        wage |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         age |  -.0846017   .0397183    -2.13   0.033    -.1624905   -.0067128
             |
        race |
      black  |  -1.450203   .2843798    -5.10   0.000    -2.007881   -.8925259
      other  |   .4406781   1.132043     0.39   0.697    -1.779292    2.660649
             |
     married |
    married  |  -.7871973   .2588382    -3.04   0.002    -1.294787   -.2796078
       _cons |   11.98058   1.582136     7.57   0.000     8.877966     15.0832
------------------------------------------------------------------------------

I have a simple model here predicting wages with a few basic controls, most importantly age. That's my measure of interest for now.

I want to see some predictions for age so I turn to margins with the at() option.

Code:
. margins, at(age=(15(5)65)) vsquish

Predictive margins                              Number of obs     =      2,231
Model VCE    : OLS

Expression   : Linear prediction, predict()
1._at        : age             =          15
2._at        : age             =          20
3._at        : age             =          25
4._at        : age             =          30
5._at        : age             =          35
6._at        : age             =          40
7._at        : age             =          45
8._at        : age             =          50
9._at        : age             =          55
10._at       : age             =          60
11._at       : age             =          65

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         _at |
          1  |   9.835705   .9668889    10.17   0.000     7.939607     11.7318
          2  |   9.412697   .7702675    12.22   0.000     7.902179    10.92321
          3  |   8.989688   .5750017    15.63   0.000     7.862093    10.11728
          4  |    8.56668   .3831699    22.36   0.000     7.815272    9.318088
          5  |   8.143672   .2046674    39.79   0.000     7.742313    8.545031
          6  |   7.720663   .1258394    61.35   0.000     7.473888    7.967438
          7  |   7.297655   .2620298    27.85   0.000     6.783806    7.811503
          8  |   6.874647    .447617    15.36   0.000     5.996856    7.752437
          9  |   6.451638   .6410457    10.06   0.000     5.194528    7.708748
         10  |    6.02863   .8368964     7.20   0.000     4.387451    7.669809
         11  |   5.605621   1.033793     5.42   0.000     3.578321    7.632922
------------------------------------------------------------------------------

.

Here's where I want to expand things. I know that I can include a counterfactual using values that are not in the original model. So for example, I can compare the predictions for age, against another prediction for age where the values of tenure are minused out (I know this is not logical, it's just an example). It looks like this.

Code:
. margins, at(age = gen(age)) ///
> at(age = gen(age-tenure)) vsquish

Predictive margins                              Number of obs     =      2,231
Model VCE    : OLS

Expression   : Linear prediction, predict()
1._at        : age             = age
2._at        : age             = age-tenure

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         _at |
          1  |   7.792448   .1212427    64.27   0.000     7.554687    8.030208
          2  |   8.298184    .266595    31.13   0.000     7.775383    8.820985
------------------------------------------------------------------------------

.
My question is can this be done for a range of age values? For example the ones listed in the previous plot, could I have two predictions running side by side.


I have tried code like the example below and have had no luck.

Code:
margins, at(age = gen(age)) ///
at(age=(15(5)65) = gen(age-tenure))

Any help would be appreciated.