library(dplyr, warn.conflicts = FALSE) library(survival) testthat::test_that("phregr: handling ties", { pbc <- pbc %>% mutate(event = 1*(status == 2)) for (ties in c("breslow", "efron")) { fit1 <- phregr(pbc, time="time", event="event", covariates=c("age", "edema", "log(bili)", "log(protime)", "log(albumin)"), ties=ties) fit2 <- coxph(Surv(time, event) ~ age + edema + log(bili) + log(protime) + log(albumin), data=pbc, ties=ties) dimnames(fit1$vbeta) <- NULL testthat::expect_equal(fit1$beta, fit2$coefficients) testthat::expect_equal(fit1$vbeta, fit2$var) } }) testthat::test_that("phregr: counting process form", { heart <- heart %>% mutate(rx = as.numeric(transplant) - 1) fit1 <- phregr(heart, time="start", time2="stop", event="event", covariates=c("rx", "age"), id="id", robust=TRUE) fit2 <- coxph(Surv(start, stop, event) ~ rx + age, cluster=id, data=heart, robust=TRUE) dimnames(fit1$vbeta) <- NULL testthat::expect_equal(as.numeric(fit1$beta), as.numeric(fit2$coefficients)) testthat::expect_equal(fit1$vbeta, fit2$var) testthat::expect_equal(c(fit1$sumstat$loglik0, fit1$sumstat$loglik1), fit2$loglik) testthat::expect_equal(fit1$sumstat$scoretest, fit2$score) }) testthat::test_that("phregr: firth with plci", { # we include the status variable as a predictor to force an infinite beta # in this case, we invoke the firth option to obtain finite beta estimate fit1 <- phregr(ovarian, time="futime", event="fustat", covariates=c("rx", "fustat"), firth=TRUE, plci=TRUE) # coxph does not have the firth option, and we use SAS PROC PHREG # proc phreg data=ovarian; # model futime*fustat(0) = rx fustat / firth risklimits = pl; # run; # to obtain the estimated hazard ratios and 95% profile likelihood CI # of note, although not applicable to the ovarian data, which does not # have ties, SAS PROC PHREG only has the firth option for the Breslow # method for handling ties, while the phregr also has the firth option # for the Efron method for handling ties beta = c(-0.54197, 4.23615) hrlower = c(0.173, 8.771) hrupper = c(1.884, 8936.061) testthat::expect_equal(round(c(fit1$parest$beta, fit1$parest$lower, fit1$parest$upper), 3), round(c(beta, log(c(hrlower, hrupper))), 3)) })