Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
oldopt <- options(rmarkdown.html_vignette.check_title = FALSE)
on.exit(options(oldopt))
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Get default inputs for Canada (default)
library(epicR)
input <- get_input()
# Get inputs for US
input_us <- get_input(jurisdiction = "us")
# The function returns a nested list with three components:
# - values: The actual parameter values used in simulation
# - help: Descriptions of what each parameter means
# - ref: Literature references for each parameter
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: Modify global parameters
input <- get_input()
input$values$global_parameters$time_horizon <- 10
input$values$global_parameters$discount_cost <- 0.015
input$values$global_parameters$discount_qaly <- 0.015
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: Change population sex distribution
input <- get_input()
input$values$agent$p_female <- 0.52 # 52% female
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: Increase smoking cessation rate
input <- get_input()
# The first coefficient is the intercept - increasing it increases cessation rate
input$values$smoking$ln_h_ces_betas[1] <- input$values$smoking$ln_h_ces_betas[1] + 0.5
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: Reduce exacerbation rate
input <- get_input()
# Reduce the baseline rate (first coefficient is intercept)
input$values$exacerbation$ln_rate_betas[1] <- input$values$exacerbation$ln_rate_betas[1] - 0.2
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: Enable case detection program
input <- get_input()
input$values$diagnosis$case_detection_start_end_yrs <- c(0, 20) # Active years 0-20
input$values$diagnosis$p_case_detection <- rep(0.1, 20) # 10% annual probability
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: View and modify costs
input <- get_input()
# View default exacerbation costs
print(input$values$cost$exac_dcost)
# Columns: mild, moderate, severe, very_severe
# Double the cost of severe exacerbations
input$values$cost$exac_dcost[3] <- input$values$cost$exac_dcost[3] * 2
results <- simulate(input = input$values)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Example: View utility values
input <- get_input()
# Background utilities by stage
print(input$values$utility$bg_util_by_stage)
# Typical values: No COPD=0.86, GOLD1=0.81, GOLD2=0.72, GOLD3=0.68, GOLD4=0.58
# Exacerbation disutility matrix
print(input$values$utility$exac_dutil)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
input <- get_input()
# Get help text for a parameter
input$help$exacerbation$ln_rate_betas
# Returns: "Regression coefficients for the random-effects log-hazard model..."
# Get literature reference
input$ref$smoking$mortality_factor_current
# Returns: "Meta-analysis. doi:10.1001/archinternmed.2012.1397"
# List all help for a category
names(input$help$cost)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Complete workflow example
input <- get_input(jurisdiction = "canada")
# Modify multiple parameters
input$values$global_parameters$time_horizon <- 10
input$values$agent$p_female <- 0.52
input$values$smoking$ln_h_ces_betas[1] <- input$values$smoking$ln_h_ces_betas[1] + 0.3
# Run simulation
results <- simulate(input = input$values, n_agents = 50000)
# Access results
print(results$basic)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
results <- simulate(n_agents = 50000)
# Access basic results
basic <- results$basic
cat("Total agents:", basic$n_agents, "\n")
cat("Total deaths:", basic$n_deaths, "\n")
cat("Mild exacerbations:", basic$total_exac[1], "\n")
cat("Moderate exacerbations:", basic$total_exac[2], "\n")
cat("Severe exacerbations:", basic$total_exac[3], "\n")
cat("Very severe exacerbations:", basic$total_exac[4], "\n")
cat("Total cost:", basic$total_cost, "\n")
cat("Total QALYs:", basic$total_qaly, "\n")
## ----eval = TRUE, echo = TRUE-------------------------------------------------
results <- simulate(n_agents = 50000)
# Access extended results
extended <- results$extended
# Calculate COPD prevalence over time
copd_prevalence <- rowSums(extended$n_COPD_by_ctime_sex) /
rowSums(extended$n_alive_by_ctime_sex)
plot(copd_prevalence, type = "l",
xlab = "Year", ylab = "COPD Prevalence",
main = "COPD Prevalence Over Time")
# Calculate annual exacerbation rates by severity
annual_exac_rates <- extended$n_exac_by_ctime_severity /
rowSums(extended$n_COPD_by_ctime_sex)
# Analyze costs by GOLD stage
costs_by_gold <- colSums(extended$cumul_cost_gold_ctime)
names(costs_by_gold) <- c("No COPD", "GOLD 1", "GOLD 2", "GOLD 3", "GOLD 4")
barplot(costs_by_gold, main = "Total Costs by GOLD Stage")
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Run simulation with event recording
results <- simulate(
n_agents = 10000,
return_events = TRUE
)
# Access events data frame
events <- results$events
head(events)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Analyze events for a specific agent
results <- simulate(n_agents = 10000, return_events = TRUE)
events <- results$events
# Get all events for agent #5
agent_5_events <- events[events$id == 5, ]
print(agent_5_events[, c("local_time", "event", "gold", "exac_status")])
# Count events by type
event_counts <- table(events$event)
names(event_counts) <- c("Start", "Annual", "Birthday", "Smoking",
"COPD", "Exac", "Exac_end", "Exac_death",
"Doctor", "Med_change", "", "", "",
"Bgd_death", "End")[as.numeric(names(event_counts)) + 1]
print(event_counts)
# Find all exacerbation events
exac_events <- events[events$event == 5, ]
cat("Total exacerbations:", nrow(exac_events), "\n")
cat("By severity:\n")
print(table(exac_events$exac_status))
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Using settings directly
settings <- get_default_settings()
settings$record_mode <- 2 # Full event recording
settings$n_base_agents <- 10000
results <- simulate(settings = settings, return_events = TRUE)
# Or simply use return_events = TRUE (automatically sets record_mode = 2)
results <- simulate(n_agents = 10000, return_events = TRUE)
## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Baseline scenario
input_baseline <- get_input(jurisdiction = "canada")
results_baseline <- simulate(
input = input_baseline$values,
n_agents = 50000,
seed = 12345 # For reproducibility
)
# Intervention scenario: Enhanced smoking cessation
input_intervention <- get_input(jurisdiction = "canada")
input_intervention$values$smoking$ln_h_ces_betas[1] <-
input_intervention$values$smoking$ln_h_ces_betas[1] + 0.5
results_intervention <- simulate(
input = input_intervention$values,
n_agents = 50000,
seed = 12345 # Same seed for comparability
)
# Calculate incremental cost-effectiveness
delta_cost <- results_intervention$basic$total_cost - results_baseline$basic$total_cost
delta_qaly <- results_intervention$basic$total_qaly - results_baseline$basic$total_qaly
icer <- delta_cost / delta_qaly
cat("Baseline total cost:", results_baseline$basic$total_cost, "\n")
cat("Intervention total cost:", results_intervention$basic$total_cost, "\n")
cat("Baseline total QALYs:", results_baseline$basic$total_qaly, "\n")
cat("Intervention total QALYs:", results_intervention$basic$total_qaly, "\n")
cat("Incremental cost:", delta_cost, "\n")
cat("Incremental QALYs:", delta_qaly, "\n")
cat("ICER:", icer, "per QALY\n")
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.