Signature
Var_INMB = lambda^2 * Var_E + Var_C - 2 * lambda * Cov_EC; SE_INMB = sqrt(Var_INMB)
| Inputs | Definition | Unit |
|---|---|---|
lambda | Value of one unit of effect, the cost-effectiveness threshold | pounds per QALY |
Var_E | Variance across bootstrap replicates of the difference in mean QALYs between arms | QALYs squared |
Var_C | Variance across bootstrap replicates of the difference in mean cost between arms | pounds squared |
Cov_EC | Covariance across bootstrap replicates of the differences in mean QALYs and mean cost | pounds times QALYs |
Var_INMB | Variance of incremental net monetary benefit across bootstrap replicates | pounds squared |
|---|---|---|
SE_INMB | Square root of Var_INMB | pounds |
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.58Worked 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.12Excel:
=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-9Common 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.
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.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0