Open mcincam100 opened 10 months ago
The problem is that your transition model doesn't have a death state specified. Try this:
transmod <- create_IndivCtstmTrans(
fits,
input_data = transmod_data,
trans_mat = tmat,
n = 200,
death_state=4
)
The reason no death state is specified is because your tmat
doesn't have any absorbing states so a death state cannot be automatically determined. That said, this is a bug: a much better error message should be displayed alerting you of the problem.
Many thanks Devin, that worked. Cam
Hi, I am doing some practice runs of a flexsurv + hesim simulation, using artificial data. All seems to go well until I hit the ictstm$sim_disease() function, and I get an error:
STEP 1: CREATING HESIM_DAT FILE FROM MULTIPLE CSVs CONTAINING PIECES OF DISEASE PROGRESSION #FRAMEWORK, TO #INITIALIZE THE SIMULATION
Load necessary libraries
library(hesim)
Write strategies.csv
strategies <- data.frame(strategy_id = c(0, 1)) write.csv(strategies, "J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimstrat.csv", row.names = FALSE)
Write patients.csv
set.seed(123) # for reproducibility patients <- data.frame(patient_id = seq(1, 1000), x1 = rbinom(1000, 1, .5), x2 = rbinom(1000, 1, .5), x3 = rbinom(1000, 1, .5)) write.csv(patients, "J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimpat.csv", row.names = FALSE)
Write states.csv
states <- data.frame(state_id = c(1, 2, 3, 4)) write.csv(states, "J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimstat.csv", row.names = FALSE)
Read the .csv files into R
strategies <- read.csv("J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimstrat.csv") patients <- read.csv("J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimpat.csv") states <- read.csv("J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/hesimstat.csv")
Define transitions
tmat <- rbind(c(NA, 1, NA, NA), c(2, NA, 3, NA), c(4, NA, NA, 5), c(6, 7, NA, NA)) colnames(tmat) <- rownames(tmat) <- c("nonCJS", "Police", "Courts", "Corrections") transitions <- create_trans_dt(tmat) transitions[, trans := factor(transition_id)]
Create the hesim_dat object
hesim_dat <- hesim_data(strategies = strategies, patients = patients, states = states, transitions = transitions)
Print the hesim_dat object
print(hesim_dat)
Expand the hesim_dat object into long format
transmod_data <- expand(hesim_dat, by = c("strategies", "patients", "transitions"))
options(max.print = 10000) # Increase max.print to a large number head(transmod_data, 14) # Now this should print 14 rows (can be changed to any desired number)
STEP 2: CREATING FLEXSURV MSTM FIT OBJECT TO ENABLE THE DISEASE PROGRESSION MODEL IN HESIM #(WEIBULL AFT CLOCK-RESET MODEL)
Load necessary libraries
library(flexsurv) library(survival)
Set the seed for reproducibility
set.seed(123)
Generate data for flexsurv analysis
n <- 1000 # Define the number of patients patient_id <- rep(1:n, each = 7) # Each patient has 7 transitions time <- rweibull(n 7, shape = 2, scale = 1) # Modify parameters as needed status <- rbinom(n 7, size = 1, prob = 0.5) trans <- rep(1:7, times = n) # 7 transitions strategy_id <- rep(rbinom(n, size = 1, prob = 0.5), each = 7) x1 <- rep(rbinom(n, size = 1, prob = 0.5), each = 7) x2 <- rep(rbinom(n, size = 1, prob = 0.5), each = 7) x3 <- rep(rbinom(n, size = 1, prob = 0.5), each = 7)
Create data frame
data <- data.frame(patient_id, time, status, trans, strategy_id, x1, x2, x3)
Write to CSV
write.csv(data, file = "J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/flexsurvmod.csv", row.names = FALSE)
Define your transition data
surv_dat <- read.csv("J:/Data Development Unit/Administrative/Analytical Diversification/R Testing/flexsurvmod.csv")
Fit the survival models
fits <- vector(length = max(tmat, na.rm = TRUE), mode = "list") for (i in 1:length(fits)){ fits[[i]] <- flexsurvreg(Surv(time, status) ~ factor(strategy_id), data = surv_dat, subset = (trans == i), dist = "weibull") } fits <- flexsurvreg_list(fits)
STEP 3: CREATING/RUNNING THE DISEASE PROGRESSION MODEL IN HESIM
transmod_data <- expand(hesim_dat) transmod <- create_IndivCtstmTrans(fits, input_data = transmod_data, trans_mat = tmat, n = 200) class(transmod)
ictstm <- IndivCtstm$new(trans_model = transmod, utility_model = NULL, cost_models = NULL)
ictstm$simdisease() head(ictstm$disprog)