#### Functions that summarise outputs from fmsm multi-state model objects ## Three state competing risks model for testing functions that only work on ## Markov models tmat <- rbind(c(NA,1,2),c(NA,NA,NA),c(NA,NA,NA)) set.seed(1) bosms3$x <- rnorm(nrow(bosms3)) bweic <- bweim <- vector(2, mode="list") for (i in 1:2) { bweic[[i]] <- flexsurvreg(Surv(years, status) ~ x, subset=(trans==i), data = bosms3, dist = "weibull") bweim[[i]] <- flexsurvreg(Surv(years, status) ~ 1, subset=(trans==i), data = bosms3, dist = "weibull") } weic <- fmsm("Well-BOS"=bweic[[1]], "Well-Death"=bweic[[2]], trans=tmat) weim <- fmsm("Well-BOS"=bweim[[1]], "Well-Death"=bweim[[2]], trans=tmat) nd <- data.frame(x=c(0,0.01,-10,10)) test_that("pfinal_fmsm", { expect_equal(pfinal_fmsm(weim, fromstate="State 1")$val, c(0.717737627151196, 0.282262372848804)) expect_error(pfinal_fmsm(weim, fromstate="State 2"), "No destination states") expect_equal(pfinal_fmsm(weic, newdata=nd, fromstate="State 1")$val[1:2], c(0.715828147070156, 0.715333178039627)) expect_true(is.numeric(pfinal_fmsm(weim, fromstate="State 1", B=3)$lower)) expect_equal(pfinal_fmsm(weim, fromstate="State 1", maxt=100000)$val, pfinal_fmsm(weim, fromstate="State 1", maxt=10000000)$val, tolerance=1e-06) expect_error(pfinal_fmsm(weim, fromstate="1"), "not found") }) test_that("simfinal_fmsm",{ set.seed(1) sm <- simfinal_fmsm(weim) expect_equal(sm$val[sm$quantity=="prob"], c(0.71758, 0.28242)) expect_equal(sm$val[sm$quantity=="50%"], c(2.25618202292384, 4.67377970752349)) sm2 <- simfinal_fmsm(weim, probs=c(0.25, 0.75)) sm3 <- simfinal_fmsm(weim, probs=c(0.25, 0.75), t=10000) expect_equal(sm2$val[sm$quantity=="prob"], sm3$val[sm$quantity=="prob"], tolerance=0.1) sm2 <- simfinal_fmsm(weim, probs=c(0.25, 0.75), M=1000, B=10) expect_error(simfinal_fmsm(weic), "`newdata` should be supplied") nd <- data.frame(x=c(0, 0.01)) simfinal_fmsm(weic, newdata=nd) simfinal_fmsm(weic, newdata=nd, M=1000, B=10) }) bosms3$hix <- factor(bosms3$x > 0, labels = c("lo","hi")) test_that("ajfit_fmsm", { expect_equal(ajfit_fmsm(weim, maxt=5)$val[1], 1) expect_error(ajfit_fmsm(weic, maxt=5, newdata=list(x=1)), "Nonparametric estimation not supported with non-factor") weicf <- fmsm( "Well-BOS"=flexsurvreg(Surv(years, status) ~ hix, subset=(trans==1), data = bosms3, dist = "weibull"), "Well-Death"=flexsurvreg(Surv(years, status) ~ hix, subset=(trans==2), data = bosms3, dist = "weibull"), trans=tmat ) expect_equal(ajfit_fmsm(weicf, maxt=5)$val[1], 1) expect_equal(ajfit_fmsm(weicf, maxt=5, newdata=data.frame(hix="lo"))$val[1], 1) weicfd <- fmsm( "Well-BOS"=flexsurvreg(Surv(years, status) ~ hix, subset=(trans==1), data = bosms3, dist = "weibull"), "Well-Death"=flexsurvreg(Surv(years, status) ~ 1, subset=(trans==2), data = bosms3, dist = "weibull"), trans=tmat ) expect_error(ajfit_fmsm(weicfd, maxt=5), "Not currently supported with different covariates on different transitions") })