Health Systems Research and Dynamical Modeling Department of Epidemiology & Public Health
R: weapon of choice for simulation of a step wedge design
Step-wedge design – cluster-randomized design
Time1 2 3 4 5O X X X XO O X X XO O O X XO O O O X
• Time of crossover is randomized; crossover is unidirectional
• Outcome should be measured on each unit at each time step
• Multiple observations per unit
• Individuals at each time could be same (cohort) or different (cross-sectional)
Brown and Lilford BMC Medical Research Methodology 2006 6:54
13 September 2102
Reasons for choosing a step-wedge design
• Logistical or financial - cannot introduce the intervention in all units at once
• Systematically evaluate new program - Evaluate the community effectiveness of an intervention previously shown to be efficacious in an individually randomized trial or in a different setting
• To study the effect of time on intervention effectiveness (i.e., seasonality, time since introduction)
13 September 2102
Example: elimination of malaria from Rusinga Island, Kenya
Solarmal technology: odour-baited mosquito trap
Battery, charger + timer
Light switch
Mosquito Trap
Solar Panel
Connection for charging mobile phone
Solar panel system
Takken et al., University of Wageningen, the Netherlands13 September 2102
Possible comparisons in cluster-randomized trials of health interventions
Non-Inter-vention
Intervention Remote Baseline
DIRECT
OVERALL
INDIRECT
DIRECT AND INDIRECTIntervention phase
Baseline
Pre-intervention
13 September 2102
Non-interventionIntervention Remote
OVERALL WITH CONCURRENT COMPARATOR
13 September 2102
Step Wedge Design 8
Direct effect:
Incidence measures compared between intervened and non-intervened zones
Direct effect:
Incidence measures compared between intervened and non-intervened zones
Contemporaneous overall effect
Incidence measures between intervened and those close to intervention against those remote from intervention
Contemporaneous overall effect
Incidence measures between intervened and those close to intervention against those remote from intervention
Measures of efficacy
13 September 2102
Step Wedge Design 9
SolarMal design constraints
• 4000 traps, with 700 day rollout period. 24,000 individuals
• Cluster size ~ 60 traps – the number of traps that can be installed in one week
• Number of individuals receiving the intervention at each time step is the sum of the number of individuals per household per cluster
First look at the general problem of step wedge designs; then apply the theoretical results to SolarMal
13 September 2102
Three intervention rollout schema
Oil drop – starting in the lower left hand corner, to the upper right hand corner
Completely randomized design – randomly selecting clusters to receive the intervention
Hierarchical design – randomly select one of 9 sections, filling in those clusters first, then randomly selecting the next section
13 September 2102
The ‘Oil spill’ design?
t=0Oil drop
The ‘Oil spill’ design?
t=0Random
The ‘Oil spill’ design?
t=0Hierarchical
Step Wedge Design 14
Questions:
Which design has the most power – i.e., produces the narrowest confidence intervals? How does the potential bias rank across designs?
If clustering is helpful, to what degree?
10 September 2102
Each design evaluated for a suite of initial conditions and constraints
• Initial clinical case rate of 0.30, 0.50, 0.80
• Intervention efficacy of 0.1, 0.3, 0.5, and 0.8
• Community radius of 0.5, 1.0, 1.5, 2.0, 2.5
Power measure: the confidence interval width for the two efficacy measures for a given design and set of initial conditions
10 September 2102
Simulation
10 September 2102
Step Wedge Design 17
Simulation physical layout [ mimic Rusinga Island]
9 districts, each containing 9 clusters, for a total of 81 clusters
1000 houses are randomly located across the grid
3000 individuals are randomly assigned to the 1000 houses
Four stages to the simulation
Initialization t ≤10Burn-In 11< t ≤ 39Intervention 40 <t ≤ 121Post-Intervention t >121
10 September 2102
Step Wedge Design 18
Simulation stage
Initialization (t=1-9) InfectionMatrix <- as.integer( runif(endInitial*NIndividuals) < initialPrevalence)
During this time we start to build the disease reservoir (t ≥10)reservoirx <- 0.1*InfectedNeighbors[t-6, ] + 0.2*InfectedNeighbors[t-7, ] + 0.4*InfectedNeighbors[t-8, ] + 0.2*InfectedNeighbors[t-9, ] + 0.1*InfectedNeighbors[t-10, ]
reservoir = rbind(reservoir, reservoirx , deparse.level=0)
Spacing of clinical episodes is two months +/- two weeks - We model this with a distributed lag – reservoir is a weighted average of previous clinical cases amongst neighbors
10 September 2102
Step Wedge Design 19
Simulation stage
Burn in ((t ≥10 < 40) Pure ARMAfor (t in (endInitial+1):endOfBurnIn) { reservoirx = 0.1*nir[t-6, ] + 0.2*nir[t-7, ] + 0.4*nir[t-8, ] + 0.2*nir[t-9, ] + 0.1*nir[t-10, ]
infected[t,] = rbinom(reservoirx,1,reservoirx) # strange syntax of rbinom nir[t,] = sapply(neighborHs, function(X)mean(infected[t,X])) # tracking the mean case rate in each neighborhood
}
nir = non-intervened case rate – the intervention hasn’t yet been introduced
10 September 2102
Pure ARMA, Initial Prevalence = 0.4
14 July 2012 Step Wedge Design 21
Simulation stage
Intervention (t=40-121) Maintenance (t>121)
infectedx =
(runif(1:NIndividuals) < ((1-efficacy*CoverageMatrix[t,])*(1-exp(-reservoirx*underlying))))
where underlying infection rate = -log(initialPrevalence/(1-initialPrevalence)) coverage = percent of the individual’s neighbors who have had the intervention
At time points greater than t > 121, the coverage is unit, and the simulation reverts to an Arma process at the new disease level.
Base case simulation
Eff
ica
cy
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Time point
40 60 80 100 120 140
efficacy=0.8 radius=1 initialPrevalence=0.5
PLOT Eff_I Eff_IIa Eff_IIb Eff_III eff_IV efficacy
Simulation Machinery
Simulation grid
14 July 2012 Step Wedge Design 26
RandomizeDistribution sequence for cluster within district is assigned
RandomizeDistribution sequence for cluster within district is assigned
Houses X, Y coordinates 1000 houses across a 9 km2 grid. Corresponding district & cluster assignments are drawn from data in randomize
IndividualsEach house contains at least one individual
DistanceDistances between all individuals (not houses)
NeighborsStructured list of all neighbors within radius R of a given individual.
Houses X, Y coordinates 1000 houses across a 9 km2 grid. Corresponding district & cluster assignments are drawn from data in randomize
IndividualsEach house contains at least one individual
DistanceDistances between all individuals (not houses)
NeighborsStructured list of all neighbors within radius R of a given individual.
Intervention list The time-step in which each house (and the individuals within it) receives the intervention
Intervention list The time-step in which each house (and the individuals within it) receives the intervention
Simulation machinery: design-specific data containers
14 July 2012 Step Wedge Design 27
Simulation machinery: data containers
Each row is a single time step, each column an individual
InfectionMatrix Values are 1 or 0 depending on the infection status of the individual
InfectedNeighbors Values are a percentage of infected neighbors for that individual.
ReservoirValues are a weighted mean of the number of infected neighbors at timesteps in the past, namely t-10 to t-6.
InterventionMatrix Values are 1 or 0 depending on the intervention status of the individual.From time-steps 0-39, Intervention matrix has value 0; for times after timestep 121,the end of rollout, all values are 1.
CoverageMatrix Values are a percentage of intervened neighbors for each individual.From time-steps 0-39, coverage matrix has value 0; for times after timestep 121,the end of rollout, all values are 1.
Each row is a single time step, each column an individual
InfectionMatrix Values are 1 or 0 depending on the infection status of the individual
InfectedNeighbors Values are a percentage of infected neighbors for that individual.
ReservoirValues are a weighted mean of the number of infected neighbors at timesteps in the past, namely t-10 to t-6.
InterventionMatrix Values are 1 or 0 depending on the intervention status of the individual.From time-steps 0-39, Intervention matrix has value 0; for times after timestep 121,the end of rollout, all values are 1.
CoverageMatrix Values are a percentage of intervened neighbors for each individual.From time-steps 0-39, coverage matrix has value 0; for times after timestep 121,the end of rollout, all values are 1.
Main simulation loop
To evaluate a range of community radii, efficacies, prevalences for given design
for i1 in (1 : 3)
radius = 0.5*i1
for i2 in (1 : 3)
efficacy=-0.1+0.3*i2
for i3 in (1 : 3)
initialPrevalence=-0.1+0.3*i3
}
}
}
Rinse, repeat, 2000 times.
Preliminary Results
13 September 2012 Step Wedge Design 31
Summary
Problem lent itself to vectorized implementation
R scaled well to mainframe
Model can accommodate actual coordinates for Rusinga island
13 September 2012 Step Wedge Design 32
Thank you !
14 July 2012 Step Wedge Design 33
Simulation design for solar mal, possibly too specific
Community effects