Using postgr3 with multiple regression, no interactions
Using postgr3 with multiple regression, with interactions
More on options when using postgr3
postgr3 with other estimation models
This page will illustrate the use of postgr3
for making graphs after estimation commands. You can obtain postgr3 over the
internet by typing search postgr3 (see
How can I use the search command to search for programs and get additional
help? for more information about using search).
NOTE! You must install the
spostado utilities before postgr3 will work
properly. You can download spostado by typing search spostado
We also recommend obtaining the latest version of xi3 which compliments postgr3. You can download xi3 from within Stata by typing search xi3 (see How can I use the search command to search for programs and get additional help? for more information about using search). For postgr3 to work properly you need Stata 8 and your Stata should be up to date (i.e., you need to have recently run the update all command in Stata).
In these examples, we will use the hsb2 data file which you can get like this.
use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
Using postgr3 with multiple regression, no interactions
We can do a multiple regression and then show how the predicted values vary as a function of socst holding other variables constant at their mean. Note how we precede the regress command with xi3. This is because xi3 and postgr3 work together as a team.
xi3: regress read female ses socst science Source | SS df MS Number of obs = 200 -------------+------------------------------ F( 4, 195) = 56.33 Model | 11214.2588 4 2803.5647 Prob > F = 0.0000 Residual | 9705.16119 195 49.7700574 R-squared = 0.5361 -------------+------------------------------ Adj R-squared = 0.5266 Total | 20919.42 199 105.122714 Root MSE = 7.0548 ------------------------------------------------------------------------------ read | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- female | -.3283535 1.026784 -0.32 0.749 -2.35338 1.696673 ses | .4767216 .7469296 0.64 0.524 -.9963759 1.949819 socst | .3941527 .054806 7.19 0.000 .2860642 .5022413 science | .4418034 .0584274 7.56 0.000 .3265726 .5570343 _cons | 7.866209 3.125707 2.52 0.013 1.701677 14.03074 ------------------------------------------------------------------------------ postgr3 socst Variables left asis: socst Holding female constant at .545 Holding ses constant at 2.055 Holding science constant at 51.85
We can show how the predicted values vary as a function of female holding other variables constant at their mean.
postgr3 female Variables left asis: female Holding ses constant at 2.055 Holding socst constant at 52.405 Holding science constant at 51.85
We can also show how the predicted values vary as a function of socst and female, holding other variables constant at their mean.
postgr3 socst, by(female) Variables left asis: socst female Holding ses constant at 2.055 Holding science constant at 51.85
Or we can show how the predicted values vary by ses and female, holding other variables constant at their mean.
postgr3 ses, by(female) Variables left asis: ses female Holding socst constant at 52.405 Holding science constant at 51.85
Using postgr3 with multiple regression, with interactions
If we wish to include categorical variables (especially interactions), we then use xi3 for coding the categorical variables. Although it permits a wide variety of coding schemes (see help xi3) we will just use regular dummy coding indicated by the i. prefix. We wull run the above model with an interaction of socst and female and show the graph of the interaction, holding other variables constant at their mean.
xi3: regress read i.female*socst ses science i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted) i.female*socst _IfemXsocst_# (coded as above) Source | SS df MS Number of obs = 200 -------------+------------------------------ F( 5, 194) = 45.29 Model | 11267.2025 5 2253.4405 Prob > F = 0.0000 Residual | 9652.2175 194 49.7536985 R-squared = 0.5386 -------------+------------------------------ Adj R-squared = 0.5267 Total | 20919.42 199 105.122714 Root MSE = 7.0536 ------------------------------------------------------------------------------ read | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- _Ifemale_1 | -5.363727 4.988108 -1.08 0.284 -15.20161 4.474156 socst | .3453355 .0724033 4.77 0.000 .2025369 .4881342 _IfemXsocs~1 | .096356 .0934081 1.03 0.304 -.0878697 .2805817 ses | .5139953 .7476804 0.69 0.493 -.9606305 1.988621 science | .4425136 .0584219 7.57 0.000 .32729 .5577372 _cons | 10.27643 3.902047 2.63 0.009 2.580547 17.97231 ------------------------------------------------------------------------------ postgr3 socst, by(female) Variables left asis: socst _Ifemale_1 _IfemXsocst_1 Holding ses constant at 2.055 Holding science constant at 51.85
We can use reverse helmert coding on ses (which compares 2 vs 1 and 3 vs 12) and interact that by socst and then use postgr3 to show this interaction, holding other variables constant.
xi3: regress read r.ses*socst female science
r.ses _Ises_1-3 (naturally coded; _Ises_1 omitted)
r.ses*socst _IsesXsocst_# (coded as above)
Source | SS df MS Number of obs = 200
-------------+------------------------------ F( 7, 192) = 32.99
Model | 11421.7692 7 1631.68131 Prob > F = 0.0000
Residual | 9497.65083 192 49.4669314 R-squared = 0.5460
-------------+------------------------------ Adj R-squared = 0.5294
Total | 20919.42 199 105.122714 Root MSE = 7.0333
------------------------------------------------------------------------------
read | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Ises_2 | -2.790321 6.033969 -0.46 0.644 -14.6917 9.111058
_Ises_3 | -10.3084 6.228643 -1.65 0.100 -22.59375 1.976956
socst | .4011395 .0560911 7.15 0.000 .2905057 .5117734
_IsesXsocs~2 | .0552476 .1203009 0.46 0.647 -.1820334 .2925285
_IsesXsocs~3 | .2089692 .1119203 1.87 0.063 -.011782 .4297204
female | -.196438 1.033133 -0.19 0.849 -2.234185 1.841309
science | .4375687 .0582931 7.51 0.000 .3225916 .5525459
_cons | 8.327722 3.304713 2.52 0.013 1.809518 14.84593
------------------------------------------------------------------------------
postgr3 socst, by(ses)
Variables left asis: socst _Ises_2 _Ises_3 _IsesXsocst_2 _IsesXsocst_3
Holding female constant at .545
Holding science constant at 51.85
We can use reverse helmert coding on prog and look at the interaction with female using xi3 and then show the interaction with postgr3.
xi3: regress read r.prog*i.female socst science r.prog _Iprog_1-3 (naturally coded; _Iprog_1 omitted) i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted) r.prog*i.female _IproXfem_#_# (coded as above) Source | SS df MS Number of obs = 200 -------------+------------------------------ F( 7, 192) = 36.05 Model | 11879.6717 7 1697.09595 Prob > F = 0.0000 Residual | 9039.74835 192 47.0820227 R-squared = 0.5679 -------------+------------------------------ Adj R-squared = 0.5521 Total | 20919.42 199 105.122714 Root MSE = 6.8616 ------------------------------------------------------------------------------ read | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- _Iprog_2 | 1.044267 1.826394 0.57 0.568 -2.558106 4.64664 _Iprog_3 | -1.78684 1.78787 -1.00 0.319 -5.313229 1.739548 _Ifemale_1 | -1.053392 1.058655 -1.00 0.321 -3.141479 1.034694 _IproXfe~2_1 | 5.005482 2.45381 2.04 0.043 .1655968 9.845368 _IproXfe~3_1 | 1.114799 2.312977 0.48 0.630 -3.447309 5.676906 socst | .339437 .0561575 6.04 0.000 .2286722 .4502018 science | .4448466 .0568237 7.83 0.000 .3327678 .5569255 _cons | 11.27162 3.240477 3.48 0.001 4.880115 17.66313 ------------------------------------------------------------------------------ postgr3 prog, by(female) Variables left asis: _Iprog_2 _Iprog_3 _Ifemale_1 _IproXfem_2_1 _IproXfem_3_1 Holding socst constant at 52.405 Holding science constant at 51.85
More on options when using postgr3
Let us consider this regression model with an interaction term for ses and socst.
xi3: regress read r.ses*socst female science
r.ses _Ises_1-3 (naturally coded; _Ises_1 omitted)
r.ses*socst _IsesXsocst_# (coded as above)
Source | SS df MS Number of obs = 200
-------------+------------------------------ F( 7, 192) = 32.99
Model | 11421.7692 7 1631.68131 Prob > F = 0.0000
Residual | 9497.65083 192 49.4669314 R-squared = 0.5460
-------------+------------------------------ Adj R-squared = 0.5294
Total | 20919.42 199 105.122714 Root MSE = 7.0333
------------------------------------------------------------------------------
read | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Ises_2 | -2.790321 6.033969 -0.46 0.644 -14.6917 9.111058
_Ises_3 | -10.3084 6.228643 -1.65 0.100 -22.59375 1.976956
socst | .4011395 .0560911 7.15 0.000 .2905057 .5117734
_IsesXsocs~2 | .0552476 .1203009 0.46 0.647 -.1820334 .2925285
_IsesXsocs~3 | .2089692 .1119203 1.87 0.063 -.011782 .4297204
female | -.196438 1.033133 -0.19 0.849 -2.234185 1.841309
science | .4375687 .0582931 7.51 0.000 .3225916 .5525459
_cons | 8.327722 3.304713 2.52 0.013 1.809518 14.84593
------------------------------------------------------------------------------
As we have seen, we can show the interaction with postgr3 like below.
postgr3 socst, by(ses) Variables left asis: socst _Ises_2 _Ises_3 _IsesXsocst_2 _IsesXsocst_3 Holding female constant at .545 Holding science constant at 51.85
We can use the x option to show the predicted values with other variables held constant at different values than the mean. For example, we can show the predicted values for females with science scores of 60.
postgr3 socst, by(ses) x(female=1 science=60) Variables left asis: socst _Ises_2 _Ises_3 _IsesXsocst_2 _IsesXsocst_3 Holding female constant at 1 Holding science constant at 60
If we use the x option to show the predicted values for females and make no reference to science, then science will be held at the overall mean of science (for males and females). Instead, we can use rest(grmean) to indicate that the rest of the variables should be held at the group mean as indicated by the x variable. So, if we did summarize if female==1 and got that mean for science it would be 50.69. As you see below, science is held constant at that value, the mean for females.
postgr3 socst, by(ses) x(female=1) rest(grmean) Variables left asis: socst _Ises_2 _Ises_3 _IsesXsocst_2 _IsesXsocst_3 Holding female constant at 1 Holding science constant at 50.697248
We can show a table of the predicted values using the table option, as shown below. Note that missing values are indicated where no observations were present (the graph is omitted to save space).
postgr3 socst, by(ses) x(female=1) rest(grmean) table
Variables left asis: socst _Ises_2 _Ises_3 _IsesXsocst_2 _IsesXsocst_3
Holding female constant at 1
Holding science constant at 50.697248
predict yhat_,
(option xb assumed; fitted values)
Means of Fitted values
social |
studies | ses
score | low middle high | Total
-----------+---------------------------------+----------
26 | 43.046452 41.692566 . | 42.595156
31 | 44.565746 43.488102 40.196571 | 42.93463
32 | 44.869606 . . | 44.869606
33 | 45.173466 . . | 45.173466
36 | 46.085045 45.283634 42.898834 | 45.286063
37 | 46.388905 . . | 46.388905
39 | . . 44.520191 | 44.520191
41 | 47.60434 47.07917 45.601097 | 47.117067
42 | . . 46.141548 | 46.141548
43 | 48.212059 . . | 48.212059
44 | 48.515919 . . | 48.515919
46 | 49.123638 48.874702 48.30336 | 48.825146
47 | . . 48.843811 | 48.843811
48 | 49.731358 . . | 49.731358
51 | 50.642933 50.670238 51.005619 | 50.695648
52 | . 51.029346 51.546074 | 51.28771
56 | 52.162231 52.465775 53.707882 | 52.787533
57 | 52.466091 . . | 52.466091
58 | . 53.183987 . | 53.183987
61 | 53.681526 54.261307 56.410145 | 55.202913
66 | 55.200825 56.056843 59.112404 | 57.604936
71 | 56.720119 57.852375 61.814667 | 59.691989
-----------+---------------------------------+----------
Total | 49.524473 51.040686 54.322879 | 51.636212
If we show the predicted values by 2 categorical variables, we might also want to show a table of the predicted values, for example broken down by prog and female as illustrated below.
xi3: regress read r.prog*i.female socst science
r.prog _Iprog_1-3 (naturally coded; _Iprog_1 omitted)
i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted)
r.prog*i.female _IproXfem_#_# (coded as above)
Source | SS df MS Number of obs = 200
-------------+------------------------------ F( 7, 192) = 36.05
Model | 11879.6717 7 1697.09595 Prob > F = 0.0000
Residual | 9039.74835 192 47.0820227 R-squared = 0.5679
-------------+------------------------------ Adj R-squared = 0.5521
Total | 20919.42 199 105.122714 Root MSE = 6.8616
------------------------------------------------------------------------------
read | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Iprog_2 | 1.044267 1.826394 0.57 0.568 -2.558106 4.64664
_Iprog_3 | -1.78684 1.78787 -1.00 0.319 -5.313229 1.739548
_Ifemale_1 | -1.053392 1.058655 -1.00 0.321 -3.141479 1.034694
_Ipr2Xfe1 | 5.005482 2.45381 2.04 0.043 .1655968 9.845368
_Ipr3Xfe1 | 1.114799 2.312977 0.48 0.630 -3.447309 5.676906
socst | .339437 .0561575 6.04 0.000 .2286722 .4502018
science | .4448466 .0568237 7.83 0.000 .3327678 .5569255
_cons | 11.27162 3.240477 3.48 0.001 4.880115 17.66313
------------------------------------------------------------------------------
postgr3 prog, by(female) table
Variables left asis: _Iprog_2 _Iprog_3 _Ifemale_1 _IproXfem_2_1 _IproXfem_3_1
Holding socst constant at 52.405
Holding science constant at 51.85
Means of Fitted values
type of | female
program | male female | Total
-----------+----------------------+----------
general | 52.198593 48.270859 | 50.103801
academic | 53.242859 54.32061 | 53.838188
vocation | 50.933884 50.623692 | 50.76638
-----------+----------------------+----------
Total | 52.418287 52.072804 | 52.229999
However, the table is not in the same orientation as the graph, so you can use the table2 option to swap the rows and columns of the table and to make it better correspond with the graph.
postgr3 prog, by(female) table2 Variables left asis: _Iprog_2 _Iprog_3 _Ifemale_1 _IproXfem_2_1 _IproXfem_3_1 Holding socst constant at 52.405 Holding science constant at 51.85
Means of Fitted values
| type of program
female | general academic vocation | Total
-----------+---------------------------------+----------
male | 52.198593 53.242859 50.933884 | 52.418287
female | 48.270859 54.32061 50.623692 | 52.072804
-----------+---------------------------------+----------
Total | 50.103801 53.838188 50.76638 | 52.229999
We can add graph options to make the graph look better. For example, below we add the clpattern() and the clwidth() options to control the line pattern and line width.
postgr3 female, by(prog) clpattern(l l dash ) clwidth(thick . .) Variables left asis: _Ifemale_1 _Iprog_2 _Iprog_3 _Ipr2Xfe1 _Ipr3Xfe1 Holding socst constant at 52.405 Holding science constant at 51.85
We can add additional graph options to make the graph look nicer. We add lagend options, and change the ytitle and labels for the x axis below to improve the look of the graph.
postgr3 female, by(prog) clpattern(l l dash ) clwidth(thick . .) /// legend(subtitle(Type of Program) order(1 "general" 2 "Academic" 3 "Vocational") rows(1) ) /// ytitle(Predicted Reading Score) xlabel(0 1) Variables left asis: _Ifemale_1 _Iprog_2 _Iprog_3 _Ipr2Xfe1 _Ipr3Xfe1 Holding socst constant at 52.405 Holding science constant at 51.85
Say we want to include a squared term, say socst and socst2.
gen socst2 = socst*socst
xi3: regress read r.prog*i.female socst socst2 science
r.prog _Iprog_1-3 (naturally coded; _Iprog_1 omitted)
i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted)
r.prog*i.female _IproXfem_#_# (coded as above)
Source | SS df MS Number of obs = 200
-------------+------------------------------ F( 8, 191) = 32.48
Model | 12057.4759 8 1507.18449 Prob > F = 0.0000
Residual | 8861.9441 191 46.3976131 R-squared = 0.5764
-------------+------------------------------ Adj R-squared = 0.5586
Total | 20919.42 199 105.122714 Root MSE = 6.8116
------------------------------------------------------------------------------
read | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Iprog_2 | .8859053 1.814874 0.49 0.626 -2.693866 4.465676
_Iprog_3 | -2.339243 1.79712 -1.30 0.195 -5.883994 1.205508
_Ifemale_1 | -.9018447 1.053779 -0.86 0.393 -2.980384 1.176695
_Ipr2Xfe1 | 4.74971 2.439411 1.95 0.053 -.061935 9.561356
_Ipr3Xfe1 | 1.508573 2.304899 0.65 0.514 -3.037751 6.054898
socst | -.4043657 .3840249 -1.05 0.294 -1.16184 .3531089
socst2 | .0074461 .0038037 1.96 0.052 -.0000565 .0149488
science | .4234667 .0574567 7.37 0.000 .3101355 .5367979
_cons | 29.99129 10.08915 2.97 0.003 10.09083 49.89176
------------------------------------------------------------------------------
If we want to view the results as a function of socst, we would not want socst2 to be held constant. In fact, we would want that to vary as is, so we would include socst and socst2 in the asis option to prevent postgr3 from trying to hold them constant.
postgr3 socst, asis(socst socst2) Variables left asis: socst socst2 Holding _Iprog_2 constant at .15 Holding _Iprog_3 constant at -.08333333 Holding _Ifemale_1 constant at .545 Holding _IproXfem_2_1 constant at .085 Holding _IproXfem_3_1 constant at -.04666667 Holding science constant at 51.85
postgr3 with other estimation models
Although all of the examples up to now have used regression models via the regress command, postgr3 can be used with a wide variety of estimation commands, including logit, probit, ologit, mlogit, and more. Here are some examples.
We will create a variable called goodread which is 1 if the reading score is over 60.
gen goodread = read > 60
We can then use logit with and show the predicted values by socst. The y axis is showing predicted probabilities.
xi3: logit goodread i.female socst science i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted) Iteration 0: log likelihood = -109.04953 Iteration 1: log likelihood = -75.950592 Iteration 2: log likelihood = -69.751911 Iteration 3: log likelihood = -68.82564 Iteration 4: log likelihood = -68.792504 Iteration 5: log likelihood = -68.792448 Logit estimates Number of obs = 200 LR chi2(3) = 80.51 Prob > chi2 = 0.0000 Log likelihood = -68.792448 Pseudo R2 = 0.3692 ------------------------------------------------------------------------------ goodread | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- _Ifemale_1 | -.0075975 .4446729 -0.02 0.986 -.8791404 .8639453 socst | .1140219 .027665 4.12 0.000 .0597994 .1682443 science | .1479431 .0340121 4.35 0.000 .0812806 .2146056 _cons | -15.81825 2.477648 -6.38 0.000 -20.67435 -10.96215 ------------------------------------------------------------------------------ postgr3 socst Variables left asis: socst Holding _Ifemale_1 constant at .545 Holding science constant at 51.85
If we wished, we could show the predicted values as logits by specifying the predict option. The predict option accepts the same values as would follow the comma after the predict command.
postgr3 socst, predict(xb) Variables left asis: socst Holding _Ifemale_1 constant at .545 Holding science constant at 51.85
We can include an interaction of female and socst and show the predicted values holding science constant at its mean.
xi3: logit goodread i.female*socst science i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted) i.female*socst _IfemXsocst_# (coded as above) Iteration 0: log likelihood = -109.04953 Iteration 1: log likelihood = -75.075084 Iteration 2: log likelihood = -67.681437 Iteration 3: log likelihood = -65.89615 Iteration 4: log likelihood = -65.703276 Iteration 5: log likelihood = -65.700115 Iteration 6: log likelihood = -65.700114 Logit estimates Number of obs = 200 LR chi2(4) = 86.70 Prob > chi2 = 0.0000 Log likelihood = -65.700114 Pseudo R2 = 0.3975 ------------------------------------------------------------------------------ goodread | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- _Ifemale_1 | -9.307788 4.19752 -2.22 0.027 -17.53478 -1.0808 socst | .0662987 .0307774 2.15 0.031 .0059761 .1266214 _IfeXso | .1571849 .0698483 2.25 0.024 .0202846 .2940851 science | .1479992 .0339313 4.36 0.000 .081495 .2145033 _cons | -13.10211 2.579092 -5.08 0.000 -18.15704 -8.047181 ------------------------------------------------------------------------------ postgr3 socst, by(female) Variables left asis: socst _Ifemale_1 _IfemXsocst_1 Holding science constant at 51.85
We can include an interaction of 2 categorical variables and show the predicted probabilities along with a table.
xi3: logit goodread i.ses*i.female socst science i.ses _Ises_1-3 (naturally coded; _Ises_1 omitted) i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted) i.ses*i.female _IsesXfem_#_# (coded as above) Iteration 0: log likelihood = -109.04953 Iteration 1: log likelihood = -72.980799 Iteration 2: log likelihood = -66.566231 Iteration 3: log likelihood = -65.555596 Iteration 4: log likelihood = -65.512747 Iteration 5: log likelihood = -65.512645 Logit estimates Number of obs = 200 LR chi2(7) = 87.07 Prob > chi2 = 0.0000 Log likelihood = -65.512645 Pseudo R2 = 0.3992 ------------------------------------------------------------------------------ goodread | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- _Ises_2 | -1.062254 .9440273 -1.13 0.260 -2.912514 .7880054 _Ises_3 | -1.289494 1.022621 -1.26 0.207 -3.293795 .7148073 _Ifemale_1 | -1.164263 1.074516 -1.08 0.279 -3.270276 .9417497 _Ise2Xfe1 | .4015754 1.245133 0.32 0.747 -2.038841 2.841992 _Ise2Xfe1 | 2.195925 1.305186 1.68 0.092 -.3621935 4.754043 socst | .1279548 .0310952 4.11 0.000 .0670093 .1889003 science | .1330011 .0345899 3.85 0.000 .0652062 .2007959 _cons | -14.73353 2.553764 -5.77 0.000 -19.73881 -9.728241 ------------------------------------------------------------------------------ postgr3 ses, by(female) table2 Variables left asis: _Ises_2 _Ises_3 _Ifemale_1 _IsesXfem_2_1 _IsesXfem_3_1 Holding socst constant at 52.405 Holding science constant at 51.85---------------------------------------- | ses female | low middle high ----------+----------------------------- male | .243801 .100272 .0815519 female | .0914369 .0494117 .1994422 ----------------------------------------
We can create a 3 level variable for read called readcat that will be 1 if less than 40, 2 if between 40 and 60, and 3 if over 60. We can then use ologit to predict this 3 level variable.
generate readcat = read recode readcat 0/40=1 60/100=3 40/60=2
We then run ologit as shown below.
xi3: ologit readcat i.female*socst science
i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted)
Iteration 0: log likelihood = -180.15028
Iteration 1: log likelihood = -131.10376
Iteration 2: log likelihood = -125.59369
Iteration 3: log likelihood = -125.01305
Iteration 4: log likelihood = -125.00309
Iteration 5: log likelihood = -125.00309
Ordered logit estimates Number of obs = 200
LR chi2(4) = 110.29
Prob > chi2 = 0.0000
Log likelihood = -125.00309 Pseudo R2 = 0.3061
------------------------------------------------------------------------------
readcat | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Ifemale_1 | -1.37027 1.629177 -0.84 0.400 -4.563398 1.822858
socst | .1031981 .0242797 4.25 0.000 .0556107 .1507855
_Ife1Xso | .0234216 .0303904 0.77 0.441 -.0361425 .0829857
science | .1103603 .0217462 5.07 0.000 .0677386 .152982
-------------+----------------------------------------------------------------
_cut1 | 7.708743 1.391748 (Ancillary parameters)
_cut2 | 12.68828 1.676964
------------------------------------------------------------------------------
Since this model has multiple outcomes, we need to use the outcome option to indicate which outcome we want to graph when we use postgr3. Below we graph the first outcome (readcat=1).
postgr3 socst, by(female) outcome(1) Variables left asis: socst _Ifemale_1 _IfemXsocst_1 Holding science constant at 51.85
and we show the graph for readcat=2.
postgr3 socst, by(female) outcome(2) Variables left asis: socst _Ifemale_1 _IfemXsocst_1 Holding science constant at 51.85
and we show the graph for readcat=3.
postgr3 socst, by(female) outcome(3) Variables left asis: socst _Ifemale_1 _IfemXsocst_1 Holding science constant at 51.85
We can show these graphs as one graph like this.
postgr3 socst, by(female) outcome(1) y title("readcat=1") ///
legend(order(1 "Male" 2 "Female)) saving(g1)
Variables left asis: socst _Ifemale_1 _IfemXsocst_1
Holding science constant at 51.85
<graph omitted to save space>
postgr3 socst, by(female) outcome(2) ytitle("readcat=2") ///
legend(order(1 "Male" 2 "Female)) saving(g2)
Variables left asis: socst _Ifemale_1 _IfemXsocst_1
Holding science constant at 51.85
<graph omitted to save space>
postgr3 socst, by(female) outcome(2) ytitle("readcat=3") ///
legend(order(1 "Male" 2 "Female)) saving(g3)
Variables left asis: socst _Ifemale_1 _IfemXsocst_1
Holding science constant at 51.85
<graph omitted to save space>
We can then use graph using to show all 3 graphs together.
graph combine g1.gph g2.gph g3.gph
We would use a similar strategy if we had used mlogit.
The use of postgr3 is also possible for an estimation command like quantile regression. Below we run qreg predicting the median reading score.
xi3: qreg read i.ses*i.female science
i.ses _Ises_1-3 (naturally coded; _Ises_1 omitted)
i.female _Ifemale_0-1 (naturally coded; _Ifemale_0 omitted)
i.ses*i.female _IsesXfem_#_# (coded as above)
Iteration 1: WLS sum of weighted deviations = 1256.0231
Iteration 1: sum of abs. weighted deviations = 1253.2
Iteration 2: sum of abs. weighted deviations = 1253.2
Iteration 3: sum of abs. weighted deviations = 1251.6
Iteration 4: sum of abs. weighted deviations = 1246.8
note: alternate solutions exist
Iteration 5: sum of abs. weighted deviations = 1246
Iteration 6: sum of abs. weighted deviations = 1246
Iteration 7: sum of abs. weighted deviations = 1246
Median regression Number of obs = 200
Raw sum of deviations 1684 (about 50)
Min sum of deviations 1246 Pseudo R2 = 0.2601
------------------------------------------------------------------------------
read | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_Ises_2 | -1.6 4.074188 -0.39 0.695 -9.63565 6.435649
_Ises_3 | 1.6 4.329626 0.37 0.712 -6.939458 10.13946
_Ifemale_1 | -1.8 4.295426 -0.42 0.676 -10.272 6.672005
_IsesXfe~2_1 | 1.8 5.128867 0.35 0.726 -8.315826 11.91583
_IsesXfe~3_1 | 1.8 5.572955 0.32 0.747 -9.191716 12.79172
science | .6 .1008242 5.95 0.000 .4011412 .7988588
_cons | 21.8 6.08162 3.58 0.000 9.805028 33.79497
------------------------------------------------------------------------------
We can show the predicted medians by ses and female as shown below.
postgr3 ses, by(female) Variables left asis: _Ises_2 _Ises_3 _Ifemale_1 _IsesXfem_2_1 _IsesXfem_3_1 Holding science constant at 51.85
























