Variance of incremental net monetary benefit across paired bootstrap replicates

Gives the bootstrap variance of incremental net monetary benefit from the variances of the differences in mean effect and mean cost and their covariance across replicates. Resampling each patient's cost and effect together keeps the covariance; resampling them separately forces it to zero, which understates the standard error when costlier patients have worse outcomes.

Signature

Var_INMB = lambda^2 * Var_E + Var_C - 2 * lambda * Cov_EC; SE_INMB = sqrt(Var_INMB)
Inputs
InputsDefinitionUnit
lambdaValue of one unit of effect, the cost-effectiveness thresholdpounds per QALY
Var_EVariance across bootstrap replicates of the difference in mean QALYs between armsQALYs squared
Var_CVariance across bootstrap replicates of the difference in mean cost between armspounds squared
Cov_ECCovariance across bootstrap replicates of the differences in mean QALYs and mean costpounds times QALYs
Output
Var_INMBVariance of incremental net monetary benefit across bootstrap replicatespounds squared
SE_INMBSquare root of Var_INMBpounds

Function

Bootstrap standard error of a trial statistic from resampled data

Maps a statistic and the data that produced it to the standard deviation of the statistic across samples drawn with replacement from the data, each of the same size as the original sample. The empirical distribution of the observations, with mass 1/n on each, stands in for the unknown population distribution, so no normal shape is assumed. In trial-based economic evaluation the statistic is usually a mean cost, an incremental cost or incremental net benefit, and the resampling copies the trial design by drawing patients within each arm with their costs and effects kept together.

Computational function

  • Computational function: ideal paired bootstrap standard error of incremental net benefit from patient-level data

    Takes patient-level costs and QALYs in each arm and a threshold, and returns incremental net monetary benefit and its ideal bootstrap standard error under paired resampling within arms, the limit that the Monte Carlo estimate approaches as B grows. It forms each patient's net benefit, applies the closed form for a mean, HE-FM-BSE-002, within each arm, and adds the two variances because the arms are resampled independently. Working with each patient's net benefit keeps the cost and effect covariance that HE-FM-BSE-003 carries as a separate term.

    Inputs and outputs: c_T: Vector of costs for the patients in arm T, in patient order; required. Unit: pounds.; e_T: Vector of QALYs for the same patients in arm T, in the same order; required. Unit: QALYs.; c_U: Vector of costs for the patients in arm U; required. Unit: pounds.; e_U: Vector of QALYs for the same patients in arm U, in the same order; required. Unit: QALYs.; lambda: Value of one QALY, the threshold; required, zero or above. Unit: pounds per QALY.; INMB: Incremental net monetary benefit, the difference in mean net benefit between arms. Unit: pounds.; SE_inf: Ideal bootstrap standard error of INMB under paired resampling within arms. Unit: pounds.

    Assumption: Patients are resampled in cost and effect pairs within each arm with the original arm sizes, and the arms are resampled independently. The ideal value carries no simulation noise; a Monte Carlo run with B replicates approximates it.

    Worked example (Six patients per arm at 30,000 pounds per QALY): The article's illustrative trial. Each patient's net benefit is lambda times QALYs minus cost, and the result matches the article's paired standard error. c_T = (1000, 1200, 1400, 1600, 2000, 4800); e_T = (0.82, 0.80, 0.78, 0.76, 0.74, 0.60); c_U = (600, 800, 900, 1000, 1100, 1600); e_U = (0.74, 0.72, 0.70, 0.70, 0.68, 0.66); lambda = 30000; INMB = 500; SE_inf = 1471.58

    Worked example (Threshold of zero returns the incremental cost): With lambda set to 0 the net benefit is minus the cost, so the function returns minus the incremental cost of 1,000 and the ideal standard error of the cost difference, 542.12, as in the article. c_T = (1000, 1200, 1400, 1600, 2000, 4800); e_T = (0.82, 0.80, 0.78, 0.76, 0.74, 0.60); c_U = (600, 800, 900, 1000, 1100, 1600); e_U = (0.74, 0.72, 0.70, 0.70, 0.68, 0.66); lambda = 0; INMB = -1000; SE_inf = 542.12

    Excel: =SQRT(DEVSQ(Lambda*QALYsT-CostsT)/COUNT(CostsT)^2+DEVSQ(Lambda*QALYsU-CostsU)/COUNT(CostsU)^2) With costs and QALYs in ranges named CostsT, QALYsT, CostsU and QALYsU and the threshold in Lambda, the cell, named SEINMB, returns the ideal paired standard error; Excel versions without dynamic arrays need it entered as an array formula. =Lambda*(AVERAGE(QALYsT)-AVERAGE(QALYsU))-(AVERAGE(CostsT)-AVERAGE(CostsU)) returns INMB.

    R: ideal_se_inmb <- function(cT, eT, cU, eU, lambda) { nbT <- lambda*eT-cT; nbU <- lambda*eU-cU; ss <- function(x) sum((x-mean(x))^2); c(inmb = mean(nbT)-mean(nbU), se = sqrt(ss(nbT)/length(nbT)^2+ss(nbU)/length(nbU)^2)) } Returns INMB and its ideal paired standard error for any arm sizes.

    Python: def ideal_se_inmb(cT, eT, cU, eU, lam): nbT = [lam*e-c for c, e in zip(cT, eT)]; nbU = [lam*e-c for c, e in zip(cU, eU)]; ss = lambda x: sum((v-sum(x)/len(x))**2 for v in x); return sum(nbT)/len(nbT)-sum(nbU)/len(nbU), math.sqrt(ss(nbT)/len(nbT)**2+ss(nbU)/len(nbU)**2) Uses the math module; the threshold argument is named lam because lambda is a reserved word in Python.

    Test (Zero threshold reproduces the standard error of the cost difference): Set Lambda to 0. The function's standard error, held in a cell named SEINMB, then equals the ideal bootstrap standard error of the difference in mean cost computed from the cost columns alone, 542.12 in the example. Expected result: TRUE. Excel check: =ABS(SEINMB-SQRT(DEVSQ(CostsT)/COUNT(CostsT)^2+DEVSQ(CostsU)/COUNT(CostsU)^2))<1E-9

    Common error (Resampling patients from the pooled trial instead of within arms): Drawing all 12 patients of the example from one pool lets a replicate contain unequal arm sizes, or no patients from one arm, so it no longer copies the randomised design. Each arm is resampled separately with its own size.

    Source: Briggs AH, Gray AM. Handling uncertainty when performing economic evaluation of healthcare interventions. Health Technology Assessment. 1999;3(2). Chapter 5, which samples cost and effect pairs with replacement within each treatment arm before calculating the statistic. Efron B, Tibshirani R. Bootstrap methods for standard errors, confidence intervals, and other measures of statistical accuracy. Statistical Science. 1986;1(1):54-75. Section 1, equations 1.5 and 1.6, the closed form for a mean.

    nb_T = lambda * e_T - c_T; nb_U = lambda * e_U - c_U; INMB = mean(nb_T) - mean(nb_U); SE_inf = sqrt(sum((nb_T - mean(nb_T))^2) / n_T^2 + sum((nb_U - mean(nb_U))^2) / n_U^2)

Try this function

Implementations

  • Excel

    Paired net benefit standard error from replicate columns

    With the replicate differences in mean QALYs and mean cost in ranges DeltaE and DeltaC and the threshold in Lambda, the formula returns the standard error across replicates.

    =SQRT(Lambda^2*VAR.S(DeltaE)+VAR.S(DeltaC)-2*Lambda*COVARIANCE.S(DeltaE,DeltaC))

Assumptions

  • Paired resampling within each arm

    Each replicate draws n_A cost and effect pairs with replacement from arm A and n_B pairs from arm B, so the randomised group sizes and the link between each patient's cost and outcome are kept.

  • Fixed and stated threshold for the bootstrap net benefit

    The threshold lambda is fixed and stated; the variance and the standard error change with it.

Worked examples

  • Paired resampling in the six-patient example at 30,000 pounds per QALY

    The ideal bootstrap moments, derived here from the article's illustrative patient data, are about 0.000972222 for the effect difference, 293,888.89 for the cost difference and a covariance of about -16.611, negative because the costliest patient in arm T has the lowest QALYs. The standard error of incremental net benefit is about 1,471.58 pounds, as in the article.

    lambda = 30000; Var_E = 0.000972222; Var_C = 293888.89; Cov_EC = -16.61111; Var_INMB = 2165555.29; SE_INMB = 1471.58
  • Unpaired resampling drops the covariance

    Setting the covariance to zero, as separate resampling of costs and effects does, gives about 1,081.15 pounds, about 26.5% too small.

    lambda = 30000; Var_E = 0.000972222; Var_C = 293888.89; Cov_EC = 0; Var_INMB = 1168888.69; SE_INMB = 1081.15

Common errors

  • Resampling costs and effects separately in a bootstrap

    Separate resampling sets the covariance to zero. In the six-patient example the standard error falls from 1,471.58 to 1,081.15 pounds, about 26.5% too small, because the negative correlation driven by the costliest patient in arm T is lost.

Sources

  • Briggs and Gray on paired resampling within trial arms

    Briggs AH, Gray AM. Handling uncertainty when performing economic evaluation of healthcare interventions. Health Technology Assessment. 1999;3(2). Chapter 5, which samples cost and effect pairs with replacement within each treatment arm and then calculates the statistic, and chapter 4, which repeats the process 1,000 times for cost differences.

    View source →

  • Bootstrap and central limit theorem standard errors for net benefit compared

    Nixon RM, Wonderling D, Grieve RD. Non-parametric methods for cost-effectiveness analysis: the central limit theorem and the bootstrap compared. Health Economics. 2010;19(3):316-333. Abstract, which finds bootstrap and central limit theorem standard errors for incremental net benefit both accurate with more than 50 patients.

    View source →

Canonical Identity