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
- Rate to Probability – for incidence rates from clinical trials
- Odds to Probability – for odds ratios from logistic regression
- 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
- Navigate to Bulk Conversion
- Upload your CSV (or click “Load Sample Dataset” for a pre-built PLATO example)
- Select Conversion Type: HR -> Intervention Probability
- Select Value Column:
Control_Prob - Select HR Column:
Hazard_Ratio - 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 79Notice 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.