Nothing
sim_single_stage_right_cens <- function(n = 5e2, zeta = c(0.7, 0.2), type = "right"){
d <- sim_single_stage(n = n)
pd <- policy_data(data = d,
action = "A",
covariates = c("Z", "L", "B"),
utility = "U")
ld <- pd$stage_data
ld[stage == 1, time := 1]
ld[stage == 2, time := 2]
ld[stage == 2, Z := d$Z]
ld[stage == 2, L := d$L]
ld[stage == 2, B := d$B]
## simulating the right censoring time
## only depending on the baseline covariate Z:
C <- c(rexp(n, 1) / exp((-1) * cbind(1, as.numeric(d$Z)) %*% zeta))
ld[stage == 1, time_c := C]
ld[stage == 2, time_c := C]
ld[, delta := time_c >= time]
ld[delta == FALSE , event := 2]
ld[delta == FALSE, A := NA]
ld[delta == FALSE & stage == 2, U := NA]
ld[delta == FALSE & stage == 2, U_A0 := NA]
ld[delta == FALSE & stage == 2, U_A1 := NA]
ld[ , tmp := shift(delta, fill = TRUE), by = list(id)]
ld <- ld[tmp == TRUE, ]
ld[ , time := pmin(time, time_c)]
ld[ , time_c := NULL]
ld[ , tmp := NULL]
ld[ , delta := NULL]
if (type == "interval"){
ld[, time2 := time]
ld[, time := shift(time, fill = 0), by = list(id)]
}
return(ld)
}
test_that("c_cox returns the expected output", {
library("mets")
set.seed(1)
ld <- sim_single_stage_right_cens(n = 5e2, type = "interval")
pd <- policy_data(data = ld, type = "long", action = "A", time = "time", time2 = "time2")
## state history across all stages:
his <- get_history(pd, event_set = c(0,1,2))
fcf <- fit_c_function(
history = his,
c_model = c_cox(formula = ~ Z)
)
ref_cox <- phreg(Surv(time = time, time2 = time2, event = (event == 2)) ~ Z, data = ld)
ref_cox$call <- NULL
fcf2 <- fit_c_functions(pd, c_models = c_cox(formula = ~ Z))$all_stages$c_model$model
expect_equal(
coef(fcf$c_model$model),
coef(ref_cox)
)
expect_equal(
coef(fcf$c_model$model),
coef(fcf2)
)
surv <- predict.c_function(fcf, new_history = his)
ref_surv_time <- as.vector(predict(ref_cox, newdata = ld, times = ld$time, individual.time = TRUE)$surv)
ref_surv_time2 <- as.vector(predict(ref_cox, newdata = ld, times = ld$time2, individual.time = TRUE)$surv)
expect_equal(
surv$surv_time,
ref_surv_time
)
expect_equal(
surv$surv_time2,
ref_surv_time2
)
## state history for a given stage
his <- get_history(pd, event_set = c(0,1,2), stage = 2)
fcf <- fit_c_function(
history = his,
c_model = c_cox(formula = ~ Z)
)
ref_cox <- phreg(Surv(time = time, time2 = time2, event = (event == 2)) ~ Z, data = ld[stage == 2,])
ref_cox$call <- NULL
fcf2 <- fit_c_functions(pd, c_models = list(c_cox(formula = ~ Z),c_cox(formula = ~ Z)))$stage_2$c_model$model
expect_equal(
coef(fcf$c_model$model),
coef(ref_cox)
)
expect_equal(
coef(fcf$c_model$model),
coef(fcf2)
)
surv <- predict.c_function(fcf, new_history = his)
ref_surv_time <- as.vector(predict(ref_cox, newdata = ld[stage == 2,], times = ld[stage == 2,]$time, individual.time = TRUE)$surv)
ref_surv_time2 <- as.vector(predict(ref_cox, newdata = ld[stage == 2,], times = ld[stage == 2,]$time2, individual.time = TRUE)$surv)
expect_equal(
surv$surv_time,
ref_surv_time
)
expect_equal(
surv$surv_time2,
ref_surv_time2
)
his <- get_history(pd, event_set = c(0,1,2), stage = 1)
fcf <- fit_c_function(
history = his,
c_model = c_cox(formula = ~ Z)
)
ref_cox <- phreg(Surv(time = time, time2 = time2, event = (event == 2)) ~ Z, data = ld[stage == 1,])
ref_cox$call <- NULL
fcf2 <- fit_c_functions(pd, c_models = list(c_cox(formula = ~ Z),c_cox(formula = ~ Z)))$stage_1$c_model$model
expect_equal(
coef(fcf$c_model$model),
coef(ref_cox)
)
expect_equal(
coef(fcf$c_model$model),
coef(fcf2)
)
surv <- predict.c_function(fcf, new_history = his)
ref_surv_time <- as.vector(predict(ref_cox, newdata = ld[stage == 1,], times = ld[stage == 1,]$time, individual.time = TRUE)$surv)
ref_surv_time2 <- as.vector(predict(ref_cox, newdata = ld[stage == 1,], times = ld[stage == 1,]$time2, individual.time = TRUE)$surv)
expect_equal(
surv$surv_time,
ref_surv_time
)
expect_equal(
surv$surv_time2,
ref_surv_time2
)
## full history
his <- get_history(pd, event_set = c(0,1,2), stage = 2, full_history = TRUE)
fcf <- fit_c_function(
history = his,
c_model = c_cox(formula = ~ Z_1 * A_1)
)
ref_cox <- phreg(Surv(time = time, time2 = time2, event = (event == 2)) ~ Z*tmp, data = ld[, tmp := shift(A), by = id][stage == 2,])
ref_cox$call <- NULL
fcf2 <- fit_c_functions(pd, full_history = TRUE, c_models = list(c_cox(formula = ~ Z_1),c_cox(formula = ~ Z_1 * A_1)))$stage_2$c_model$model
expect_equal(
unname(coef(fcf$c_model$model)),
unname(coef(ref_cox))
)
expect_equal(
unname(coef(fcf$c_model$model)),
unname(coef(fcf2))
)
surv <- predict.c_function(fcf, new_history = his)
ref_surv_time <- as.vector(predict(ref_cox, newdata = ld[, tmp := shift(A), by = id][stage == 2,], times = ld[stage == 2,]$time, individual.time = TRUE)$surv)
ref_surv_time2 <- as.vector(predict(ref_cox, newdata = ld[, tmp := shift(A), by = id][stage == 2,], times = ld[stage == 2,]$time2, individual.time = TRUE)$surv)
expect_equal(
surv$surv_time,
ref_surv_time
)
expect_equal(
surv$surv_time2,
ref_surv_time2
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.