Skip to main content

health-economics

Health economic analysis in R, including cost-effectiveness, QALYs, decision models, and budget impact.

Zur Installation springen

Quellinformationen

Repository
choxos/BiostatAgent
Letzte Quellaktivität
27. Mai 2026 um 20:44
Erkannte Sprache von SKILL.md
Englisch
Sterne
11
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
health-economics
description
Health economic analysis in R, including cost-effectiveness, QALYs, decision models, and budget impact.
# Health Economics Evaluation in R ## Overview Health economic evaluation methods covering cost-effectiveness analysis (CEA), quality-adjusted life years (QALYs), incremental cost-effectiveness ratios (ICERs), budget impact analysis, Markov cohort models, partitioned survival analysis, probabilistic sensitivity analysis, and value of information analysis. ## Cost-Effectiveness Fundamentals ### Basic Calculations ```r # Treatment comparison data # Intervention vs Comparator costs_int <- 15000 # Mean cost of intervention costs_comp <- 8000 # Mean cost of comparator effects_int <- 5.2 # Mean QALYs intervention effects_comp <- 4.5 # Mean QALYs comparator # Incremental calculations delta_cost <- costs_int - costs_comp # Incremental cost delta_effect <- effects_int - effects_comp # Incremental effect (QALYs) # Incremental Cost-Effectiveness Ratio (ICER) icer <- delta_cost / delta_effect cat("ICER:", round(icer, 0), "per QALY gained\n") # Net Monetary Benefit (NMB) at WTP threshold wtp <- 50000 # Willingness-to-pay threshold nmb <- delta_effect * wtp - delta_cost cat("NMB at WTP $", wtp, ":", round(nmb, 0), "\n") # Net Health Benefit (NHB) nhb <- delta_effect - delta_cost / wtp cat("NHB:", round(nhb, 3), "QALYs\n") ``` ### Cost-Effectiveness Plane ```r library(ggplot2) # Simulated incremental costs and effects set.seed(123) n_sim <- 1000 delta_c <- rnorm(n_sim, delta_cost, 2000) delta_e <- rnorm(n_sim, delta_effect, 0.3) ce_data <- data.frame( delta_cost = delta_c, delta_effect = delta_e ) # CE plane ggplot(ce_data, aes(x = delta_effect, y = delta_cost)) + geom_point(alpha = 0.3, color = "blue") + geom_hline(yintercept = 0, linetype = "dashed") + geom_vline(xintercept = 0, linetype = "dashed") + geom_abline(slope = wtp, intercept = 0, color = "red", linetype = "dashed") + annotate("text", x = 1.5, y = 15000, label = paste0("WTP = $", wtp), color = "red") + labs(x = "Incremental Effect (QALYs)", y = "Incremental Cost ($)", title = "Cost-Effectiveness Plane") + theme_bw() ``` ## Cost-Effectiveness Analysis with BCEA ### Using BCEA Package ```r library(BCEA) # From PSA samples (effects and costs matrices) # Each row = simulation, columns = interventions n_sim <- 1000 n_int <- 2 # Number of interventions # Effects matrix (QALYs) effects <- matrix( c(rnorm(n_sim, 4.5, 0.5), # Comparator rnorm(n_sim, 5.2, 0.6)), # Intervention nrow = n_sim, ncol = n_int ) # Costs matrix costs <- matrix( c(rnorm(n_sim, 8000, 1500), # Comparator rnorm(n_sim, 15000, 3000)), # Intervention nrow = n_sim, ncol = n_int ) colnames(effects) <- colnames(costs) <- c("Comparator", "Intervention") # Create BCEA object bcea_result <- bcea( e = effects, c = costs, ref = 1, # Reference intervention interventions = c("Comparator", "Intervention"), Kmax = 100000 # Max WTP for analysis ) # Summary at specific WTP summary(bcea_result, wtp = 50000) # Key outputs bcea_result$ICER # ICER bcea_result$ceac # CEAC values ``` ### CE Plane and CEAC Plots ```r library(BCEA) # Cost-effectiveness plane ceplane.plot(bcea_result, wtp = 50000, graph = "ggplot2", title = "Cost-Effectiveness Plane") # Cost-Effectiveness Acceptability Curve (CEAC) ceac.plot(bcea_result, graph = "ggplot2", title = "Cost-Effectiveness Acceptability Curve") # Cost-Effectiveness Acceptability Frontier (CEAF) ceaf.plot(bcea_result, graph = "ggplot2") # Expected Incremental Benefit (EIB) plot eib.plot(bcea_result, graph = "ggplot2") ``` ### Multiple Interventions ```r library(BCEA) # Three interventions effects_3 <- matrix( c(rnorm(n_sim, 4.0, 0.4), # Standard care rnorm(n_sim, 4.8, 0.5), # Treatment A rnorm(n_sim, 5.5, 0.6)), # Treatment B nrow = n_sim ) costs_3 <- matrix( c(rnorm(n_sim, 5000, 1000), rnorm(n_sim, 12000, 2500), rnorm(n_sim, 20000, 4000)), nrow = n_sim ) colnames(effects_3) <- colnames(costs_3) <- c("Standard", "Treatment_A", "Treatment_B") bcea_multi <- bcea( e = effects_3, c = costs_3, ref = 1, interventions = colnames(effects_3) ) # Multi-comparison CEAC mce <- multi.ce(bcea_multi) ceac.plot(mce, graph = "ggplot2") # Contour plot contour2(bcea_multi, wtp = 50000) ``` ## Markov Cohort Models ### Using heemod Package ```r library(heemod) # Define transition probabilities mat_trans <- define_transition( state_names = c("Healthy", "Sick", "Dead"), # From Healthy C, 0.15, 0.01, # From Sick 0.10, C, 0.05, # From Dead (absorbing) 0, 0, 1 ) # Define states with costs and utilities state_healthy <- define_state( cost = 0, utility = 1 ) state_sick <- define_state( cost = 5000, utility = 0.7 ) state_dead <- define_state( cost = 0, utility = 0 ) # Define strategy (no treatment) strat_base <- define_strategy( transition = mat_trans, Healthy = state_healthy, Sick = state_sick, Dead = state_dead ) # Run the model result_base <- run_model( strat_base, cycles = 50, cost = cost, effect = utility, init = c(1000, 0, 0), # Initial cohort distribution method = "beginning" # Cycle correction ) # Summary summary(result_base) plot(result_base) ``` ### Comparing Strategies ```r library(heemod) # Define treatment strategy (reduced transition to sick) mat_trans_trt <- define_transition( state_names = c("Healthy", "Sick", "Dead"), C, 0.10, 0.01, # Lower transition to sick 0.15, C, 0.04, # Higher recovery 0, 0, 1 ) state_healthy_trt <- define_state( cost = 500, # Treatment cost utility = 1 ) strat_trt <- define_strategy( transition = mat_trans_trt, Healthy = state_healthy_trt, Sick = state_sick, Dead = state_dead ) # Run both strategies result_comp <- run_model( base = strat_base, treatment = strat_trt, cycles = 50, cost = cost, effect = utility, init = c(1000, 0, 0) ) # Summary comparison summary(result_comp) # ICER icer_result <- summary(result_comp)$res_comp print(icer_result) ``` ### Time-Dependent Parameters ```r library(heemod) # Parameters that change over time param <- define_parameters( age_init = 50, age = age_init + model_time, mortality = 1 - exp(-0.0001 * age^2), # Age-dependent mortality p_sick = 0.1 + 0.005 * model_time # Increasing disease risk ) # Transition matrix with parameters mat_time <- define_transition( state_names = c("Healthy", "Sick", "Dead"), C, p_sick, mortality, 0.05, C, mortality * 1.5, 0, 0, 1 ) # Run with parameters result_time <- run_model( define_strategy( transition = mat_time, Healthy = state_healthy, Sick = state_sick, Dead = state_dead ), cycles = 30, cost = cost, effect = utility, init = c(1000, 0, 0), parameters = param ) ``` ## Partitioned Survival Analysis ### Using hesim Package ```r library(hesim) library(flexsurv) # Fit parametric survival models for each health state # Overall Survival (OS) fit_os <- flexsurvreg( Surv(time, status) ~ treatment, data = surv_data, dist = "weibull" ) # Progression-Free Survival (PFS) fit_pfs <- flexsurvreg( Surv(time_pfs, status_pfs) ~ treatment, data = surv_data, dist = "weibull" ) # State probabilities from survival curves # Pre-progression: S_PFS(t) # Post-progression: S_OS(t) - S_PFS(t) # Death: 1 - S_OS(t) ``` ### Building PSM with hesim ```r library(hesim) # Treatment strategies strategies <- data.table( strategy_id = 1:2, strategy_name = c("Standard", "New Treatment") ) # Patients (can include heterogeneity) patients <- data.table( patient_id = 1:100, age = rnorm(100, 60, 10) ) # Health states states <- data.table( state_id = 1:3, state_name = c("Stable", "Progressed", "Dead") ) # Create hesim data object hesim_data <- hesim_data( strategies = strategies, patients = patients, states = states ) # Define input data for survival models input_data <- expand(hesim_data, by = c("strategies", "patients")) # Create survival curves (from fitted models) survmods <- create_PsmCurves( input_data = input_data, params = params_surv_list # From fitted flexsurv models ) # State probabilities stprobs <- survmods$sim_stateprobs(t = seq(0, 10, 0.1)) ``` ### Costs and QALYs from PSM ```r library(hesim) # State utilities utility_tbl <- stateval_tbl( data.table( state_id = 1:3, est = c(0.8, 0.6, 0) # Utilities by state ), dist = "fixed" ) # State costs cost_tbl <- stateval_tbl( data.table( state_id = 1:3, est = c(1000, 5000, 0) # Annual costs ), dist = "fixed" ) # Create PSM object psm <- Psm$new( survival_models = survmods, utility_model = utility_tbl, cost_models = list(drug = cost_tbl) ) # Simulate QALYs and costs psm$sim_stateprobs(t = seq(0, 10, by = 0.1)) psm$sim_qalys(dr = 0.03) # 3% discount rate psm$sim_costs(dr = 0.03) # Summarize ce_results <- psm$summarize() ``` ## Probabilistic Sensitivity Analysis ### Parameter Distributions ```r library(heemod) # Define parameter distributions param_psa <- define_parameters( # Beta distribution for probabilities p_sick = rbeta(1, shape1 = 20, shape2 = 80), p_death_healthy = rbeta(1, shape1 = 2, shape2 = 198), p_death_sick = rbeta(1, shape1 = 10, shape2 = 90), # Gamma distribution for costs cost_sick = rgamma(1, shape = 100, rate = 0.02), cost_treatment = rgamma(1, shape = 50, rate = 0.1), # Beta distribution for utilities utility_sick = rbeta(1, shape1 = 70, shape2 = 30) ) # Run PSA psa_result <- run_psa( model = result_comp, psa = param_psa, N = 1000 # Number of simulations ) # Summary summary(psa_result) # CE plane from PSA plot(psa_result, type = "ce") # CEAC from PSA plot(psa_result, type = "ac") ``` ### Custom PSA Implementation ```r # Manual PSA loop n_sim <- 1000 psa_results <- data.frame( sim = 1:n_sim, cost_base = NA, cost_trt = NA, qaly_base = NA, qaly_trt = NA ) for (i in 1:n_sim) { # Sample parameters p_sick <- rbeta(1, 20, 80) cost_sick <- rgamma(1, 100, 0.02) utility_sick <- rbeta(1, 70, 30) # Run model with sampled parameters # ... model calculations ... # Store results psa_results$cost_base[i] <- sum_cost_base
Auf GitHub ansehen
Diese SKILL.md ist sehr gross, daher zeigt SkillsMP hier nur den ersten Abschnitt. Auf GitHub ansehen