Table 11.1, page 360 and Figure 11.1, page 359.
Note: The noadjust option suppresses the actuarial adjustment.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex, clear
stset time, failure(event)
sts generate s = s, by(pt)
sts generate h = h, by(pt)
sort time
graph twoway (line h time if pt == 1) (line h time if pt == 0), ///
legend(pos(5) ring(0) lab(1 "PT=1") lab(2 "PT=0")) ///
xtitle("Grade") ytitle("Estimated Hazard Probability")
graph twoway (line s time if pt == 1, sort connect(l)) (line s time if pt == 0, sort connect(l)), ///
legend(pos(5) ring(0) lab(1 "PT=1") lab(2 "PT=0")) ///
xtitle("Grade") ytitle("Estimated survival probability")
generate event = ~censor
ltable time event, noadjust survival hazard by(pt)
Beg. Std.
Interval Total Deaths Lost Survival Error [95% Conf. Int.]
-------------------------------------------------------------------------------
pt = 0
7 8 72 2 0 0.9722 0.0194 0.8935 0.9930
8 9 70 2 0 0.9444 0.0270 0.8587 0.9788
9 10 68 8 0 0.8333 0.0439 0.7252 0.9017
10 11 60 8 0 0.7222 0.0528 0.6033 0.8110
11 12 52 10 0 0.5833 0.0581 0.4610 0.6871
12 13 42 8 34 0.4722 0.0588 0.3538 0.5817
pt = 1
7 8 108 13 0 0.8796 0.0313 0.8017 0.9283
8 9 95 5 0 0.8333 0.0359 0.7486 0.8915
9 10 90 16 0 0.6852 0.0447 0.5885 0.7637
10 11 74 21 0 0.4907 0.0481 0.3936 0.5807
11 12 53 15 0 0.3519 0.0460 0.2633 0.4415
12 13 38 18 20 0.1852 0.0374 0.1186 0.2635
-------------------------------------------------------------------------------
Beg. Cum. Std. Std.
Interval Total Failure Error Hazard Error [95% Conf. Int.]
-------------------------------------------------------------------------------
pt 0
7 8 72 0.0278 0.0194 0.0278 0.0196 0.0034 0.0774
8 9 70 0.0556 0.0270 0.0286 0.0202 0.0035 0.0796
9 10 68 0.1667 0.0439 0.1176 0.0416 0.0508 0.2121
10 11 60 0.2778 0.0528 0.1333 0.0471 0.0576 0.2404
11 12 52 0.4167 0.0581 0.1923 0.0608 0.0922 0.3286
12 13 42 0.5278 0.0588 0.1905 0.0673 0.0822 0.3434
pt 1
7 8 108 0.1204 0.0313 0.1204 0.0334 0.0641 0.1941
8 9 95 0.1667 0.0359 0.0526 0.0235 0.0171 0.1078
9 10 90 0.3148 0.0447 0.1778 0.0444 0.1016 0.2749
10 11 74 0.5093 0.0481 0.2838 0.0619 0.1757 0.4174
11 12 53 0.6481 0.0460 0.2830 0.0731 0.1584 0.4432
12 13 38 0.8148 0.0374 0.4737 0.1116 0.2807 0.7163
-------------------------------------------------------------------------------
ltable time event, noadjust survival hazard
Beg. Std.
Interval Total Deaths Lost Survival Error [95% Conf. Int.]
-------------------------------------------------------------------------------
7 8 180 15 0 0.9167 0.0206 0.8656 0.9489
8 9 165 7 0 0.8778 0.0244 0.8203 0.9178
9 10 158 24 0 0.7444 0.0325 0.6741 0.8019
10 11 134 29 0 0.5833 0.0367 0.5078 0.6514
11 12 105 25 0 0.4444 0.0370 0.3709 0.5153
12 13 80 26 54 0.3000 0.0342 0.2348 0.3678
-------------------------------------------------------------------------------
Beg. Cum. Std. Std.
Interval Total Failure Error Hazard Error [95% Conf. Int.]
-------------------------------------------------------------------------------
7 8 180 0.0833 0.0206 0.0833 0.0215 0.0466 0.1305
8 9 165 0.1222 0.0244 0.0424 0.0160 0.0171 0.0791
9 10 158 0.2556 0.0325 0.1519 0.0310 0.0973 0.2184
10 11 134 0.4167 0.0367 0.2164 0.0402 0.1449 0.3020
11 12 105 0.5556 0.0370 0.2381 0.0476 0.1541 0.3401
12 13 80 0.7000 0.0342 0.3250 0.0637 0.2123 0.4613
-------------------------------------------------------------------------------
Figure 11.2, page 363.
sort time
gen estodds = h/(1-h)
gen logith = log(h/(1-h))
graph twoway (line h time if pt == 1) (line h time if pt == 0), ///
ylabel(0(.2)1) legend(pos(5) ring(0) lab(1 "PT=1") lab(2 "PT=0")) ///
xtitle("Grade") ytitle("Estimated Hazard")
graph twoway (line estodds time if pt == 1) (line estodds time if pt == 0), ///
ylabel(0(.2)1) legend(pos(5) ring(0) lab(1 "PT=1") lab(2 "PT=0")) ///
xtitle("Grade") ytitle("Estimated Odds")
graph twoway (line logith time if pt == 1) (line logith time if pt == 0), ///
legend(pos(5) ring(0) lab(1 "PT=1") lab(2 "PT=0")) ///
xtitle("Grade") ytitle("Estimated logit(hazard)")
Figure 11.3, page 366.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex_pp, clear
egen c1 = count(id), by(period pt)
egen c2 = count(id), by(period pt event)
generate prob = c2/c1
gen pt0 = log(prob/(1-prob)) if event==1 & pt==0
gen pt1 = log(prob/(1-prob)) if event==1 & pt==1
quietly logit event pt
predict p1
generate lp1 = log(p1/(1-p1))
sort pt period
graph twoway (scatter pt0 period) (scatter pt1 period) ///
(line lp1 period if pt==0) (line lp1 period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1") lab(3 "PT = 0") lab(4 "PT = 1")) ///
xtitle("Grade") ytitle("Logit(hazard)")
quietly logit event period pt
predict p2
generate lp2 = log(p2/(1-p2))
graph twoway (scatter pt0 period) (scatter pt1 period) ///
(line lp2 period if pt==0) (line lp2 period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1") lab(3 "PT = 0") lab(4 "PT = 1")) ///
xtitle("Grade") ytitle("Logit(hazard)")
quietly logit event d7 d8 d9 d10 d11 d12 pt, nocons
predict p3
generate lp3 = log(p3/(1-p3))
graph twoway (scatter pt0 period) (scatter pt1 period) ///
(line lp3 period if pt==0) (line lp3 period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1") lab(3 "PT = 0") lab(4 "PT = 1")) ///
xtitle("Grade") ytitle("Logit(hazard)")
Figure 11.4, page 374.
quietly logit event d7 d8 d9 d10 d11 d12 pt, nocons
predict pA
gen lpA = logit(pA)
gen estods = exp(logit(pA))
sort period
graph twoway (line lpA period if pt==0) (line lpA period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
xtitle("Grade") ytitle("Logit(hazard)")
graph twoway (line estods period if pt==0) (line estods period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
ylabel(0(.2).8) xtitle("Grade") ytitle("Odds")
graph twoway (line pA period if pt==0) (line pA period if pt==1), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
ylabel(0(.1).5) xtitle("Grade") ytitle("Hazard")

Table 11.3, page 386.
Note: This table makes use of fitstat.ado written by J. Scott Long and Jeremy Freese to obtain the deviance, and information criterion statistics. You can obtain fitstat.ado by typing, search fitstat (see How can I use the search command to search for programs and get additional help? for more information about using search). In order to use fitstat you must first run the model with a constant. We will not display output from the model containing the constant.
Note: The BIC values are different from those in the book. Clearly, they are based on different algorithms. In general, with AIC and BIC, smaller is better.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex_pp, clear
/* Model A */
logit event d7 d8 d9 d10 d11 d12, nocons
Logit estimates Number of obs = 822
LR chi2(6) = .
Log likelihood = -325.97769 Prob > chi2 = .
------------------------------------------------------------------------------
event | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
d7 | -2.397895 .2696799 -8.89 0.000 -2.926458 -1.869332
d8 | -3.116685 .3862453 -8.07 0.000 -3.873712 -2.359658
d9 | -1.719786 .2216514 -7.76 0.000 -2.154215 -1.285357
d10 | -1.286665 .2097774 -6.13 0.000 -1.697821 -.8755083
d11 | -1.163151 .2291288 -5.08 0.000 -1.612235 -.7140666
d12 | -.7308875 .238705 -3.06 0.002 -1.198741 -.2630344
------------------------------------------------------------------------------
quietly logit event d7 d8 d9 d10 d11 d12
fitstat
Measures of Fit for logit of event
Log-Lik Intercept Only: -352.116 Log-Lik Full Model: -325.978
D(816): 651.955 LR(5): 52.276
Prob > LR: 0.000
McFadden's R2: 0.074 McFadden's Adj R2: 0.057
Maximum Likelihood R2: 0.062 Cragg & Uhler's R2: 0.107
McKelvey and Zavoina's R2: 0.159 Efron's R2: 0.061
Variance of y*: 3.912 Variance of error: 3.290
Count R2: 0.847 Adj Count R2: 0.000
AIC: 0.808 AIC*n: 663.955
BIC: -4824.825 BIC': -18.717
/* Model B */
logit event d7 d8 d9 d10 d11 d12 pt, nocons
Logit estimates Number of obs = 822
LR chi2(7) = .
Log likelihood = -317.33089 Prob > chi2 = .
------------------------------------------------------------------------------
event | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
d7 | -2.994327 .3175088 -9.43 0.000 -3.616632 -2.372021
d8 | -3.700124 .4205614 -8.80 0.000 -4.524409 -2.875839
d9 | -2.281124 .2723919 -8.37 0.000 -2.815002 -1.747245
d10 | -1.822599 .2584613 -7.05 0.000 -2.329173 -1.316024
d11 | -1.654227 .2691057 -6.15 0.000 -2.181665 -1.12679
d12 | -1.179057 .2715801 -4.34 0.000 -1.711344 -.6467698
pt | .8736184 .2174075 4.02 0.000 .4475076 1.299729
------------------------------------------------------------------------------
quietly logit event d7 d8 d9 d10 d11 d12 pt
fitstat
Measures of Fit for logit of event
Log-Lik Intercept Only: -352.116 Log-Lik Full Model: -317.331
D(815): 634.662 LR(6): 69.570
Prob > LR: 0.000
McFadden's R2: 0.099 McFadden's Adj R2: 0.079
Maximum Likelihood R2: 0.081 Cragg & Uhler's R2: 0.141
McKelvey and Zavoina's R2: 0.202 Efron's R2: 0.087
Variance of y*: 4.121 Variance of error: 3.290
Count R2: 0.847 Adj Count R2: 0.000
AIC: 0.789 AIC*n: 648.662
BIC: -4835.407 BIC': -29.299
test pt /* wald test */
( 1) pt = 0.0
chi2( 1) = 16.15
Prob > chi2 = 0.0000
/* Model C */
logit event d7 d8 d9 d10 d11 d12 pas, nocons
Logit estimates Number of obs = 822
LR chi2(7) = .
Log likelihood = -318.58429 Prob > chi2 = .
------------------------------------------------------------------------------
event | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
d7 | -2.464565 .2741086 -8.99 0.000 -3.001808 -1.927322
d8 | -3.159096 .3890048 -8.12 0.000 -3.921532 -2.396661
d9 | -1.729688 .2244951 -7.70 0.000 -2.169691 -1.289686
d10 | -1.285083 .2126567 -6.04 0.000 -1.701882 -.8682836
d11 | -1.13596 .2323622 -4.89 0.000 -1.591381 -.6805382
d12 | -.6420982 .2428271 -2.64 0.008 -1.118031 -.1661658
pas | .4428 .1139575 3.89 0.000 .2194475 .6661525
------------------------------------------------------------------------------
quietly logit event d7 d8 d9 d10 d11 d12 pas
fitstat
Measures of Fit for logit of event
Log-Lik Intercept Only: -352.116 Log-Lik Full Model: -318.584
D(815): 637.169 LR(6): 67.063
Prob > LR: 0.000
McFadden's R2: 0.095 McFadden's Adj R2: 0.075
Maximum Likelihood R2: 0.078 Cragg & Uhler's R2: 0.136
McKelvey and Zavoina's R2: 0.193 Efron's R2: 0.081
Variance of y*: 4.079 Variance of error: 3.290
Count R2: 0.850 Adj Count R2: 0.024
AIC: 0.792 AIC*n: 651.169
BIC: -4832.900 BIC': -26.792
test pas /* wald test */
( 1) pas = 0.0
chi2( 1) = 15.10
Prob > chi2 = 0.0001
/* Model D */
logit event d7 d8 d9 d10 d11 d12 pt pas, nocons
Logit estimates Number of obs = 822
LR chi2(8) = .
Log likelihood = -314.57348 Prob > chi2 = .
------------------------------------------------------------------------------
event | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
d7 | -2.893237 .3206302 -9.02 0.000 -3.52166 -2.264813
d8 | -3.584759 .4231464 -8.47 0.000 -4.414111 -2.755407
d9 | -2.150233 .277458 -7.75 0.000 -2.694041 -1.606426
d10 | -1.69318 .2646518 -6.40 0.000 -2.211888 -1.174472
d11 | -1.517695 .2757453 -5.50 0.000 -2.058146 -.9772446
d12 | -1.009884 .2811314 -3.59 0.000 -1.560891 -.4588762
pt | .6605301 .2367272 2.79 0.005 .1965533 1.124507
pas | .2963606 .1253783 2.36 0.018 .0506236 .5420976
------------------------------------------------------------------------------
quietly logit event d7 d8 d9 d10 d11 d12 pt pas
fitstat
Measures of Fit for logit of event
Log-Lik Intercept Only: -352.116 Log-Lik Full Model: -314.573
D(814): 629.147 LR(7): 75.084
Prob > LR: 0.000
McFadden's R2: 0.107 McFadden's Adj R2: 0.084
Maximum Likelihood R2: 0.087 Cragg & Uhler's R2: 0.152
McKelvey and Zavoina's R2: 0.214 Efron's R2: 0.093
Variance of y*: 4.183 Variance of error: 3.290
Count R2: 0.850 Adj Count R2: 0.024
AIC: 0.785 AIC*n: 645.147
BIC: -4834.210 BIC': -28.102
test pt /* wald test */
( 1) pt = 0.0
chi2( 1) = 7.79
Prob > chi2 = 0.0053
test pas /* wald test */
( 1) pas = 0.0
chi2( 1) = 5.59
Prob > chi2 = 0.0181
Table 11.4, page 388.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex_pp, clear
quietly logit event d7 d8 d9 d10 d11 d12, nocons
predict p
preserve
collapse (mean) p, by(period)
gen paramest = logit(p)
gen odds = exp(paramest)
clist period paramest odds p
period paramest odds p
1. 7 -2.397895 .0909091 .0833333
2. 8 -3.116685 .0443038 .0424242
3. 9 -1.719786 .1791045 .1518987
4. 10 -1.286664 .2761905 .2164179
5. 11 -1.163151 .3125 .2380952
6. 12 -.7308876 .4814814 .325
Table 11.5, page 392.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex_pp, clear
quietly logit event d7 d8 d9 d10 d11 d12 pt, nocons
predict p
collapse (mean) p, by(period pt)
reshape wide p, i(period) j(pt)
gen logith0 = logit(p0)
gen logith1 = logit(p1)
gen surv_0 = 1
replace surv_0 = (1 - p0)*surv_0 if period == 7
replace surv_0 = (1 - p0)*surv_0[_n-1] if period > 7
gen surv_1 = 1
replace surv_1 = (1 - p1)*surv_1 if period == 7
replace surv_1 = (1 - p1)*surv_1[_n-1] if period > 7
clist period logith0 logith1 p0 p1 surv_0 surv_1
period logith0 logith1 p0 p1 surv_0 surv_1
1. 7 -2.994327 -2.120708 .0476828 .1071003 .9523172 .8928997
2. 8 -3.700124 -2.826506 .0241241 .0559086 .9293434 .842979
3. 9 -2.281124 -1.407505 .0926984 .1966279 .8431947 .6772258
4. 10 -1.822598 -.94898 .1391224 .27909 .7258875 .4882188
5. 11 -1.654227 -.7806088 .1605384 .3141887 .6093546 .334826
6. 12 -1.179057 -.3054385 .2352218 .4242285 .4660211 .1927833
Figure 11.6, page 393.
graph twoway (line logith0 period) (line logith1 period), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
xtitle("Grade") ytitle("Fitted logit(hazard)")
graph twoway (line p0 period) (line p1 period), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
xtitle("Grade") ytitle("Fitted hazard")
graph twoway (line surv_0 period) (line surv_1 period), ///
legend(ring(0) pos(5) col(2) ///
lab(1 "PT = 0") lab(2 "PT = 1")) ///
xtitle("Grade") ytitle("Fitted Survival Probability")
Figure 11.7, page 395.
use https://stats.idre.ucla.edu/stat/stata/examples/alda/data/firstsex_pp, clear
logit event d7 d8 d9 d10 d11 d12 pt pas, nocons
gen pas0 = -2.893237*d7 - 3.584759*d8 - 2.150233*d9 - 1.69318*d10 - 1.517695*d11 - 1.009884*d12 + .6605301*pt
gen pas1 = pas0 + .2963606
gen pasneg1 = pas0 - .2963606
collapse (mean) pas0 pas1 pasneg1, by(period pt)
gen pas0_p = exp(pas0)/(1+exp(pas0))
gen pas1_p = exp(pas1)/(1+exp(pas1))
gen pasneg1_p = exp(pasneg1)/(1+exp(pasneg1))
/* top figure */
twoway (line pas1_p period if pt==0)(line pas1_p period if pt==1) ///
(line pas0_p period if pt==0)(line pas0_p period if pt==1) ///
(line pasneg1_p period if pt==0)(line pasneg1_p period if pt==1), ///
xtitle("Grade") ytitle("Fitted Hazard") legend(ring(0) pos(10) col(1) ///
lab(1 "PAS=1, PT = 0") lab(2 "PAS=1, PT = 1") lab(3 "PAS=0, PT = 0") ///
lab(4 "PAS=0, PT = 1") lab(5 "PAS=-1, PT = 0") lab(6 "PAS=-1, PT = 1"))
set obs 14
replace period = 6 if period == .
replace pt = 0 if _n==13
replace pt = 1 if _n==14
gen surv_neg1 = 1
replace surv_neg1 = (1 - pasneg1_p)*surv_neg1 if period == 7
replace surv_neg1 = (1 - pasneg1_p)*surv_neg1[_n-2] if period > 7
gen surv_0 = 1
replace surv_0 = (1 - pas0_p)*surv_0 if period == 7
replace surv_0 = (1 - pas0_p)*surv_0[_n-2] if period > 7
gen surv_1 = 1
replace surv_1 = (1 - pas1_p)*surv_1 if period == 7
replace surv_1 = (1 - pas1_p)*surv_1[_n-2] if period > 7
/* top figure */
sort period
twoway (line surv_neg1 period if pt==0)(line surv_neg1 period if pt==1) ///
(line surv_0 period if pt==0)(line surv_0 period if pt==1) ///
(line surv_1 period if pt==0)(line surv_1 period if pt==1), ///
xtitle("Grade") ytitle("Fitted survival probability") legend(ring(0) pos(7) col(1) ///
lab(1 "PAS=-1, PT = 0") lab(2 "PAS=-1, PT = 1") lab(3 "PAS=0, PT = 0") ///
lab(4 "PAS=0, PT = 1") lab(5 "PAS=1, PT = 0") lab(6 "PAS=1, PT = 1"))
