2025-01-12 00:52:51 +08:00

3852 lines
127 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

R Under development (unstable) (2024-04-29 r86493) -- "Unsuffered Consequences"
Copyright (C) 2024 The R Foundation for Statistical Computing
Platform: aarch64-unknown-linux-gnu
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> pkgname <- "survival"
> source(file.path(R.home("share"), "R", "examples-header.R"))
> options(warn = 1)
> library('survival')
>
> base::assign(".oldSearch", base::search(), pos = 'CheckExEnv')
> base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv')
> cleanEx()
> nameEx("Surv")
> ### * Surv
>
> flush(stderr()); flush(stdout())
>
> ### Name: Surv
> ### Title: Create a Survival Object
> ### Aliases: Surv is.Surv [.Surv
> ### Keywords: survival
>
> ### ** Examples
>
> with(aml, Surv(time, status))
[1] 9 13 13+ 18 23 28+ 31 34 45+ 48 161+ 5 5 8 8
[16] 12 16+ 23 27 30 33 43 45
> survfit(Surv(time, status) ~ ph.ecog, data=lung)
Call: survfit(formula = Surv(time, status) ~ ph.ecog, data = lung)
1 observation deleted due to missingness
n events median 0.95LCL 0.95UCL
ph.ecog=0 63 37 394 348 574
ph.ecog=1 113 82 306 268 429
ph.ecog=2 50 44 199 156 288
ph.ecog=3 1 1 118 NA NA
> Surv(heart$start, heart$stop, heart$event)
[1] ( 0.0, 50.0] ( 0.0, 6.0] ( 0.0, 1.0+] ( 1.0, 16.0]
[5] ( 0.0, 36.0+] ( 36.0, 39.0] ( 0.0, 18.0] ( 0.0, 3.0]
[9] ( 0.0, 51.0+] ( 51.0, 675.0] ( 0.0, 40.0] ( 0.0, 85.0]
[13] ( 0.0, 12.0+] ( 12.0, 58.0] ( 0.0, 26.0+] ( 26.0, 153.0]
[17] ( 0.0, 8.0] ( 0.0, 17.0+] ( 17.0, 81.0] ( 0.0, 37.0+]
[21] ( 37.0,1387.0] ( 0.0, 1.0] ( 0.0, 28.0+] ( 28.0, 308.0]
[25] ( 0.0, 36.0] ( 0.0, 20.0+] ( 20.0, 43.0] ( 0.0, 37.0]
[29] ( 0.0, 18.0+] ( 18.0, 28.0] ( 0.0, 8.0+] ( 8.0,1032.0]
[33] ( 0.0, 12.0+] ( 12.0, 51.0] ( 0.0, 3.0+] ( 3.0, 733.0]
[37] ( 0.0, 83.0+] ( 83.0, 219.0] ( 0.0, 25.0+] ( 25.0,1800.0+]
[41] ( 0.0,1401.0+] ( 0.0, 263.0] ( 0.0, 71.0+] ( 71.0, 72.0]
[45] ( 0.0, 35.0] ( 0.0, 16.0+] ( 16.0, 852.0] ( 0.0, 16.0]
[49] ( 0.0, 17.0+] ( 17.0, 77.0] ( 0.0, 51.0+] ( 51.0,1587.0+]
[53] ( 0.0, 23.0+] ( 23.0,1572.0+] ( 0.0, 12.0] ( 0.0, 46.0+]
[57] ( 46.0, 100.0] ( 0.0, 19.0+] ( 19.0, 66.0] ( 0.0, 4.5+]
[61] ( 4.5, 5.0] ( 0.0, 2.0+] ( 2.0, 53.0] ( 0.0, 41.0+]
[65] ( 41.0,1408.0+] ( 0.0, 58.0+] ( 58.0,1322.0+] ( 0.0, 3.0]
[69] ( 0.0, 2.0] ( 0.0, 40.0] ( 0.0, 1.0+] ( 1.0, 45.0]
[73] ( 0.0, 2.0+] ( 2.0, 996.0] ( 0.0, 21.0+] ( 21.0, 72.0]
[77] ( 0.0, 9.0] ( 0.0, 36.0+] ( 36.0,1142.0+] ( 0.0, 83.0+]
[81] ( 83.0, 980.0] ( 0.0, 32.0+] ( 32.0, 285.0] ( 0.0, 102.0]
[85] ( 0.0, 41.0+] ( 41.0, 188.0] ( 0.0, 3.0] ( 0.0, 10.0+]
[89] ( 10.0, 61.0] ( 0.0, 67.0+] ( 67.0, 942.0+] ( 0.0, 149.0]
[93] ( 0.0, 21.0+] ( 21.0, 343.0] ( 0.0, 78.0+] ( 78.0, 916.0+]
[97] ( 0.0, 3.0+] ( 3.0, 68.0] ( 0.0, 2.0] ( 0.0, 69.0]
[101] ( 0.0, 27.0+] ( 27.0, 842.0+] ( 0.0, 33.0+] ( 33.0, 584.0]
[105] ( 0.0, 12.0+] ( 12.0, 78.0] ( 0.0, 32.0] ( 0.0, 57.0+]
[109] ( 57.0, 285.0] ( 0.0, 3.0+] ( 3.0, 68.0] ( 0.0, 10.0+]
[113] ( 10.0, 670.0+] ( 0.0, 5.0+] ( 5.0, 30.0] ( 0.0, 31.0+]
[117] ( 31.0, 620.0+] ( 0.0, 4.0+] ( 4.0, 596.0+] ( 0.0, 27.0+]
[121] ( 27.0, 90.0] ( 0.0, 5.0+] ( 5.0, 17.0] ( 0.0, 2.0]
[125] ( 0.0, 46.0+] ( 46.0, 545.0+] ( 0.0, 21.0] ( 0.0, 210.0+]
[129] (210.0, 515.0+] ( 0.0, 67.0+] ( 67.0, 96.0] ( 0.0, 26.0+]
[133] ( 26.0, 482.0+] ( 0.0, 6.0+] ( 6.0, 445.0+] ( 0.0, 428.0+]
[137] ( 0.0, 32.0+] ( 32.0, 80.0] ( 0.0, 37.0+] ( 37.0, 334.0]
[141] ( 0.0, 5.0] ( 0.0, 8.0+] ( 8.0, 397.0+] ( 0.0, 60.0+]
[145] ( 60.0, 110.0] ( 0.0, 31.0+] ( 31.0, 370.0+] ( 0.0, 139.0+]
[149] (139.0, 207.0] ( 0.0, 160.0+] (160.0, 186.0] ( 0.0, 340.0]
[153] ( 0.0, 310.0+] (310.0, 340.0+] ( 0.0, 28.0+] ( 28.0, 265.0+]
[157] ( 0.0, 4.0+] ( 4.0, 165.0] ( 0.0, 2.0+] ( 2.0, 16.0]
[161] ( 0.0, 13.0+] ( 13.0, 180.0+] ( 0.0, 21.0+] ( 21.0, 131.0+]
[165] ( 0.0, 96.0+] ( 96.0, 109.0+] ( 0.0, 21.0] ( 0.0, 38.0+]
[169] ( 38.0, 39.0+] ( 0.0, 31.0+] ( 0.0, 11.0+] ( 0.0, 6.0]
>
>
>
> cleanEx()
> nameEx("aareg")
> ### * aareg
>
> flush(stderr()); flush(stdout())
>
> ### Name: aareg
> ### Title: Aalen's additive regression model for censored data
> ### Aliases: aareg
> ### Keywords: survival
>
> ### ** Examples
>
> # Fit a model to the lung cancer data set
> lfit <- aareg(Surv(time, status) ~ age + sex + ph.ecog, data=lung,
+ nmin=1)
> ## Not run:
> ##D lfit
> ##D Call:
> ##D aareg(formula = Surv(time, status) ~ age + sex + ph.ecog, data = lung, nmin = 1
> ##D )
> ##D
> ##D n=227 (1 observations deleted due to missing values)
> ##D 138 out of 138 unique event times used
> ##D
> ##D slope coef se(coef) z p
> ##D Intercept 5.26e-03 5.99e-03 4.74e-03 1.26 0.207000
> ##D age 4.26e-05 7.02e-05 7.23e-05 0.97 0.332000
> ##D sex -3.29e-03 -4.02e-03 1.22e-03 -3.30 0.000976
> ##D ph.ecog 3.14e-03 3.80e-03 1.03e-03 3.70 0.000214
> ##D
> ##D Chisq=26.73 on 3 df, p=6.7e-06; test weights=aalen
> ##D
> ##D plot(lfit[4], ylim=c(-4,4)) # Draw a plot of the function for ph.ecog
> ## End(Not run)
> lfit2 <- aareg(Surv(time, status) ~ age + sex + ph.ecog, data=lung,
+ nmin=1, taper=1:10)
> ## Not run: lines(lfit2[4], col=2) # Nearly the same, until the last point
>
> # A fit to the mulitple-infection data set of children with
> # Chronic Granuomatous Disease. See section 8.5 of Therneau and Grambsch.
> fita2 <- aareg(Surv(tstart, tstop, status) ~ treat + age + inherit +
+ steroids + cluster(id), data=cgd)
> ## Not run:
> ##D n= 203
> ##D 69 out of 70 unique event times used
> ##D
> ##D slope coef se(coef) robust se z p
> ##D Intercept 0.004670 0.017800 0.002780 0.003910 4.55 5.30e-06
> ##D treatrIFN-g -0.002520 -0.010100 0.002290 0.003020 -3.36 7.87e-04
> ##D age -0.000101 -0.000317 0.000115 0.000117 -2.70 6.84e-03
> ##D inheritautosomal 0.001330 0.003830 0.002800 0.002420 1.58 1.14e-01
> ##D steroids 0.004620 0.013200 0.010600 0.009700 1.36 1.73e-01
> ##D
> ##D Chisq=16.74 on 4 df, p=0.0022; test weights=aalen
> ## End(Not run)
>
>
>
> cleanEx()
> nameEx("aggregate.survfit")
> ### * aggregate.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: aggregate.survfit
> ### Title: Average survival curves
> ### Aliases: aggregate.survfit
> ### Keywords: survival
>
> ### ** Examples
>
> cfit <- coxph(Surv(futime, death) ~ sex + age*hgb, data=mgus2)
> # marginal effect of sex, after adjusting for the others
> dummy <- rbind(mgus2, mgus2)
> dummy$sex <- rep(c("F", "M"), each=nrow(mgus2)) # population data set
> dummy <- na.omit(dummy) # don't count missing hgb in our "population
> csurv <- survfit(cfit, newdata=dummy)
> dim(csurv) # 2 * 1384 survival curves
data
2676
> csurv2 <- aggregate(csurv, dummy$sex)
>
>
>
> cleanEx()
> nameEx("anova.coxph")
> ### * anova.coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: anova.coxph
> ### Title: Analysis of Deviance for a Cox model.
> ### Aliases: anova.coxph anova.coxphlist
> ### Keywords: models regression survival
>
> ### ** Examples
>
> fit <- coxph(Surv(futime, fustat) ~ resid.ds *rx + ecog.ps, data = ovarian)
> anova(fit)
Analysis of Deviance Table
Cox model: response is Surv(futime, fustat)
Terms added sequentially (first to last)
loglik Chisq Df Pr(>|Chi|)
NULL -34.985
resid.ds -33.105 3.7594 1 0.05251 .
rx -32.269 1.6733 1 0.19582
ecog.ps -31.970 0.5980 1 0.43934
resid.ds:rx -30.946 2.0469 1 0.15251
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
> fit2 <- coxph(Surv(futime, fustat) ~ resid.ds +rx + ecog.ps, data=ovarian)
> anova(fit2,fit)
Analysis of Deviance Table
Cox model: response is Surv(futime, fustat)
Model 1: ~ resid.ds + rx + ecog.ps
Model 2: ~ resid.ds * rx + ecog.ps
loglik Chisq Df Pr(>|Chi|)
1 -31.970
2 -30.946 2.0469 1 0.1525
>
>
>
> cleanEx()
> nameEx("attrassign")
> ### * attrassign
>
> flush(stderr()); flush(stdout())
>
> ### Name: attrassign
> ### Title: Create new-style "assign" attribute
> ### Aliases: attrassign.default attrassign attrassign.lm
> ### Keywords: models
>
> ### ** Examples
>
> formula <- Surv(time,status)~factor(ph.ecog)
> tt <- terms(formula)
> mf <- model.frame(tt,data=lung)
> mm <- model.matrix(tt,mf)
> ## a few rows of data
> mm[1:3,]
(Intercept) factor(ph.ecog)1 factor(ph.ecog)2 factor(ph.ecog)3
1 1 1 0 0
2 1 0 0 0
3 1 0 0 0
> ## old-style assign attribute
> attr(mm,"assign")
[1] 0 1 1 1
> ## alternate style assign attribute
> attrassign(mm,tt)
$`(Intercept)`
[1] 1
$`factor(ph.ecog)`
[1] 2 3 4
>
>
>
> cleanEx()
> nameEx("blogit")
> ### * blogit
>
> flush(stderr()); flush(stdout())
>
> ### Name: blogit
> ### Title: Bounded link functions
> ### Aliases: blogit bcloglog bprobit blog
> ### Keywords: survival
>
> ### ** Examples
>
> py <- pseudo(survfit(Surv(time, status) ~1, lung), time=730) #2 year survival
> range(py)
[1] -0.335248 1.693831
> pfit <- glm(py ~ ph.ecog, data=lung, family=gaussian(link=blogit()))
> # For each +1 change in performance score, the odds of 2 year survival
> # are multiplied by 1/2 = exp of the coefficient.
>
>
>
> cleanEx()
> nameEx("brier")
> ### * brier
>
> flush(stderr()); flush(stdout())
>
> ### Name: brier
> ### Title: Compute the Brier score for a Cox model
> ### Aliases: brier
> ### Keywords: survival
>
> ### ** Examples
>
> cfit <- coxph(Surv(rtime, recur) ~ age + meno + size + pmin(nodes,11),
+ data= rotterdam)
> round(cfit$concordance["concordance"], 3) # some predictive power
concordance
0.675
> brier(cfit, times=c(4,6)*365.25) # values at 4 and 6 years
$rsquared
[1] 0.1501931 0.1514488
$brier
[1] 0.1952731 0.2097106
$times
[1] 1461.0 2191.5
>
>
>
> cleanEx()
> nameEx("cch")
> ### * cch
>
> flush(stderr()); flush(stdout())
>
> ### Name: cch
> ### Title: Fits proportional hazards regression model to case-cohort data
> ### Aliases: cch
> ### Keywords: survival
>
> ### ** Examples
>
> ## The complete Wilms Tumor Data
> ## (Breslow and Chatterjee, Applied Statistics, 1999)
> ## subcohort selected by simple random sampling.
> ##
>
> subcoh <- nwtco$in.subcohort
> selccoh <- with(nwtco, rel==1|subcoh==1)
> ccoh.data <- nwtco[selccoh,]
> ccoh.data$subcohort <- subcoh[selccoh]
> ## central-lab histology
> ccoh.data$histol <- factor(ccoh.data$histol,labels=c("FH","UH"))
> ## tumour stage
> ccoh.data$stage <- factor(ccoh.data$stage,labels=c("I","II","III","IV"))
> ccoh.data$age <- ccoh.data$age/12 # Age in years
>
> ##
> ## Standard case-cohort analysis: simple random subcohort
> ##
>
> fit.ccP <- cch(Surv(edrel, rel) ~ stage + histol + age, data =ccoh.data,
+ subcoh = ~subcohort, id=~seqno, cohort.size=4028)
>
>
> fit.ccP
Case-cohort analysis,x$method, Prentice
with subcohort of 668 from cohort of 4028
Call: cch(formula = Surv(edrel, rel) ~ stage + histol + age, data = ccoh.data,
subcoh = ~subcohort, id = ~seqno, cohort.size = 4028)
Coefficients:
Value SE Z p
stageII 0.73457084 0.16849620 4.359569 1.303187e-05
stageIII 0.59708356 0.17345094 3.442377 5.766257e-04
stageIV 1.38413197 0.20481982 6.757803 1.400990e-11
histolUH 1.49806307 0.15970515 9.380180 0.000000e+00
age 0.04326787 0.02373086 1.823274 6.826184e-02
>
> fit.ccSP <- cch(Surv(edrel, rel) ~ stage + histol + age, data =ccoh.data,
+ subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="SelfPren")
>
> summary(fit.ccSP)
Case-cohort analysis,x$method, SelfPrentice
with subcohort of 668 from cohort of 4028
Call: cch(formula = Surv(edrel, rel) ~ stage + histol + age, data = ccoh.data,
subcoh = ~subcohort, id = ~seqno, cohort.size = 4028, method = "SelfPren")
Coefficients:
Coef HR (95% CI) p
stageII 0.736 2.088 1.501 2.905 0.000
stageIII 0.597 1.818 1.294 2.553 0.001
stageIV 1.392 4.021 2.692 6.008 0.000
histolUH 1.506 4.507 3.295 6.163 0.000
age 0.043 1.044 0.997 1.094 0.069
>
> ##
> ## (post-)stratified on instit
> ##
> stratsizes<-table(nwtco$instit)
> fit.BI<- cch(Surv(edrel, rel) ~ stage + histol + age, data =ccoh.data,
+ subcoh = ~subcohort, id=~seqno, stratum=~instit, cohort.size=stratsizes,
+ method="I.Borgan")
>
> summary(fit.BI)
Exposure-stratified case-cohort analysis, I.Borgan method.
1 2
subcohort 952 202
cohort 3622 406
Call: cch(formula = Surv(edrel, rel) ~ stage + histol + age, data = ccoh.data,
subcoh = ~subcohort, id = ~seqno, stratum = ~instit, cohort.size = stratsizes,
method = "I.Borgan")
Coefficients:
Coef HR (95% CI) p
stageII 0.737 2.090 1.501 2.909 0.000
stageIII 0.602 1.825 1.301 2.561 0.000
stageIV 1.395 4.036 2.702 6.029 0.000
histolUH 1.522 4.580 3.450 6.080 0.000
age 0.043 1.044 0.996 1.093 0.072
>
>
>
> cleanEx()
> nameEx("cipoisson")
> ### * cipoisson
>
> flush(stderr()); flush(stdout())
>
> ### Name: cipoisson
> ### Title: Confidence limits for the Poisson
> ### Aliases: cipoisson
>
> ### ** Examples
>
> cipoisson(4) # 95% confidence limit
lower upper
1.089865 10.241589
> # lower upper
> # 1.089865 10.24153
> ppois(4, 10.24153) #chance of seeing 4 or fewer events with large rate
[1] 0.02500096
> # [1] 0.02500096
> 1-ppois(3, 1.08986) #chance of seeing 4 or more, with a small rate
[1] 0.02499961
> # [1] 0.02499961
>
>
>
>
> cleanEx()
> nameEx("clogit")
> ### * clogit
>
> flush(stderr()); flush(stdout())
>
> ### Name: clogit
> ### Title: Conditional logistic regression
> ### Aliases: clogit
> ### Keywords: survival models
>
> ### ** Examples
>
> ## Not run: clogit(case ~ spontaneous + induced + strata(stratum), data=infert)
>
> # A multinomial response recoded to use clogit
> # The revised data set has one copy per possible outcome level, with new
> # variable tocc = target occupation for this copy, and case = whether
> # that is the actual outcome for each subject.
> # See the reference below for the data.
> resp <- levels(logan$occupation)
> n <- nrow(logan)
> indx <- rep(1:n, length(resp))
> logan2 <- data.frame(logan[indx,],
+ id = indx,
+ tocc = factor(rep(resp, each=n)))
> logan2$case <- (logan2$occupation == logan2$tocc)
> clogit(case ~ tocc + tocc:education + strata(id), logan2)
Call:
clogit(case ~ tocc + tocc:education + strata(id), logan2)
coef exp(coef) se(coef) z p
toccfarm -1.8964629 0.1500986 1.3807822 -1.373 0.16961
toccoperatives 1.1667502 3.2115388 0.5656465 2.063 0.03914
toccprofessional -8.1005492 0.0003034 0.6987244 -11.593 < 2e-16
toccsales -5.0292297 0.0065438 0.7700862 -6.531 6.54e-11
tocccraftsmen:education -0.3322842 0.7172835 0.0568682 -5.843 5.13e-09
toccfarm:education -0.3702858 0.6905370 0.1164100 -3.181 0.00147
toccoperatives:education -0.4222188 0.6555906 0.0584328 -7.226 4.98e-13
toccprofessional:education 0.2782469 1.3208122 0.0510212 5.454 4.94e-08
toccsales:education NA NA 0.0000000 NA NA
Likelihood ratio test=665.5 on 8 df, p=< 2.2e-16
n= 4190, number of events= 838
>
>
>
> cleanEx()
> nameEx("cluster")
> ### * cluster
>
> flush(stderr()); flush(stdout())
>
> ### Name: cluster
> ### Title: Identify clusters.
> ### Aliases: cluster
> ### Keywords: survival
>
> ### ** Examples
>
> marginal.model <- coxph(Surv(time, status) ~ rx, data= rats, cluster=litter,
+ subset=(sex=='f'))
> frailty.model <- coxph(Surv(time, status) ~ rx + frailty(litter), rats,
+ subset=(sex=='f'))
>
>
>
> cleanEx()
> nameEx("concordance")
> ### * concordance
>
> flush(stderr()); flush(stdout())
>
> ### Name: concordance
> ### Title: Compute the concordance statistic for data or a model
> ### Aliases: concordance concordance.coxph concordance.formula
> ### concordance.lm concordance.survreg
> ### Keywords: survival
>
> ### ** Examples
>
> fit1 <- coxph(Surv(ptime, pstat) ~ age + sex + mspike, mgus2)
> concordance(fit1, timewt="n/G2") # Uno's weighting
Call:
concordance.coxph(object = fit1, timewt = "n/G2")
n= 1373
Concordance= 0.6132 se= 0.1026
concordant discordant tied.x tied.y tied.xy
461425.07 290956.09 265.66 120.39 0.00
>
> # logistic regression
> fit2 <- glm(I(sex=='M') ~ age + log(creatinine), binomial, data= flchain)
> concordance(fit2) # equal to the AUC
Call:
concordance.lm(object = fit2)
n= 6524
Concordance= 0.8151 se= 0.005304
concordant discordant tied.x tied.y tied.xy
8568768 1931502 31474 10689870 56412
>
> # compare multiple models
> options(na.action = na.exclude) # predict all 1384 obs, including missing
> fit3 <- glm(pstat ~ age + sex + mspike + offset(log(ptime)),
+ poisson, data= mgus2)
> fit4 <- coxph(Surv(ptime, pstat) ~ age + sex + mspike, mgus2)
> fit5 <- coxph(Surv(ptime, pstat) ~ age + sex + hgb + creat, mgus2)
>
> tdata <- mgus2; tdata$ptime <- 60 # prediction at 60 months
> p3 <- -predict(fit3, newdata=tdata)
> p4 <- -predict(fit4) # high risk scores predict shorter survival
> p5 <- -predict(fit5)
> options(na.action = na.omit) # return to the R default
>
> cfit <- concordance(Surv(ptime, pstat) ~p3 + p4 + p5, mgus2)
> cfit
Call:
concordance.formula(object = Surv(ptime, pstat) ~ p3 + p4 + p5,
data = mgus2)
n=1338 (46 observations deleted due to missingness)
concordance se
p3 0.6598 0.0313
p4 0.6618 0.0310
p5 0.6000 0.0293
concordant discordant tied.x tied.y tied.xy
p3 51105 26333 74 28 0
p4 51258 26180 74 28 0
p5 46507 31003 2 28 0
> round(coef(cfit), 3)
p3 p4 p5
0.660 0.662 0.600
> round(cov2cor(vcov(cfit)), 3) # high correlation
[,1] [,2] [,3]
[1,] 1.000 0.994 0.236
[2,] 0.994 1.000 0.258
[3,] 0.236 0.258 1.000
>
> test <- c(1, -1, 0) # contrast vector for model 1 - model 2
> round(c(difference = test %*% coef(cfit),
+ sd= sqrt(test %*% vcov(cfit) %*% test)), 3)
difference sd
-0.002 0.003
>
>
>
> cleanEx()
> nameEx("cox.zph")
> ### * cox.zph
>
> flush(stderr()); flush(stdout())
>
> ### Name: cox.zph
> ### Title: Test the Proportional Hazards Assumption of a Cox Regression
> ### Aliases: cox.zph [.cox.zph print.cox.zph
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- coxph(Surv(futime, fustat) ~ age + ecog.ps,
+ data=ovarian)
> temp <- cox.zph(fit)
> print(temp) # display the results
chisq df p
age 0.698 1 0.40
ecog.ps 2.371 1 0.12
GLOBAL 3.633 2 0.16
> plot(temp) # plot curves
>
>
>
> cleanEx()
> nameEx("coxph")
> ### * coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: coxph
> ### Title: Fit Proportional Hazards Regression Model
> ### Aliases: coxph print.coxph.null print.coxph.penal coxph.penalty
> ### coxph.getdata summary.coxph.penal
> ### Keywords: survival
>
> ### ** Examples
>
> # Create the simplest test data set
> test1 <- list(time=c(4,3,1,1,2,2,3),
+ status=c(1,1,1,0,1,1,0),
+ x=c(0,2,1,1,1,0,0),
+ sex=c(0,0,0,0,1,1,1))
> # Fit a stratified model
> coxph(Surv(time, status) ~ x + strata(sex), test1)
Call:
coxph(formula = Surv(time, status) ~ x + strata(sex), data = test1)
coef exp(coef) se(coef) z p
x 0.8023 2.2307 0.8224 0.976 0.329
Likelihood ratio test=1.09 on 1 df, p=0.2971
n= 7, number of events= 5
> # Create a simple data set for a time-dependent model
> test2 <- list(start=c(1,2,5,2,1,7,3,4,8,8),
+ stop=c(2,3,6,7,8,9,9,9,14,17),
+ event=c(1,1,1,1,1,1,1,0,0,0),
+ x=c(1,0,0,1,0,1,1,1,0,0))
> summary(coxph(Surv(start, stop, event) ~ x, test2))
Call:
coxph(formula = Surv(start, stop, event) ~ x, data = test2)
n= 10, number of events= 7
coef exp(coef) se(coef) z Pr(>|z|)
x -0.02111 0.97912 0.79518 -0.027 0.979
exp(coef) exp(-coef) lower .95 upper .95
x 0.9791 1.021 0.2061 4.653
Concordance= 0.526 (se = 0.129 )
Likelihood ratio test= 0 on 1 df, p=1
Wald test = 0 on 1 df, p=1
Score (logrank) test = 0 on 1 df, p=1
>
> #
> # Create a simple data set for a time-dependent model
> #
> test2 <- list(start=c(1, 2, 5, 2, 1, 7, 3, 4, 8, 8),
+ stop =c(2, 3, 6, 7, 8, 9, 9, 9,14,17),
+ event=c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0),
+ x =c(1, 0, 0, 1, 0, 1, 1, 1, 0, 0) )
>
>
> summary( coxph( Surv(start, stop, event) ~ x, test2))
Call:
coxph(formula = Surv(start, stop, event) ~ x, data = test2)
n= 10, number of events= 7
coef exp(coef) se(coef) z Pr(>|z|)
x -0.02111 0.97912 0.79518 -0.027 0.979
exp(coef) exp(-coef) lower .95 upper .95
x 0.9791 1.021 0.2061 4.653
Concordance= 0.526 (se = 0.129 )
Likelihood ratio test= 0 on 1 df, p=1
Wald test = 0 on 1 df, p=1
Score (logrank) test = 0 on 1 df, p=1
>
> # Fit a stratified model, clustered on patients
>
> bladder1 <- bladder[bladder$enum < 5, ]
> coxph(Surv(stop, event) ~ (rx + size + number) * strata(enum),
+ cluster = id, bladder1)
Call:
coxph(formula = Surv(stop, event) ~ (rx + size + number) * strata(enum),
data = bladder1, cluster = id)
coef exp(coef) se(coef) robust se z p
rx -0.52598 0.59097 0.31583 0.31524 -1.669 0.09521
size 0.06961 1.07209 0.10156 0.08863 0.785 0.43220
number 0.23818 1.26894 0.07588 0.07459 3.193 0.00141
rx:strata(enum)enum=2 -0.10633 0.89913 0.50424 0.33396 -0.318 0.75019
rx:strata(enum)enum=3 -0.17251 0.84155 0.55780 0.39868 -0.433 0.66523
rx:strata(enum)enum=4 -0.10945 0.89632 0.65730 0.50636 -0.216 0.82886
size:strata(enum)enum=2 -0.14737 0.86298 0.16803 0.11409 -1.292 0.19646
size:strata(enum)enum=3 -0.28345 0.75318 0.20894 0.15220 -1.862 0.06255
size:strata(enum)enum=4 -0.27607 0.75876 0.25222 0.18904 -1.460 0.14418
number:strata(enum)enum=2 -0.10125 0.90370 0.11904 0.11759 -0.861 0.38920
number:strata(enum)enum=3 -0.06467 0.93738 0.12925 0.12035 -0.537 0.59101
number:strata(enum)enum=4 0.09429 1.09888 0.14594 0.11973 0.788 0.43097
Likelihood ratio test=30.09 on 12 df, p=0.002708
n= 340, number of events= 112
>
> # Fit a time transform model using current age
> coxph(Surv(time, status) ~ ph.ecog + tt(age), data=lung,
+ tt=function(x,t,...) pspline(x + t/365.25))
Call:
coxph(formula = Surv(time, status) ~ ph.ecog + tt(age), data = lung,
tt = function(x, t, ...) pspline(x + t/365.25))
coef se(coef) se2 Chisq DF p
ph.ecog 0.4528 0.1178 0.1174 14.7704 1.00 0.00012
tt(age), linear 0.0112 0.0093 0.0093 1.4414 1.00 0.22991
tt(age), nonlin 2.6992 3.08 0.45431
Iterations: 4 outer, 10 Newton-Raphson
Theta= 0.796
Degrees of freedom for terms= 1.0 4.1
Likelihood ratio test=22.5 on 5.07 df, p=5e-04
n= 227, number of events= 164
(1 observation deleted due to missingness)
>
>
>
> cleanEx()
> nameEx("coxph.detail")
> ### * coxph.detail
>
> flush(stderr()); flush(stdout())
>
> ### Name: coxph.detail
> ### Title: Details of a Cox Model Fit
> ### Aliases: coxph.detail
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- coxph(Surv(futime,fustat) ~ age + rx + ecog.ps, ovarian, x=TRUE)
> fitd <- coxph.detail(fit)
> # There is one Schoenfeld residual for each unique death. It is a
> # vector (covariates for the subject who died) - (weighted mean covariate
> # vector at that time). The weighted mean is defined over the subjects
> # still at risk, with exp(X beta) as the weight.
>
> events <- fit$y[,2]==1
> etime <- fit$y[events,1] #the event times --- may have duplicates
> indx <- match(etime, fitd$time)
> schoen <- fit$x[events,] - fitd$means[indx,]
>
>
>
> cleanEx()
> nameEx("diabetic")
> ### * diabetic
>
> flush(stderr()); flush(stdout())
>
> ### Name: diabetic
> ### Title: Ddiabetic retinopathy
> ### Aliases: diabetic
> ### Keywords: datasets survival
>
> ### ** Examples
>
> # juvenile diabetes is defined as and age less than 20
> juvenile <- 1*(diabetic$age < 20)
> coxph(Surv(time, status) ~ trt + juvenile, cluster= id,
+ data= diabetic)
Call:
coxph(formula = Surv(time, status) ~ trt + juvenile, data = diabetic,
cluster = id)
coef exp(coef) se(coef) robust se z p
trt -0.77893 0.45890 0.16893 0.14851 -5.245 1.56e-07
juvenile -0.05388 0.94754 0.16211 0.17864 -0.302 0.763
Likelihood ratio test=22.48 on 2 df, p=1.312e-05
n= 394, number of events= 155
>
>
>
> cleanEx()
> nameEx("dsurvreg")
> ### * dsurvreg
>
> flush(stderr()); flush(stdout())
>
> ### Name: dsurvreg
> ### Title: Distributions available in survreg.
> ### Aliases: dsurvreg psurvreg qsurvreg rsurvreg
> ### Keywords: distribution
>
> ### ** Examples
>
> # List of distributions available
> names(survreg.distributions)
[1] "extreme" "logistic" "gaussian" "weibull" "exponential"
[6] "rayleigh" "loggaussian" "lognormal" "loglogistic" "t"
> ## Not run:
> ##D [1] "extreme" "logistic" "gaussian" "weibull" "exponential"
> ##D [6] "rayleigh" "loggaussian" "lognormal" "loglogistic" "t"
> ## End(Not run)
> # Compare results
> all.equal(dsurvreg(1:10, 2, 5, dist='lognormal'), dlnorm(1:10, 2, 5))
[1] TRUE
>
> # Hazard function for a Weibull distribution
> x <- seq(.1, 3, length=30)
> haz <- dsurvreg(x, 2, 3)/ (1-psurvreg(x, 2, 3))
> ## Not run:
> ##D plot(x, haz, log='xy', ylab="Hazard") #line with slope (1/scale -1)
> ## End(Not run)
>
> # Estimated CDF of a simple Weibull
> fit <- survreg(Surv(time, status) ~ 1, data=lung)
> pp <- 1:99/100
> q1 <- qsurvreg(pp, coef(fit), fit$scale)
> q2 <- qweibull(pp, shape= 1/fit$scale, scale= exp(coef(fit)))
> all.equal(q1, q2)
[1] TRUE
> ## Not run:
> ##D plot(q1, pp, type='l', xlab="Months", ylab="CDF")
> ## End(Not run)
> # per the help page for dweibull, the mean is scale * gamma(1 + 1/shape)
> c(mean = exp(coef(fit))* gamma(1 + fit$scale))
mean.(Intercept)
384.8529
>
>
>
>
> cleanEx()
> nameEx("finegray")
> ### * finegray
>
> flush(stderr()); flush(stdout())
>
> ### Name: finegray
> ### Title: Create data for a Fine-Gray model
> ### Aliases: finegray
> ### Keywords: survival
>
> ### ** Examples
>
> # Treat time to death and plasma cell malignancy as competing risks
> etime <- with(mgus2, ifelse(pstat==0, futime, ptime))
> event <- with(mgus2, ifelse(pstat==0, 2*death, 1))
> event <- factor(event, 0:2, labels=c("censor", "pcm", "death"))
>
> # FG model for PCM
> pdata <- finegray(Surv(etime, event) ~ ., data=mgus2)
> fgfit <- coxph(Surv(fgstart, fgstop, fgstatus) ~ age + sex,
+ weight=fgwt, data=pdata)
>
> # Compute the weights separately by sex
> adata <- finegray(Surv(etime, event) ~ . + strata(sex),
+ data=mgus2, na.action=na.pass)
>
>
>
> cleanEx()
> nameEx("flchain")
> ### * flchain
>
> flush(stderr()); flush(stdout())
>
> ### Name: flchain
> ### Title: Assay of serum free light chain for 7874 subjects.
> ### Aliases: flchain
> ### Keywords: datasets
>
> ### ** Examples
>
> data(flchain)
> age.grp <- cut(flchain$age, c(49,54, 59,64, 69,74,79, 89, 110),
+ labels= paste(c(50,55,60,65,70,75,80,90),
+ c(54,59,64,69,74,79,89,109), sep='-'))
> table(flchain$sex, age.grp)
age.grp
50-54 55-59 60-64 65-69 70-74 75-79 80-89 90-109
F 881 766 625 589 541 408 459 81
M 796 714 591 524 405 269 202 23
>
>
>
> cleanEx()
> nameEx("frailty")
> ### * frailty
>
> flush(stderr()); flush(stdout())
>
> ### Name: frailty
> ### Title: Random effects terms
> ### Aliases: frailty frailty.gamma frailty.gaussian frailty.t
> ### Keywords: survival
>
> ### ** Examples
>
> # Random institutional effect
> coxph(Surv(time, status) ~ age + frailty(inst, df=4), lung)
Call:
coxph(formula = Surv(time, status) ~ age + frailty(inst, df = 4),
data = lung)
coef se(coef) se2 Chisq DF p
age 0.01937 0.00933 0.00925 4.31149 1.00 0.038
frailty(inst, df = 4) 3.33459 3.99 0.501
Iterations: 3 outer, 10 Newton-Raphson
Variance of random effect= 0.038 I-likelihood = -743.6
Degrees of freedom for terms= 1 4
Likelihood ratio test=9.96 on 4.97 df, p=0.08
n= 227, number of events= 164
(1 observation deleted due to missingness)
>
> # Litter effects for the rats data
> rfit2a <- coxph(Surv(time, status) ~ rx +
+ frailty.gaussian(litter, df=13, sparse=FALSE), rats,
+ subset= (sex=='f'))
> rfit2b <- coxph(Surv(time, status) ~ rx +
+ frailty.gaussian(litter, df=13, sparse=TRUE), rats,
+ subset= (sex=='f'))
>
>
>
> cleanEx()
> nameEx("hoel")
> ### * hoel
>
> flush(stderr()); flush(stdout())
>
> ### Name: hoel
> ### Title: Mouse cancer data
> ### Aliases: hoel
> ### Keywords: datasets
>
> ### ** Examples
>
> hsurv <- survfit(Surv(days, outcome) ~ trt, data = hoel, id= id)
> plot(hsurv, lty=1:2, col=rep(1:3, each=2), lwd=2, xscale=30.5,
+ xlab="Months", ylab= "Death")
> legend("topleft", c("Lymphoma control", "Lymphoma germ free",
+ "Sarcoma control", "Sarcoma germ free",
+ "Other control", "Other germ free"),
+ col=rep(1:3, each=2), lty=1:2, lwd=2, bty='n')
> hfit <- coxph(Surv(days, outcome) ~ trt, data= hoel, id = id)
>
>
>
> cleanEx()
> nameEx("is.ratetable")
> ### * is.ratetable
>
> flush(stderr()); flush(stdout())
>
> ### Name: is.ratetable
> ### Title: Verify that an object is of class ratetable.
> ### Aliases: is.ratetable Math.ratetable Ops.ratetable
> ### Keywords: survival
>
> ### ** Examples
>
> is.ratetable(survexp.us) # True
[1] TRUE
> is.ratetable(lung) # False
[1] FALSE
>
>
>
> cleanEx()
> nameEx("kidney")
> ### * kidney
>
> flush(stderr()); flush(stdout())
>
> ### Name: kidney
> ### Title: Kidney catheter data
> ### Aliases: kidney
> ### Keywords: survival
>
> ### ** Examples
>
> kfit <- coxph(Surv(time, status)~ age + sex + disease + frailty(id), kidney)
> kfit0 <- coxph(Surv(time, status)~ age + sex + disease, kidney)
> kfitm1 <- coxph(Surv(time,status) ~ age + sex + disease +
+ frailty(id, dist='gauss'), kidney)
>
>
>
> cleanEx()
> nameEx("levels.Surv")
> ### * levels.Surv
>
> flush(stderr()); flush(stdout())
>
> ### Name: levels.Surv
> ### Title: Return the states of a multi-state Surv object
> ### Aliases: levels.Surv
> ### Keywords: survival
>
> ### ** Examples
>
> y1 <- Surv(c(1,5, 9, 17,21, 30),
+ factor(c(0, 1, 2,1,0,2), 0:2, c("censored", "progression", "death")))
> levels(y1)
[1] "progression" "death"
>
> y2 <- Surv(1:6, rep(0:1, 3))
> y2
[1] 1+ 2 3+ 4 5+ 6
> levels(y2)
NULL
>
>
>
> cleanEx()
> nameEx("lines.survfit")
> ### * lines.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: lines.survfit
> ### Title: Add Lines or Points to a Survival Plot
> ### Aliases: lines.survfit points.survfit lines.survexp
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- survfit(Surv(time, status==2) ~ sex, pbc,subset=1:312)
> plot(fit, mark.time=FALSE, xscale=365.25,
+ xlab='Years', ylab='Survival')
> lines(fit[1], lwd=2) #darken the first curve and add marks
>
>
> # Add expected survival curves for the two groups,
> # based on the US census data
> # The data set does not have entry date, use the midpoint of the study
> efit <- survexp(~sex, data=pbc, times= (0:24)*182, ratetable=survexp.us,
+ rmap=list(sex=sex, age=age*365.35, year=as.Date('1979/01/01')))
> temp <- lines(efit, lty=2, lwd=2:1)
> text(temp, c("Male", "Female"), adj= -.1) #labels just past the ends
> title(main="Primary Biliary Cirrhosis, Observed and Expected")
>
>
>
>
> cleanEx()
> nameEx("mgus")
> ### * mgus
>
> flush(stderr()); flush(stdout())
>
> ### Name: mgus
> ### Title: Monoclonal gammopathy data
> ### Aliases: mgus mgus1
> ### Keywords: datasets survival
>
> ### ** Examples
>
> # Create the competing risk curves for time to first of death or PCM
> sfit <- survfit(Surv(start, stop, event) ~ sex, mgus1, id=id,
+ subset=(enum==1))
> print(sfit) # the order of printout is the order in which they plot
Call: survfit(formula = Surv(start, stop, event) ~ sex, data = mgus1,
subset = (enum == 1), id = id)
n nevent rmean se(rmean)*
sex=female, (s0) 104 0 5762.379 372.6367
sex=male, (s0) 137 0 4543.293 315.1668
sex=female, pcm 104 33 2881.500 400.8899
sex=male, pcm 137 31 2478.026 397.9675
sex=female, death 104 63 5681.121 462.1850
sex=male, death 137 100 7303.682 452.9533
*restricted mean time in state (max time = 14325 )
>
> plot(sfit, xscale=365.25, lty=c(2,2,1,1), col=c(1,2,1,2),
+ xlab="Years after MGUS detection", ylab="Proportion")
> legend(0, .8, c("Death/male", "Death/female", "PCM/male", "PCM/female"),
+ lty=c(1,1,2,2), col=c(2,1,2,1), bty='n')
>
> title("Curves for the first of plasma cell malignancy or death")
> # The plot shows that males have a higher death rate than females (no
> # surprise) but their rates of conversion to PCM are essentially the same.
>
>
>
> cleanEx()
> nameEx("model.matrix.coxph")
> ### * model.matrix.coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: model.matrix.coxph
> ### Title: Model.matrix method for coxph models
> ### Aliases: model.matrix.coxph
> ### Keywords: survival
>
> ### ** Examples
>
> fit1 <- coxph(Surv(time, status) ~ age + factor(ph.ecog), data=lung)
> xfit <- model.matrix(fit1)
>
> fit2 <- coxph(Surv(time, status) ~ age + factor(ph.ecog), data=lung,
+ x=TRUE)
> all.equal(model.matrix(fit1), fit2$x)
[1] TRUE
>
>
>
> cleanEx()
> nameEx("myeloid")
> ### * myeloid
>
> flush(stderr()); flush(stdout())
>
> ### Name: myeloid
> ### Title: Acute myeloid leukemia
> ### Aliases: myeloid
> ### Keywords: datasets
>
> ### ** Examples
>
> coxph(Surv(futime, death) ~ trt + flt3, data=myeloid)
Call:
coxph(formula = Surv(futime, death) ~ trt + flt3, data = myeloid)
coef exp(coef) se(coef) z p
trtB -0.3534 0.7023 0.1122 -3.149 0.00164
flt3B 0.4114 1.5089 0.1587 2.593 0.00952
flt3C 0.7878 2.1985 0.1656 4.758 1.96e-06
Likelihood ratio test=34.04 on 3 df, p=1.94e-07
n= 646, number of events= 320
> # See the mstate vignette for a more complete analysis
>
>
>
> cleanEx()
> nameEx("myeloma")
> ### * myeloma
>
> flush(stderr()); flush(stdout())
>
> ### Name: myeloma
> ### Title: Survival times of patients with multiple myeloma
> ### Aliases: myeloma
> ### Keywords: datasets
>
> ### ** Examples
>
> # Incorrect survival curve, which ignores left truncation
> fit1 <- survfit(Surv(futime, death) ~ 1, myeloma)
> # Correct curve
> fit2 <- survfit(Surv(entry, futime, death) ~1, myeloma)
>
>
>
> cleanEx()
> nameEx("neardate")
> ### * neardate
>
> flush(stderr()); flush(stdout())
>
> ### Name: neardate
> ### Title: Find the index of the closest value in data set 2, for each
> ### entry in data set one.
> ### Aliases: neardate
> ### Keywords: manip utilities
>
> ### ** Examples
>
> data1 <- data.frame(id = 1:10,
+ entry.dt = as.Date(paste("2011", 1:10, "5", sep='-')))
> temp1 <- c(1,4,5,1,3,6,9, 2,7,8,12,4,6,7,10,12,3)
> data2 <- data.frame(id = c(1,1,1,2,2,4,4,5,5,5,6,8,8,9,10,10,12),
+ lab.dt = as.Date(paste("2011", temp1, "1", sep='-')),
+ chol = round(runif(17, 130, 280)))
>
> #first cholesterol on or after enrollment
> indx1 <- neardate(data1$id, data2$id, data1$entry.dt, data2$lab.dt)
> data2[indx1, "chol"]
[1] 186 160 NA 265 224 161 NA NA NA 205
>
> # Closest one, either before or after.
> #
> indx2 <- neardate(data1$id, data2$id, data1$entry.dt, data2$lab.dt,
+ best="prior")
> ifelse(is.na(indx1), indx2, # none after, take before
+ ifelse(is.na(indx2), indx1, #none before
+ ifelse(abs(data2$lab.dt[indx2]- data1$entry.dt) <
+ abs(data2$lab.dt[indx1]- data1$entry.dt), indx2, indx1)))
[1] 1 5 NA 6 9 11 NA 13 14 15
>
> # closest date before or after, but no more than 21 days prior to index
> indx2 <- ifelse((data1$entry.dt - data2$lab.dt[indx2]) >21, NA, indx2)
> ifelse(is.na(indx1), indx2, # none after, take before
+ ifelse(is.na(indx2), indx1, #none before
+ ifelse(abs(data2$lab.dt[indx2]- data1$entry.dt) <
+ abs(data2$lab.dt[indx1]- data1$entry.dt), indx2, indx1)))
[1] 1 5 NA 6 9 11 NA NA NA 15
>
>
>
> cleanEx()
> nameEx("nsk")
> ### * nsk
>
> flush(stderr()); flush(stdout())
>
> ### Name: nsk
> ### Title: Natural splines with knot heights as the basis.
> ### Aliases: nsk
> ### Keywords: smooth
>
> ### ** Examples
>
> # make some dummy data
> tdata <- data.frame(x= lung$age, y = 10*log(lung$age-35) + rnorm(228, 0, 2))
> fit1 <- lm(y ~ -1 + nsk(x, df=4, intercept=TRUE) , data=tdata)
> fit2 <- lm(y ~ nsk(x, df=3), data=tdata)
>
> # the knots (same for both fits)
> knots <- unlist(attributes(fit1$model[[2]])[c('Boundary.knots', 'knots')])
> sort(unname(knots))
[1] 45.35 59.00 67.00 75.00
> unname(coef(fit1)) # predictions at the knot points
[1] 22.23565 32.18784 34.82994 36.93020
>
> unname(coef(fit1)[-1] - coef(fit1)[1]) # differences: yhat[2:4] - yhat[1]
[1] 9.952189 12.594290 14.694549
> unname(coef(fit2))[-1] # ditto
[1] 9.952189 12.594290 14.694549
>
> ## Not run:
> ##D plot(y ~ x, data=tdata)
> ##D points(sort(knots), coef(fit1), col=2, pch=19)
> ##D coef(fit)[1] + c(0, coef(fit)[-1])
> ## End(Not run)
>
>
>
> cleanEx()
> nameEx("nwtco")
> ### * nwtco
>
> flush(stderr()); flush(stdout())
>
> ### Name: nwtco
> ### Title: Data from the National Wilm's Tumor Study
> ### Aliases: nwtco
> ### Keywords: datasets
>
> ### ** Examples
>
> with(nwtco, table(instit,histol))
histol
instit 1 2
1 3493 129
2 76 330
> anova(coxph(Surv(edrel,rel)~histol+instit,data=nwtco))
Analysis of Deviance Table
Cox model: response is Surv(edrel, rel)
Terms added sequentially (first to last)
loglik Chisq Df Pr(>|Chi|)
NULL -4666.3
histol -4532.5 267.6667 1 < 2e-16 ***
instit -4531.0 3.0397 1 0.08125 .
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
> anova(coxph(Surv(edrel,rel)~instit+histol,data=nwtco))
Analysis of Deviance Table
Cox model: response is Surv(edrel, rel)
Terms added sequentially (first to last)
loglik Chisq Df Pr(>|Chi|)
NULL -4666.3
instit -4577.5 177.714 1 < 2.2e-16 ***
histol -4531.0 92.992 1 < 2.2e-16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
>
>
>
> cleanEx()
> nameEx("pbcseq")
> ### * pbcseq
>
> flush(stderr()); flush(stdout())
>
> ### Name: pbcseq
> ### Title: Mayo Clinic Primary Biliary Cirrhosis, sequential data
> ### Aliases: pbcseq
> ### Keywords: datasets
>
> ### ** Examples
>
> # Create the start-stop-event triplet needed for coxph
> first <- with(pbcseq, c(TRUE, diff(id) !=0)) #first id for each subject
> last <- c(first[-1], TRUE) #last id
>
> time1 <- with(pbcseq, ifelse(first, 0, day))
> time2 <- with(pbcseq, ifelse(last, futime, c(day[-1], 0)))
> event <- with(pbcseq, ifelse(last, status, 0))
>
> fit1 <- coxph(Surv(time1, time2, event) ~ age + sex + log(bili), pbcseq)
Warning in Surv(time1, time2, event) :
Invalid status value, converted to NA
>
>
>
> cleanEx()
> nameEx("plot.cox.zph")
> ### * plot.cox.zph
>
> flush(stderr()); flush(stdout())
>
> ### Name: plot.cox.zph
> ### Title: Graphical Test of Proportional Hazards
> ### Aliases: plot.cox.zph
> ### Keywords: survival
>
> ### ** Examples
>
> vfit <- coxph(Surv(time,status) ~ trt + factor(celltype) +
+ karno + age, data=veteran, x=TRUE)
> temp <- cox.zph(vfit)
> plot(temp, var=3) # Look at Karnofsy score, old way of doing plot
> plot(temp[3]) # New way with subscripting
> abline(0, 0, lty=3)
> # Add the linear fit as well
> abline(lm(temp$y[,3] ~ temp$x)$coefficients, lty=4, col=3)
> title(main="VA Lung Study")
>
>
>
> cleanEx()
> nameEx("plot.survfit")
> ### * plot.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: plot.survfit
> ### Title: Plot method for 'survfit' objects
> ### Aliases: plot.survfit
> ### Keywords: survival hplot
>
> ### ** Examples
>
> leukemia.surv <- survfit(Surv(time, status) ~ x, data = aml)
> plot(leukemia.surv, lty = 2:3)
> legend(100, .9, c("Maintenance", "No Maintenance"), lty = 2:3)
> title("Kaplan-Meier Curves\nfor AML Maintenance Study")
> lsurv2 <- survfit(Surv(time, status) ~ x, aml, type='fleming')
> plot(lsurv2, lty=2:3, fun="cumhaz",
+ xlab="Months", ylab="Cumulative Hazard")
>
>
>
> cleanEx()
> nameEx("predict.coxph")
> ### * predict.coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: predict.coxph
> ### Title: Predictions for a Cox model
> ### Aliases: predict.coxph predict.coxph.penal
> ### Keywords: survival
>
> ### ** Examples
>
> options(na.action=na.exclude) # retain NA in predictions
> fit <- coxph(Surv(time, status) ~ age + ph.ecog + strata(inst), lung)
> #lung data set has status coded as 1/2
> mresid <- (lung$status-1) - predict(fit, type='expected') #Martingale resid
> predict(fit,type="lp")
1 2 3 4 5 6
0.215495605 -0.423532231 -0.559265038 0.183469551 -0.539432878 0.248095483
7 8 9 10 11 12
0.406461814 0.489169379 -0.047448917 0.327284344 0.040389888 0.550315552
13 14 15 16 17 18
-0.115925255 NA 0.055807340 0.110906025 0.050567124 0.493760215
19 20 21 22 23 24
0.557645717 -0.004245606 -0.127236322 -0.621260082 -0.319524466 -0.575882288
25 26 27 28 29 30
-0.345688084 0.202851214 -0.428371074 1.313400384 -0.021210624 0.761244928
31 32 33 34 35 36
0.191540147 0.749933860 0.180240469 0.459827013 0.672213041 0.625512121
37 38 39 40 41 42
0.565173220 0.085767683 0.761244928 0.076972823 0.330513426 0.511791514
43 44 45 46 47 48
-0.439682141 0.660901974 -0.164699618 0.496950353 -0.381077937 0.091073865
49 50 51 52 53 54
-0.354839644 -0.175654221 0.192873470 -0.447487689 -0.450985298 -0.562055013
55 56 57 58 59 60
0.063012023 -0.516810744 -0.297203343 0.474684682 0.034518529 0.076972823
61 62 63 64 65 66
0.678283893 -0.045992266 0.176731471 -0.149858457 0.158940268 0.718790633
67 68 69 70 71 72
0.539004484 -0.308514410 -0.543216443 0.153500561 -0.479261384 -0.078592144
73 74 75 76 77 78
0.946919127 -0.073531430 -0.049489875 0.214162281 -0.641232484 0.029078821
79 80 81 82 83 84
-0.276488357 -0.392389004 -0.439682141 0.001411510 -0.410013004 -0.151289480
85 86 87 88 89 90
-0.292311495 0.198744830 -0.039921414 -0.530162769 -0.123010230 0.738622793
91 92 93 94 95 96
-0.743642023 0.050567124 0.285269157 0.108857156 -0.437633273 0.796634781
97 98 99 100 101 102
0.158940268 0.214162281 -0.161169524 -0.400910096 -0.562055013 0.176122695
103 104 105 106 107 108
0.012722577 0.108256292 0.617817211 0.157606945 -0.189452466 0.110906025
109 110 111 112 113 114
-0.026867740 0.797968104 -0.411394980 -0.149248522 0.369011703 -0.344354760
115 116 117 118 119 120
0.006456686 0.783867062 0.503880355 0.693378524 0.527693417 0.244122624
121 122 123 124 125 126
-0.464038972 0.449575370 0.158940268 0.500480446 -0.426322206 0.005322855
127 128 129 130 131 132
-0.368298829 0.134984810 0.652115157 -0.617153698 0.131479291 -0.190511890
133 134 135 136 137 138
-0.643882217 0.001411510 -0.460255408 0.666972826 0.067118407 0.583884010
139 140 141 142 143 144
-0.036137850 -0.399002948 0.747892903 0.215495605 0.630552446 0.088283890
145 146 147 148 149 150
-0.240346995 -0.200763533 -0.558074111 -0.179200822 -0.232577411 -0.524505653
151 152 153 154 155 156
0.171077519 -0.633704981 -0.331136545 -0.190511890 0.477441161 NA
157 158 159 160 161 162
-0.031097524 0.736573925 0.123673743 -0.013515715 -0.585704233 -0.038186718
163 164 165 166 167 168
0.466547245 0.108256292 -0.209943887 -0.716429053 -0.206413793 -0.699828778
169 170 171 172 173 174
0.085634157 -0.424865554 0.069277914 -0.441093652 0.107445646 -0.874783994
175 176 177 178 179 180
-0.047448917 0.046655779 0.557645717 0.001411510 -0.047448917 -0.667994646
181 182 183 184 185 186
-0.513194586 -0.776965291 -0.614629447 0.019390401 -0.583220496 -0.651086900
187 188 189 190 191 192
0.859584155 -0.536642904 0.063145548 -0.712882451 0.024398388 0.369338475
193 194 195 196 197 198
-0.023370131 0.076972823 0.061878192 -0.368310218 -0.003231734 0.074931865
199 200 201 202 203 204
-0.629921417 -0.037164935 0.063145548 0.084500326 -0.574393166 -0.627131442
205 206 207 208 209 210
-0.658814293 0.302547317 -0.410314015 0.516017606 0.131487202 -0.302547317
211 212 213 214 215 216
-0.539432878 0.153500561 0.119700884 0.409991908 -0.149858457 -0.149858457
217 218 219 220 221 222
-0.156943432 0.781826105 0.477858312 -0.452404719 0.016633922 -0.081992053
223 224 225 226 227 228
0.212705630 0.224016697 -0.750726998 0.703662506 0.142189494 -0.085165683
> predict(fit,type="expected")
1 2 3 4 5 6 7
0.74602570 0.57892506 1.28411487 0.65144995 2.53474317 2.59935704 0.94925558
8 9 10 11 12 13 14
1.07812821 0.63137435 0.55866807 0.31809979 1.96068120 2.96879741 NA
15 16 17 18 19 20 21
2.14464916 0.39248100 1.01652225 2.53985878 0.23734050 0.15454932 0.41781121
22 23 24 25 26 27 28
0.03725873 1.07425239 0.73304358 0.71922541 1.96068538 0.91425760 0.50868712
29 30 31 32 33 34 35
1.07651355 0.10727131 1.64348011 0.22335391 1.34246079 0.18355514 0.25427967
36 37 38 39 40 41 42
0.57948554 3.87217595 1.42062915 0.50341133 2.84274107 1.90670187 0.39302876
43 44 45 46 47 48 49
1.67374788 0.56009982 1.95081502 0.39930277 0.62185372 1.18384892 1.08920268
50 51 52 53 54 55 56
1.36922169 2.72429090 0.31557423 0.04821232 0.41960993 3.07164840 0.12000994
57 58 59 60 61 62 63
0.07406041 0.17908976 1.74520134 1.10195998 1.47697029 0.54523697 0.51461493
64 65 66 67 68 69 70
0.14292300 0.18117365 0.20227027 0.70028855 1.00636733 0.31133532 0.64126839
71 72 73 74 75 76 77
0.96177399 0.46743320 0.53451717 0.16345589 0.86294287 1.44797843 1.06953116
78 79 80 81 82 83 84
1.19014609 0.03668315 0.33061179 1.90397464 0.08944145 0.20857044 0.28585781
85 86 87 88 89 90 91
1.15723874 0.87295638 1.19851949 0.14216346 1.37338069 0.92021616 1.05096221
92 93 94 95 96 97 98
0.27465006 0.47403241 0.26750987 1.01622540 0.08901343 0.32456045 0.93961618
99 100 101 102 103 104 105
0.85179714 0.14362313 0.89733451 1.74403467 0.70225748 0.15754565 0.36065915
106 107 108 109 110 111 112
0.41227011 0.29089093 0.02759911 2.54485283 1.57705739 0.02915789 0.51482474
113 114 115 116 117 118 119
1.51254632 0.24392791 1.95773713 0.16855572 0.69132758 2.65613080 1.04014324
120 121 122 123 124 125 126
0.89157179 0.40187641 0.23829273 1.56065440 0.17535194 1.02778525 0.18442460
127 128 129 130 131 132 133
0.08051722 0.20596405 1.70473379 0.86354367 0.72017118 0.27146814 0.48487446
134 135 136 137 138 139 140
1.10114414 0.51567846 1.46035831 0.93950468 1.54314328 1.12143879 0.60372302
141 142 143 144 145 146 147
1.46022571 0.88081136 0.66047105 0.18347489 0.51981101 0.28761918 0.50825077
148 149 150 151 152 153 154
0.15268490 0.06671446 0.32571666 0.39746179 0.39772440 0.38939509 0.20940447
155 156 157 158 159 160 161
0.62171971 NA 0.34080256 0.46159657 0.47539058 1.00662370 0.21472196
162 163 164 165 166 167 168
0.54619593 0.50111574 0.24481910 0.51248548 0.19954882 0.25566706 0.78817717
169 170 171 172 173 174 175
0.44798249 0.43113659 0.44847984 1.48341994 0.46620310 0.37028208 0.86812344
176 177 178 179 180 181 182
0.43844817 0.94494334 0.25935783 0.37625255 0.20649507 0.25048304 0.37569346
183 184 185 186 187 188 189
0.40334526 0.39324727 0.36799524 0.39552828 1.77501387 0.24422514 0.38021709
190 191 192 193 194 195 196
0.21501843 0.51818689 0.08032921 0.22774986 0.71502728 0.36774267 0.39500663
197 198 199 200 201 202 203
0.38445105 0.97727710 0.43520510 0.16869554 0.17219830 0.05878035 0.21716448
204 205 206 207 208 209 210
0.18384556 0.18192355 0.64682101 0.35975276 0.70106697 1.03414013 0.35317899
211 212 213 214 215 216 217
0.42921059 0.47944086 0.40234009 0.25017393 0.04470913 0.27054309 0.22137404
218 219 220 221 222 223 224
1.18698635 0.50681607 0.11190719 0.11327702 0.28954125 0.33611081 0.74776723
225 226 227 228
0.12225025 0.00000000 0.35218786 0.10231300
> predict(fit,type="risk",se.fit=TRUE)
$fit
1 2 3 4 5 6 7 8
1.2404765 0.6547301 0.5716290 1.2013784 0.5830788 1.2815823 1.5014958 1.6309609
9 10 11 12 13 14 15 16
0.9536592 1.3871959 1.0412167 1.7338000 0.8905418 NA 1.0573939 1.1172899
17 18 19 20 21 22 23 24
1.0518675 1.6384656 1.7465558 0.9957634 0.8805256 0.5372670 0.7264944 0.5622086
25 26 27 28 29 30 31 32
0.7077332 1.2248902 0.6515696 3.7187976 0.9790127 2.1409399 1.2111135 2.1168600
33 34 35 36 37 38 39 40
1.1975053 1.5838000 1.9585669 1.8692030 1.7597526 1.0895532 2.1409399 1.0800127
41 42 43 44 45 46 47 48
1.3916825 1.6682773 0.6442412 1.9365383 0.8481484 1.6437009 0.6831246 1.0953499
49 50 51 52 53 54 55 56
0.7012859 0.8389080 1.2127293 0.6392321 0.6370002 0.5700364 1.0650396 0.5964197
57 58 59 60 61 62 63 64
0.7428929 1.6075072 1.0351212 1.0800127 1.9704933 0.9550493 1.1933106 0.8608298
65 66 67 68 69 70 71 72
1.1722679 2.0519501 1.7142994 0.7345374 0.5808769 1.1659084 0.6192406 0.9244169
73 74 75 76 77 78 79 80
2.5777557 0.9291069 0.9517148 1.2388237 0.5266429 1.0295057 0.7584424 0.6754413
81 82 83 84 85 86 87 88
0.6442412 1.0014125 0.6636416 0.8595988 0.7465360 1.2198707 0.9608649 0.5885092
89 90 91 92 93 94 95 96
0.8842546 2.0930510 0.4753794 1.0518675 1.3301200 1.1150031 0.6455625 2.2180641
97 98 99 100 101 102 103 104
1.1722679 1.2388237 0.8511478 0.6697103 0.5700364 1.1925844 1.0128039 1.1143333
105 106 107 108 109 110 111 112
1.8548748 1.1707060 0.8274120 1.1172899 0.9734900 2.2210235 0.6627251 0.8613550
113 114 115 116 117 118 119 120
1.4463045 0.7086775 1.0064776 2.1899245 1.6551313 2.0004627 1.6950181 1.2765009
121 122 123 124 125 126 127 128
0.6287391 1.5676464 1.1722679 1.6495136 0.6529059 1.0053370 0.6919104 1.1445194
129 130 131 132 133 134 135 136
1.9195968 0.5394778 1.1405143 0.8265359 0.5252493 1.0014125 0.6311224 1.9483304
137 138 139 140 141 142 143 144
1.0694221 1.7929889 0.9645073 0.6709887 2.1125440 1.2404765 1.8786481 1.0922982
145 146 147 148 149 150 151 152
0.7863550 0.8181059 0.5723102 0.8359380 0.7924884 0.5918479 1.1865827 0.5306222
153 154 155 156 157 158 159 160
0.7181071 0.8265359 1.6119444 NA 0.9693810 2.0887670 1.1316466 0.9865752
161 162 163 164 165 166 167 168
0.5567137 0.9625332 1.5944793 1.1143333 0.8106297 0.4884935 0.8134964 0.4966703
169 170 171 172 173 174 175 176
1.0894077 0.6538577 1.0717340 0.6433325 1.1134303 0.4169521 0.9536592 1.0477613
177 178 179 180 181 182 183 184
1.7465558 1.0014125 0.9536592 0.5127358 0.5985803 0.4597993 0.5408413 1.0195796
185 186 187 188 189 190 191 192
0.5580981 0.5214787 2.3621782 0.5847079 1.0651819 0.4902291 1.0246985 1.4467772
193 194 195 196 197 198 199 200
0.9769008 1.0800127 1.0638328 0.6919025 0.9967735 1.0778107 0.5326337 0.9635172
201 202 203 204 205 206 207 208
1.0651819 1.0881732 0.5630464 0.5341218 0.5174645 1.3533017 0.6634419 1.6753425
209 210 211 212 213 214 215 216
1.1405233 0.7389335 0.5830788 1.1659084 1.1271597 1.5068056 0.8608298 0.8608298
217 218 219 220 221 222 223 224
0.8547524 2.1854595 1.6126170 0.6360967 1.0167730 0.9212793 1.2370205 1.2510919
225 226 227 228
0.4720233 2.0211416 1.1527951 0.9183601
$se.fit
1 2 3 4 5 6
0.094027169 0.096340319 0.096185061 0.110144705 0.091221886 0.124003567
7 8 9 10 11 12
0.106470052 0.135893441 0.104263809 0.115204660 0.048057506 0.157626321
13 14 15 16 17 18
0.058398830 NA 0.078593550 0.044525715 0.047523899 0.139753275
19 20 21 22 23 24
0.246130195 0.051683778 0.050651208 0.106747848 0.121191090 0.095563151
25 26 27 28 29 30
0.135232494 0.077970827 0.084316589 0.541641696 0.047411370 0.244541270
31 32 33 34 35 36
0.067316853 0.236761412 0.222247496 0.143779967 0.246770836 0.214866749
37 38 39 40 41 42
0.186808694 0.027994134 0.244541270 0.017746688 0.094899948 0.150429986
43 44 45 46 47 48
0.082038635 0.251128992 0.071539989 0.172653479 0.157627962 0.046664065
49 50 51 52 53 54
0.203630081 0.147427688 0.071868116 0.087051165 0.126710133 0.091078334
55 56 57 58 59 60
0.030346404 0.094111921 0.072518580 0.232795318 0.092391388 0.017746688
61 62 63 64 65 66
0.207337260 0.162712161 0.126511646 0.038549743 0.042876315 0.234595146
67 68 69 70 71 72
0.151669341 0.068462840 0.112880428 0.068678027 0.124246473 0.184637680
73 74 75 76 77 78
0.325442016 0.174862073 0.090441588 0.089040153 0.108376599 0.057550307
79 80 81 82 83 84
0.188633743 0.150191651 0.082038635 0.027564795 0.181878087 0.172125872
85 86 87 88 89 90
0.142365056 0.114741553 0.035859182 0.096819023 0.132484179 0.229864932
91 92 93 94 95 96
0.120689668 0.047523899 0.070339929 0.055381362 0.123547581 0.253870138
97 98 99 100 101 102
0.042876315 0.089040153 0.035190905 0.106227011 0.091078334 0.091298269
103 104 105 106 107 108
0.017787711 0.028641480 0.194430169 0.039989624 0.075782969 0.044525715
109 110 111 112 113 114
0.071209628 0.254965259 0.163546509 0.185211877 0.241649528 0.139074790
115 116 117 118 119 120
0.076796420 0.262556790 0.348185429 0.211911041 0.146845572 0.149423594
121 122 123 124 125 126
0.150969692 0.156065943 0.042876315 0.142648758 0.129688202 0.004890619
127 128 129 130 131 132
0.113985419 0.031310085 0.248637733 0.121183075 0.041502912 0.067248608
133 134 135 136 137 138
0.115359144 0.027564795 0.112511267 0.200585657 0.069255092 0.201817172
139 140 141 142 143 144
0.094786456 0.075667327 0.240338975 0.094027169 0.216098624 0.024974398
145 146 147 148 149 150
0.066191299 0.084423319 0.167625233 0.058808327 0.221289168 0.105873833
151 152 153 154 155 156
0.140449741 0.098993713 0.063583542 0.067248608 0.230942129 NA
157 158 159 160 161 162
0.067558237 0.245408761 0.032338223 0.075589234 0.101745759 0.174851413
163 164 165 166 167 168
0.125897325 0.028641480 0.048065722 0.111659253 0.045260623 0.125085448
169 170 171 172 173 174
0.020095538 0.093808006 0.037378627 0.093118562 0.031761359 0.135544076
175 176 177 178 179 180
0.104263809 0.016586035 0.246130195 0.027564795 0.104263809 0.174088607
181 182 183 184 185 186
0.109727836 0.166211707 0.139230772 0.017941579 0.106388490 0.137198131
187 188 189 190 191 192
0.304795981 0.089505183 0.043311645 0.114439474 0.131445121 0.192173147
193 194 195 196 197 198
0.144436340 0.017746688 0.058484070 0.121193159 0.002956631 0.025613128
199 200 201 202 203 204
0.104623286 0.033429233 0.043311645 0.080773833 0.103942128 0.124008736
205 206 207 208 209 210
0.118294076 0.078206752 0.080505144 0.235804861 0.079727031 0.057789591
211 212 213 214 215 216
0.091221886 0.068678027 0.029421496 0.124248857 0.038549743 0.038549743
217 218 219 220 221 222
0.158976598 0.269332667 0.130275218 0.089792820 0.015369862 0.085131550
223 224 225 226 227 228
0.148494109 0.160862263 0.138362860 0.225740927 0.057778343 0.074788433
> predict(fit,type="terms",se.fit=TRUE)
$fit
age ph.ecog
1 0.130878057 0.03032716
2 0.063011653 -0.54083428
3 -0.072721154 -0.54083428
4 -0.061410086 0.03032716
5 -0.027476885 -0.54083428
6 0.130878057 0.03032716
7 0.063011653 0.60148859
8 0.096944855 0.60148859
9 -0.106654355 0.03032716
10 -0.016165817 0.60148859
11 -0.061410086 0.03032716
12 0.063011653 0.60148859
13 0.063011653 0.03032716
14 NA NA
15 -0.061410086 0.03032716
16 0.051700586 0.03032716
17 0.085633788 0.03032716
18 0.006456317 0.60148859
19 -0.072721154 0.60148859
20 -0.061410086 0.03032716
21 0.051700586 0.03032716
22 -0.151898625 -0.54083428
23 -0.140587557 0.03032716
24 -0.050099019 -0.54083428
25 0.108255923 -0.54083428
26 0.085633788 0.03032716
27 -0.027476885 -0.54083428
28 0.085633788 1.17265002
29 -0.106654355 0.03032716
30 0.130878057 0.60148859
31 0.074322721 0.03032716
32 0.119566990 0.60148859
33 -0.163209692 0.60148859
34 -0.027476885 0.60148859
35 -0.016165817 0.60148859
36 -0.004854750 0.60148859
37 0.029078452 0.60148859
38 0.040389519 0.03032716
39 0.130878057 0.60148859
40 0.017767384 0.03032716
41 0.085633788 0.03032716
42 0.119566990 0.60148859
43 -0.038787952 -0.54083428
44 -0.027476885 0.60148859
45 0.063011653 0.03032716
46 0.153500192 0.60148859
47 0.130878057 -0.54083428
48 0.006456317 0.03032716
49 0.130878057 -0.54083428
50 -0.140587557 0.03032716
51 0.108255923 0.03032716
52 0.006456317 -0.54083428
53 0.063011653 -0.54083428
54 -0.050099019 -0.54083428
55 -0.038787952 0.03032716
56 -0.004854750 -0.54083428
57 0.029078452 -0.54083428
58 -0.061410086 0.60148859
59 -0.050099019 0.03032716
60 0.017767384 0.03032716
61 0.142189124 0.60148859
62 -0.163209692 0.03032716
63 0.119566990 0.03032716
64 0.029078452 0.03032716
65 0.074322721 0.03032716
66 0.063011653 0.60148859
67 0.051700586 0.60148859
68 0.017767384 -0.54083428
69 0.063011653 -0.54083428
70 0.051700586 0.03032716
71 0.006456317 -0.54083428
72 -0.163209692 0.03032716
73 0.130878057 0.60148859
74 -0.253698230 0.03032716
75 -0.106654355 0.03032716
76 0.096944855 0.03032716
77 -0.129276490 -0.54083428
78 -0.072721154 0.03032716
79 0.210055528 -0.54083428
80 0.119566990 -0.54083428
81 -0.038787952 -0.54083428
82 -0.084032221 0.03032716
83 -0.231076095 0.03032716
84 -0.208453961 0.03032716
85 -0.208453961 0.03032716
86 0.096944855 0.03032716
87 -0.004854750 0.03032716
88 -0.016165817 -0.54083428
89 -0.208453961 0.03032716
90 0.108255923 0.60148859
91 0.006456317 -0.54083428
92 0.085633788 0.03032716
93 0.040389519 0.03032716
94 -0.061410086 0.03032716
95 0.074322721 -0.54083428
96 0.108255923 0.60148859
97 0.074322721 0.03032716
98 0.096944855 0.03032716
99 0.017767384 0.03032716
100 0.085633788 -0.54083428
101 -0.050099019 -0.54083428
102 0.074322721 0.03032716
103 -0.072721154 0.03032716
104 0.006456317 0.03032716
105 -0.038787952 0.60148859
106 0.040389519 0.03032716
107 -0.095343288 0.03032716
108 0.051700586 0.03032716
109 -0.084032221 0.03032716
110 0.142189124 0.60148859
111 0.074322721 -0.54083428
112 -0.208453961 0.03032716
113 0.198744461 0.03032716
114 0.142189124 -0.54083428
115 -0.095343288 0.03032716
116 0.153500192 0.60148859
117 -0.151898625 0.60148859
118 0.063011653 0.60148859
119 0.040389519 0.60148859
120 0.198744461 0.03032716
121 0.142189124 -0.54083428
122 -0.027476885 0.60148859
123 0.074322721 0.03032716
124 0.108255923 0.60148859
125 0.085633788 -0.54083428
126 0.040389519 0.03032716
127 -0.140587557 0.03032716
128 0.017767384 0.03032716
129 0.164811259 0.60148859
130 -0.163209692 -0.54083428
131 -0.038787952 0.03032716
132 -0.106654355 0.03032716
133 -0.174520759 -0.54083428
134 -0.084032221 0.03032716
135 0.051700586 -0.54083428
136 0.130878057 0.60148859
137 -0.050099019 0.03032716
138 -0.072721154 0.60148859
139 -0.095343288 0.03032716
140 -0.072721154 -0.54083428
141 0.119566990 0.60148859
142 0.130878057 0.03032716
143 0.153500192 0.60148859
144 0.029078452 0.03032716
145 -0.061410086 0.03032716
146 -0.106654355 0.03032716
147 0.096944855 -0.54083428
148 -0.095343288 0.03032716
149 0.221366595 -0.54083428
150 -0.038787952 -0.54083428
151 0.085633788 0.03032716
152 -0.027476885 -0.54083428
153 -0.004854750 -0.54083428
154 -0.106654355 0.03032716
155 -0.084032221 0.60148859
156 NA NA
157 0.063011653 0.03032716
158 -0.004854750 0.60148859
159 0.006456317 0.03032716
160 -0.072721154 0.03032716
161 -0.004854750 -0.54083428
162 -0.208453961 0.03032716
163 0.074322721 0.60148859
164 0.006456317 0.03032716
165 0.017767384 0.03032716
166 -0.061410086 -0.54083428
167 -0.027476885 0.03032716
168 -0.185831826 -0.54083428
169 -0.016165817 0.03032716
170 0.029078452 -0.54083428
171 -0.016165817 0.03032716
172 -0.050099019 -0.54083428
173 -0.072721154 0.03032716
174 -0.219765028 -0.54083428
175 -0.106654355 0.03032716
176 -0.038787952 0.03032716
177 -0.072721154 0.60148859
178 -0.084032221 0.03032716
179 -0.106654355 0.03032716
180 0.130878057 -0.54083428
181 -0.027476885 -0.54083428
182 -0.265009297 -0.54083428
183 0.040389519 -0.54083428
184 0.029078452 0.03032716
185 -0.129276490 -0.54083428
186 -0.197142894 -0.54083428
187 0.108255923 0.60148859
188 -0.050099019 -0.54083428
189 0.017767384 0.03032716
190 -0.106654355 -0.54083428
191 0.108255923 0.03032716
192 -0.117965423 0.60148859
193 -0.140587557 0.03032716
194 0.017767384 0.03032716
195 0.096944855 0.03032716
196 0.085633788 -0.54083428
197 0.006456317 0.03032716
198 0.017767384 0.03032716
199 -0.117965423 -0.54083428
200 -0.027476885 0.03032716
201 0.017767384 0.03032716
202 0.119566990 0.03032716
203 0.006456317 -0.54083428
204 -0.140587557 -0.54083428
205 0.006456317 -0.54083428
206 -0.004854750 0.60148859
207 -0.084032221 -0.54083428
208 -0.140587557 0.60148859
209 0.074322721 0.03032716
210 -0.038787952 0.03032716
211 -0.027476885 -0.54083428
212 0.051700586 0.03032716
213 0.074322721 0.03032716
214 0.017767384 0.60148859
215 0.029078452 0.03032716
216 0.029078452 0.03032716
217 -0.242387163 0.03032716
218 0.153500192 0.60148859
219 0.085633788 0.60148859
220 -0.061410086 -0.54083428
221 0.051700586 0.03032716
222 0.096944855 0.03032716
223 0.153500192 0.03032716
224 0.164811259 0.03032716
225 -0.265009297 -0.54083428
226 0.142189124 0.60148859
227 0.040389519 0.03032716
228 -0.050099019 0.03032716
$se.fit
age ph.ecog
1 0.119930635 0.007395102
2 0.057740983 0.131879319
3 0.066638322 0.131879319
4 0.056273380 0.007395102
5 0.025178554 0.131879319
6 0.119930635 0.007395102
7 0.057740983 0.146669523
8 0.088835809 0.146669523
9 0.097733148 0.007395102
10 0.014813612 0.146669523
11 0.056273380 0.007395102
12 0.057740983 0.146669523
13 0.057740983 0.007395102
14 NA NA
15 0.056273380 0.007395102
16 0.047376041 0.007395102
17 0.078470867 0.007395102
18 0.005916272 0.146669523
19 0.066638322 0.146669523
20 0.056273380 0.007395102
21 0.047376041 0.007395102
22 0.139192917 0.131879319
23 0.128827975 0.007395102
24 0.045908438 0.131879319
25 0.099200751 0.131879319
26 0.078470867 0.007395102
27 0.025178554 0.131879319
28 0.078470867 0.285943945
29 0.097733148 0.007395102
30 0.119930635 0.146669523
31 0.068105925 0.007395102
32 0.109565693 0.146669523
33 0.149557859 0.146669523
34 0.025178554 0.146669523
35 0.014813612 0.146669523
36 0.004448670 0.146669523
37 0.026646156 0.146669523
38 0.037011098 0.007395102
39 0.119930635 0.146669523
40 0.016281214 0.007395102
41 0.078470867 0.007395102
42 0.109565693 0.146669523
43 0.035543496 0.131879319
44 0.025178554 0.146669523
45 0.057740983 0.007395102
46 0.140660519 0.146669523
47 0.119930635 0.131879319
48 0.005916272 0.007395102
49 0.119930635 0.131879319
50 0.128827975 0.007395102
51 0.099200751 0.007395102
52 0.005916272 0.131879319
53 0.057740983 0.131879319
54 0.045908438 0.131879319
55 0.035543496 0.007395102
56 0.004448670 0.131879319
57 0.026646156 0.131879319
58 0.056273380 0.146669523
59 0.045908438 0.007395102
60 0.016281214 0.007395102
61 0.130295577 0.146669523
62 0.149557859 0.007395102
63 0.109565693 0.007395102
64 0.026646156 0.007395102
65 0.068105925 0.007395102
66 0.057740983 0.146669523
67 0.047376041 0.146669523
68 0.016281214 0.131879319
69 0.057740983 0.131879319
70 0.047376041 0.007395102
71 0.005916272 0.131879319
72 0.149557859 0.007395102
73 0.119930635 0.146669523
74 0.232477395 0.007395102
75 0.097733148 0.007395102
76 0.088835809 0.007395102
77 0.118463033 0.131879319
78 0.066638322 0.007395102
79 0.192485229 0.131879319
80 0.109565693 0.131879319
81 0.035543496 0.131879319
82 0.077003264 0.007395102
83 0.211747511 0.007395102
84 0.191017627 0.007395102
85 0.191017627 0.007395102
86 0.088835809 0.007395102
87 0.004448670 0.007395102
88 0.014813612 0.131879319
89 0.191017627 0.007395102
90 0.099200751 0.146669523
91 0.005916272 0.131879319
92 0.078470867 0.007395102
93 0.037011098 0.007395102
94 0.056273380 0.007395102
95 0.068105925 0.131879319
96 0.099200751 0.146669523
97 0.068105925 0.007395102
98 0.088835809 0.007395102
99 0.016281214 0.007395102
100 0.078470867 0.131879319
101 0.045908438 0.131879319
102 0.068105925 0.007395102
103 0.066638322 0.007395102
104 0.005916272 0.007395102
105 0.035543496 0.146669523
106 0.037011098 0.007395102
107 0.087368206 0.007395102
108 0.047376041 0.007395102
109 0.077003264 0.007395102
110 0.130295577 0.146669523
111 0.068105925 0.131879319
112 0.191017627 0.007395102
113 0.182120287 0.007395102
114 0.130295577 0.131879319
115 0.087368206 0.007395102
116 0.140660519 0.146669523
117 0.139192917 0.146669523
118 0.057740983 0.146669523
119 0.037011098 0.146669523
120 0.182120287 0.007395102
121 0.130295577 0.131879319
122 0.025178554 0.146669523
123 0.068105925 0.007395102
124 0.099200751 0.146669523
125 0.078470867 0.131879319
126 0.037011098 0.007395102
127 0.128827975 0.007395102
128 0.016281214 0.007395102
129 0.151025461 0.146669523
130 0.149557859 0.131879319
131 0.035543496 0.007395102
132 0.097733148 0.007395102
133 0.159922801 0.131879319
134 0.077003264 0.007395102
135 0.047376041 0.131879319
136 0.119930635 0.146669523
137 0.045908438 0.007395102
138 0.066638322 0.146669523
139 0.087368206 0.007395102
140 0.066638322 0.131879319
141 0.109565693 0.146669523
142 0.119930635 0.007395102
143 0.140660519 0.146669523
144 0.026646156 0.007395102
145 0.056273380 0.007395102
146 0.097733148 0.007395102
147 0.088835809 0.131879319
148 0.087368206 0.007395102
149 0.202850171 0.131879319
150 0.035543496 0.131879319
151 0.078470867 0.007395102
152 0.025178554 0.131879319
153 0.004448670 0.131879319
154 0.097733148 0.007395102
155 0.077003264 0.146669523
156 NA NA
157 0.057740983 0.007395102
158 0.004448670 0.146669523
159 0.005916272 0.007395102
160 0.066638322 0.007395102
161 0.004448670 0.131879319
162 0.191017627 0.007395102
163 0.068105925 0.146669523
164 0.005916272 0.007395102
165 0.016281214 0.007395102
166 0.056273380 0.131879319
167 0.025178554 0.007395102
168 0.170287743 0.131879319
169 0.014813612 0.007395102
170 0.026646156 0.131879319
171 0.014813612 0.007395102
172 0.045908438 0.131879319
173 0.066638322 0.007395102
174 0.201382569 0.131879319
175 0.097733148 0.007395102
176 0.035543496 0.007395102
177 0.066638322 0.146669523
178 0.077003264 0.007395102
179 0.097733148 0.007395102
180 0.119930635 0.131879319
181 0.025178554 0.131879319
182 0.242842337 0.131879319
183 0.037011098 0.131879319
184 0.026646156 0.007395102
185 0.118463033 0.131879319
186 0.180652685 0.131879319
187 0.099200751 0.146669523
188 0.045908438 0.131879319
189 0.016281214 0.007395102
190 0.097733148 0.131879319
191 0.099200751 0.007395102
192 0.108098090 0.146669523
193 0.128827975 0.007395102
194 0.016281214 0.007395102
195 0.088835809 0.007395102
196 0.078470867 0.131879319
197 0.005916272 0.007395102
198 0.016281214 0.007395102
199 0.108098090 0.131879319
200 0.025178554 0.007395102
201 0.016281214 0.007395102
202 0.109565693 0.007395102
203 0.005916272 0.131879319
204 0.128827975 0.131879319
205 0.005916272 0.131879319
206 0.004448670 0.146669523
207 0.077003264 0.131879319
208 0.128827975 0.146669523
209 0.068105925 0.007395102
210 0.035543496 0.007395102
211 0.025178554 0.131879319
212 0.047376041 0.007395102
213 0.068105925 0.007395102
214 0.016281214 0.146669523
215 0.026646156 0.007395102
216 0.026646156 0.007395102
217 0.222112453 0.007395102
218 0.140660519 0.146669523
219 0.078470867 0.146669523
220 0.056273380 0.131879319
221 0.047376041 0.007395102
222 0.088835809 0.007395102
223 0.140660519 0.007395102
224 0.151025461 0.007395102
225 0.242842337 0.131879319
226 0.130295577 0.146669523
227 0.037011098 0.007395102
228 0.045908438 0.007395102
>
> # For someone who demands reference='zero'
> pzero <- function(fit)
+ predict(fit, reference="sample") + sum(coef(fit) * fit$means, na.rm=TRUE)
>
>
>
> cleanEx()
> nameEx("predict.survreg")
> ### * predict.survreg
>
> flush(stderr()); flush(stdout())
>
> ### Name: predict.survreg
> ### Title: Predicted Values for a 'survreg' Object
> ### Aliases: predict.survreg predict.survreg.penal
> ### Keywords: survival
>
> ### ** Examples
>
> # Draw figure 1 from Escobar and Meeker, 1992.
> fit <- survreg(Surv(time,status) ~ age + I(age^2), data=stanford2,
+ dist='lognormal')
> with(stanford2, plot(age, time, xlab='Age', ylab='Days',
+ xlim=c(0,65), ylim=c(.1, 10^5), log='y', type='n'))
> with(stanford2, points(age, time, pch=c(2,4)[status+1], cex=.7))
> pred <- predict(fit, newdata=list(age=1:65), type='quantile',
+ p=c(.1, .5, .9))
> matlines(1:65, pred, lty=c(2,1,2), col=1)
>
> # Predicted Weibull survival curve for a lung cancer subject with
> # ECOG score of 2
> lfit <- survreg(Surv(time, status) ~ ph.ecog, data=lung)
> pct <- 1:98/100 # The 100th percentile of predicted survival is at +infinity
> ptime <- predict(lfit, newdata=data.frame(ph.ecog=2), type='quantile',
+ p=pct, se=TRUE)
> matplot(cbind(ptime$fit, ptime$fit + 2*ptime$se.fit,
+ ptime$fit - 2*ptime$se.fit)/30.5, 1-pct,
+ xlab="Months", ylab="Survival", type='l', lty=c(1,2,2), col=1)
>
>
>
> cleanEx()
> nameEx("pseudo")
> ### * pseudo
>
> flush(stderr()); flush(stdout())
>
> ### Name: pseudo
> ### Title: Pseudo values for survival.
> ### Aliases: pseudo
> ### Keywords: survival
>
> ### ** Examples
>
> fit1 <- survfit(Surv(time, status) ~ 1, data=lung)
> yhat <- pseudo(fit1, times=c(365, 730))
> dim(yhat)
[1] 228 2
> lfit <- lm(yhat[,1] ~ ph.ecog + age + sex, data=lung)
>
> # Restricted Mean Time in State (RMST)
> rms <- pseudo(fit1, times= 730, type='RMST') # 2 years
> rfit <- lm(rms ~ ph.ecog + sex, data=lung)
> rhat <- predict(rfit, newdata=expand.grid(ph.ecog=0:3, sex=1:2), se.fit=TRUE)
> # print it out nicely
> temp1 <- cbind(matrix(rhat$fit, 4,2))
> temp2 <- cbind(matrix(rhat$se.fit, 4, 2))
> temp3 <- cbind(temp1[,1], temp2[,1], temp1[,2], temp2[,2])
> dimnames(temp3) <- list(paste("ph.ecog", 0:3),
+ c("Male RMST", "(se)", "Female RMST", "(se)"))
>
> round(temp3, 1)
Male RMST (se) Female RMST (se)
ph.ecog 0 393.7 28.6 510.6 31.5
ph.ecog 1 307.8 19.8 424.7 24.4
ph.ecog 2 221.9 29.7 338.8 33.4
ph.ecog 3 136.1 47.9 253.0 50.5
> # compare this to the fully non-parametric estimate
> fit2 <- survfit(Surv(time, status) ~ ph.ecog, data=lung)
> print(fit2, rmean=730)
Call: survfit(formula = Surv(time, status) ~ ph.ecog, data = lung)
1 observation deleted due to missingness
n events rmean* se(rmean) median 0.95LCL 0.95UCL
ph.ecog=0 63 37 429 32.2 394 348 574
ph.ecog=1 113 82 366 22.4 306 268 429
ph.ecog=2 50 44 256 30.0 199 156 288
ph.ecog=3 1 1 118 0.0 118 NA NA
* restricted mean with upper limit = 730
> # the estimate for ph.ecog=3 is very unstable (n=1), pseudovalues smooth it.
> #
> # In all the above we should be using the robust variance, e.g., svyglm, but
> # a recommended package can't depend on external libraries.
> # See the vignette for a more complete exposition.
>
>
>
> cleanEx()
> nameEx("pspline")
> ### * pspline
>
> flush(stderr()); flush(stdout())
>
> ### Name: pspline
> ### Title: Smoothing splines using a pspline basis
> ### Aliases: pspline psplineinverse
> ### Keywords: survival
>
> ### ** Examples
>
> lfit6 <- survreg(Surv(time, status)~pspline(age, df=2), lung)
> plot(lung$age, predict(lfit6), xlab='Age', ylab="Spline prediction")
> title("Cancer Data")
> fit0 <- coxph(Surv(time, status) ~ ph.ecog + age, lung)
> fit1 <- coxph(Surv(time, status) ~ ph.ecog + pspline(age,3), lung)
> fit3 <- coxph(Surv(time, status) ~ ph.ecog + pspline(age,8), lung)
> fit0
Call:
coxph(formula = Surv(time, status) ~ ph.ecog + age, data = lung)
coef exp(coef) se(coef) z p
ph.ecog 0.443485 1.558128 0.115831 3.829 0.000129
age 0.011281 1.011345 0.009319 1.211 0.226082
Likelihood ratio test=19.06 on 2 df, p=7.279e-05
n= 227, number of events= 164
(1 observation deleted due to missingness)
> fit1
Call:
coxph(formula = Surv(time, status) ~ ph.ecog + pspline(age, 3),
data = lung)
coef se(coef) se2 Chisq DF p
ph.ecog 0.44802 0.11707 0.11678 14.64453 1.00 0.00013
pspline(age, 3), linear 0.01126 0.00928 0.00928 1.47231 1.00 0.22498
pspline(age, 3), nonlin 2.07924 2.08 0.37143
Iterations: 4 outer, 12 Newton-Raphson
Theta= 0.861
Degrees of freedom for terms= 1.0 3.1
Likelihood ratio test=21.9 on 4.08 df, p=2e-04
n= 227, number of events= 164
(1 observation deleted due to missingness)
> fit3
Call:
coxph(formula = Surv(time, status) ~ ph.ecog + pspline(age, 8),
data = lung)
coef se(coef) se2 Chisq DF p
ph.ecog 0.47640 0.12024 0.11925 15.69732 1.00 7.4e-05
pspline(age, 8), linear 0.01172 0.00923 0.00923 1.61161 1.00 0.20
pspline(age, 8), nonlin 6.93188 6.99 0.43
Iterations: 5 outer, 15 Newton-Raphson
Theta= 0.691
Degrees of freedom for terms= 1 8
Likelihood ratio test=27.6 on 8.97 df, p=0.001
n= 227, number of events= 164
(1 observation deleted due to missingness)
>
>
>
> cleanEx()
> nameEx("pyears")
> ### * pyears
>
> flush(stderr()); flush(stdout())
>
> ### Name: pyears
> ### Title: Person Years
> ### Aliases: pyears
> ### Keywords: survival
>
> ### ** Examples
>
> # Look at progression rates jointly by calendar date and age
> #
> temp.yr <- tcut(mgus$dxyr, 55:92, labels=as.character(55:91))
> temp.age <- tcut(mgus$age, 34:101, labels=as.character(34:100))
> ptime <- ifelse(is.na(mgus$pctime), mgus$futime, mgus$pctime)
> pstat <- ifelse(is.na(mgus$pctime), 0, 1)
> pfit <- pyears(Surv(ptime/365.25, pstat) ~ temp.yr + temp.age + sex, mgus,
+ data.frame=TRUE)
> # Turn the factor back into numerics for regression
> tdata <- pfit$data
> tdata$age <- as.numeric(as.character(tdata$temp.age))
> tdata$year<- as.numeric(as.character(tdata$temp.yr))
> fit1 <- glm(event ~ year + age+ sex +offset(log(pyears)),
+ data=tdata, family=poisson)
> ## Not run:
> ##D # fit a gam model
> ##D gfit.m <- gam(y ~ s(age) + s(year) + offset(log(time)),
> ##D family = poisson, data = tdata)
> ## End(Not run)
>
> # Example #2 Create the hearta data frame:
> hearta <- by(heart, heart$id,
+ function(x)x[x$stop == max(x$stop),])
> hearta <- do.call("rbind", hearta)
> # Produce pyears table of death rates on the surgical arm
> # The first is by age at randomization, the second by current age
> fit1 <- pyears(Surv(stop/365.25, event) ~ cut(age + 48, c(0,50,60,70,100)) +
+ surgery, data = hearta, scale = 1)
> fit2 <- pyears(Surv(stop/365.25, event) ~ tcut(age + 48, c(0,50,60,70,100)) +
+ surgery, data = hearta, scale = 1)
> fit1$event/fit1$pyears #death rates on the surgery and non-surg arm
surgery
cut(age + 48, c(0, 50, 60, 70, 100)) 0 1
(0,50] 0.7615378 0.3036881
(50,60] 2.0068681 0.9979508
(60,70] 5.1083916 NaN
(70,100] NaN NaN
>
> fit2$event/fit2$pyears #death rates on the surgery and non-surg arm
surgery
tcut(age + 48, c(0, 50, 60, 70, 100)) 0 1
0+ thru 50 0.8013285 0.2636994
50+ thru 60 1.6119238 0.6564817
60+ thru 70 3.9701087 NaN
70+ thru 100 NaN NaN
>
>
>
> cleanEx()
> nameEx("quantile.survfit")
> ### * quantile.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: quantile.survfit
> ### Title: Quantiles from a survfit object
> ### Aliases: quantile.survfit quantile.survfitms median.survfit
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- survfit(Surv(time, status) ~ ph.ecog, data=lung)
> quantile(fit)
$quantile
25 50 75
ph.ecog=0 285 394 655
ph.ecog=1 181 306 550
ph.ecog=2 105 199 351
ph.ecog=3 118 118 118
$lower
25 50 75
ph.ecog=0 189 348 558
ph.ecog=1 156 268 460
ph.ecog=2 61 156 285
ph.ecog=3 NA NA NA
$upper
25 50 75
ph.ecog=0 350 574 NA
ph.ecog=1 223 429 689
ph.ecog=2 163 288 654
ph.ecog=3 NA NA NA
>
> cfit <- coxph(Surv(time, status) ~ age + strata(ph.ecog), data=lung)
> csurv<- survfit(cfit, newdata=data.frame(age=c(40, 60, 80)),
+ conf.type ="none")
> temp <- quantile(csurv, 1:5/10)
> temp[2,3,] # quantiles for second level of ph.ecog, age=80
10 20 30 40 50
92 144 181 218 270
> quantile(csurv[2,3], 1:5/10) # quantiles of a single curve, same result
10 20 30 40 50
92 144 181 218 270
>
>
>
> cleanEx()
> nameEx("reliability")
> ### * reliability
>
> flush(stderr()); flush(stdout())
>
> ### Name: reliability
> ### Title: Reliability data sets
> ### Aliases: reliability capacitor cracks genfan ifluid imotor turbine
> ### valveSeat
> ### Keywords: datasets
>
> ### ** Examples
>
> survreg(Surv(time, status) ~ temperature + voltage, capacitor)
Call:
survreg(formula = Surv(time, status) ~ temperature + voltage,
data = capacitor)
Coefficients:
(Intercept) temperature voltage
13.40701688 -0.02890466 -0.00591082
Scale= 0.3638092
Loglik(model)= -244.2 Loglik(intercept only)= -254.5
Chisq= 20.57 on 2 degrees of freedom, p= 3.41e-05
n= 64
>
> # Replacement of valve seats. In this case the cumulative hazard is the
> # natural target, an estimate of the number of replacements by a given time
> # (known as the cumulative mean function = CMF in relability).
> # When two valve seats failed at the same inspection, we need to jitter one
> # of the times, to avoid a (time1, time2) interval of length 0
> ties <- which(with(valveSeat, diff(id)==0 & diff(time)==0)) #first of a tie
> temp <- valveSeat$time
> temp[ties] <- temp[ties] - .1 # jittered time
> vdata <- valveSeat
> vdata$time1 <- ifelse(!duplicated(vdata$id), 0, c(0, temp[-length(temp)]))
> vdata$time2 <- temp
> fit2 <- survfit(Surv(time1, time2, status) ~1, vdata, id=id)
> ## Not run:
> ##D plot(fit2, cumhaz= TRUE, xscale= 365.25,
> ##D xlab="Years in service", ylab = "Expected number of repairs")
> ## End(Not run)
>
>
>
> cleanEx()
> nameEx("residuals.coxph")
> ### * residuals.coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: residuals.coxph
> ### Title: Calculate Residuals for a 'coxph' Fit
> ### Aliases: residuals.coxph.penal residuals.coxph.null residuals.coxph
> ### residuals.coxphms
> ### Keywords: survival
>
> ### ** Examples
>
>
> fit <- coxph(Surv(start, stop, event) ~ (age + surgery)* transplant,
+ data=heart)
> mresid <- resid(fit, collapse=heart$id)
>
>
>
> cleanEx()
> nameEx("residuals.survfit")
> ### * residuals.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: residuals.survfit
> ### Title: IJ residuals from a survfit object.
> ### Aliases: residuals.survfit
>
> ### ** Examples
>
> fit <- survfit(Surv(time, status) ~ x, aml)
> resid(fit, times=c(24, 48), type="RMTS")
times
24 48
1 -1.0836777 -2.076652893
2 -0.7200413 -1.713016529
3 0.2004132 0.421074380
4 -0.3237345 -1.468414256
5 0.1876291 -0.957050620
6 0.2899019 0.965676653
7 0.2899019 -0.359777893
8 0.2899019 0.008403926
9 0.2899019 1.726585744
10 0.2899019 1.726585744
11 0.2899019 1.726585744
12 -1.0057870 -1.475694444
13 -1.0057870 -1.475694444
14 -0.7557870 -1.225694444
15 -0.7557870 -1.225694444
16 -0.4224537 -0.892361111
17 0.5636574 0.899305556
18 0.4826389 -0.121527778
19 0.5798611 0.267361111
20 0.5798611 0.559027778
21 0.5798611 0.850694444
22 0.5798611 1.822916667
23 0.5798611 2.017361111
>
>
>
> cleanEx()
> nameEx("residuals.survreg")
> ### * residuals.survreg
>
> flush(stderr()); flush(stdout())
>
> ### Name: residuals.survreg
> ### Title: Compute Residuals for 'survreg' Objects
> ### Aliases: residuals.survreg residuals.survreg.penal
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- survreg(Surv(futime, death) ~ age + sex, mgus2)
> summary(fit) # age and sex are both important
Call:
survreg(formula = Surv(futime, death) ~ age + sex, data = mgus2)
Value Std. Error z p
(Intercept) 8.85979 0.23842 37.16 < 2e-16
age -0.05360 0.00312 -17.19 < 2e-16
sexM -0.31874 0.06357 -5.01 5.3e-07
Log(scale) -0.02840 0.02787 -1.02 0.31
Scale= 0.972
Weibull distribution
Loglik(model)= -5528.3 Loglik(intercept only)= -5699
Chisq= 341.42 on 2 degrees of freedom, p= 7.3e-75
Number of Newton-Raphson Iterations: 5
n= 1384
>
> rr <- residuals(fit, type='matrix')
> sum(rr[,1]) - with(mgus2, sum(log(futime[death==1]))) # loglik
[1] -5528.267
>
> plot(mgus2$age, rr[,2], col= (1+mgus2$death)) # ldresp
>
>
>
> cleanEx()
> nameEx("retinopathy")
> ### * retinopathy
>
> flush(stderr()); flush(stdout())
>
> ### Name: retinopathy
> ### Title: Diabetic Retinopathy
> ### Aliases: retinopathy
> ### Keywords: datasets
>
> ### ** Examples
>
> coxph(Surv(futime, status) ~ type + trt, cluster= id, retinopathy)
Call:
coxph(formula = Surv(futime, status) ~ type + trt, data = retinopathy,
cluster = id)
coef exp(coef) se(coef) robust se z p
typeadult 0.05388 1.05536 0.16211 0.17864 0.302 0.763
trt -0.77893 0.45890 0.16893 0.14851 -5.245 1.56e-07
Likelihood ratio test=22.48 on 2 df, p=1.312e-05
n= 394, number of events= 155
>
>
>
> cleanEx()
> nameEx("rhDNase")
> ### * rhDNase
>
> flush(stderr()); flush(stdout())
>
> ### Name: rhDNase
> ### Title: rhDNASE data set
> ### Aliases: rhDNase
> ### Keywords: datasets
>
> ### ** Examples
>
> # Build the start-stop data set for analysis, and
> # replicate line 2 of table 8.13 in the book
> first <- subset(rhDNase, !duplicated(id)) #first row for each subject
> dnase <- tmerge(first, first, id=id, tstop=as.numeric(end.dt -entry.dt))
>
> # Subjects whose fu ended during the 6 day window are the reason for
> # this next line
> temp.end <- with(rhDNase, pmin(ivstop+6, end.dt-entry.dt))
> dnase <- tmerge(dnase, rhDNase, id=id,
+ infect=event(ivstart),
+ end= event(temp.end))
> # toss out the non-at-risk intervals, and extra variables
> # 3 subjects had an event on their last day of fu, infect=1 and end=1
> dnase <- subset(dnase, (infect==1 | end==0), c(id:trt, fev:infect))
> agfit <- coxph(Surv(tstart, tstop, infect) ~ trt + fev, cluster=id,
+ data=dnase)
>
>
>
> cleanEx()
> nameEx("ridge")
> ### * ridge
>
> flush(stderr()); flush(stdout())
>
> ### Name: ridge
> ### Title: Ridge regression
> ### Aliases: ridge
> ### Keywords: survival
>
> ### ** Examples
>
>
> coxph(Surv(futime, fustat) ~ rx + ridge(age, ecog.ps, theta=1),
+ ovarian)
Call:
coxph(formula = Surv(futime, fustat) ~ rx + ridge(age, ecog.ps,
theta = 1), data = ovarian)
coef se(coef) se2 Chisq DF p
rx -0.8564 0.6161 0.6156 1.9323 1 0.1645
ridge(age) 0.1229 0.0385 0.0354 10.2127 1 0.0014
ridge(ecog.ps) 0.1093 0.5734 0.5484 0.0363 1 0.8488
Iterations: 1 outer, 5 Newton-Raphson
Degrees of freedom for terms= 1.0 1.8
Likelihood ratio test=15.6 on 2.76 df, p=0.001
n= 26, number of events= 12
>
> lfit0 <- survreg(Surv(time, status) ~1, lung)
> lfit1 <- survreg(Surv(time, status) ~ age + ridge(ph.ecog, theta=5), lung)
> lfit2 <- survreg(Surv(time, status) ~ sex + ridge(age, ph.ecog, theta=1), lung)
> lfit3 <- survreg(Surv(time, status) ~ sex + age + ph.ecog, lung)
>
>
>
>
> cleanEx()
> nameEx("rotterdam")
> ### * rotterdam
>
> flush(stderr()); flush(stdout())
>
> ### Name: rotterdam
> ### Title: Breast cancer data set used in Royston and Altman (2013)
> ### Aliases: rotterdam
> ### Keywords: datasets survival
>
> ### ** Examples
>
> # liberal definition of rfs (count later deaths)
> rfs <- pmax(rotterdam$recur, rotterdam$death)
> rfstime <- with(rotterdam, ifelse(recur==1, rtime, dtime))
> fit1 <- coxph(Surv(rfstime, rfs) ~ pspline(age) + meno + size +
+ pspline(nodes) + er, data = rotterdam)
>
> # conservative (no deaths after last fu for recurrence)
> ignore <- with(rotterdam, recur ==0 & death==1 & rtime < dtime)
> table(ignore)
ignore
FALSE TRUE
2939 43
> rfs2 <- with(rotterdam, ifelse(recur==1 | ignore, recur, death))
> rfstime2 <- with(rotterdam, ifelse(recur==1 | ignore, rtime, dtime))
> fit2 <- coxph(Surv(rfstime2, rfs2) ~ pspline(age) + meno + size +
+ pspline(nodes) + er, data = rotterdam)
>
> # Note: Both age and nodes show non-linear effects.
> # Royston and Altman used fractional polynomials for the nonlinear terms
>
>
>
> cleanEx()
> nameEx("royston")
> ### * royston
>
> flush(stderr()); flush(stdout())
>
> ### Name: royston
> ### Title: Compute Royston's D for a Cox model
> ### Aliases: royston
> ### Keywords: survival
>
> ### ** Examples
>
> # An example used in Royston and Sauerbrei
> pbc2 <- na.omit(pbc) # no missing values
> cfit <- coxph(Surv(time, status==2) ~ age + log(bili) + edema + albumin +
+ stage + copper, data=pbc2, ties="breslow")
> royston(cfit)
D se(D) R.D R.KO R.N C.GH
2.6917766 0.2273352 0.6336693 0.5554885 0.4714442 0.7735923
>
>
>
> cleanEx()
> nameEx("rttright")
> ### * rttright
>
> flush(stderr()); flush(stdout())
>
> ### Name: rttright
> ### Title: Compute redistribute-to-the-right weights
> ### Aliases: rttright
> ### Keywords: survival
>
> ### ** Examples
>
> afit <- survfit(Surv(time, status) ~1, data=aml)
> rwt <- rttright(Surv(time, status) ~1, data=aml)
>
> # Reproduce a Kaplan-Meier
> index <- order(aml$time)
> cdf <- cumsum(rwt[index]) # weighted CDF
> cdf <- cdf[!duplicated(aml$time[index], fromLast=TRUE)] # remove duplicate times
> cbind(time=afit$time, KM= afit$surv, RTTR= 1-cdf)
time KM RTTR
[1,] 5 0.91304348 0.91304348
[2,] 8 0.82608696 0.82608696
[3,] 9 0.78260870 0.78260870
[4,] 12 0.73913043 0.73913043
[5,] 13 0.69565217 0.69565217
[6,] 16 0.69565217 0.69565217
[7,] 18 0.64596273 0.64596273
[8,] 23 0.54658385 0.54658385
[9,] 27 0.49689441 0.49689441
[10,] 28 0.49689441 0.49689441
[11,] 30 0.44168392 0.44168392
[12,] 31 0.38647343 0.38647343
[13,] 33 0.33126294 0.33126294
[14,] 34 0.27605245 0.27605245
[15,] 43 0.22084196 0.22084196
[16,] 45 0.16563147 0.16563147
[17,] 48 0.08281573 0.08281573
[18,] 161 0.08281573 0.08281573
>
> # Hormonal patients have a diffent censoring pattern
> wt2 <- rttright(Surv(dtime, death) ~ hormon, rotterdam, times= 365*c(3, 5))
> dim(wt2)
[1] 2982 2
>
>
>
> cleanEx()
> nameEx("solder")
> ### * solder
>
> flush(stderr()); flush(stdout())
>
> ### Name: solder
> ### Title: Data from a soldering experiment
> ### Aliases: solder
> ### Keywords: datasets
>
> ### ** Examples
>
> # The balanced subset used by Chambers and Hastie
> # contains the first 180 of each mask and deletes mask A6.
> index <- 1 + (1:nrow(solder)) - match(solder$Mask, solder$Mask)
> solder.balance <- droplevels(subset(solder, Mask != "A6" & index <= 180))
>
>
>
> cleanEx()
> nameEx("statefig")
> ### * statefig
>
> flush(stderr()); flush(stdout())
>
> ### Name: statefig
> ### Title: Draw a state space figure.
> ### Aliases: statefig
> ### Keywords: survival hplot
>
> ### ** Examples
>
> # Draw a simple competing risks figure
> states <- c("Entry", "Complete response", "Relapse", "Death")
> connect <- matrix(0, 4, 4, dimnames=list(states, states))
> connect[1, -1] <- c(1.1, 1, 0.9)
> statefig(c(1, 3), connect)
>
>
>
> cleanEx()
> nameEx("strata")
> ### * strata
>
> flush(stderr()); flush(stdout())
>
> ### Name: strata
> ### Title: Identify Stratification Variables
> ### Aliases: strata
> ### Keywords: survival
>
> ### ** Examples
>
> a <- factor(rep(1:3,4), labels=c("low", "medium", "high"))
> b <- factor(rep(1:4,3))
> levels(strata(b))
[1] "1" "2" "3" "4"
> levels(strata(a,b,shortlabel=TRUE))
[1] "low, 1" "low, 2" "low, 3" "low, 4" "medium, 1" "medium, 2"
[7] "medium, 3" "medium, 4" "high, 1" "high, 2" "high, 3" "high, 4"
>
> coxph(Surv(futime, fustat) ~ age + strata(rx), data=ovarian)
Call:
coxph(formula = Surv(futime, fustat) ~ age + strata(rx), data = ovarian)
coef exp(coef) se(coef) z p
age 0.13735 1.14723 0.04741 2.897 0.00376
Likelihood ratio test=12.69 on 1 df, p=0.0003678
n= 26, number of events= 12
>
>
>
> cleanEx()
> nameEx("summary.aareg")
> ### * summary.aareg
>
> flush(stderr()); flush(stdout())
>
> ### Name: summary.aareg
> ### Title: Summarize an aareg fit
> ### Aliases: summary.aareg
> ### Keywords: survival
>
> ### ** Examples
>
> afit <- aareg(Surv(time, status) ~ age + sex + ph.ecog, data=lung,
+ dfbeta=TRUE)
> summary(afit)
slope coef se(coef) robust se z p
Intercept 5.05e-03 5.87e-03 4.74e-03 0.00477 1.23 0.219000
age 4.01e-05 7.15e-05 7.23e-05 0.00007 1.02 0.307000
sex -3.16e-03 -4.03e-03 1.22e-03 0.00123 -3.28 0.001030
ph.ecog 3.01e-03 3.67e-03 1.02e-03 0.00102 3.62 0.000299
Chisq=22.84 on 3 df, p=4.36e-05; test weights=aalen
> ## Not run:
> ##D slope test se(test) robust se z p
> ##D Intercept 5.05e-03 1.9 1.54 1.55 1.23 0.219000
> ##D age 4.01e-05 108.0 109.00 106.00 1.02 0.307000
> ##D sex -3.16e-03 -19.5 5.90 5.95 -3.28 0.001030
> ##D ph.ecog 3.01e-03 33.2 9.18 9.17 3.62 0.000299
> ##D
> ##D Chisq=22.84 on 3 df, p=4.4e-05; test weights=aalen
> ## End(Not run)
>
> summary(afit, maxtime=600)
slope coef se(coef) robust se z p
Intercept 4.16e-03 6.67e-03 4.62e-03 0.004580 1.450 0.146000
age 2.82e-05 5.74e-05 7.07e-05 0.000067 0.857 0.392000
sex -2.54e-03 -4.30e-03 1.17e-03 0.001180 -3.660 0.000256
ph.ecog 2.47e-03 3.54e-03 9.99e-04 0.000972 3.640 0.000271
Chisq=27.08 on 3 df, p=5.66e-06; test weights=aalen
> ## Not run:
> ##D slope test se(test) robust se z p
> ##D Intercept 4.16e-03 2.13 1.48 1.47 1.450 0.146000
> ##D age 2.82e-05 85.80 106.00 100.00 0.857 0.392000
> ##D sex -2.54e-03 -20.60 5.61 5.63 -3.660 0.000256
> ##D ph.ecog 2.47e-03 31.60 8.91 8.67 3.640 0.000271
> ##D
> ##D Chisq=27.08 on 3 df, p=5.7e-06; test weights=aalen
> ## End(Not run)
>
>
> cleanEx()
> nameEx("summary.coxph")
> ### * summary.coxph
>
> flush(stderr()); flush(stdout())
>
> ### Name: summary.coxph
> ### Title: Summary method for Cox models
> ### Aliases: summary.coxph
> ### Keywords: survival
>
> ### ** Examples
>
> fit <- coxph(Surv(time, status) ~ age + sex, lung)
> summary(fit)
Call:
coxph(formula = Surv(time, status) ~ age + sex, data = lung)
n= 228, number of events= 165
coef exp(coef) se(coef) z Pr(>|z|)
age 0.017045 1.017191 0.009223 1.848 0.06459 .
sex -0.513219 0.598566 0.167458 -3.065 0.00218 **
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
exp(coef) exp(-coef) lower .95 upper .95
age 1.0172 0.9831 0.9990 1.0357
sex 0.5986 1.6707 0.4311 0.8311
Concordance= 0.603 (se = 0.025 )
Likelihood ratio test= 14.12 on 2 df, p=9e-04
Wald test = 13.47 on 2 df, p=0.001
Score (logrank) test = 13.72 on 2 df, p=0.001
>
>
>
> cleanEx()
> nameEx("summary.survfit")
> ### * summary.survfit
>
> flush(stderr()); flush(stdout())
>
> ### Name: summary.survfit
> ### Title: Summary of a Survival Curve
> ### Aliases: summary.survfit summary.survfitms
> ### Keywords: survival
>
> ### ** Examples
>
> summary( survfit( Surv(futime, fustat)~1, data=ovarian))
Call: survfit(formula = Surv(futime, fustat) ~ 1, data = ovarian)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
59 26 1 0.962 0.0377 0.890 1.000
115 25 1 0.923 0.0523 0.826 1.000
156 24 1 0.885 0.0627 0.770 1.000
268 23 1 0.846 0.0708 0.718 0.997
329 22 1 0.808 0.0773 0.670 0.974
353 21 1 0.769 0.0826 0.623 0.949
365 20 1 0.731 0.0870 0.579 0.923
431 17 1 0.688 0.0919 0.529 0.894
464 15 1 0.642 0.0965 0.478 0.862
475 14 1 0.596 0.0999 0.429 0.828
563 12 1 0.546 0.1032 0.377 0.791
638 11 1 0.497 0.1051 0.328 0.752
> summary( survfit( Surv(futime, fustat)~rx, data=ovarian))
Call: survfit(formula = Surv(futime, fustat) ~ rx, data = ovarian)
rx=1
time n.risk n.event survival std.err lower 95% CI upper 95% CI
59 13 1 0.923 0.0739 0.789 1.000
115 12 1 0.846 0.1001 0.671 1.000
156 11 1 0.769 0.1169 0.571 1.000
268 10 1 0.692 0.1280 0.482 0.995
329 9 1 0.615 0.1349 0.400 0.946
431 8 1 0.538 0.1383 0.326 0.891
638 5 1 0.431 0.1467 0.221 0.840
rx=2
time n.risk n.event survival std.err lower 95% CI upper 95% CI
353 13 1 0.923 0.0739 0.789 1.000
365 12 1 0.846 0.1001 0.671 1.000
464 9 1 0.752 0.1256 0.542 1.000
475 8 1 0.658 0.1407 0.433 1.000
563 7 1 0.564 0.1488 0.336 0.946
>
>
>
> cleanEx()
> nameEx("survSplit")
> ### * survSplit
>
> flush(stderr()); flush(stdout())
>
> ### Name: survSplit
> ### Title: Split a survival data set at specified times
> ### Aliases: survSplit
> ### Keywords: survival utilities
>
> ### ** Examples
>
> fit1 <- coxph(Surv(time, status) ~ karno + age + trt, veteran)
> plot(cox.zph(fit1)[1])
> # a cox.zph plot of the data suggests that the effect of Karnofsky score
> # begins to diminish by 60 days and has faded away by 120 days.
> # Fit a model with separate coefficients for the three intervals.
> #
> vet2 <- survSplit(Surv(time, status) ~., veteran,
+ cut=c(60, 120), episode ="timegroup")
> fit2 <- coxph(Surv(tstart, time, status) ~ karno* strata(timegroup) +
+ age + trt, data= vet2)
> c(overall= coef(fit1)[1],
+ t0_60 = coef(fit2)[1],
+ t60_120= sum(coef(fit2)[c(1,4)]),
+ t120 = sum(coef(fit2)[c(1,5)]))
overall.karno t0_60.karno t60_120 t120
-0.034443897 -0.049176157 -0.011031558 -0.007629841
>
> # Sometimes we want to split on one scale and analyse on another
> # Add a "current age" variable to the mgus2 data set.
> temp1 <- mgus2
> temp1$endage <- mgus2$age + mgus2$futime/12 # futime is in months
> temp1$startage <- temp1$age
> temp2 <- survSplit(Surv(age, endage, death) ~ ., temp1, cut=25:100,
+ start= "age1", end= "age2")
>
> # restore the time since enrollment scale
> temp2$time1 <- (temp2$age1 - temp2$startage)*12
> temp2$time2 <- (temp2$age2 - temp2$startage)*12
>
> # In this data set, initial age and current age have similar utility
> mfit1 <- coxph(Surv(futime, death) ~ age + sex, data=mgus2)
> mfit2 <- coxph(Surv(time1, time2, death) ~ age1 + sex, data=temp2)
>
>
>
> cleanEx()
> nameEx("survcondense")
> ### * survcondense
>
> flush(stderr()); flush(stdout())
>
> ### Name: survcondense
> ### Title: Shorten a (time1, time2) survival dataset
> ### Aliases: survcondense
> ### Keywords: survival
>
> ### ** Examples
>
> dim(aml)
[1] 23 3
> test1 <- survSplit(Surv(time, status) ~ ., data=aml,
+ cut=c(10, 20, 30), id="newid")
> dim(test1)
[1] 62 5
>
> # remove the added rows
> test2 <- survcondense(Surv(tstart, time, status) ~ x, test1, id=newid)
> dim(test2)
[1] 23 5
>
>
>
> cleanEx()
> nameEx("survdiff")
> ### * survdiff
>
> flush(stderr()); flush(stdout())
>
> ### Name: survdiff
> ### Title: Test Survival Curve Differences
> ### Aliases: survdiff print.survdiff
> ### Keywords: survival
>
> ### ** Examples
>
> ## Two-sample test
> survdiff(Surv(futime, fustat) ~ rx,data=ovarian)
Call:
survdiff(formula = Surv(futime, fustat) ~ rx, data = ovarian)
N Observed Expected (O-E)^2/E (O-E)^2/V
rx=1 13 7 5.23 0.596 1.06
rx=2 13 5 6.77 0.461 1.06
Chisq= 1.1 on 1 degrees of freedom, p= 0.3
>
> ## Stratified 7-sample test
>
> survdiff(Surv(time, status) ~ pat.karno + strata(inst), data=lung)
Call:
survdiff(formula = Surv(time, status) ~ pat.karno + strata(inst),
data = lung)
n=224, 4 observations deleted due to missingness.
N Observed Expected (O-E)^2/E (O-E)^2/V
pat.karno=30 2 1 0.692 0.13720 0.15752
pat.karno=40 2 1 1.099 0.00889 0.00973
pat.karno=50 4 4 1.166 6.88314 7.45359
pat.karno=60 30 27 16.298 7.02790 9.57333
pat.karno=70 41 31 26.358 0.81742 1.14774
pat.karno=80 50 38 41.938 0.36978 0.60032
pat.karno=90 60 38 47.242 1.80800 3.23078
pat.karno=100 35 21 26.207 1.03451 1.44067
Chisq= 21.4 on 7 degrees of freedom, p= 0.003
>
> ## Expected survival for heart transplant patients based on
> ## US mortality tables
> expect <- survexp(futime ~ 1, data=jasa, cohort=FALSE,
+ rmap= list(age=(accept.dt - birth.dt), sex=1, year=accept.dt),
+ ratetable=survexp.us)
> ## actual survival is much worse (no surprise)
> survdiff(Surv(jasa$futime, jasa$fustat) ~ offset(expect))
Call:
survdiff(formula = Surv(jasa$futime, jasa$fustat) ~ offset(expect))
Observed Expected Z p
75.000 0.644 -92.681 0.000
>
> # The free light chain data set is close to the population.
> e2 <- survexp(futime ~ 1, data=flchain, cohort=FALSE,
+ rmap= list(age= age*365.25, sex=sex,
+ year=as.Date(paste0(sample.yr, "-07-01"))),
+ ratetable= survexp.mn)
> survdiff(Surv(futime, death) ~ offset(e2), flchain)
Call:
survdiff(formula = Surv(futime, death) ~ offset(e2), data = flchain)
Observed Expected Z p
2169.0000 2076.8776 -2.0214 0.0432
>
>
>
> cleanEx()
> nameEx("survexp")
> ### * survexp
>
> flush(stderr()); flush(stdout())
>
> ### Name: survexp
> ### Title: Compute Expected Survival
> ### Aliases: survexp print.survexp
> ### Keywords: survival
>
> ### ** Examples
>
> #
> # Stanford heart transplant data
> # We don't have sex in the data set, but know it to be nearly all males.
> # Estimate of conditional survival
> fit1 <- survexp(futime ~ 1, rmap=list(sex="male", year=accept.dt,
+ age=(accept.dt-birth.dt)), method='conditional', data=jasa)
> summary(fit1, times=1:10*182.5, scale=365) #expected survival by 1/2 years
Call: survexp(formula = futime ~ 1, data = jasa, rmap = list(sex = "male",
year = accept.dt, age = (accept.dt - birth.dt)), method = "conditional")
time n.risk survival
0.5 41 0.996
1.0 28 0.993
1.5 21 0.989
2.0 16 0.986
2.5 13 0.983
3.0 8 0.980
3.5 7 0.977
4.0 3 0.972
4.5 1 0.969
>
> # Estimate of expected survival stratified by prior surgery
> survexp(~ surgery, rmap= list(sex="male", year=accept.dt,
+ age=(accept.dt-birth.dt)), method='ederer', data=jasa,
+ times=1:10 * 182.5)
Call:
survexp(formula = ~surgery, data = jasa, rmap = list(sex = "male",
year = accept.dt, age = (accept.dt - birth.dt)), times = 1:10 *
182.5, method = "ederer")
age ranges from 8.8 to 64.4 years
male: 103 female: 0
date of entry from 1967-09-13 to 1974-03-22
time nrisk1 nrisk2 surgery=0 surgery=1
182 87 16 0.996 0.996
365 87 16 0.991 0.993
548 87 16 0.987 0.989
730 87 16 0.982 0.985
912 87 16 0.978 0.981
1095 87 16 0.973 0.977
1278 87 16 0.968 0.973
1460 87 16 0.963 0.969
1642 87 16 0.958 0.964
1825 87 16 0.952 0.960
>
> ## Compare the survival curves for the Mayo PBC data to Cox model fit
> ##
> pfit <-coxph(Surv(time,status>0) ~ trt + log(bili) + log(protime) + age +
+ platelet, data=pbc)
> plot(survfit(Surv(time, status>0) ~ trt, data=pbc), mark.time=FALSE)
> lines(survexp( ~ trt, ratetable=pfit, data=pbc), col='purple')
>
>
>
> cleanEx()
> nameEx("survexp.us")
> ### * survexp.us
>
> flush(stderr()); flush(stdout())
>
> ### Name: ratetables
> ### Title: Census Data Sets for the Expected Survival and Person Years
> ### Functions
> ### Aliases: survexp.us survexp.usr survexp.mn
> ### Keywords: survival datasets
>
> ### ** Examples
>
> survexp.uswhite <- survexp.usr[,,"white",]
>
>
>
> cleanEx()
> nameEx("survfit.formula")
> ### * survfit.formula
>
> flush(stderr()); flush(stdout())
>
> ### Name: survfit.formula
> ### Title: Compute a Survival Curve for Censored Data
> ### Aliases: survfit.formula [.survfit
> ### Keywords: survival
>
> ### ** Examples
>
> #fit a Kaplan-Meier and plot it
> fit <- survfit(Surv(time, status) ~ x, data = aml)
> plot(fit, lty = 2:3)
> legend(100, .8, c("Maintained", "Nonmaintained"), lty = 2:3)
>
> #fit a Cox proportional hazards model and plot the
> #predicted survival for a 60 year old
> fit <- coxph(Surv(futime, fustat) ~ age, data = ovarian)
> plot(survfit(fit, newdata=data.frame(age=60)),
+ xscale=365.25, xlab = "Years", ylab="Survival")
>
> # Here is the data set from Turnbull
> # There are no interval censored subjects, only left-censored (status=3),
> # right-censored (status 0) and observed events (status 1)
> #
> # Time
> # 1 2 3 4
> # Type of observation
> # death 12 6 2 3
> # losses 3 2 0 3
> # late entry 2 4 2 5
> #
> tdata <- data.frame(time =c(1,1,1,2,2,2,3,3,3,4,4,4),
+ status=rep(c(1,0,2),4),
+ n =c(12,3,2,6,2,4,2,0,2,3,3,5))
> fit <- survfit(Surv(time, time, status, type='interval') ~1,
+ data=tdata, weight=n)
>
> #
> # Three curves for patients with monoclonal gammopathy.
> # 1. KM of time to PCM, ignoring death (statistically incorrect)
> # 2. Competing risk curves (also known as "cumulative incidence")
> # 3. Multi-state, showing Pr(in each state, at time t)
> #
> fitKM <- survfit(Surv(stop, event=='pcm') ~1, data=mgus1,
+ subset=(start==0))
> fitCR <- survfit(Surv(stop, event) ~1,
+ data=mgus1, subset=(start==0))
> fitMS <- survfit(Surv(start, stop, event) ~ 1, id=id, data=mgus1)
> ## Not run:
> ##D # CR curves show the competing risks
> ##D plot(fitCR, xscale=365.25, xmax=7300, mark.time=FALSE,
> ##D col=2:3, xlab="Years post diagnosis of MGUS",
> ##D ylab="P(state)")
> ##D lines(fitKM, fun='event', xmax=7300, mark.time=FALSE,
> ##D conf.int=FALSE)
> ##D text(3652, .4, "Competing risk: death", col=3)
> ##D text(5840, .15,"Competing risk: progression", col=2)
> ##D text(5480, .30,"KM:prog")
> ## End(Not run)
>
>
>
> cleanEx()
> nameEx("survfit.matrix")
> ### * survfit.matrix
>
> flush(stderr()); flush(stdout())
>
> ### Name: survfit.matrix
> ### Title: Create Aalen-Johansen estimates of multi-state survival from a
> ### matrix of hazards.
> ### Aliases: survfit.matrix
> ### Keywords: survival
>
> ### ** Examples
>
> etime <- with(mgus2, ifelse(pstat==0, futime, ptime))
> event <- with(mgus2, ifelse(pstat==0, 2*death, 1))
> event <- factor(event, 0:2, labels=c("censor", "pcm", "death"))
>
> cfit1 <- coxph(Surv(etime, event=="pcm") ~ age + sex, mgus2)
> cfit2 <- coxph(Surv(etime, event=="death") ~ age + sex, mgus2)
>
> # predicted competing risk curves for a 72 year old with mspike of 1.2
> # (median values), male and female.
> # The survfit call is a bit faster without standard errors.
> newdata <- expand.grid(sex=c("F", "M"), age=72, mspike=1.2)
>
> AJmat <- matrix(list(), 3,3)
> AJmat[1,2] <- list(survfit(cfit1, newdata, std.err=FALSE))
> AJmat[1,3] <- list(survfit(cfit2, newdata, std.err=FALSE))
> csurv <- survfit(AJmat, p0 =c(entry=1, PCM=0, death=0))
>
>
>
> cleanEx()
> nameEx("survobrien")
> ### * survobrien
>
> flush(stderr()); flush(stdout())
>
> ### Name: survobrien
> ### Title: O'Brien's Test for Association of a Single Variable with
> ### Survival
> ### Aliases: survobrien
> ### Keywords: survival
>
> ### ** Examples
>
> xx <- survobrien(Surv(futime, fustat) ~ age + factor(rx) + I(ecog.ps),
+ data=ovarian)
> coxph(Surv(time, status) ~ age + strata(.strata.), data=xx)
Call:
coxph(formula = Surv(time, status) ~ age + strata(.strata.),
data = xx)
coef exp(coef) se(coef) z p
age 0.5681 1.7649 0.1816 3.128 0.00176
Likelihood ratio test=10.55 on 1 df, p=0.001165
n= 230, number of events= 12
>
>
>
> cleanEx()
> nameEx("survreg")
> ### * survreg
>
> flush(stderr()); flush(stdout())
>
> ### Name: survreg
> ### Title: Regression for a Parametric Survival Model
> ### Aliases: survreg model.frame.survreg labels.survreg print.survreg.penal
> ### print.summary.survreg survReg anova.survreg anova.survreglist
> ### Keywords: survival
>
> ### ** Examples
>
> # Fit an exponential model: the two fits are the same
> survreg(Surv(futime, fustat) ~ ecog.ps + rx, ovarian, dist='weibull',
+ scale=1)
Call:
survreg(formula = Surv(futime, fustat) ~ ecog.ps + rx, data = ovarian,
dist = "weibull", scale = 1)
Coefficients:
(Intercept) ecog.ps rx
6.9618376 -0.4331347 0.5815027
Scale fixed at 1
Loglik(model)= -97.2 Loglik(intercept only)= -98
Chisq= 1.67 on 2 degrees of freedom, p= 0.434
n= 26
> survreg(Surv(futime, fustat) ~ ecog.ps + rx, ovarian,
+ dist="exponential")
Call:
survreg(formula = Surv(futime, fustat) ~ ecog.ps + rx, data = ovarian,
dist = "exponential")
Coefficients:
(Intercept) ecog.ps rx
6.9618376 -0.4331347 0.5815027
Scale fixed at 1
Loglik(model)= -97.2 Loglik(intercept only)= -98
Chisq= 1.67 on 2 degrees of freedom, p= 0.434
n= 26
>
> #
> # A model with different baseline survival shapes for two groups, i.e.,
> # two different scale parameters
> survreg(Surv(time, status) ~ ph.ecog + age + strata(sex), lung)
Call:
survreg(formula = Surv(time, status) ~ ph.ecog + age + strata(sex),
data = lung)
Coefficients:
(Intercept) ph.ecog age
6.73234505 -0.32443043 -0.00580889
Scale:
sex=1 sex=2
0.7834211 0.6547830
Loglik(model)= -1137.3 Loglik(intercept only)= -1146.2
Chisq= 17.8 on 2 degrees of freedom, p= 0.000137
n=227 (1 observation deleted due to missingness)
>
> # There are multiple ways to parameterize a Weibull distribution. The survreg
> # function embeds it in a general location-scale family, which is a
> # different parameterization than the rweibull function, and often leads
> # to confusion.
> # survreg's scale = 1/(rweibull shape)
> # survreg's intercept = log(rweibull scale)
> # For the log-likelihood all parameterizations lead to the same value.
> y <- rweibull(1000, shape=2, scale=5)
> survreg(Surv(y)~1, dist="weibull")
Call:
survreg(formula = Surv(y) ~ 1, dist = "weibull")
Coefficients:
(Intercept)
1.604435
Scale= 0.4965001
Loglik(model)= -2199.4 Loglik(intercept only)= -2199.4
n= 1000
>
> # Economists fit a model called `tobit regression', which is a standard
> # linear regression with Gaussian errors, and left censored data.
> tobinfit <- survreg(Surv(durable, durable>0, type='left') ~ age + quant,
+ data=tobin, dist='gaussian')
>
>
>
> cleanEx()
> nameEx("survreg.distributions")
> ### * survreg.distributions
>
> flush(stderr()); flush(stdout())
>
> ### Name: survreg.distributions
> ### Title: Parametric Survival Distributions
> ### Aliases: survreg.distributions
> ### Keywords: survival
>
> ### ** Examples
>
> # time transformation
> survreg(Surv(time, status) ~ ph.ecog + sex, dist='weibull', data=lung)
Call:
survreg(formula = Surv(time, status) ~ ph.ecog + sex, data = lung,
dist = "weibull")
Coefficients:
(Intercept) ph.ecog sex
5.8195907 -0.3557319 0.4013684
Scale= 0.7310495
Loglik(model)= -1133.1 Loglik(intercept only)= -1147.4
Chisq= 28.73 on 2 degrees of freedom, p= 5.76e-07
n=227 (1 observation deleted due to missingness)
> # change the transformation to work in years
> # intercept changes by log(365), everything else stays the same
> my.weibull <- survreg.distributions$weibull
> my.weibull$trans <- function(y) log(y/365)
> my.weibull$itrans <- function(y) 365*exp(y)
> survreg(Surv(time, status) ~ ph.ecog + sex, lung, dist=my.weibull)
Call:
survreg(formula = Surv(time, status) ~ ph.ecog + sex, data = lung,
dist = my.weibull)
Coefficients:
(Intercept) ph.ecog sex
-0.08030664 -0.35573188 0.40136844
Scale= 0.7310495
Loglik(model)= -1133.1 Loglik(intercept only)= -1147.4
Chisq= 28.73 on 2 degrees of freedom, p= 5.76e-07
n=227 (1 observation deleted due to missingness)
>
> # Weibull parametrisation
> y<-rweibull(1000, shape=2, scale=5)
> survreg(Surv(y)~1, dist="weibull")
Call:
survreg(formula = Surv(y) ~ 1, dist = "weibull")
Coefficients:
(Intercept)
1.604435
Scale= 0.4965001
Loglik(model)= -2199.4 Loglik(intercept only)= -2199.4
n= 1000
> # survreg scale parameter maps to 1/shape, linear predictor to log(scale)
>
> # Cauchy fit
> mycauchy <- list(name='Cauchy',
+ init= function(x, weights, ...)
+ c(median(x), mad(x)),
+ density= function(x, parms) {
+ temp <- 1/(1 + x^2)
+ cbind(.5 + atan(x)/pi, .5+ atan(-x)/pi,
+ temp/pi, -2 *x*temp, 2*temp*(4*x^2*temp -1))
+ },
+ quantile= function(p, parms) tan((p-.5)*pi),
+ deviance= function(...) stop('deviance residuals not defined')
+ )
> survreg(Surv(log(time), status) ~ ph.ecog + sex, lung, dist=mycauchy)
Call:
survreg(formula = Surv(log(time), status) ~ ph.ecog + sex, data = lung,
dist = mycauchy)
Coefficients:
(Intercept) ph.ecog sex
5.4517240 -0.3979387 0.4692383
Scale= 0.4788955
Loglik(model)= -274.6 Loglik(intercept only)= -294.9
Chisq= 40.75 on 2 degrees of freedom, p= 1.42e-09
n=227 (1 observation deleted due to missingness)
>
>
>
> cleanEx()
> nameEx("survregDtest")
> ### * survregDtest
>
> flush(stderr()); flush(stdout())
>
> ### Name: survregDtest
> ### Title: Verify a survreg distribution
> ### Aliases: survregDtest
> ### Keywords: survival
>
> ### ** Examples
>
> # An invalid distribution (it should have "init =" on line 2)
> # surveg would give an error message
> mycauchy <- list(name='Cauchy',
+ init<- function(x, weights, ...)
+ c(median(x), mad(x)),
+ density= function(x, parms) {
+ temp <- 1/(1 + x^2)
+ cbind(.5 + atan(temp)/pi, .5+ atan(-temp)/pi,
+ temp/pi, -2 *x*temp, 2*temp^2*(4*x^2*temp -1))
+ },
+ quantile= function(p, parms) tan((p-.5)*pi),
+ deviance= function(...) stop('deviance residuals not defined')
+ )
>
> survregDtest(mycauchy, TRUE)
[1] "Missing or invalid init function"
>
>
>
> cleanEx()
> nameEx("tcut")
> ### * tcut
>
> flush(stderr()); flush(stdout())
>
> ### Name: tcut
> ### Title: Factors for person-year calculations
> ### Aliases: tcut [.tcut levels.tcut
> ### Keywords: survival
>
> ### ** Examples
>
> # For pyears, all time variable need to be on the same scale; but
> # futime is in months and age is in years
> test <- mgus2
> test$years <- test$futime/30.5 # follow-up in years
>
> # first grouping based on years from starting age (= current age)
> # second based on years since enrollment (all start at 0)
> test$agegrp <- tcut(test$age, c(0,60, 70, 80, 100),
+ c("<=60", "60-70", "70-80", ">80"))
> test$fgrp <- tcut(rep(0, nrow(test)), c(0, 1, 5, 10, 100),
+ c("0-1yr", "1-5yr", "5-10yr", ">10yr"))
>
> # death rates per 1000, by age group
> pfit1 <- pyears(Surv(years, death) ~ agegrp, scale =1000, data=test)
> round(pfit1$event/ pfit1$pyears)
agegrp
<=60 60-70 70-80 >80
89 128 245 479
>
> #death rates per 100, by follow-up year and age
> # there are excess deaths in the first year, within each age stratum
> pfit2 <- pyears(Surv(years, death) ~ fgrp + agegrp, scale =1000, data=test)
> round(pfit2$event/ pfit2$pyears)
agegrp
fgrp <=60 60-70 70-80 >80
0-1yr 139 137 234 437
1-5yr 68 117 241 499
5-10yr 91 145 300 476
>10yr 0 424 0 2440
>
>
>
> cleanEx()
> nameEx("tmerge")
> ### * tmerge
>
> flush(stderr()); flush(stdout())
>
> ### Name: tmerge
> ### Title: Time based merge for survival data
> ### Aliases: tmerge
> ### Keywords: survival
>
> ### ** Examples
>
> # The pbc data set contains baseline data and follow-up status
> # for a set of subjects with primary biliary cirrhosis, while the
> # pbcseq data set contains repeated laboratory values for those
> # subjects.
> # The first data set contains data on 312 subjects in a clinical trial plus
> # 106 that agreed to be followed off protocol, the second data set has data
> # only on the trial subjects.
> temp <- subset(pbc, id <= 312, select=c(id:sex, stage)) # baseline data
> pbc2 <- tmerge(temp, temp, id=id, endpt = event(time, status))
> pbc2 <- tmerge(pbc2, pbcseq, id=id, ascites = tdc(day, ascites),
+ bili = tdc(day, bili), albumin = tdc(day, albumin),
+ protime = tdc(day, protime), alk.phos = tdc(day, alk.phos))
>
> fit <- coxph(Surv(tstart, tstop, endpt==2) ~ protime + log(bili), data=pbc2)
>
>
>
> cleanEx()
> nameEx("tobin")
> ### * tobin
>
> flush(stderr()); flush(stdout())
>
> ### Name: tobin
> ### Title: Tobin's Tobit data
> ### Aliases: tobin
> ### Keywords: datasets
>
> ### ** Examples
>
> tfit <- survreg(Surv(durable, durable>0, type='left') ~age + quant,
+ data=tobin, dist='gaussian')
>
> predict(tfit,type="response")
[1] -3.04968679 -4.31254182 -0.54163315 -0.25607164 -1.85017727 -2.40987803
[7] -3.50629220 -0.74041486 -4.05145594 -3.55880518 -0.32223237 -3.68044619
[13] -3.65997456 -2.63254564 0.22382063 0.02177674 -0.09571284 -3.17696755
[19] -0.61521215 -3.13913903
>
>
>
>
> cleanEx()
> nameEx("transplant")
> ### * transplant
>
> flush(stderr()); flush(stdout())
>
> ### Name: transplant
> ### Title: Liver transplant waiting list
> ### Aliases: transplant
> ### Keywords: datasets
>
> ### ** Examples
>
> #since event is a factor, survfit creates competing risk curves
> pfit <- survfit(Surv(futime, event) ~ abo, transplant)
> pfit[,2] #time to liver transplant, by blood type
Call: survfit(formula = Surv(futime, event) ~ abo, data = transplant)
n nevent rmean se(rmean)*
abo=A, death 325 21 164.9734 17.49968
abo=B, death 103 10 202.4902 59.61134
abo=AB, death 41 3 137.8293 19.65319
abo=O, death 346 32 182.1075 28.17050
*restricted mean time in state (max time = 2055 )
> plot(pfit[,2], mark.time=FALSE, col=1:4, lwd=2, xmax=735,
+ xscale=30.5, xlab="Months", ylab="Fraction transplanted",
+ xaxt = 'n')
> temp <- c(0, 6, 12, 18, 24)
> axis(1, temp*30.5, temp)
> legend(450, .35, levels(transplant$abo), lty=1, col=1:4, lwd=2)
>
> # competing risks for type O
> plot(pfit[4,], xscale=30.5, xmax=735, col=1:3, lwd=2)
> legend(450, .4, c("Death", "Transpant", "Withdrawal"), col=1:3, lwd=2)
>
>
>
> cleanEx()
> nameEx("udca")
> ### * udca
>
> flush(stderr()); flush(stdout())
>
> ### Name: udca
> ### Title: Data from a trial of usrodeoxycholic acid
> ### Aliases: udca udca1 udca2
> ### Keywords: datasets
>
> ### ** Examples
>
> # values found in table 8.3 of the book
> fit1 <- coxph(Surv(futime, status) ~ trt + log(bili) + stage,
+ cluster =id , data=udca1)
> fit2 <- coxph(Surv(futime, status) ~ trt + log(bili) + stage +
+ strata(endpoint), cluster=id, data=udca2)
>
>
>
>
> cleanEx()
> nameEx("untangle.specials")
> ### * untangle.specials
>
> flush(stderr()); flush(stdout())
>
> ### Name: untangle.specials
> ### Title: Help Process the 'specials' Argument of the 'terms' Function.
> ### Aliases: untangle.specials
> ### Keywords: survival
>
> ### ** Examples
>
> formula <- Surv(tt,ss) ~ x + z*strata(id)
> tms <- terms(formula, specials="strata")
> ## the specials attribute
> attr(tms, "specials")
$strata
[1] 4
> ## main effects
> untangle.specials(tms, "strata")
$vars
[1] "strata(id)"
$tvar
[1] 3
$terms
[1] 3
> ## and interactions
> untangle.specials(tms, "strata", order=1:2)
$vars
[1] "strata(id)"
$tvar
[1] 3
$terms
[1] 3 4
>
>
>
> cleanEx()
> nameEx("uspop2")
> ### * uspop2
>
> flush(stderr()); flush(stdout())
>
> ### Name: uspop2
> ### Title: Projected US Population
> ### Aliases: uspop2
> ### Keywords: datasets
>
> ### ** Examples
>
> us50 <- uspop2[51:101,, "2000"] #US 2000 population, 50 and over
> age <- as.integer(dimnames(us50)[[1]])
> smat <- model.matrix( ~ factor(floor(age/5)) -1)
> ustot <- t(smat) %*% us50 #totals by 5 year age groups
> temp <- c(50,55, 60, 65, 70, 75, 80, 85, 90, 95)
> dimnames(ustot) <- list(c(paste(temp, temp+4, sep="-"), "100+"),
+ c("male", "female"))
>
>
>
> cleanEx()
> nameEx("xtfrm.Surv")
> ### * xtfrm.Surv
>
> flush(stderr()); flush(stdout())
>
> ### Name: xtfrm.Surv
> ### Title: Sorting order for Surv objects
> ### Aliases: xtfrm.Surv sort.Surv order.Surv
> ### Keywords: survival
>
> ### ** Examples
>
> test <- c(Surv(c(10, 9,9, 8,8,8,7,5,5,4), rep(1:0, 5)), Surv(6.2, NA))
> test
[1] 10.0 9.0+ 9.0 8.0+ 8.0 8.0+ 7.0 5.0+ 5.0 4.0+ 6.2?
> sort(test)
[1] 4+ 5 5+ 7 8 8+ 8+ 9 9+ 10
>
>
>
> cleanEx()
> nameEx("yates")
> ### * yates
>
> flush(stderr()); flush(stdout())
>
> ### Name: yates
> ### Title: Population prediction
> ### Aliases: yates
> ### Keywords: models survival
>
> ### ** Examples
>
> fit1 <- lm(skips ~ Solder*Opening + Mask, data = solder)
> yates(fit1, ~Opening, population = "factorial")
Opening pmm std test chisq df ss Pr
L 3.2638 0.33460 global 573.4 2 15980 < 1e-08
M 3.5700 0.30480
S 12.3519 0.31251
>
> fit2 <- coxph(Surv(time, status) ~ factor(ph.ecog)*sex + age, lung)
> yates(fit2, ~ ph.ecog, predict="risk") # hazard ratio
factor(ph.ecog) pmm std test chisq df Pr
0 0.94238 0.46334 factor(ph.ecog) NA NA NA
1 1.42677 0.75697
2 1.74848 3.80017
3 NA 74.01221
>
>
>
> ### * <FOOTER>
> ###
> cleanEx()
> options(digits = 7L)
> base::cat("Time elapsed: ", proc.time() - base::get("ptime", pos = 'CheckExEnv'),"\n")
Time elapsed: 2.718 0.085 2.802 0 0
> grDevices::dev.off()
null device
1
> ###
> ### Local variables: ***
> ### mode: outline-minor ***
> ### outline-regexp: "\\(> \\)?### [*]+" ***
> ### End: ***
> quit('no')