The R package(s) needed for this chapter is the survival package. We currently use R 2.0.1 patched version. You may want to make sure that packages on your local machine are up to date. You can perform updating in R using update.packages() function.
Table 5.1 on page 166 using data set uis on different covariates.
- Variable hercoc:
rm(list=ls())
library(survival)
uis<-read.table("https://stats.idre.ucla.edu/stat/r/examples/asa/uis.csv", sep=",", header = TRUE)
attach(uis)
hercoc.ph <- coxph( Surv(time, censor) ~ factor(hercoc), method="breslow") summary(hercoc.ph)
n=610 (18 observations deleted due to missing)
coef exp(coef) se(coef) z p
factor(hercoc)2 0.0773 1.080 0.144 0.535 0.59
factor(hercoc)3 -0.2544 0.775 0.135 -1.883 0.06
factor(hercoc)4 -0.1617 0.851 0.130 -1.243 0.21
exp(coef) exp(-coef) lower .95 upper .95 factor(hercoc)2 1.080 0.926 0.814 1.43 factor(hercoc)3 0.775 1.290 0.595 1.01 factor(hercoc)4 0.851 1.176 0.659 1.10
Rsquare= 0.013 (max possible= 1 ) Likelihood ratio test= 7.76 on 3 df, p=0.0513 Wald test = 7.88 on 3 df, p=0.0486 Score (logrank) test = 7.92 on 3 df, p=0.0476
survfit( Surv(time, censor) ~ hercoc, uis)
18 observations deleted due to missing
n events median 0.95LCL 0.95UCL
hercoc=1 111 92 150 107 198
hercoc=2 114 100 147 110 184
hercoc=3 178 136 185 148 231
hercoc=4 207 165 181 155 220
- Variable ivhx:
detach()
ivhx.ph<-coxph( Surv(time, censor) ~ factor(ivhx), data=uis, method="breslow") summary(ivhx.ph)
n=610 (18 observations deleted due to missing)
coef exp(coef) se(coef) z p
factor(ivhx)2 0.195 1.22 0.129 1.52 0.13000
factor(ivhx)3 0.385 1.47 0.101 3.80 0.00014
exp(coef) exp(-coef) lower .95 upper .95 factor(ivhx)2 1.22 0.822 0.945 1.56 factor(ivhx)3 1.47 0.680 1.205 1.79
Rsquare= 0.024 (max possible= 1 ) Likelihood ratio test= 14.6 on 2 df, p=0.000663 Wald test = 14.5 on 2 df, p=0.000705 Score (logrank) test = 14.7 on 2 df, p=0.000654
survfit( Surv(time, censor) ~ ivhx, uis)
18 observations deleted due to missing
n events median 0.95LCL 0.95UCL
ivhx=1 233 173 194 175 231
ivhx=2 115 93 170 130 231
ivhx=3 262 227 148 115 168
- Variable race:
race.ph<-coxph( Surv(time, censor) ~ factor(race), uis, method="breslow") summary(race.ph)
n=622 (6 observations deleted due to missing)
coef exp(coef) se(coef) z p
factor(race)1 -0.284 0.753 0.106 -2.68 0.0073
exp(coef) exp(-coef) lower .95 upper .95 factor(race)1 0.753 1.33 0.611 0.926
Rsquare= 0.012 (max possible= 1 ) Likelihood ratio test= 7.57 on 1 df, p=0.00593 Wald test = 7.21 on 1 df, p=0.00726 Score (logrank) test = 7.26 on 1 df, p=0.00706
stci.hl(50, uis, subset=race==0)
quantile time cie.lower cie.upper
[1,] 50 152 124 174
stci.hl(50, uis, subset=race==1)
quantile time cie.lower cie.upper
[1,] 50 193 162 232
- Variable treat:
treat.ph<-coxph( Surv(time, censor) ~ factor(treat), uis, method="breslow") summary(treat.ph)
n= 628
coef exp(coef) se(coef) z p
factor(treat)1 -0.231 0.794 0.089 -2.60 0.0094
exp(coef) exp(-coef) lower .95 upper .95 factor(treat)1 0.794 1.26 0.667 0.945
Rsquare= 0.011 (max possible= 1 ) Likelihood ratio test= 6.75 on 1 df, p=0.00937 Wald test = 6.74 on 1 df, p=0.00941 Score (logrank) test = 6.77 on 1 df, p=0.00926
survfit( Surv(time, censor) ~ treat, uis)
n events median 0.95LCL 0.95UCL
treat=0 320 265 132 115 156
treat=1 308 243 192 175 226
Variable site:
site.ph<-coxph( Surv(time, censor) ~ factor(site), uis, method="breslow") summary(site.ph)
n= 628
coef exp(coef) se(coef) z p
factor(site)1 -0.151 0.86 0.0986 -1.53 0.13
exp(coef) exp(-coef) lower .95 upper .95 factor(site)1 0.86 1.16 0.709 1.04
Rsquare= 0.004 (max possible= 1 ) Likelihood ratio test= 2.4 on 1 df, p=0.121 Wald test = 2.35 on 1 df, p=0.125 Score (logrank) test = 2.36 on 1 df, p=0.125
survfit( Surv(time, censor) ~ site, uis)
n events median 0.95LCL 0.95UCL
site=0 444 364 156 132 175
site=1 184 144 199 161 232
Variable age:
uis$agecat<-cut(uis$age, c(19, 27, 32,37,56)) agecat.ph<-coxph( Surv(time, censor) ~ agecat, uis, method="breslow") summary(agecat.ph)
n=623 (5 observations deleted due to missing)
coef exp(coef) se(coef) z p
factor(agecat)(27,32] 0.0808 1.084 0.123 0.654 0.51
factor(agecat)(32,37] -0.0658 0.936 0.121 -0.542 0.59
factor(agecat)(37,56] -0.1684 0.845 0.135 -1.247 0.21
exp(coef) exp(-coef) lower .95 upper .95 factor(agecat)(27,32] 1.084 0.922 0.851 1.38 factor(agecat)(32,37] 0.936 1.068 0.738 1.19 factor(agecat)(37,56] 0.845 1.183 0.649 1.10
Rsquare= 0.006 (max possible= 1 ) Likelihood ratio test= 3.81 on 3 df, p=0.282 Wald test = 3.79 on 3 df, p=0.285 Score (logrank) test = 3.8 on 3 df, p=0.284
agecat.surv<-survfit( Surv(time, censor) ~ agecat, uis)
agecat.surv
5 observations deleted due to missing
n events median 0.95LCL 0.95UCL
agecat=(19,27] 158 128 162 122 203
agecat=(27,32] 158 135 148 123 182
agecat=(32,37] 184 145 163 124 216
agecat=(37,56] 123 96 189 168 243
Variable becktoa:
uis$beckt2<-cut(uis$becktota, c(-.5, 9.99,14.9,24.9,55)) beckcat.ph<-coxph( Surv(time, censor) ~ beckt2, uis, method="breslow") summary(beckcat.ph)
n=595 (33 observations deleted due to missing)
coef exp(coef) se(coef) z p
beckt2(9.99,14.9] 0.0752 1.08 0.150 0.502 0.620
beckt2(14.9,24.9] 0.1821 1.20 0.123 1.485 0.140
beckt2(24.9,55] 0.2631 1.30 0.137 1.927 0.054
exp(coef) exp(-coef) lower .95 upper .95 beckt2(9.99,14.9] 1.08 0.928 0.804 1.45 beckt2(14.9,24.9] 1.20 0.834 0.943 1.53 beckt2(24.9,55] 1.30 0.769 0.996 1.70
Rsquare= 0.007 (max possible= 1 ) Likelihood ratio test= 4.41 on 3 df, p=0.221 Wald test = 4.37 on 3 df, p=0.225 Score (logrank) test = 4.38 on 3 df, p=0.223
beckcat.surv<-survfit( Surv(time, censor) ~ beckt2, uis, na.action=na.exclude)
beckcat.surv
33 observations deleted due to missing
n events median 0.95LCL 0.95UCL
beckt2=(-0.5,9.99] 135 104 211 170 248
beckt2=(9.99,14.9] 102 78 170 133 232
beckt2=(14.9,24.9] 226 185 168 139 200
beckt2=(24.9,55] 132 111 146 115 193
Variable ndurgtx:
uis$drugcat<-cut(uis$ndrugtx, c(-.5, 1, 3, 6, 70)) drugcat.ph<-coxph( Surv(time, censor) ~ drugcat, uis, method="breslow") summary(drugcat.ph)
n=611 (17 observations deleted due to missing)
coef exp(coef) se(coef) z p
drugcat(1,3] -0.0509 0.95 0.123 -0.412 0.680
drugcat(3,6] 0.2661 1.30 0.125 2.134 0.033
drugcat(6,70] 0.3649 1.44 0.127 2.880 0.004
exp(coef) exp(-coef) lower .95 upper .95 drugcat(1,3] 0.95 1.052 0.746 1.21 drugcat(3,6] 1.30 0.766 1.022 1.67 drugcat(6,70] 1.44 0.694 1.124 1.85
Rsquare= 0.023 (max possible= 1 ) Likelihood ratio test= 14.5 on 3 df, p=0.0023 Wald test = 14.7 on 3 df, p=0.00206 Score (logrank) test = 14.9 on 3 df, p=0.00192
drugcat.surv<-survfit( Surv(time, censor) ~ drugcat, uis, na.action=na.exclude) drugcat.surv Call: survfit(formula = Surv(time, censor) ~ drugcat, data = uis, na.action = na.exclude)
17 observations deleted due to missing
n events median 0.95LCL 0.95UCL
drugcat=(-0.5,1] 183 141 170 143 227
drugcat=(1,3] 165 123 177 162 211
drugcat=(3,6] 138 119 132 106 187
drugcat=(6,70] 125 113 123 110 186
Table 5.2 on page 167 using uis data set.
uis$age5 <- uis$age/5
uis$beck10 <- uis$becktota/10
uis$drug5 <- uis$ndrugtx/5
age5.ph<-coxph( Surv(time, censor) ~ age5, uis, method="breslow")
summary(age5.ph)
n=623 (5 observations deleted due to missing values)
coef exp(coef) se(coef) z p
age5 -0.0643 0.938 0.0359 -1.79 0.074
exp(coef) exp(-coef) lower .95 upper .95
age5 0.938 1.07 0.874 1.01
Rsquare= 0.005 (max possible= 1 )
Likelihood ratio test= 3.24 on 1 df, p=0.0719
Wald test = 3.2 on 1 df, p=0.0735
Score (logrank) test = 3.2 on 1 df, p=0.0735
beck10.ph<-coxph( Surv(time, censor) ~ beck10, uis, method="breslow")
summary(beck10.ph)
n=595 (33 observations deleted due to missing values)
coef exp(coef) se(coef) z p
beck10 0.11 1.12 0.0472 2.32 0.02
exp(coef) exp(-coef) lower .95 upper .95
beck10 1.12 0.896 1.02 1.22
Rsquare= 0.009 (max possible= 1 )
Likelihood ratio test= 5.32 on 1 df, p=0.0211
Wald test = 5.4 on 1 df, p=0.0201
Score (logrank) test = 5.41 on 1 df, p=0.0201
drug5.ph<-coxph( Surv(time, censor) ~ drug5, uis, method="breslow")
summary(drug5.ph)
n=611 (17 observations deleted due to missing)
coef exp(coef) se(coef) z p
drug5 0.147 1.16 0.0375 3.92 9e-05
exp(coef) exp(-coef) lower .95 upper .95 drug5 1.16 0.863 1.08 1.25
Rsquare= 0.022 (max possible= 1 ) Likelihood ratio test= 13.4 on 1 df, p=0.000259 Wald test = 15.4 on 1 df, p=8.95e-05 Score (logrank) test = 15.5 on 1 df, p=8.44e-05
Table 5.3 on page 168 using data set uis.
full.ph <- coxph( Surv(time, censor) ~ age + becktota + ndrugtx + factor(hercoc)
+ factor(ivhx) + race + treat + site, uis, method="breslow")
summary(full.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
age -0.02887 0.972 0.00817 -3.533 0.00041
becktota 0.00834 1.008 0.00498 1.677 0.09400
ndrugtx 0.02837 1.029 0.00831 3.416 0.00064
factor(hercoc)2 0.06532 1.067 0.15001 0.435 0.66000
factor(hercoc)3 -0.09362 0.911 0.16547 -0.566 0.57000
factor(hercoc)4 0.02798 1.028 0.16028 0.175 0.86000
factor(ivhx)2 0.17439 1.191 0.13864 1.258 0.21000
factor(ivhx)3 0.28071 1.324 0.14693 1.911 0.05600
race -0.20289 0.816 0.11669 -1.739 0.08200
treat -0.23995 0.787 0.09437 -2.543 0.01100
site -0.10249 0.903 0.10927 -0.938 0.35000
exp(coef) exp(-coef) lower .95 upper .95 age 0.972 1.029 0.956 0.987 becktota 1.008 0.992 0.999 1.018 ndrugtx 1.029 0.972 1.012 1.046 factor(hercoc)2 1.067 0.937 0.796 1.432 factor(hercoc)3 0.911 1.098 0.658 1.259 factor(hercoc)4 1.028 0.972 0.751 1.408 factor(ivhx)2 1.191 0.840 0.907 1.562 factor(ivhx)3 1.324 0.755 0.993 1.766 race 0.816 1.225 0.649 1.026 treat 0.787 1.271 0.654 0.946 site 0.903 1.108 0.729 1.118
Rsquare= 0.08 (max possible= 1 ) Likelihood ratio test= 47.9 on 11 df, p=1.48e-06 Wald test = 48.8 on 11 df, p=1.04e-06 Score (logrank) test = 49.4 on 11 df, p=8.17e-07
Table 5.4 on page 168 using data set uis with smaller model comparing with the previous example.
reduced1.ph <- coxph( Surv(time, censor) ~ age + becktota + ndrugtx +
factor(ivhx) + race + treat + site, uis, method="breslow")
summary(reduced1.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
age -0.02822 0.972 0.00817 -3.454 0.00055
becktota 0.00794 1.008 0.00497 1.598 0.11000
ndrugtx 0.02776 1.028 0.00829 3.350 0.00081
factor(ivhx)2 0.19599 1.217 0.13721 1.428 0.15000
factor(ivhx)3 0.33280 1.395 0.11991 2.775 0.00550
race -0.20925 0.811 0.11589 -1.805 0.07100
treat -0.23177 0.793 0.09371 -2.473 0.01300
site -0.09946 0.905 0.10854 -0.916 0.36000
exp(coef) exp(-coef) lower .95 upper .95 age 0.972 1.029 0.957 0.988 becktota 1.008 0.992 0.998 1.018 ndrugtx 1.028 0.973 1.012 1.045 factor(ivhx)2 1.217 0.822 0.930 1.592 factor(ivhx)3 1.395 0.717 1.103 1.764 race 0.811 1.233 0.646 1.018 treat 0.793 1.261 0.660 0.953 site 0.905 1.105 0.732 1.120
Rsquare= 0.078 (max possible= 1 ) Likelihood ratio test= 46.5 on 8 df, p=1.90e-07 Wald test = 47.5 on 8 df, p=1.24e-07 Score (logrank) test = 48 on 8 df, p=9.92e-08
Table 5.5 using data set uis, a further reduced model based on the previous example.
uis$ivhx3<-(uis$ivhx==3)
reduced2.ph <- coxph( Surv(time, censor) ~ age + becktota + ndrugtx +
ivhx3 + race + treat + site, uis, method="breslow")
summary(reduced2.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
age -0.0262 0.974 0.00805 -3.249 0.0012
becktota 0.0084 1.008 0.00495 1.696 0.0900
ndrugtx 0.0291 1.030 0.00821 3.540 0.0004
ivhx3TRUE 0.2561 1.292 0.10630 2.409 0.0160
race -0.2245 0.799 0.11527 -1.947 0.0510
treat -0.2324 0.793 0.09373 -2.480 0.0130
site -0.0867 0.917 0.10786 -0.804 0.4200
exp(coef) exp(-coef) lower .95 upper .95 age 0.974 1.026 0.959 0.990 becktota 1.008 0.992 0.999 1.018 ndrugtx 1.030 0.971 1.013 1.046 ivhx3TRUE 1.292 0.774 1.049 1.591 race 0.799 1.252 0.637 1.001 treat 0.793 1.262 0.660 0.952 site 0.917 1.091 0.742 1.133
Rsquare= 0.074 (max possible= 1 ) Likelihood ratio test= 44.5 on 7 df, p=1.7e-07 Wald test = 45.5 on 7 df, p=1.07e-07 Score (logrank) test = 46 on 7 df, p=8.67e-08
Table 5.6 using data set uis based on the model created in the previous example and the categorical variables created for Table 5.1.
uis$agecat<-cut(uis$age, c(19, 27, 32,37,56))
agecat.ph <- coxph(Surv(time, censor) ~ agecat + becktota + ndrugtx +
ivhx3 + site + race + treat, uis, method="breslow")
summary(agecat.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
agecat(27,32] 0.03582 1.036 0.13126 0.273 0.78000
agecat(32,37] -0.20940 0.811 0.13003 -1.610 0.11000
agecat(37,56] -0.39059 0.677 0.14996 -2.605 0.00920
becktota 0.00881 1.009 0.00493 1.787 0.07400
ndrugtx 0.02920 1.030 0.00832 3.510 0.00045
ivhx3TRUE 0.24242 1.274 0.10634 2.280 0.02300
site -0.07911 0.924 0.10849 -0.729 0.47000
race -0.24549 0.782 0.11618 -2.113 0.03500
treat -0.22935 0.795 0.09403 -2.439 0.01500
(output omitted.)
uis$beckcat<-cut(uis$becktota, c(-.5, 9.99,14.9,24.9,55))
beckcat.ph <- coxph(Surv(time, censor) ~ age + beckcat + ndrugtx +
ivhx3 + site + race + treat, uis, method="breslow")
summary(beckcat.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
age -0.0265 0.974 0.00804 -3.297 0.00098
beckcat(9.99,14.9] 0.0695 1.072 0.15212 0.457 0.65000
beckcat(14.9,24.9] 0.0909 1.095 0.12493 0.728 0.47000
beckcat(24.9,55] 0.2169 1.242 0.13995 1.550 0.12000
ndrugtx 0.0289 1.029 0.00825 3.509 0.00045
ivhx3TRUE 0.2616 1.299 0.10631 2.461 0.01400
site -0.0920 0.912 0.10782 -0.853 0.39000
race -0.2254 0.798 0.11549 -1.952 0.05100
treat -0.2304 0.794 0.09390 -2.453 0.01400
(output omitted)
uis$drugcat<-cut(ndrugtx, c(-.5, 1, 3, 6, 70))
drugcat.ph <- coxph(Surv(time, censor) ~ age + becktota + drugcat +
ivhx3 + site + race + treat, uis, method="breslow")
summary(drugcat.ph)
n=575 (53 observations deleted due to missing)
coef exp(coef) se(coef) z p
age -0.02772 0.973 0.00815 -3.402 0.00067
becktota 0.00805 1.008 0.00495 1.626 0.10000
drugcat(1,3] -0.06951 0.933 0.12911 -0.538 0.59000
drugcat(3,6] 0.25949 1.296 0.13368 1.941 0.05200
drugcat(6,70] 0.39935 1.491 0.14030 2.846 0.00440
ivhx3TRUE 0.24908 1.283 0.10664 2.336 0.02000
site -0.08384 0.920 0.10791 -0.777 0.44000
race -0.22966 0.795 0.11542 -1.990 0.04700
treat -0.21991 0.803 0.09357 -2.350 0.01900
(output omitted)
Figure 5.1 (a), (b) and (c) based on the models from Table 5.6.
Panel (a) Estimated coefficients for grouped age using the object agecat.ph created in the previous example.
names(agecat.ph)
[1] "coefficients" "var" "loglik"
[4] "score" "iter" "linear.predictors"
[7] "residuals" "means" "method"
[10] "n" "terms" "assign"
[13] "wald.test" "na.action" "y"
[16] "formula" "call"
agecat.ph$coefficients
agecat(27,32] agecat(32,37] agecat(37,56] becktota ndrugtx
0.03582336 -0.20940371 -0.39058778 0.00881022 0.02919603
ivhx3TRUE site race treat
0.24241703 -0.07910672 -0.24548561 -0.22934666
age.coeff<-data.frame(agecat.ph$coefficients)[1:3,]
age.plot<-cbind(midpt=c(24, 30.5, 35.5, 47.5), rbind(0, data.frame(age.coeff)))
age.plot
midpt age.coeff
1 24.0 0.00000000
11 30.5 0.03582336
2 35.5 -0.20940371
3 47.5 -0.39058778
plot(age.plot[,1], age.plot[,2], ylab="Log Hazard", xlab="Age", type="b")

Panel (b) Estimated coefficients for grouped beck score using the object beckcat.ph created in the previous example.
beckcat.ph$coefficients
age beckcat(9.99,14.9] beckcat(14.9,24.9] beckcat(24.9,55]
-0.02650867 0.06948882 0.09094400 0.21687651
ndrugtx ivhx3TRUE site race
0.02894029 0.26163192 -0.09197744 -0.22540640
treat
-0.23038130
beck.coeff<-data.frame(beckcat.ph$coefficients)[2:4,]
beck.plot<-cbind(midpt=c(5, 12.5, 20, 40), rbind(0, data.frame(beck.coeff)))
plot(beck.plot[,1], beck.plot[,2], ylab="Log Hazard", xlab="Becktota", type="b")

Panel (c) Estimated coefficients for grouped drug treatments using the object drugcat.ph created in the previous example.
drugcat.ph$coefficients
age becktota drugcat(1,3] drugcat(3,6] drugcat(6,70]
-0.027723404 0.008050683 -0.069508432 0.259486831 0.399345037
ivhx3TRUE site race treat
0.249076482 -0.083840409 -0.229664884 -0.219909556
drug.coeff<-data.frame(drugcat.ph$coefficients)[3:5,]
drug.plot<-cbind(midpt=c(.5, 2.5, 5.0, 23.5), rbind(0, data.frame(drug.coeff)))
drug.plot
midpt drug.coeff
1 0.5 0.00000000
11 2.5 -0.06950843
2 5.0 0.25948683
3 23.5 0.39934504
plot(drug.plot[,1], drug.plot[,2], ylab="Log Hazard", xlab="NDRUGTX", type="b")

Figure 5.1 (d) on page 171 and Table 5.7 on page 172 using data set uis and fractional polynomials for ndrugtx. Currently (3/18/05), package mfp does multiple fractional polynomials in regression models, including cox models. You can download the package by “install.packages(“mfp”)” assuming that your machine is connected to the internet. Unlike Stata’s fracpoly command, function mfp in R does not automatically transform variables into desirable forms. For example, if a variable takes value zero sometimes, then negative power is not being used, thus restricting some possible better transformation. In this example, variable ndrugtx takes value zero sometimes, we will apply mfp on a transformed variable.
rm(list=ls())
library(survival)
library(mfp)
uis<-read.table("https://stats.idre.ucla.edu/stat/r/examples/asa/uis.csv", sep=",", header = TRUE)
uis$ivhx3<-(uis$ivhx==3)
uis$nx<-10/(uis$ndrugtx+1)
attach(uis)
uis$ok<-complete.cases(uis$age, uis$becktota, uis$nx, uis$ivhx3, uis$site, uis$race, uis$treat)
to.uis<-uis[ok,]
# Not in the mdoel
a.ph<- coxph(Surv(time, censor) ~ age + becktota + ivhx3 + site + race + treat,
to.uis, method="breslow")
2*a.ph$loglik [1] -5327.970 -5294.497 # Linear term
alin<- coxph(Surv(time, censor) ~ ndrugtx + age+ becktota + ivhx3 + site + race + treat,
to.uis, method="breslow")
2*alin$loglik
[1] -5327.970 -5283.459
# J = 1 (2 df)
a2<- mfp(Surv(time, censor) ~fp(nx, df=2) + age+ becktota + ivhx3 + site + race + treat,
family = cox, data = to.uis)
a2$dev
[1] 5281.24
a2$powers
power1 power2
site 1.0 NA
nx -0.5 NA
becktota 1.0 NA
race 1.0 NA
treat 1.0 NA
ivhx3TRUE 1.0 NA
age 1.0 NA
# J = 2 (4 df)
a4<- mfp(Surv(time, censor) ~fp(nx, df=4) + age+ becktota + ivhx3 + site + race + treat,
family = cox, data = to.uis)
a4$powers
power1 power2
site 1 NA
nx 1 1
becktota 1 NA
race 1 NA
treat 1 NA
ivhx3TRUE 1 NA
age 1 NA
a4$dev [1] 5274.678
Now we are ready to create the plot (d) of Figure 5.1 based on object a4.
names(a4) [1] "coefficients" "var" "loglik" [4] "score" "iter" "linear.predictors" [7] "residuals" "means" "method" [10] "x" "powers" "pvalues" [13] "scale" "df.initial" "df.final" [16] "dev" "dev.lin" "dev.null" [19] "fptable" "n" "family" [22] "wald.test" "X" "y" [25] "terms" "call" head(a4$x) site.1 nx.1 nx.2 becktota.1 race.1 treat.1 ivhx3TRUE.1 age.1 1 0 5.000000 8.0471896 9.00 0 1 1 39 2 0 1.111111 0.1170672 34.00 0 1 0 33 3 0 2.500000 2.2907268 10.00 0 1 1 33 4 0 5.000000 8.0471896 20.00 0 0 1 32 5 0 1.666667 0.8513760 5.00 1 1 0 24 6 0 5.000000 8.0471896 32.55 0 1 1 30
y<-a4$x[,2]*(-0.52360) + a4$x[,3]*0.19505 f51.d<-cbind(x=to.uis$ndrugtx, y) f51.d<-f51.d[order(f51.d$x),] par(cex=.8) plot(f51.d$x, f51.d$y, type="l", xlab="NDRUGTX", ylab="Log Hazard")
Table 5.8 on page 174 based on the fractional polynomial model in previous example.
a4
Call:
mfp(formula = Surv(time, censor) ~ fp(nx, df = 4) + age + becktota +
ivhx3 + site + race + treat, data = to.uis, family = cox)
coef exp(coef) se(coef) z p site.1 -0.10583 0.900 0.10916 -0.97 3.3e-01 nx.1 -0.52360 0.592 0.12441 -4.21 2.6e-05 nx.2 0.19505 1.215 0.04825 4.04 5.3e-05 becktota.1 0.00918 1.009 0.00499 1.84 6.6e-02 race.1 -0.24242 0.785 0.11547 -2.10 3.6e-02 treat.1 -0.21138 0.809 0.09369 -2.26 2.4e-02 ivhx3TRUE.1 0.25911 1.296 0.10802 2.40 1.6e-02 age.1 -0.02820 0.972 0.00813 -3.47 5.2e-04
Likelihood ratio test=51.6 on 8 df, p=1.99e-08 n= 575
Figure 5.2 on page 175 with Martingale residuals and Lowess smoothed residuals. Library Design includes functions for computing different types of residuals for survival models. You may want have to download the package first by install.packages(“Design”).
Panel (a) Martingale residuals and Lowess smoothed residuals.
detach(uis)
attach(to.uis)
age.ph <- coxph( Surv(time, censor) ~ becktota + ndrugtx + ivhx3
+ race + treat + site, to.uis, method="breslow")
to.uis$resid<- residuals(age.ph, type="martingale", data=to.uis)
plot(to.uis$age, to.uis$resid, xlab="Age",ylab="Martingale Residuals")
lines(lowess(to.uis$age, to.uis$resid))
Panel (b) Log (Smoothed Censor/Smoothed Expected) + Beta*age.
Fig. 5.3a, p. 176. The fitted line appears to be approximately linear thus there is no transformation of becktota needed.
becktota.ph <- coxph( Surv(time, censor) ~ age + ndrugtx +
ivhx3 + race + treat + site, uis, method="breslow", na.action=na.exclude)
uis$resid <- residuals(becktota.ph, type="martingale")
plot(uis$becktota, uis$resid, xlab="Becktota",ylab="Martingale Residuals", ylim=c(-4, 1.0))
lines(lowess(uis$becktota[!is.na(uis$becktota) & !is.na(uis$resid)],
uis$resid[!is.na(uis$becktota) & !is.na(uis$resid)]))
Fig. 5.4a, p. 177. The fitted line has a noticeable squiggle in the beginning which makes us very nervous and it is an indicator that we can’t just include ndrugtx in the model; we should transform it before including it in the final model.
ndrugtx.ph

Creating ndrugfp1 and ndrugfp2, p. 174.
uis$ndrugfp1 <- 1/((uis$ndrugtx+1)/10) uis$ndrugfp2 <- (1/((uis$ndrugtx+1)/10))*log((uis$ndrugtx+1)/10)
Table 5.8, p. 174.
reduced3.ph <- coxph( Surv(time, censor)~ age + becktota + ndrugfp1 + ndrugfp2 +
ivhx3 + race + treat + site, uis, method="breslow", na.action=na.exclude)
summary(reduced3.ph)
<output omitted>
n=575 (53 observations deleted due to missing values)
coef exp(coef) se(coef) z p
age -0.02815 0.972 0.00813 -3.461 0.000540
becktota 0.00916 1.009 0.00499 1.837 0.066000
ndrugfp1 -0.52284 0.593 0.12441 -4.202 0.000026
ndrugfp2 -0.19478 0.823 0.04825 -4.037 0.000054
ivhx3 0.25858 1.295 0.10802 2.394 0.017000
race -0.24220 0.785 0.11547 -2.098 0.036000
treat -0.21084 0.810 0.09369 -2.250 0.024000
site -0.10532 0.900 0.10915 -0.965 0.330000
Rsquare= 0.086 (max possible= 1 )
Likelihood ratio test= 51.4 on 8 df, p=2.17e-008
Wald test = 51.4 on 8 df, p=2.17e-008
Score (logrank) test = 52 on 8 df, p=1.72e-008
Creating the interaction variables, p. 178.
uis$agesite <- uis$age*uis$site uis$racesite <- uis$race*uis$site uis$agefp1 <- uis$age*uis$ndrugfp1 uis$agefp2 <- uis$age*uis$ndrugfp2
Table 5.10, p. 179.
interaction.ph <- coxph(formula=Surv(time, censor) ~ age + becktota + + ndrugfp1 + ndrugfp2 +
ivhx3 + race + treat + site + agesite + racesite + agefp1 + agefp2,
data=uis, method="breslow", na.action=na.exclude)
summary(interaction.ph)
<output omitted>
n=575 (53 observations deleted due to missing values)
coef exp(coef) se(coef) z p
age -0.05431 0.947 0.02803 -1.9372 0.05300
becktota 0.01005 1.010 0.00499 2.0129 0.04400
ndrugfp1 -0.67435 0.509 0.64447 -1.0464 0.30000
ndrugfp2 -0.17217 0.842 0.25234 -0.6823 0.50000
ivhx3 0.22935 1.258 0.10793 2.1250 0.03400
race -0.48774 0.614 0.13461 -3.6233 0.00029
treat -0.24205 0.785 0.09455 -2.5600 0.01000
site -1.11940 0.326 0.54607 -2.0499 0.04000
agesite 0.02644 1.027 0.01658 1.5949 0.11000
racesite 0.86274 2.370 0.24810 3.4773 0.00051
agefp1 0.00163 1.002 0.01945 0.0838 0.93000
agefp2 -0.00198 0.998 0.00766 -0.2589 0.80000
Rsquare= 0.119 (max possible= 1 )
Likelihood ratio test= 73.1 on 12 df, p=8.3e-011
Wald test = 73 on 12 df, p=8.61e-011
Score (logrank) test = 73.9 on 12 df, p=5.99e-011
Table 5.11, p. 179.
reducedinter.ph <- coxph(formula=Surv(time, censor) ~ age + becktota + + ndrugfp1 + ndrugfp2 +
ivhx3 + race + treat + site + agesite + racesite, uis, method="breslow", na.action=na.exclude)
summary(reducedinter.ph)
<output omitted>
n=575 (53 observations deleted due to missing values)
coef exp(coef) se(coef) z p
age -0.04138 0.959 0.00991 -4.17 3.0e-005
becktota 0.00874 1.009 0.00497 1.76 7.8e-002
ndrugfp1 -0.57473 0.563 0.12519 -4.59 4.4e-006
ndrugfp2 -0.21470 0.807 0.04859 -4.42 9.9e-006
ivhx3 0.22776 1.256 0.10857 2.10 3.6e-002
race -0.46661 0.627 0.13475 -3.46 5.3e-004
treat -0.24667 0.781 0.09434 -2.61 8.9e-003
site -1.31517 0.268 0.53143 -2.47 1.3e-002
agesite 0.03235 1.033 0.01608 2.01 4.4e-002
racesite 0.85014 2.340 0.24774 3.43 6.0e-004
Rsquare= 0.11 (max possible= 1 )
Likelihood ratio test= 67.1 on 10 df, p=1.58e-010
Wald test = 66.5 on 10 df, p=2.07e-010
Score (logrank) test = 67.4 on 10 df, p=1.38e-010



