Section 12.2: Weibull Distribution
A data step creates a data set called sec1_9 and it can be downloaded here. We will use this data set in Example 12. 1 on page 377 for allo group. The analysis for auto group will be almost identical with the only change on the where statement. We omit the second analysis here.
proc lifereg data = sec1_9; model time*ind(0)= /covb distribution=weibull; where type = 1; ods output ParameterEstimates = test; ods output covB = covB; run; data test; set test; if parameter ~= "cons" & parameter ~= "Weibull Shape"; run; proc iml; use covB; read all var {Intercept Scale}; x = Intercept || Scale ; start grd(g); /*creating the gradient matrix corresponding to the transform*/ grdn = j(2, 2, 0); grdn[1,1] = - exp(-g[1]/g[2])/g[2]; grdn[1,2] = (exp(-g[1]/g[2])*g[1])/(g[2]**2); grdn[2,2] = -1/(g[2]**2); return (grdn) ; finish grd; use test; read all var {parameter estimate}; est = estimate; parms = parameter; mytet = grd(est); print "Variance-Covariance Matrix"; covb= mytet*x*t(mytet); print covb; newvar = sqrt(diag(mytet*x*t(mytet))); /*delta method to calculate the variance*/ gnew = j(2, 1, 0); gstd = j(2, 1, 0); do i = 1 to 2; /*pulling out the standard error*/ gstd[i]=newvar[i,i]; end; gnew[1] = exp(-est[1]/est[2]); /*doing the transformation*/ gnew[2] = 1/est[2]; print "Transformed Parameter Estimate"; print gnew[rowname = parms colname = "Parameter Estimate" label=" " format=8.3] gstd[colname = " Standard Error" label = " " format=8.3]; quit;
The LIFEREG Procedure Model Information Data Set WORK.SEC1_9 Dependent Variable Log(time) Censoring Variable ind Censoring Value(s) 0 Number of Observations 50 Noncensored Values 22 Right Censored Values 28 Left Censored Values 0 Interval Censored Values 0 Name of Distribution Weibull Log Likelihood -72.8790866 Analysis of Parameter Estimates Standard 95% Confidence Chi- Parameter DF Estimate Error Limits Square Pr > ChiSq Intercept 1 4.2543 0.4782 3.3171 5.1915 79.16 <.0001 Scale 1 1.9444 0.3679 1.3420 2.8173 Weibull Scale 1 70.4075 33.6656 27.5813 179.7314 Weibull Shape 1 0.5143 0.0973 0.3549 0.7452 Estimated Covariance Matrix Intercept Scale Intercept 0.228631 0.087660 Scale 0.087660 0.135335 From Proc IML Variance-Covariance Matrix COVB 0.0016396 -0.00318 -0.00318 0.0094681 Transformed Parameter Estimate Parameter Estimate Standard Error Intercept 0.112 0.040 Scale 0.514 0.097
Example 12. 2, Table 12.1 and Table 12.2 on page 379 and page 380. This example uses a data set described in section 1.8. We create the data set here and call it larynx.
data table12_1; set larynx_cancer; z1 = (stage = 2); z2 = (stage = 3); z3 = (stage = 4); run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / covb distribution=weibull; ods output ParameterEstimates = test; ods output covB = covB; run;
The LIFEREG Procedure Analysis of Parameter Estimates Standard 95% Confidence Chi- Parameter DF Estimate Error Limits Square Pr > ChiSq Intercept 1 3.5288 0.9041 1.7567 5.3008 15.23 <.0001 z1 1 -0.1477 0.4076 -0.9465 0.6511 0.13 0.7171 z2 1 -0.5866 0.3199 -1.2136 0.0405 3.36 0.0668 z3 1 -1.5441 0.3633 -2.2561 -0.8321 18.07 <.0001 age 1 -0.0175 0.0128 -0.0425 0.0076 1.87 0.1717 Scale 1 0.8848 0.1084 0.6960 1.1250 Weibull Shape 1 1.1301 0.1384 0.8889 1.4368
Table 12.2 based on the previous output and delta method shown on page 378.
proc iml; use covB; read all var {Intercept z1 z2 z3 age Scale}; x = Intercept || z1 || z2 || z3 || age || Scale ; start grd(g); /*creating the gradient matrix corresponding to the transform*/ gdim = nrow(g); grdn = j(gdim, gdim, 0); grdn[1,1] = - exp(-g[1]/g[gdim])/g[gdim]; grdn[1,gdim] = (exp(-g[1]/g[gdim])*g[1])/(g[gdim]**2); do i = 2 to gdim - 1; grdn[i, gdim]=g[i]/(g[gdim]**2); grdn[i,i] = - 1/g[gdim]; end; grdn[gdim,gdim] = -1/(g[gdim]**2); return (grdn) ; finish grd; use test; read all var {parameter estimate}; est = estimate; r = nrow(est); g = est[1:r-1, 1]; parm = parameter; parms = parm[1:r-1,1]; mytet = grd(g); newvar = sqrt(diag(mytet*x*t(mytet))); /*delta method to calculate the variance*/ gnew = j(r-1, 1, 0); gstd = j(r-1, 1, 0); do i = 1 to r-1; /*pull out the standard error*/ gstd[i]=newvar[i,i]; end; gnew[1] = exp(-g[1]/g[r-1]); /*doing the transformation*/ gnew[r-1] = 1/g[r-1]; do i = 2 to r-2; gnew[i] = - g[i]/g[r-1]; end; print "Transformed Parameter Estimate"; print gnew[rowname = parms colname = "Parameter Estimate" label=" " format=8.3] gstd[colname = " Standard Error" label = " " format=8.3]; quit;
Transformed Parameter Estimate Parameter Estimate Standard Error Intercept 0.019 0.019 z1 0.167 0.461 z2 0.663 0.356 z3 1.745 0.415 age 0.020 0.014 Scale 1.130 0.138
Section 12.3: Log Logistic Distribution
Example 12.1 (continued) on page 382. We will only do the analysis for allo group. The analysis for auto group will be nearly identical.
proc lifereg data = sec1_9; model time*ind(0)= /covb distribution=llogit; where type = 1; ods output ParameterEstimates = test; ods output covB = covB; run; data test; set test; if parameter ~= "cons"; run; proc iml; use covB; read all var {Intercept Scale}; x = Intercept || Scale ; start grd(g); /*creating the gradient matrix corresponding to the transform*/ grdn = j(2, 2, 0); grdn[1,1] = - exp(-g[1]/g[2])/g[2]; grdn[1,2] = (exp(-g[1]/g[2])*g[1])/(g[2]**2); grdn[2,2] = -1/(g[2]**2); return (grdn) ; finish grd; use test; read all var {parameter estimate}; est = estimate; parms = parameter; mytet = grd(est); print "Variance-Covariance Matrix"; covb= mytet*x*t(mytet); print covb; newvar = sqrt(diag(mytet*x*t(mytet))); /*delta method to calculate the variance*/ gnew = j(2, 1, 0); gstd = j(2, 1, 0); do i = 1 to 2; /*pulling out the standard error*/ gstd[i]=newvar[i,i]; end; gnew[1] = exp(-est[1]/est[2]); /*doing the transformation*/ gnew[2] = 1/est[2]; print "Transformed Parameter Estimate"; print gnew[rowname = parms colname = "Parameter Estimate" label=" " format=8.3] gstd[colname = " Standard Error" label = " " format=8.3]; quit;
The LIFEREG Procedure Model Information Data Set WORK.SEC1_9 Dependent Variable Log(time) Censoring Variable ind Censoring Value(s) 0 Number of Observations 50 Noncensored Values 22 Right Censored Values 28 Left Censored Values 0 Interval Censored Values 0 Name of Distribution LLogistic Log Likelihood -71.72331008 Analysis of Parameter Estimates Standard 95% Confidence Chi- Parameter DF Estimate Error Limits Square Pr > ChiSq Intercept 1 3.4429 0.4760 2.5099 4.3759 52.31 <.0001 Scale 1 1.5839 0.2926 1.1029 2.2748 Estimated Covariance Matrix Intercept Scale Intercept 0.226623 0.058140 Scale 0.058140 0.085586 Variance-Covariance Matrix COVB 0.0019512 -0.003661 -0.003661 0.0135976 Transformed Parameter Estimate Parameter Estimate Standard Error Intercept 0.114 0.044 Scale 0.631 0.117
Example 12. 2 (continued).
proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / covb distribution=llogit; ods output ParameterEstimates = test; ods output covB = covB; run; proc iml; use covB; read all var {Intercept z1 z2 z3 age Scale}; x = Intercept || z1 || z2 || z3 || age || Scale ; start grd(g); /*creating the gradient matrix corresponding to the transform*/ gdim = nrow(g); grdn = j(gdim, gdim, 0); grdn[1,1] = - exp(-g[1]/g[gdim])/g[gdim]; grdn[1,gdim] = (exp(-g[1]/g[gdim])*g[1])/(g[gdim]**2); do i = 2 to gdim - 1; grdn[i, gdim]=g[i]/(g[gdim]**2); grdn[i,i] = - 1/g[gdim]; end; grdn[gdim,gdim] = -1/(g[gdim]**2); return (grdn) ; finish grd; use test; read all var {parameter estimate}; est = estimate; parm = parameter; r = nrow(est); mytet = grd(est); newvar = sqrt(diag(mytet*x*t(mytet))); /*delta method to calculate the variance*/ gnew = j(r, 1, 0); gstd = j(r, 1, 0); do i = 1 to r; /*pull out the standard error*/ gstd[i]=newvar[i,i]; end; gnew[1] = exp(-est[1]/est[r]); /*doing the transformation*/ gnew[r] = 1/est[r]; do i = 2 to r-1; gnew[i] = - est[i]/est[r]; end; print "Transformed Parameter Estimate"; print gnew[rowname = parm colname = "Parameter Estimate" label=" " format=8.3] gstd[colname = " Standard Error" label = " " format=8.3]; quit;
The LIFEREG Procedure Model Information Data Set WORK.TABLE12_1 Dependent Variable Log(time) Censoring Variable death Censoring Value(s) 0 Number of Observations 90 Noncensored Values 50 Right Censored Values 40 Left Censored Values 0 Interval Censored Values 0 Name of Distribution LLogistic Log Likelihood -108.1923738 Type III Analysis of Effects Wald Effect DF Chi-Square Pr > ChiSq z1 1 0.0917 0.7621 z2 1 5.1844 0.0228 z3 1 17.2161 <.0001 The LIFEREG Procedure Type III Analysis of Effects Wald Effect DF Chi-Square Pr > ChiSq age 1 1.1995 0.2734 Analysis of Parameter Estimates Standard 95% Confidence Chi- Parameter DF Estimate Error Limits Square Pr > ChiSq Intercept 1 3.1022 0.9527 1.2350 4.9694 10.60 0.0011 z1 1 -0.1257 0.4152 -0.9395 0.6881 0.09 0.7621 z2 1 -0.8057 0.3539 -1.4993 -0.1122 5.18 0.0228 z3 1 -1.7661 0.4257 -2.6004 -0.9319 17.22 <.0001 age 1 -0.0151 0.0138 -0.0421 0.0119 1.20 0.2734 Scale 1 0.7152 0.0860 0.5651 0.9053 Transformed Parameter Estimate Parameter Estimate Standard Error Intercept 0.013 0.018 z1 0.176 0.581 z2 1.127 0.498 z3 2.469 0.632 age 0.021 0.019 Scale 1.398 0.168
Section 12.4: Other Parametric Models
Example 12.1 (continued), Table 12. 5 on page 387. We use the ODS feature of SAS 8 here to put all the output data sets from multiple procedures into one data set.
ods output ModelInfo (match_all=mymatch persist=proc) = table12_5; proc lifereg data = sec1_9; model time*ind(0)= / distribution=exponential; by type; run; proc lifereg data = sec1_9; model time*ind(0)=/ distribution=weibull; by type; run; proc lifereg data = sec1_9; model time*ind(0)= / distribution=llogistic; by type; run; proc lifereg data = sec1_9; model time*ind(0)= / distribution=lnormal; by type; run; proc lifereg data = sec1_9; model time*ind(0)= / distribution=gamma; by type; run; ods output close; data test (rename=(nvalue1=value)); set &mymatch; if label1="Name of Distribution" or label1 = "Log Likelihood"; distribution = lag(cvalue1); if nvalue1 ~= .; drop label1 _proc_ _run_ cvalue1; run; data test2; set test; if distribution="Exponential" then aic = -2*value + 2*( 1 ); else if distribution="Gamma" then aic = -2*value + 2*( 1 + 2); else aic = -2*value + 2*( 1 + 1); run; proc print data=test2 noobs; run; type value distribution aic 1 -81.204342 Exponential 164.409 2 -68.653867 Exponential 139.308 1 -72.879087 Weibull 149.758 2 -68.420282 Weibull 140.841 1 -71.723310 LLogistic 147.447 2 -67.146462 LLogistic 138.293 1 -71.186940 Lognormal 146.374 2 -66.847574 Lognormal 137.695 1 -70.892978 Gamma 147.786 2 -66.780969 Gamma 139.562
The last part of the output related to Gamma distribution is obtained by running the lifereg procedure and computing the Wald test statistic manually.
ods output ParameterEstimates (match_all=bytype persist=proc) = table12_5b; proc lifereg data = sec1_9; model time*ind(0)= / distribution=gamma; by type; run; ods output close; data waldtest; set &bytype; keep estimate stderr test0 test1; if parameter="Shape"; test0 = 1- probchi(estimate**2/stderr**2,1); test1 = 1- probchi((estimate-1)**2/stderr**2,1); run; proc print data=waldtest noobs; run; Estimate StdErr test0 test1 -0.6331 0.8264 0.44363 0.048146 -0.2613 0.7253 0.71865 0.08202
The bottom table on page 387.
data sec1_9b; set sec1_9; z1 = type - 1; run; proc lifereg data = sec1_9b; model time*ind(0)=z1 /distribution=lnormal; run;
The LIFEREG Procedure Model Information Data Set WORK.SEC1_9B Dependent Variable Log(time) Censoring Variable ind Censoring Value(s) 0 Number of Observations 101 Noncensored Values 50 Right Censored Values 51 Left Censored Values 0 Interval Censored Values 0 Name of Distribution Lognormal Log Likelihood -141.8636186 Type III Analysis of Effects Wald Effect DF Chi-Square Pr > ChiSq z1 1 0.0133 0.9080 Analysis of Parameter Estimates Standard 95% Confidence Chi- Parameter DF Estimate Error Limits Square Pr > ChiSq Intercept 1 3.1774 0.3552 2.4813 3.8735 80.04 <.0001 z1 1 0.0535 0.4629 -0.8537 0.9607 0.01 0.9080 Scale 1 2.0843 0.2299 1.6791 2.5873
Table 12.6 on page 388, making use of the ODS feature and proc tabulate for a nicer output.
ods output ParameterEstimates (match_all=bydist persist=proc) = table12_6; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=exponential; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=weibull; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=llogistic; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=lognormal; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=gamma; run; ods output close; data table126; set &bydist; retain group 0; keep parameter estimate stderr group; if parameter = "Intercept" then group= group+1; run; proc format; value group 1 = "Exponential" 2 = "Weibull" 3 = "Log Logistic" 4 = "Log Normal" 5 = "Gamma"; run; options nocenter FORMCHAR='|----|+|---+=|-/<>*'; proc tabulate data=table126; format group group.; class group parameter; var estimate stderr; table parameter='', group=' '*(estimate='Est' stderr='SE')*sum=' '*f=5.3/RTS=13; run; ------------------------------------------------------------------------- | | | | Log | | | | |Exponential| Weibull | Logistic |Log Normal | Gamma | | |-----------+-----------+-----------+-----------+-----------| | | Est | SE | Est | SE | Est | SE | Est | SE | Est | SE | |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |Intercept |3.755|0.990|3.529|0.904|3.102|0.953|3.383|0.936|3.453|0.944| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |Scale |1.000|0.000|0.885|0.108|0.715|0.086|1.264|0.135|1.104|0.257| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |Shape | .| .| .| .| .| .| .| .|0.458|0.584| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |Weibull | | | | | | | | | | | |Shape |1.000|0.000|1.130|0.138| .| .| .| .| .| .| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |age |-.020|0.014|-.017|0.013|-.015|0.014|-.018|0.014|-.018|0.014| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |z1 |-.146|0.460|-.148|0.408|-.126|0.415|-.199|0.442|-.158|0.431| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |z2 |-.648|0.355|-.587|0.320|-.806|0.354|-.900|0.363|-.758|0.394| |-----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| |z3 |-1.64|0.399|-1.54|0.363|-1.77|0.426|-1.86|0.443|-1.73|0.449| ------------------------------------------------------------------------|
The rest of the output from Table 12.6 can be obtained from the following.
ods output ModelInfo (match_all=bydist persist=proc) = table126_mod; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=exponential; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=weibull; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=llogistic; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=lognormal; run; proc lifereg data = table12_1; model time*death(0)= z1 z2 z3 age / distribution=gamma; run; ods output close; data table126btm; set &bydist; lagv = lag(cvalue1); if label1 = "Log Likelihood" or label1="Name of Distribution"; keep nvalue1 aic; if lagv = "Exponential" then aic = -2*nvalue1 + 2*( 1+4 ); else if lagv = "Gamma" then aic = -2*nvalue1 + 2*( 1 + 2 +4); else aic = -2*nvalue1 + 2*( 1 + 1 +4); if nvalue1 ~=.; run; data table126btm1; set table126btm; id = _n_; run; proc format; value group 1 = "Exponential" 2 = "Weibull" 3 = "Log Logistic" 4 = "Log Normal" 5 = "Gamma"; run; proc print data=table126btm1(rename=(nvalue1=LogL)) noobs; format id group.; var id LogL AIC; run;
Obs id LogL aic 1 Exponential -108.501123 227.002 2 Weibull -108.026745 228.053 3 Log Logistic -108.192374 228.385 4 Log Normal -107.995034 227.990 5 Gamma -107.680270 229.361
Section 12.5: Diagnostic Methods for Parametric Models
Example 12.1 (continued) Figure 12.1 on page 390. In this example, we first create a data set containing the estimates on survivals for both groups. Then we create all the necessary variables for different distributions of different plots.
proc phreg data =sec1_9; model time*ind(0) = ; where type = 1; output out = surv1 survival=surv1 /method = ch ; run; proc phreg data =sec1_9; model time*ind(0) = ; where type = 2; output out = surv2 survival=surv2 /method = ch ; run; data surv1_9; merge surv1 surv2; by time; haz1 = -log (surv1);/*Exponential*/ haz2 = -log (surv2); lghaz1 = log(haz1); /*Weibull*/ lghaz2 = log(haz2); lgtime = log(time); lnhaz1 = probit(1-exp(-haz1)); lnhaz2 = probit(1-exp(-haz2)); lohaz1 = log(exp(haz1)-1); lohaz2 = log(exp(haz2)-1); run; title "Figure 12.1"; symbol1 c=red i=l1p l=1; symbol2 c=blue i=l1p l=2 ; axis1 order =(0 to 25 by 5) minor = none; axis2 order =(0 to 1 by .2) minor = none label =(a=90); proc gplot data = surv1_9; plot haz1*time = 1 haz2*time =2 /overlay haxis = axis1 vaxis=axis2; label haz1 = "Exponential Cumulative Hazard Rates"; run; quit;
Figure 12.2 on page 391 on Weibull distribution.
title "Figure 12.2"; symbol1 c=red i=l1p l=1; symbol2 c=blue i=l1p l=2 ; axis1 order =(0 to 4 by 1) minor = none; axis2 order =(-3 to 0 by 1) minor = none label =(a=90); proc gplot data = surv1_9; plot lghaz1*lgtime = 1 lghaz2*lgtime =2 /overlay haxis = axis1 vaxis=axis2; label lghaz1 = "Log Estimated Cumulative Hazard Rates"; label lgtime ="log(Time)"; run; quit;
Figure 12.3 on page 392 of log logistic plot. The variables in the proc gplot are defined earlier.
title "Figure 12.3"; symbol1 c=red i=l1p l=1; symbol2 c=blue i=l1p l=2 ; axis1 order =(0 to 4 by 1) minor = none; axis2 order =(-3.5 to 0.5 by 1) minor = none label =(a=90); proc gplot data = surv1_9; plot lohaz1*lgtime = 1 lohaz2*lgtime =2 /overlay haxis = axis1 vaxis=axis2; label lohaz1 = "log(Odds)"; label lgtime="log(Time)"; run; quit;
Figure 12. 4 on page 393 of log normal hazard plot.
title "Figure 12.4"; symbol1 c=red i=l1p l=1; symbol2 c=blue i=l1p l=2 ; axis1 order =(0 to 4 by 1) minor = none; axis2 order =(-2 to 0.5 by .5) minor = none label =(a=90); proc gplot data = surv1_9; plot lnhaz1*lgtime = 1 lnhaz2*lgtime =2 /overlay haxis = axis1 vaxis=axis2; label lnhaz1 = "probit(1-exp(-H(t)))"; label lgtime="log(Time)"; run; quit;
Figure 12.5 on page 394 is a quantile-quantile plot.
proc lifetest data =sec1_9 outsurv=surv1 (keep=time survival); time time*ind(0) ; where type = 1; run; proc lifetest data =sec1_9 outsurv=surv2 (keep=time survival); time time*ind(0) ; where type = 2; run; data type1; set surv1; retain time1 0; do i = 1 to 7; if .05*(i-1) < 1- survival <.05*i then do p1=i; time1 = time; end; end; if p1 ~=.; keep time1 p1 ; run; proc sql; create table type1p as select max(time1) as time, p1 as p from type1 group by p1; quit; data type2; set surv2; retain time2 0; do i = 1 to 7; if .05*(i-1) < 1- survival <.05*i then do p2=i; time2 = time; end; end; if p2 ~=.; keep time2 p2 ; run; proc sql; create table type2p as select max(time2) as time, p2 as p from type2 group by p2; quit; proc sql; create table comb2 as select s1.time as time1, s2.time as time2 from type1p as s1, type2p as s2 where s1.p=s2.p; quit; symbol i = join v=none; axis1 order=(0 to 12 by 2) minor=none; axis2 order=(0 to 12 by 2) minor=none label=(a=90); title "Figure 12.5"; proc gplot data=comb2; plot time1*time2 /haxis=axis1 vaxis=axis2; label time1 ="Estimated Percentile for Allo Group"; label time2 = "Estimated Percentile for Auto Group"; run; quit;
Figure 12.6 on page 395 of Cox-Snell residual plot.
proc reliability data =table12_1; distribution exponential; model time*death(0) = z1 z2 z3 age /obstats (survival) ; ods output ModObstats = figure12_6; run; data figure12_6a; set figure12_6; h = -log(surv); run; proc phreg data = figure12_6a ; model h*death(0) = ; output out = figure12_6b logsurv = ls /method = ch; run; data figure12_6c; set figure12_6b; haz = - ls; run; proc sort data = figure12_6c; by h; run; title "Figure 12.6"; axis1 order = (0 to 3 by .5) minor = none; axis2 order = (0 to 3 by .5) minor = none label = ( a=90); symbol1 i = i=l1p c= blue; symbol2 i = join c = red l = 3; proc gplot data = figure12_6c; plot haz*h =1 h*h =2 /overlay haxis=axis1 vaxis= axis2; label haz = "Estimated Cumulative Hazard Rates"; label h = "Residual"; run; quit;
Figure 12.7 on page 396 of the Weibull regression model.
proc reliability data =table12_1; distribution weibull; model time*death(0) = z1 z2 z3 age /obstats (survival) ; ods output ModObstats = figure12_6; run; data figure12_6a; set figure12_6; h = -log(surv); run; proc phreg data = figure12_6a ; model h*death(0) = ; output out = figure12_6b logsurv = ls /method = ch; run; data figure12_6c; set figure12_6b; haz = - ls; run; proc sort data = figure12_6c; by h; run; title "Figure 12.7"; axis1 order = (0 to 3 by .5) minor = none; axis2 order = (0 to 3 by .5) minor = none label = ( a=90); symbol1 i = i=l1p c= blue; symbol2 i = join c = red l = 3; proc gplot data = figure12_6c; plot haz*h =1 h*h =2 /overlay haxis=axis1 vaxis= axis2; label haz = "Estimated Cumulative Hazard Rates"; label h = "Residual"; run; quit;
Figure 12.8 on page 397 of log logistic regression model.
proc reliability data =table12_1; distribution llogit; model time*death(0) = z1 z2 z3 age /obstats (survival) ; ods output ModObstats = figure12_6; run; data figure12_6a; set figure12_6; h = -log(surv); run; proc phreg data = figure12_6a ; model h*death(0) = ; output out = figure12_6b logsurv = ls /method = ch; run; data figure12_6c; set figure12_6b; haz = - ls; run; proc sort data = figure12_6c; by h; run; title "Figure 12.8"; axis1 order = (0 to 3 by .5) minor = none; axis2 order = (0 to 3 by .5) minor = none label = ( a=90); symbol1 i = i=l1p c= blue; symbol2 i = join c = red l = 3; proc gplot data = figure12_6c; plot haz*h =1 h*h =2 /overlay haxis=axis1 vaxis= axis2; label haz = "Estimated Cumulative Hazard Rates"; label h = "Residual"; run; quit;
Figure 12.9 on page 398 of log normal regression model.
proc reliability data =table12_1; distribution lognormal; model time*death(0) = z1 z2 z3 age /obstats (survival) ; ods output ModObstats = figure12_6; run; data figure12_6a; set figure12_6; h = -log(surv); run; proc phreg data = figure12_6a ; model h*death(0) = ; output out = figure12_6b logsurv = ls /method = ch; run; data figure12_6c; set figure12_6b; haz = - ls; run; proc sort data = figure12_6c; by h; run; title "Figure 12.9"; axis1 order = (0 to 3 by .5) minor = none; axis2 order = (0 to 3 by .5) minor = none label = ( a=90); symbol1 i = i=l1p c= blue; symbol2 i = join c = red l = 3; proc gplot data = figure12_6c; plot haz*h =1 h*h =2 /overlay haxis=axis1 vaxis= axis2; label haz = "Estimated Cumulative Hazard Rates"; label h = "Residual"; run; quit;
Figure 12.10 on page 399 of deviance residuals.
proc reliability data =table12_1; distribution llogit; model time*death(0) = z1 z2 z3 age /obstats (DRESID) ; ods output ModObstats = figure12_6; run; proc sort data=figure12_6; by time; run; symbol v=dot h=1.5 c=black i=none; axis1 order = (-2 to 3 by 1) label=(a = 90) ; title "Figure 12.10"; proc gplot data = figure12_6; plot dresid*time /vaxis=axis1; label dresid="Deviance Residuals for Log Logistic Model"; run; quit;