Skip to contents

The Biomarker Discovery module covers expression, classification, survival, and screening endpoints. Detailed per-topic articles remain on the pkgdown site.

Differential expression

Two-group mean difference for expression biomarkers (wrapper around t_two_sample).

power_compute("ttest_biomarker", "post_hoc", d = 0.6, n1 = 40, n2 = 40,
              alpha = 0.05, tails = "two")
#> ggpower result
#> Test: Biomarker: Two-group differential expression (t test)
#> Analysis: post_hoc
#> 
#> Input parameters
#>   tails: two
#>   alpha: 0.05
#>   sample_size_group_1: 40
#>   sample_size_group_2: 40
#>   log_fold_change_sd: 0.6
#> 
#> 
#> Output parameters
#>   noncentrality_parameter: 2.683282
#>   critical_t: -1.990847,  1.990847
#>   df: 78
#>   total_sample_size: 80
#>   power: 0.7549516
power_compute("ttest_biomarker", "a_priori", d = 0.5, alpha = 0.05,
              power = 0.8, allocation_ratio = 1)
#> ggpower result
#> Test: Biomarker: Two-group differential expression (t test)
#> Analysis: a_priori
#> 
#> Input parameters
#>   tails: two
#>   alpha: 0.05
#>   sample_size_group_1: 64
#>   sample_size_group_2: 64
#>   log_fold_change_sd: 0.5
#>   target_power: 0.8
#> 
#> 
#> Output parameters
#>   noncentrality_parameter: 2.828427
#>   critical_t: -1.978971,  1.978971
#>   df: 126
#>   total_sample_size: 128
#>   actual_power: 0.8014596
#> 
#> 
#> Notes
#> - A priori sample sizes are rounded up to integer values and actual power is recomputed.

ROC and AUC

power_compute(
  "roc_auc_one",
  analysis = "a_priori",
  auc = 0.75,
  auc0 = 0.5,
  n_pos = 50,
  n_neg = 50,
  alpha = 0.05,
  power = 0.8,
  tails = "two"
)
#> ggpower result
#> Test: Biomarker: One-sample ROC AUC vs null
#> Analysis: a_priori
#> 
#> Input parameters
#>   tails: two
#>   auc_h1: 0.75
#>   auc_h0: 0.5
#>   n_positive: 16
#>   n_negative: 16
#>   alpha: 0.05
#>   target_power: 0.8
#> 
#> 
#> Output parameters
#>   z_statistic: 2.860533
#>   se_auc: 0.0873963
#>   total_sample_size: 32
#>   actual_power: 0.8160919
#> 
#> 
#> Notes
#> - Hanley-McNeil normal approximation for AUC variance.
#> - A priori sample sizes are rounded up to integer values and actual power is recomputed.
power_compute(
  "roc_auc_two",
  analysis = "post_hoc",
  auc1 = 0.78,
  auc2 = 0.62,
  n1 = 80,
  n2 = 80,
  alpha = 0.05,
  tails = "two"
)
#> ggpower result
#> Test: Biomarker: Two-sample ROC AUC comparison
#> Analysis: post_hoc
#> 
#> Input parameters
#>   tails: two
#>   auc_group_1: 0.78
#>   auc_group_2: 0.62
#>   sample_size_group_1: 80
#>   sample_size_group_2: 80
#>   alpha: 0.05
#> 
#> 
#> Output parameters
#>   z_statistic: 2.790489
#>   se_difference: 0.05733762
#>   total_sample_size: 160
#>   power: 0.79688
#> 
#> 
#> Notes
#> - DeLong-style normal approximation for AUC difference.

Diagnostic accuracy

power_compute("diagnostic_acc", "post_hoc", sensitivity = 0.85, specificity = 0.85,
              n_pos = 50, n_neg = 50, alpha = 0.05)
#> ggpower result
#> Test: Biomarker: Diagnostic accuracy (sensitivity and specificity)
#> Analysis: post_hoc
#> 
#> Input parameters
#>   tails: two
#>   sensitivity_h1: 0.85
#>   specificity_h1: 0.85
#>   n_positive: 50
#>   n_negative: 50
#>   alpha: 0.05
#> 
#> 
#> Output parameters
#>   z_sensitivity: 16.83251
#>   z_specificity: 16.83251
#>   power_sensitivity: 1
#>   power_specificity: 1
#>   power: 1
#>   total_sample_size: 100
#> 
#> 
#> Notes
#> - Joint power uses the minimum of sensitivity and specificity power (Bonferroni-style).
power_compute("diagnostic_acc", "a_priori", sensitivity = 0.9, specificity = 0.9,
              alpha = 0.05, power = 0.8, allocation_ratio = 1)
#> ggpower result
#> Test: Biomarker: Diagnostic accuracy (sensitivity and specificity)
#> Analysis: a_priori
#> 
#> Input parameters
#>   tails: two
#>   sensitivity_h1: 0.9
#>   specificity_h1: 0.9
#>   n_positive: 2
#>   n_negative: 2
#>   alpha: 0.05
#>   target_power: 0.8
#> 
#> 
#> Output parameters
#>   z_sensitivity: 4.242641
#>   z_specificity: 4.242641
#>   power_sensitivity: 0.9887753
#>   power_specificity: 0.9887753
#>   total_sample_size: 4
#>   actual_power: 0.9887753
#> 
#> 
#> Notes
#> - Joint power uses the minimum of sensitivity and specificity power (Bonferroni-style).
#> - A priori sample sizes are rounded up to integer values and actual power is recomputed.

Survival (log-rank)

power_compute("survival_logrank", "post_hoc", hazard_ratio = 0.65,
              total_n = 200, event_rate = 0.5, alpha = 0.05)
#> ggpower result
#> Test: Biomarker: Survival log-rank test
#> Analysis: post_hoc
#> 
#> Input parameters
#>   tails: two
#>   hazard_ratio: 0.65
#>   event_rate: 0.5
#>   allocation_ratio: 1
#>   total_sample_size: 200
#>   alpha: 0.05
#> 
#> 
#> Output parameters
#>   expected_events: 100
#>   z_statistic: 2.153915
#>   power: 0.5769122
#> 
#> 
#> Notes
#> - Schoenfeld/Freedman log-rank approximation for equal follow-up.

Cox prognostic models

power_compute("cox_regression", "post_hoc", hazard_ratio = 0.65,
              events = 100, alpha = 0.05)
#> ggpower result
#> Test: Biomarker: Cox proportional hazards (single covariate)
#> Analysis: post_hoc
#> 
#> Input parameters
#>   tails: two
#>   hazard_ratio: 0.65
#>   events: 100
#>   alpha: 0.05
#> 
#> 
#> Output parameters
#>   z_statistic: 4.307829
#>   power: 0.9905593
#> 
#> 
#> Notes
#> - Wald test power from expected number of events.
power_compute("cox_regression", "a_priori", hazard_ratio = 0.7,
              alpha = 0.05, power = 0.8)
#> ggpower result
#> Test: Biomarker: Cox proportional hazards (single covariate)
#> Analysis: a_priori
#> 
#> Input parameters
#>   tails: two
#>   hazard_ratio: 0.7
#>   events: 62
#>   alpha: 0.05
#>   target_power: 0.8
#> 
#> 
#> Output parameters
#>   z_statistic: 2.808461
#>   actual_power: 0.8019204
#> 
#> 
#> Notes
#> - Wald test power from expected number of events.
#> - A priori sample sizes are rounded up to integer values and actual power is recomputed.

Multiplicity and FDR

power_compute("discovery_fdr", "post_hoc", effect_d = 0.5, m_tests = 1000,
              pi0 = 0.9, fdr_level = 0.05, n = 40, alpha = 0.05)
#> ggpower result
#> Test: Biomarker: Discovery power under FDR control
#> Analysis: post_hoc
#> 
#> Input parameters
#>   m_tests: 1000
#>   proportion_null: 0.9
#>   effect_size_d: 0.5
#>   n_per_comparison: 40
#>   fdr_level: 0.05
#>   alpha: 0.05
#> 
#> 
#> Output parameters
#>   alternative_hypotheses: 100
#>   single_test_power: 0.8693981
#>   expected_discoveries: 86.93981
#>   expected_fdr: 0.5175995
#>   power: 0.08398368
#> 
#> 
#> Notes
#> - BH-FDR framework with independent t-test approximations per biomarker.