R Under development (unstable) (2023-08-12 r84939 ucrt) -- "Unsuffered Consequences" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 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. 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. > # > # Ensure that factors work in prediction > # > library(survival) > > options(na.action="na.exclude") # preserve missings > options(contrasts=c('contr.treatment', 'contr.poly')) #ensure constrast type > aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) > > tfit <- coxph(Surv(time, status) ~ age + factor(ph.ecog), lung) > p1 <- predict(tfit, type='risk') > > # Testing NA handling is important too > keep <- (is.na(lung$ph.ecog) | lung$ph.ecog !=1) > lung2 <- lung[keep,] > p2 <- predict(tfit, type='risk', newdata=lung[keep,]) > aeq(p1[keep], p2) [1] TRUE > > # Same, for survreg > tfit <- survreg(Surv(time, status) ~ age + factor(ph.ecog), lung) > p1 <- predict(tfit, type='response') > p2 <- predict(tfit, type='response', newdata=lung2) > aeq(p1[keep], p2) [1] TRUE > > > # Now repeat it tossing the missings > options(na.action=na.omit) > keep2 <- (lung$ph.ecog[!is.na(lung$ph.ecog)] !=1) > > tfit2 <- survreg(Surv(time, status) ~ age + factor(ph.ecog), lung) > p3 <- predict(tfit2, type='response') > p4 <- predict(tfit2, type='response', newdata=lung2, na.action=na.omit) > aeq(p3[keep2] , p4) [1] TRUE > > proc.time() user system elapsed 1.14 0.12 1.25