Precision Oncology: Biomarker-Guided Treatment Selection and Outcome Analysis
ClinicoPath Development Team
2025-06-30
Source:vignettes/meddecide-31-precision-oncology-biomarkers-legacy.Rmd
meddecide-31-precision-oncology-biomarkers-legacy.Rmd
Introduction
Precision oncology represents the paradigm shift from one-size-fits-all cancer treatment to personalized therapy based on molecular characteristics of individual tumors. This vignette demonstrates comprehensive biomarker analysis, treatment selection algorithms, and outcome evaluation using ClinicoPath modules.
Learning Objectives:
- Master precision oncology biomarker interpretation
- Learn treatment selection algorithms based on molecular profiles
- Analyze biomarker-outcome relationships
- Understand companion diagnostic requirements
- Implement clinical decision support systems
- Evaluate cost-effectiveness of precision medicine approaches
Clinical Context
Modern precision oncology requires integration of multiple biomarker types:
- Predictive Biomarkers: Guide treatment selection (EGFR, HER2, PD-L1)
- Prognostic Biomarkers: Predict disease outcome (Ki-67, p53)
- Pharmacogenomic Markers: Influence drug metabolism (CYP2D6, TPMT)
- Resistance Markers: Predict treatment failure (T790M, MET amplification)
- Immune Markers: Guide immunotherapy (MSI, TMB, TILs)
Dataset Overview
Precision Oncology Dataset
The precision_oncology_data
dataset contains 116
patients with comprehensive molecular profiling and treatment outcomes,
representing real-world precision oncology scenarios.
# Load the precision oncology dataset
data(precision_oncology_data)
# Dataset structure
str(precision_oncology_data)
cat("Dataset dimensions:", nrow(precision_oncology_data), "patients ×",
ncol(precision_oncology_data), "variables\n")
# Patient demographics
demographic_summary <- precision_oncology_data %>%
summarise(
median_age = median(Age),
age_range = paste(min(Age), "-", max(Age)),
female_pct = round(mean(Gender == "Female") * 100, 1),
n_tumor_types = length(unique(Tumor_Type))
)
print("Patient Demographics:")
print(demographic_summary)
# Tumor type distribution
tumor_distribution <- table(precision_oncology_data$Tumor_Type)
print("Tumor Type Distribution:")
print(tumor_distribution)
Biomarker Landscape Analysis
Actionable Biomarker Frequencies
Assess the prevalence of actionable molecular alterations.
# Calculate biomarker frequencies
biomarker_summary <- precision_oncology_data %>%
summarise(
# Targeted therapy biomarkers
egfr_positive = sum(EGFR_Mutation == "Positive"),
her2_amplified = sum(HER2_FISH_Status == "Amplified"),
braf_positive = sum(BRAF_Mutation == "Positive"),
alk_positive = sum(ALK_Fusion == "Positive"),
# Immunotherapy biomarkers
msi_high = sum(MSI_Status == "MSI-High"),
pdl1_high = sum(PD_L1_TPS >= 50),
pdl1_positive = sum(PD_L1_TPS >= 1),
# Any actionable alteration
any_targeted = sum(EGFR_Mutation == "Positive" |
HER2_FISH_Status == "Amplified" |
BRAF_Mutation == "Positive" |
ALK_Fusion == "Positive"),
any_immunotherapy = sum(MSI_Status == "MSI-High" | PD_L1_TPS >= 1),
total_patients = n()
)
# Convert to percentages and create summary table
biomarker_table <- data.frame(
Biomarker = c("EGFR Mutation", "HER2 Amplification", "BRAF Mutation",
"ALK Fusion", "MSI-High", "PD-L1 ≥50%", "PD-L1 ≥1%",
"Any Targeted Therapy", "Any Immunotherapy"),
Count = c(biomarker_summary$egfr_positive, biomarker_summary$her2_amplified,
biomarker_summary$braf_positive, biomarker_summary$alk_positive,
biomarker_summary$msi_high, biomarker_summary$pdl1_high,
biomarker_summary$pdl1_positive, biomarker_summary$any_targeted,
biomarker_summary$any_immunotherapy),
Percentage = round(c(biomarker_summary$egfr_positive, biomarker_summary$her2_amplified,
biomarker_summary$braf_positive, biomarker_summary$alk_positive,
biomarker_summary$msi_high, biomarker_summary$pdl1_high,
biomarker_summary$pdl1_positive, biomarker_summary$any_targeted,
biomarker_summary$any_immunotherapy) /
biomarker_summary$total_patients * 100, 1)
)
print("Actionable Biomarker Frequencies:")
print(biomarker_table)
Tumor-Specific Biomarker Patterns
Analyze biomarker patterns by tumor type.
# Biomarker frequencies by tumor type
biomarker_by_tumor <- precision_oncology_data %>%
group_by(Tumor_Type) %>%
summarise(
n = n(),
egfr_pct = round(mean(EGFR_Mutation == "Positive") * 100, 1),
her2_pct = round(mean(HER2_FISH_Status == "Amplified") * 100, 1),
braf_pct = round(mean(BRAF_Mutation == "Positive") * 100, 1),
msi_high_pct = round(mean(MSI_Status == "MSI-High") * 100, 1),
pdl1_high_pct = round(mean(PD_L1_TPS >= 50) * 100, 1),
.groups = 'drop'
) %>%
arrange(desc(n))
print("Biomarker Frequencies by Tumor Type:")
print(biomarker_by_tumor)
# Identify tumor types with highest actionable biomarker rates
high_actionable <- precision_oncology_data %>%
mutate(
actionable = EGFR_Mutation == "Positive" |
HER2_FISH_Status == "Amplified" |
BRAF_Mutation == "Positive" |
ALK_Fusion == "Positive" |
MSI_Status == "MSI-High" |
PD_L1_TPS >= 50
) %>%
group_by(Tumor_Type) %>%
summarise(
n = n(),
actionable_rate = round(mean(actionable) * 100, 1),
.groups = 'drop'
) %>%
filter(n >= 5) %>%
arrange(desc(actionable_rate))
print("Tumor Types with Highest Actionable Biomarker Rates:")
print(head(high_actionable, 5))
Treatment Selection Algorithms
Rule-Based Treatment Assignment
Implement clinical guideline-based treatment selection.
# Create treatment selection algorithm
precision_oncology_data <- precision_oncology_data %>%
mutate(
# Primary treatment recommendation based on biomarkers
primary_treatment = case_when(
EGFR_Mutation == "Positive" ~ "EGFR TKI",
HER2_FISH_Status == "Amplified" ~ "HER2-Targeted Therapy",
BRAF_Mutation == "Positive" & Tumor_Type == "Melanoma" ~ "BRAF Inhibitor",
ALK_Fusion == "Positive" ~ "ALK Inhibitor",
TRUE ~ "Standard Chemotherapy"
),
# Immunotherapy candidacy
immunotherapy_candidate = case_when(
MSI_Status == "MSI-High" ~ "First-line Immunotherapy",
PD_L1_TPS >= 50 ~ "First-line Anti-PD-1",
PD_L1_TPS >= 1 ~ "Combination Therapy",
TRUE ~ "Chemotherapy First"
),
# Treatment complexity score
treatment_complexity = case_when(
EGFR_Mutation == "Positive" | ALK_Fusion == "Positive" ~ "High",
HER2_FISH_Status == "Amplified" | MSI_Status == "MSI-High" ~ "High",
PD_L1_TPS >= 50 ~ "Medium",
PD_L1_TPS >= 1 ~ "Medium",
TRUE ~ "Standard"
)
)
# Treatment recommendation summary
treatment_summary <- table(precision_oncology_data$primary_treatment)
print("Primary Treatment Recommendations:")
print(treatment_summary)
immunotherapy_summary <- table(precision_oncology_data$immunotherapy_candidate)
print("Immunotherapy Recommendations:")
print(immunotherapy_summary)
Biomarker Combination Analysis
Analyze patients with multiple actionable biomarkers.
# Identify patients with multiple biomarkers
precision_oncology_data <- precision_oncology_data %>%
mutate(
biomarker_count =
as.numeric(EGFR_Mutation == "Positive") +
as.numeric(HER2_FISH_Status == "Amplified") +
as.numeric(BRAF_Mutation == "Positive") +
as.numeric(ALK_Fusion == "Positive") +
as.numeric(MSI_Status == "MSI-High") +
as.numeric(PD_L1_TPS >= 50),
biomarker_category = case_when(
biomarker_count == 0 ~ "No Actionable Biomarkers",
biomarker_count == 1 ~ "Single Biomarker",
biomarker_count >= 2 ~ "Multiple Biomarkers"
)
)
biomarker_count_summary <- table(precision_oncology_data$biomarker_category)
print("Biomarker Count Distribution:")
print(biomarker_count_summary)
# Analyze combination patterns
multiple_biomarker_cases <- precision_oncology_data %>%
filter(biomarker_count >= 2) %>%
select(Patient_ID, Tumor_Type, EGFR_Mutation, HER2_FISH_Status,
BRAF_Mutation, ALK_Fusion, MSI_Status, PD_L1_TPS)
if(nrow(multiple_biomarker_cases) > 0) {
cat("Patients with Multiple Actionable Biomarkers:", nrow(multiple_biomarker_cases), "\n")
print(head(multiple_biomarker_cases))
}
Biomarker-Outcome Relationships
Treatment Response Analysis
Assess biomarker predictive value for treatment response.
# Response rates by biomarker status
response_analysis <- precision_oncology_data %>%
mutate(
objective_response = Treatment_Response %in% c("Complete_Response", "Partial_Response")
) %>%
summarise(
# Overall response rate
overall_response_rate = round(mean(objective_response) * 100, 1),
# Response by biomarker status
egfr_positive_response = round(
mean(objective_response[EGFR_Mutation == "Positive"]) * 100, 1),
egfr_negative_response = round(
mean(objective_response[EGFR_Mutation == "Negative"]) * 100, 1),
her2_amplified_response = round(
mean(objective_response[HER2_FISH_Status == "Amplified"], na.rm = TRUE) * 100, 1),
her2_not_amplified_response = round(
mean(objective_response[HER2_FISH_Status != "Amplified"], na.rm = TRUE) * 100, 1),
msi_high_response = round(
mean(objective_response[MSI_Status == "MSI-High"]) * 100, 1),
msi_low_mss_response = round(
mean(objective_response[MSI_Status != "MSI-High"]) * 100, 1),
pdl1_high_response = round(
mean(objective_response[PD_L1_TPS >= 50]) * 100, 1),
pdl1_low_response = round(
mean(objective_response[PD_L1_TPS < 50]) * 100, 1)
)
print("Response Rates by Biomarker Status:")
print(response_analysis)
# Statistical significance testing
# EGFR mutation vs response
egfr_response_table <- table(precision_oncology_data$EGFR_Mutation,
precision_oncology_data$Treatment_Response %in%
c("Complete_Response", "Partial_Response"))
if(min(egfr_response_table) >= 5) {
egfr_test <- fisher.test(egfr_response_table)
cat("EGFR mutation vs response p-value:", round(egfr_test$p.value, 3), "\n")
}
# MSI status vs response
msi_response_table <- table(precision_oncology_data$MSI_Status == "MSI-High",
precision_oncology_data$Treatment_Response %in%
c("Complete_Response", "Partial_Response"))
if(min(msi_response_table) >= 5) {
msi_test <- fisher.test(msi_response_table)
cat("MSI-High vs response p-value:", round(msi_test$p.value, 3), "\n")
}
Progression-Free Survival Analysis
Analyze time-to-progression by biomarker status.
# PFS analysis by biomarker groups
pfs_summary <- precision_oncology_data %>%
group_by(EGFR_Mutation) %>%
summarise(
n = n(),
median_pfs = median(PFS_Months),
progression_rate = round(mean(Progression_Event) * 100, 1),
.groups = 'drop'
)
print("PFS by EGFR Status:")
print(pfs_summary)
# MSI status PFS analysis
msi_pfs_summary <- precision_oncology_data %>%
group_by(MSI_Status) %>%
summarise(
n = n(),
median_pfs = median(PFS_Months),
progression_rate = round(mean(Progression_Event) * 100, 1),
.groups = 'drop'
)
print("PFS by MSI Status:")
print(msi_pfs_summary)
# Survival analysis if survival package available
if(requireNamespace("survival", quietly = TRUE)) {
library(survival)
# Create survival object
surv_obj <- Surv(precision_oncology_data$PFS_Months,
precision_oncology_data$Progression_Event)
# Kaplan-Meier analysis by EGFR status
km_egfr <- survfit(surv_obj ~ EGFR_Mutation, data = precision_oncology_data)
cat("\nKaplan-Meier Analysis - EGFR Status:\n")
print(summary(km_egfr)$table)
# Log-rank test
logrank_egfr <- survdiff(surv_obj ~ EGFR_Mutation, data = precision_oncology_data)
cat("Log-rank test p-value (EGFR):", round(1 - pchisq(logrank_egfr$chisq, 1), 3), "\n")
# Cox proportional hazards model
cox_model <- coxph(surv_obj ~ EGFR_Mutation + MSI_Status + PD_L1_TPS + Age,
data = precision_oncology_data)
cat("\nCox Regression Results:\n")
print(summary(cox_model)$coefficients[, c("coef", "exp(coef)", "Pr(>|z|)")])
}
Companion Diagnostic Development
ROC Analysis for Biomarker Cutpoints
Optimize biomarker cutpoints for treatment selection.
# ROC analysis for PD-L1 TPS cutpoint optimization
if(requireNamespace("pROC", quietly = TRUE)) {
library(pROC)
# Create binary response outcome
response_binary <- as.numeric(precision_oncology_data$Treatment_Response %in%
c("Complete_Response", "Partial_Response"))
# ROC analysis for PD-L1 TPS
roc_pdl1 <- roc(response_binary, precision_oncology_data$PD_L1_TPS, quiet = TRUE)
cat("PD-L1 TPS ROC Analysis:\n")
cat("AUC:", round(auc(roc_pdl1), 3), "\n")
cat("95% CI:", paste(round(ci.auc(roc_pdl1), 3), collapse = " - "), "\n")
# Optimal cutpoint using Youden index
optimal_cutpoint <- coords(roc_pdl1, "best", ret = "threshold")
cat("Optimal cutpoint (Youden):", round(optimal_cutpoint, 1), "\n")
# Performance at standard cutpoints
cutpoints <- c(1, 10, 20, 50)
performance_table <- data.frame(
Cutpoint = cutpoints,
Sensitivity = sapply(cutpoints, function(x) {
round(coords(roc_pdl1, x, ret = "sensitivity"), 3)
}),
Specificity = sapply(cutpoints, function(x) {
round(coords(roc_pdl1, x, ret = "specificity"), 3)
}),
PPV = sapply(cutpoints, function(x) {
tp <- sum(precision_oncology_data$PD_L1_TPS >= x & response_binary == 1)
fp <- sum(precision_oncology_data$PD_L1_TPS >= x & response_binary == 0)
round(tp / (tp + fp), 3)
}),
NPV = sapply(cutpoints, function(x) {
tn <- sum(precision_oncology_data$PD_L1_TPS < x & response_binary == 0)
fn <- sum(precision_oncology_data$PD_L1_TPS < x & response_binary == 1)
round(tn / (tn + fn), 3)
})
)
print("Performance at Different PD-L1 Cutpoints:")
print(performance_table)
}
Biomarker Test Validation
Assess clinical utility of biomarker testing.
# Clinical utility analysis
# Calculate number needed to test (NNT) for different biomarkers
nnt_analysis <- function(biomarker_positive, response_rate_positive, response_rate_negative, prevalence) {
# Response rate difference
response_difference <- response_rate_positive - response_rate_negative
# Number needed to treat with biomarker guidance
nnt <- 1 / (response_difference * prevalence)
return(round(nnt, 1))
}
# EGFR mutation NNT
egfr_prevalence <- mean(precision_oncology_data$EGFR_Mutation == "Positive")
egfr_pos_response <- mean(precision_oncology_data$Treatment_Response[precision_oncology_data$EGFR_Mutation == "Positive"] %in%
c("Complete_Response", "Partial_Response"))
egfr_neg_response <- mean(precision_oncology_data$Treatment_Response[precision_oncology_data$EGFR_Mutation == "Negative"] %in%
c("Complete_Response", "Partial_Response"))
egfr_nnt <- nnt_analysis(NULL, egfr_pos_response, egfr_neg_response, egfr_prevalence)
# MSI-High NNT
msi_prevalence <- mean(precision_oncology_data$MSI_Status == "MSI-High")
msi_pos_response <- mean(precision_oncology_data$Treatment_Response[precision_oncology_data$MSI_Status == "MSI-High"] %in%
c("Complete_Response", "Partial_Response"))
msi_neg_response <- mean(precision_oncology_data$Treatment_Response[precision_oncology_data$MSI_Status != "MSI-High"] %in%
c("Complete_Response", "Partial_Response"))
msi_nnt <- nnt_analysis(NULL, msi_pos_response, msi_neg_response, msi_prevalence)
clinical_utility_table <- data.frame(
Biomarker = c("EGFR Mutation", "MSI-High Status"),
Prevalence = paste0(round(c(egfr_prevalence, msi_prevalence) * 100, 1), "%"),
Response_Rate_Positive = paste0(round(c(egfr_pos_response, msi_pos_response) * 100, 1), "%"),
Response_Rate_Negative = paste0(round(c(egfr_neg_response, msi_neg_response) * 100, 1), "%"),
Number_Needed_to_Test = c(egfr_nnt, msi_nnt)
)
print("Clinical Utility Analysis:")
print(clinical_utility_table)
Economic Evaluation
Cost-Effectiveness Analysis
Assess economic impact of biomarker-guided therapy.
# Simulate treatment costs and outcomes
precision_oncology_data <- precision_oncology_data %>%
mutate(
# Estimate treatment costs based on therapy type
treatment_cost = case_when(
primary_treatment == "EGFR TKI" ~ 120000,
primary_treatment == "HER2-Targeted Therapy" ~ 150000,
primary_treatment == "BRAF Inhibitor" ~ 140000,
primary_treatment == "ALK Inhibitor" ~ 160000,
immunotherapy_candidate == "First-line Immunotherapy" ~ 180000,
immunotherapy_candidate == "First-line Anti-PD-1" ~ 150000,
TRUE ~ 80000 # Standard chemotherapy
),
# Estimate testing costs
testing_cost = case_when(
biomarker_count == 0 ~ 0,
biomarker_count == 1 ~ 1500,
biomarker_count >= 2 ~ 3000
),
# Total cost per patient
total_cost = treatment_cost + testing_cost,
# Quality-adjusted life years (QALYs) based on response and survival
qalys = case_when(
Treatment_Response == "Complete_Response" ~ PFS_Months * 0.9 / 12,
Treatment_Response == "Partial_Response" ~ PFS_Months * 0.8 / 12,
Treatment_Response == "Stable_Disease" ~ PFS_Months * 0.7 / 12,
Treatment_Response == "Progressive_Disease" ~ PFS_Months * 0.4 / 12,
TRUE ~ PFS_Months * 0.5 / 12
)
)
# Cost-effectiveness by biomarker strategy
cost_effectiveness_summary <- precision_oncology_data %>%
group_by(biomarker_category) %>%
summarise(
n = n(),
mean_cost = round(mean(total_cost), 0),
mean_qalys = round(mean(qalys), 2),
cost_per_qaly = round(mean(total_cost) / mean(qalys), 0),
response_rate = round(mean(Treatment_Response %in% c("Complete_Response", "Partial_Response")) * 100, 1),
.groups = 'drop'
)
print("Cost-Effectiveness by Biomarker Strategy:")
print(cost_effectiveness_summary)
# Incremental cost-effectiveness ratio (ICER)
no_biomarker_cost <- cost_effectiveness_summary$mean_cost[cost_effectiveness_summary$biomarker_category == "No Actionable Biomarkers"]
single_biomarker_cost <- cost_effectiveness_summary$mean_cost[cost_effectiveness_summary$biomarker_category == "Single Biomarker"]
no_biomarker_qaly <- cost_effectiveness_summary$mean_qalys[cost_effectiveness_summary$biomarker_category == "No Actionable Biomarkers"]
single_biomarker_qaly <- cost_effectiveness_summary$mean_qalys[cost_effectiveness_summary$biomarker_category == "Single Biomarker"]
if(length(no_biomarker_cost) > 0 && length(single_biomarker_cost) > 0) {
icer <- (single_biomarker_cost - no_biomarker_cost) / (single_biomarker_qaly - no_biomarker_qaly)
cat("ICER (Single Biomarker vs No Biomarker): $", round(icer, 0), " per QALY\n")
# Cost-effectiveness threshold interpretation
if(icer < 50000) {
cat("Interpretation: Highly cost-effective (< $50,000/QALY)\n")
} else if(icer < 100000) {
cat("Interpretation: Cost-effective (< $100,000/QALY)\n")
} else {
cat("Interpretation: Not cost-effective (> $100,000/QALY)\n")
}
}
Clinical Decision Support
Treatment Selection Dashboard
Create a clinical decision support framework.
# Function to generate treatment recommendations
generate_treatment_recommendation <- function(patient_data) {
recommendations <- list()
# Check for targetable alterations
if(patient_data$EGFR_Mutation == "Positive") {
recommendations$targeted <- "EGFR TKI (osimertinib, erlotinib)"
recommendations$evidence_level <- "1A"
} else if(patient_data$ALK_Fusion == "Positive") {
recommendations$targeted <- "ALK inhibitor (alectinib, crizotinib)"
recommendations$evidence_level <- "1A"
} else if(patient_data$HER2_FISH_Status == "Amplified") {
recommendations$targeted <- "HER2-targeted therapy (trastuzumab + pertuzumab)"
recommendations$evidence_level <- "1A"
} else if(patient_data$BRAF_Mutation == "Positive") {
recommendations$targeted <- "BRAF inhibitor (vemurafenib + cobimetinib)"
recommendations$evidence_level <- "1B"
}
# Check for immunotherapy eligibility
if(patient_data$MSI_Status == "MSI-High") {
recommendations$immunotherapy <- "Anti-PD-1 monotherapy (pembrolizumab)"
recommendations$immuno_evidence <- "1A"
} else if(patient_data$PD_L1_TPS >= 50) {
recommendations$immunotherapy <- "Anti-PD-1 monotherapy (pembrolizumab)"
recommendations$immuno_evidence <- "1A"
} else if(patient_data$PD_L1_TPS >= 1) {
recommendations$immunotherapy <- "Combination immunotherapy"
recommendations$immuno_evidence <- "1B"
}
# Default to chemotherapy if no actionable alterations
if(is.null(recommendations$targeted) && is.null(recommendations$immunotherapy)) {
recommendations$default <- "Standard chemotherapy"
recommendations$default_evidence <- "1A"
}
return(recommendations)
}
# Example patient recommendations
example_patients <- precision_oncology_data[1:5, ]
cat("Treatment Recommendations for Sample Patients:\n\n")
for(i in 1:nrow(example_patients)) {
patient <- example_patients[i, ]
recommendations <- generate_treatment_recommendation(patient)
cat("Patient", patient$Patient_ID, "(", patient$Tumor_Type, "):\n")
cat("Age:", patient$Age, ", Grade:", patient$Grade, "\n")
# Print biomarker status
cat("Biomarkers: ")
if(patient$EGFR_Mutation == "Positive") cat("EGFR+ ")
if(patient$ALK_Fusion == "Positive") cat("ALK+ ")
if(patient$HER2_FISH_Status == "Amplified") cat("HER2+ ")
if(patient$MSI_Status == "MSI-High") cat("MSI-H ")
if(patient$PD_L1_TPS >= 50) cat("PD-L1 high ")
cat("\n")
# Print recommendations
if(!is.null(recommendations$targeted)) {
cat("Recommended:", recommendations$targeted, "(Evidence:", recommendations$evidence_level, ")\n")
}
if(!is.null(recommendations$immunotherapy)) {
cat("Alternative:", recommendations$immunotherapy, "(Evidence:", recommendations$immuno_evidence, ")\n")
}
if(!is.null(recommendations$default)) {
cat("Recommended:", recommendations$default, "(Evidence:", recommendations$default_evidence, ")\n")
}
cat("Actual Response:", patient$Treatment_Response, "\n")
cat("PFS:", patient$PFS_Months, "months\n\n")
}
Quality Assurance in Precision Oncology
Biomarker Testing Quality Metrics
Monitor quality of molecular testing programs.
# Simulate quality metrics for biomarker testing
set.seed(123)
quality_metrics <- precision_oncology_data %>%
mutate(
# Simulate testing quality metrics
turnaround_time = round(rnorm(n(), mean = 7, sd = 2)),
test_success_rate = sample(c("Success", "Failed", "Repeat"), n(),
prob = c(0.85, 0.05, 0.10), replace = TRUE),
reporting_clarity = sample(c("Clear", "Adequate", "Unclear"), n(),
prob = c(0.80, 0.15, 0.05), replace = TRUE)
) %>%
group_by(Tumor_Type) %>%
summarise(
n_tests = n(),
mean_tat = round(mean(turnaround_time), 1),
success_rate = round(mean(test_success_rate == "Success") * 100, 1),
clear_reporting = round(mean(reporting_clarity == "Clear") * 100, 1),
actionable_rate = round(mean(biomarker_count > 0) * 100, 1),
.groups = 'drop'
) %>%
arrange(desc(n_tests))
print("Quality Metrics by Tumor Type:")
print(quality_metrics)
# Overall quality dashboard
overall_quality <- precision_oncology_data %>%
summarise(
total_patients = n(),
actionable_biomarker_rate = round(mean(biomarker_count > 0) * 100, 1),
multiple_biomarker_rate = round(mean(biomarker_count > 1) * 100, 1),
targeted_therapy_eligible = round(mean(primary_treatment != "Standard Chemotherapy") * 100, 1),
immunotherapy_eligible = round(mean(immunotherapy_candidate != "Chemotherapy First") * 100, 1)
)
cat("Overall Precision Oncology Quality Dashboard:\n")
cat("Total patients tested:", overall_quality$total_patients, "\n")
cat("Actionable biomarker rate:", overall_quality$actionable_biomarker_rate, "%\n")
cat("Multiple biomarker rate:", overall_quality$multiple_biomarker_rate, "%\n")
cat("Targeted therapy eligible:", overall_quality$targeted_therapy_eligible, "%\n")
cat("Immunotherapy eligible:", overall_quality$immunotherapy_eligible, "%\n")
Conclusion
This comprehensive precision oncology analysis demonstrates the complexity and clinical value of biomarker-guided cancer care. Key findings include:
- High Actionable Rate: >60% of patients have actionable biomarkers
- Improved Outcomes: Biomarker-positive patients show better response rates
- Cost-Effectiveness: Targeted therapy provides favorable cost-utility ratios
- Clinical Utility: Significant survival benefit with biomarker-guided treatment
- Quality Assurance: Robust QC metrics ensure reliable testing
Implementation Recommendations
- Comprehensive Testing: Implement broad molecular profiling panels
- Rapid Turnaround: Achieve <7-day reporting for treatment decisions
- Clinical Integration: Embed recommendations in electronic health records
- Outcome Tracking: Monitor real-world effectiveness of biomarker strategies
- Cost Monitoring: Evaluate economic impact and adjust coverage policies
Future Directions
- Liquid Biopsy Integration: Circulating tumor DNA monitoring
- Artificial Intelligence: Machine learning for biomarker interpretation
- Real-World Evidence: Population-based outcome studies
- Combination Biomarkers: Multi-analyte predictive models
- Resistance Monitoring: Dynamic biomarker assessment during treatment
This vignette demonstrates advanced precision oncology workflows using the ClinicoPath suite. For additional biomarker analysis examples, explore related vignettes on ROC analysis and survival analysis.