Skip to contents

In plain English

You have a continuous biomarker and want to know whether it can discriminate diseased from non-diseased subjects. ROC AUC summarizes that discrimination. This vignette covers one-sample AUC vs chance (0.5) and two-sample AUC comparison.

One-sample AUC vs null

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.

Compare two biomarkers

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.

Formula

Hanley-McNeil SE for one AUC; DeLong-style variance for two independent AUCs. See formula reference.

Plot

Run the calculation in the Biomarker Discovery module to see the distribution and sample-size curve.