Search code examples
rsurvival-analysismarkov-chains

How to calculate mean sojourn time in each nonabsorbing state using R package MSTATE


I am working on a survival analysis and cannot seem to figure out how do to this.

From the MSTATE tutorial the following is a block of code for as simple Cox-regression.
How does one calculate the mean sojourn time in each nonabsorbing state?

Code:

library(mstate)
data(ebmt3)
tmat <- trans.illdeath(names=c("Tx","PR","RelDeath"))
ebmt3$prtime <- ebmt3$prtime/365.25
ebmt3$rfstime <- ebmt3$rfstime/365.25
covs <- c("dissub", "age", "drmatch", "tcd", "prtime")
msbmt <- msprep(time = c(NA, "prtime", "rfstime"), status = c(NA, "prstat", "rfsstat"), data = ebmt3, trans = tmat, keep = covs)
expcovs <- expand.covs(msbmt, covs[2:3], append = FALSE)
msbmt <- expand.covs(msbmt, covs, append = TRUE, longnames = FALSE)
c1 <- coxph(Surv(Tstart, Tstop, status) ~ dissub1.1 + dissub2.1 +
 age1.1 + age2.1 + drmatch.1 + tcd.1 + dissub1.2 + dissub2.2 +
 age1.2 + age2.2 + drmatch.2 + tcd.2 + dissub1.3 + dissub2.3 +
 age1.3 + age2.3 + drmatch.3 + tcd.3 + strata(trans), data = msbmt,
 method = "breslow")

newd <- data.frame(dissub = rep(0, 3), age = rep(0, 3), drmatch = rep(0,
 3), tcd = rep(0, 3), trans = 1:3)
 newd$dissub <- factor(newd$dissub, levels = 0:2, labels = levels(ebmt3$dissub))
 newd$age <- factor(newd$age, levels = 0:2, labels = levels(ebmt3$age))
 newd$drmatch <- factor(newd$drmatch, levels = 0:1, labels = levels(ebmt3$drmatch))
 newd$tcd <- factor(newd$tcd, levels = 0:1, labels = levels(ebmt3$tcd))
 attr(newd, "trans") <- tmat
 class(newd) <- c("msdata", "data.frame")
 newd <- expand.covs(newd, covs[1:4], longnames = FALSE)
 newd$strata = 1:3
 newd
 msf1 <- msfit(c1, newdata = newd, trans = tmat)

Thanks!


Solution

  • I think you are looking for the ELOS function in mstate - it stands for the Expected Length of Stay in a state - to complete your example you would need to calculate the transition probabilities using probtrans and then you can calculate ELOS for every state.

    pt <- probtrans(msf1,predt=0)
    # ELOS until last observed time point
    ELOS(pt)