longitudinal methods for pharmaceutical policy evaluation common analytic approaches michael law the...
TRANSCRIPT
Longitudinal Methods for Pharmaceutical Policy Evaluation
Common Analytic Approaches
Michael LawThe Centre for Health Services and Policy Research
The University of British Columbia
Vancouver, Canada
ObjectivesDiscuss two longitudinal methods
– Interrupted Time Series– Survival analysis
For each, I will briefly cover– The data required– Modeling techniques and software
The key messages• If you plan in advance, you can collect the
right data• There are multiple data sources that work
– includes sales data, insurance claims data, hospital data and sample-based data
• Statistical methods are more sophisticated, but not impossible
2010 20110%
10%
20%
30%
40%
50%
60%
70%
80%
90%
Perc
etna
ge o
f Pati
ents
Usi
ng M
edic
ine
Higher Drug Co-payment
Jan-10
Feb-10
Mar-10
May-10
Jun-10Jul-1
0
Aug-10
Oct-10
Nov-10
Dec-10
Feb-11
Mar-11
Apr-11
Jun-11Jul-1
1
Aug-11
Oct-11
Nov-11
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
Perc
enta
ge o
f Pati
ents
Usi
ng M
edic
ine
Higher Drug Co-payment
2010 20110
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Region 1 Region 2
Perc
enta
ge o
f Pati
ents
Usi
ng M
edic
ine
Higher Drug Co-payment
2010 20110%
10%
20%
30%
40%
50%
60%
70%
80%
90%
Region 1 Region 2
Perc
enta
ge o
f Pati
ents
Usi
ng M
edic
ine
Higher Drug Co-payment
Interrupted Time SeriesBasic Design
– Compare longitudinal trends before and after the policy change
– Good for sharply-defined interventions
Major Assumption– The trend in the outcome among those exposed
to the policy would have been the same absent the policy
Level Change
Slope Change
Pre-intervention Post-intervention Time
Ou
tco
me
of
Inte
rest
Intervention
Adapted from Schneeweiss et al, Health Policy 2001
Counterfactual
Observed
Observed
Source: Tamblyn et al. JAMA 2001;285:421-429.
ITS with Control Series• Estimate of counterfactual becomes the
observation of what happened in the control group
• Control group adds further legitimacy by limiting effect of possible history threats
• Can be an unaffected group, another jurisdiction, etc.
0%
10%
20%
30%
40%
50%
60%
Quarter
Ma
rke
t S
ha
re o
f N
on
-Pre
ferr
ed
Ag
en
ts
West Virginia Control States (n=38)
Po
licy Im
ple
me
nta
tio
n
Effect of Policy
Source: Law et al. Psychiatric Services. 2008
Strengths of Time Series• Easy to show results graphically• More robust to secular trends• Less difficult to estimate and communicate
than other methods– E.g. propensity score matching, instrumental
variables estimates
• Null results are more convincing
Problems with Time Series• Requires reasonably stable data• Can be biased by co-interventions• Need longer-term data• Linear trend might not be realistic
Data setup for ITS• Need: Time, population-level outcomes
Observation Time Outcome Post Post_Time
1 1 45.3 0 0
2 2 54.2 0 0
3 3 47.5 0 0
4 4 56.3 0 0
5 5 52.3 1 1
6 6 48.6 1 2
7 7 50.2 1 3
8 8 46.2 1 4
Statistical Modeling• Statistical Model: segmented regression
Outcomet=β1+β1timet+β1policyt+β1timetpolicyt+ε
• Should Account for autocorrelation– The tendency for subsequent values to be
related
Individual-level ITS• You can use data at the individual level
– Means collecting each outcome for each person at each time
• Requires using more sophisticated mixed model (e.g. logistic or poisson type GEE)
• Provides more power, requires more statistical skill
Survival Analysis• Method of studying longitudinal data on
the occurrence of events• Also known as “time to event” studies• For example:
– time until discontinuation– time until drug dispensing
When to use SA• Time to event outcomes• Data at the patient-level• Time to anything (death, expenditure
threshold, etc.)
Who to compare to?• Two basic options:
– Pre-post analysis of the same population• For example, people who initiate a particular class of
medication
– Concurrent analysis of those subject to and not subject to a policy
• For example, individuals in another jurisdiction
• Be wary of potential biases
Data setup• You need the following variables to
perform a survival analysis:– Censoring: 0 if event did not occur, 1 if the
event did occur– Time to event: the number of time periods
(e.g. days) before the event or censoring took place
– Any control variables
O
X
X
X
Person Survival Time Event
4 3 1
3 5 0
2 4 1
1 6 1
1
2
3
4
0 1 2 3 4 5 6 7 8
Kaplan-Meier Analysis• Non-parametric estimate of survival
function• Commonly used as descriptive statistic
and for figures in manuscripts• Requires categorical variables for
including other variables
Cox Proportional Hazards• Method for fitting a survival model• Compares hazard rates (the instantaneous
probability of failure) between different groups
• Assumes hazard functions are proportional to one another
Key Points• Longitudinal designs make your study
– More convincing – More publishable– You can do this based on your data
• However, you need to plan for data collection from the start to ensure you get the necessary data
Further Reading• Interrupted Time Series
– A.K. Wagner et al., “Segmented regression analysis of interrupted time series studies in medication use research,” Journal of Clinical Pharmacy and Therapeutics 27, no. 4 (2002): 299-309.
• Survival Analysis– Paul Alison. Survival Analysis Using SAS: A Practical Guide.
2010. Cary, NC: The SAS Institute.– John Fox. Introduction to Survival Analysis.
http://socserv.mcmaster.ca/jfox/Courses/soc761/survival-analysis.pdf
Time Series Example CodeR
library (nlme)
itsmodel <- gls(model=outcome ~ trend + post + post_time, data=timeseries, correlation=corARMA(p=1, form=~trend),method=“ML”)
SASproc autoreg data=timeseries;
model outcome = time post post_time / method=ml nlag=(1 2 3) backstep;
run;
Example code: Kaplan-MeierR
fit<-survfit(formula = Surv(time, censor)~variable,data = survivaldata)
plot(fit, xlab="Time", ylab="Survival Probability",
col = c("blue","red"))
SASProc lifetest data=survivaldata plots=(s);
time time*censor;
strata variable;
run;
Example code: Cox P-HR
library(survival)
survmodel <- coxph(Surv(time,censor) ~ variable,
data=survivaldata)
summary(survmodel)
SASProc phreg data=survivaldata;
model time*censor(0) = variable
/rl ties=exact;
run;