Skip to contents

When to Use Batch Conversion

When populating a Markov model, you may need to convert dozens of parameters simultaneously. Rather than entering each one manually, ParCC’s Bulk Conversion module lets you upload a CSV, select columns, and convert them all at once.

Supported Conversion Types

  1. Rate to Probability – for incidence rates from clinical trials
  2. Odds to Probability – for odds ratios from logistic regression
  3. HR to Intervention Probability – for applying hazard ratios to control arm probabilities

Example: PLATO Trial Parameters

Step 1: Prepare Your CSV

Create a CSV with at least these columns:

Endpoint,Control_Prob,Hazard_Ratio,Time_Horizon
CV Death,0.0525,0.79,1
MI,0.0643,0.84,1
Stroke,0.0138,1.01,1
Major Bleeding,0.1143,1.04,1
Dyspnea AE,0.0789,1.37,1
All-cause Mortality,0.0595,0.78,1

Step 2: Upload and Configure

  1. Navigate to Bulk Conversion
  2. Upload your CSV (or click “Load Sample Dataset” for a pre-built PLATO example)
  3. Select Conversion Type: HR -> Intervention Probability
  4. Select Value Column: Control_Prob
  5. Select HR Column: Hazard_Ratio
  6. Time Source: Constant = 1 (or from column)

Step 3: Run and Review

Click Run Bulk Conversion. The output table adds:

Column Description
Rate_Control Instantaneous rate derived from control probability
Rate_Intervention Control rate multiplied by HR
Intervention_Prob Converted probability for intervention arm
ARR Absolute Risk Reduction (control - intervention)
NNT Number Needed to Treat (for beneficial effects)

Step 4: Download

Click Download Results to get a CSV you can paste directly into your model spreadsheet.

Example Output

# Simulate what ParCC produces
df <- data.frame(
  Endpoint = c("CV Death", "MI", "Stroke", "Major Bleeding", "Dyspnea AE", "All-cause Mortality"),
  Control_Prob = c(0.0525, 0.0643, 0.0138, 0.1143, 0.0789, 0.0595),
  HR = c(0.79, 0.84, 1.01, 1.04, 1.37, 0.78),
  stringsAsFactors = FALSE
)

t <- 1  # 1-year horizon

df$Rate_Ctrl <- -log(1 - df$Control_Prob) / t
df$Rate_Int <- df$Rate_Ctrl * df$HR
df$Interv_Prob <- round(1 - exp(-df$Rate_Int * t), 5)
df$ARR <- round(df$Control_Prob - df$Interv_Prob, 5)
df$NNT <- ifelse(df$ARR > 0, ceiling(1 / df$ARR), NA)

# Clean display
result <- df[, c("Endpoint", "Control_Prob", "HR", "Interv_Prob", "ARR", "NNT")]
print(result)
#>              Endpoint Control_Prob   HR Interv_Prob      ARR NNT
#> 1            CV Death       0.0525 0.79     0.04171  0.01079  93
#> 2                  MI       0.0643 0.84     0.05430  0.01000 100
#> 3              Stroke       0.0138 1.01     0.01394 -0.00014  NA
#> 4      Major Bleeding       0.1143 1.04     0.11859 -0.00429  NA
#> 5          Dyspnea AE       0.0789 1.37     0.10649 -0.02759  NA
#> 6 All-cause Mortality       0.0595 0.78     0.04672  0.01278  79

Notice that endpoints with HR > 1 (Stroke, Major Bleeding, Dyspnea) show negative ARR, meaning the intervention increases the event risk – these rows correctly show NA for NNT.

Tips

  • Column naming: ParCC auto-detects columns containing “Rate”, “Odds”, “Prob”, “HR”, “Hazard”, or “Time” in their names.
  • Mixed conversions: If you have a mix of rates and probabilities, split your CSV into two files and run them separately.
  • The sample dataset is pre-loaded with realistic PLATO trial data – useful for learning the workflow.

References

  • Wallentin L, et al. Ticagrelor versus clopidogrel in patients with acute coronary syndromes. N Engl J Med. 2009;361(11):1045-1057.
  • Briggs A, et al. Decision Modelling for Health Economic Evaluation. Oxford University Press; 2006.