utility.scoring {boinet}R Documentation

Discrete Scoring Utility Function for Toxicity-Efficacy Trade-offs

Description

Calculates utility scores using a discrete scoring system based on the four possible combinations of binary toxicity and efficacy outcomes. This approach assigns specific utility values to each outcome combination, providing an intuitive and clinically interpretable method for dose selection that directly reflects clinical preferences for different risk-benefit scenarios.

The scoring utility function is particularly valuable when clinical stakeholders can easily specify their preferences for discrete outcome scenarios rather than dealing with continuous probability trade-offs. It naturally handles the clinical reality that the combination of toxicity and efficacy outcomes may have non-additive effects on clinical utility.

Usage

utility.scoring(probt, probe, psi00, psi11)

Arguments

probt

Numeric vector of estimated toxicity probabilities for each dose. Values should be between 0 and 1.

probe

Numeric vector of estimated efficacy probabilities for each dose. Values should be between 0 and 1. Must have same length as probt.

psi00

Numeric value specifying the utility score for the outcome combination (Toxicity=No, Efficacy=No). Typically ranges from 30-70, representing the clinical value of avoiding harm while missing therapeutic benefit.

psi11

Numeric value specifying the utility score for the outcome combination (Toxicity=Yes, Efficacy=Yes). Typically ranges from 40-80, representing the net clinical value when efficacy is achieved despite toxicity.

Details

Mathematical Formulation:

The utility function is based on expected utility across four discrete outcomes:

U(p_T, p_E) = \sum_{t \in \{0,1\}} \sum_{e \in \{0,1\}} P(T=t, E=e) \cdot \psi_{te}

Assuming independence between toxicity and efficacy:

U(p_T, p_E) = \psi_{00}(1-p_T)(1-p_E) + \psi_{01}(1-p_T)p_E + \psi_{10}p_T(1-p_E) + \psi_{11}p_T p_E

Where:

Default Implementation: This function uses a simplified 2-parameter version with fixed values:

Comparison with Other Utility Functions:

vs. Weighted Utility:

vs. Truncated Linear:

Value

Numeric vector of expected utility values for each dose, with the same length as the input probability vectors. Values typically range from 0 to 100, where higher values indicate more desirable risk-benefit profiles. The maximum possible utility is 100 (efficacy without toxicity) and minimum is 0 (toxicity without efficacy).

Note

References

See Also

utility.weighted for continuous trade-off approach, utility.truncated.linear for piecewise linear utility, obd.select for optimal biological dose selection using utilities.

Examples

# Example 1: Basic scoring utility calculation
# Scenario: Acute leukemia treatment with curative intent

# Dose-response probabilities
toxicity_probs <- c(0.10, 0.25, 0.40, 0.55, 0.70)
efficacy_probs <- c(0.20, 0.45, 0.65, 0.80, 0.85)

# Curative intent scoring: ineffectiveness penalized, mixed outcome acceptable
psi_safe_ineffective <- 35  # Low score for missing cure opportunity
psi_toxic_effective <- 75   # High score for achieving cure despite toxicity

utilities <- utility.scoring(
  probt = toxicity_probs, probe = efficacy_probs,
  psi00 = psi_safe_ineffective, psi11 = psi_toxic_effective
)

# Display outcome probability breakdown
results <- data.frame(
  Dose = 1:5,
  P_Tox = toxicity_probs,
  P_Eff = efficacy_probs,
  P_Safe_Ineffective = round((1-toxicity_probs) * (1-efficacy_probs), 3),
  P_Safe_Effective = round((1-toxicity_probs) * efficacy_probs, 3),
  P_Toxic_Ineffective = round(toxicity_probs * (1-efficacy_probs), 3),
  P_Toxic_Effective = round(toxicity_probs * efficacy_probs, 3),
  Expected_Utility = round(utilities, 1)
)
print(results)

# Optimal dose selection
optimal_dose <- which.max(utilities)
cat("\\nOptimal dose for curative intent:", optimal_dose,
    "with utility:", round(max(utilities), 1), "\\n")


[Package boinet version 1.4.0 Index]