Download Analyzing Clinical Drug Utilization

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Psychedelic therapy wikipedia , lookup

Neuropsychopharmacology wikipedia , lookup

Orphan drug wikipedia , lookup

Polysubstance dependence wikipedia , lookup

Biosimilar wikipedia , lookup

Compounding wikipedia , lookup

Pharmacognosy wikipedia , lookup

Neuropharmacology wikipedia , lookup

Theralizumab wikipedia , lookup

Pharmaceutical industry wikipedia , lookup

Medication wikipedia , lookup

Drug design wikipedia , lookup

Drug interaction wikipedia , lookup

Pharmacogenomics wikipedia , lookup

Prescription costs wikipedia , lookup

Bad Pharma wikipedia , lookup

Drug discovery wikipedia , lookup

Pharmacokinetics wikipedia , lookup

Transcript
Paper PR01
Analyzing Clinical Drug Utilization
Jianming He, Brian Griffin
Solucient LLC, Berkeley Heights, NJ
ABSTRACT
This paper discusses several core programming issues in identifying and reporting clinical drug utilization
pattern by using SAS programming language. The most concerned topics for drug therapy, like drug
switching, concomitance, compliance of therapy etc, are discussed in detail. It lays out the framework to
complete the study successfully. We will introduce a tool of SAS drug intelligence, which meets both
technical and non-technical business analysts’ needs. A sample code performed on a mock up dataset is
listed for reference.
INTRODUCTION
Clinical data analysis helps us understand drug effectiveness and efficiency. It provides insight on
pharmaceutical marketing strategy and industry trends, to assist in targeting the right customers.
Researchers are interested in patterns of drug usage, how drugs are used in combination therapy, how they
are switched within drug class, or changes in rout for a given drug.
For the inpatient typically drug data has a patient identifier, dosage, route, drug name, drug code, drug cost
etc. In this paper we will concentrate in analyzing drug usage patterns. We will use data elements such as
patient id (PID), drug name (DRUG), service day (SERD), etc as the sample dataset and name it as dataset
“master”.
Data master;
Input pid
Cards;
1 A 1 1 A
1 B 5 1 B
1 A 8 1 A
;
drug $ serd
@@;
2 1 A 3 1 A 4
6 1 B 7 1 A 7
9 2 …
/* More Records here */
CORE ISSUES FOR IDENTIFYING DRUG UTILIZATION PATTERN
1) Drug Compliance
Compliance measures whether a patient is taking their medication as prescribed. Some data sources only
provide the medication start time and stop time. We will need to use drug guide lines to populate the service
date in between start and stop times and assume the patient actually takes the medication.
For example, ARANESP® (Darbepoetin alfa) is given once every two weeks. Let ’s assume we have a
dataset with patient identifier ( PID), drug identifier (drug), drug start date (start), drug stop date (stop). The
following code will populate the service day according to the drug usage guideline.
If the data is populated with drug service date, then dosing frequencies can be compared to guidelines and
best practices to check with compliance.
do serd=start to stop;
if mod(serd,14)=0;
output;
end;
2) Switching Pattern
There are a couple of definitions on therapy lines. One definition is to choose therapy line according to the
drug usage sequence. If we are just interested in no more than two drug therapy lines, it is fine to compare
the drug initiation day. However, it does not work on more than two therapy lines. At the second switch, the
second drug could switch back to the initial drug. Therefore we need determine therapy lines based on
switching patterns.
With regard to drug therapy, switching in medication is defined as a patient stops taking drug A and switches
to drug B. Take a two drugs case as an example. A patient can switch from drug A to drug B at day 5 and
switch back to drug A at day 7. We need to use the LAG function to show the switching patterns.
1
The diagram captures the patients (pid=1) ’s behavior in the data set “Master”. We are expecting to get a
result as:
SERD
5
7
CHANGE
A->B
B->A
Drug B
Drug A
Day
1
Drug A
2
3
4
5
6
7
8
9
Diagram 1) Switching Therapy
One solution is to use the LAG function to solve the problem. The following code will figure out the switching
patterns.
data switch;
set master; by pid todrug notsorted;
where todrug ne '' ;
if first.todrug then do;
fromdrug=lag(todrug);
change =compress(fromdrug||'->'||todrug);
if not first.pid then output;
end;
run;
The above code delineates how a patient was switched from one drug to a second drug. However, if a
combination of drugs are used at the same time (combination therapy), the code will pick only one drug
depending on how the drug list is sorted. To capture how drugs in combination therapy are switched, we
need to refresh the dataset further and use the code in the next section.
Frequently studies are focused on how initial drugs are switched to second line drugs and how second line
drugs are switched to third line drugs. For the higher order switching, it depends on the specific research
needs.
Second
Initial drug
CAB
LAB
Cancidas
Fluconzole
Sporanox
Vfend
CAB
*
*
*
*
*
*
LAB
*
*
*
*
*
*
Cancidas
*
*
*
*
*
*
Fluconazole
*
*
*
*
*
*
Sporanox
*
*
*
*
*
*
Vfend
*
*
*
*
*
*
Diagram 2) A sample template of reporting antifungal drug1 switching
3) Drug Combination Therapy
When patient takes multiple medications simultaneously to treat a condition, this is called combination
therapy.
There are a number of distinct models used in determining combination therapy. Most drug combinations
occur between two drugs. For the convenience of our discussion, in the rest of the paper we are dealing with
two drugs combinations only.
1
CAB, Ampho B tablets, LAB, Ampho B lipid. These are all antifungal drugs.
2
In an out patient setting, there are some difficulties in discerning whether a patient is concomitantly taking
medications or whether s/he has dropped off of one the medications. We may compute the combination
therapy by the sequence of fills etc. In the inpatient environment, we may define the combination as the
prescription overlaps. In this paper we will focus on the use of files where the daily administration of drugs is
recorded such as would be found in hospital inpatient data.
For instance, drug A and drug B are used in combination from day 4 to day 8. For this time frame, there is a
combination therapy of drug A and drug B.
We are primarily interested in two drug combination therapies. To capture all two drugs combinations out of
the same therapeutic drug class, PROC PLAN in SAS/STAT provides effective solution.
Drug B
Drug A
Day 1
2
3
4
5
6
7
8
9
Diagram 3) Combination Therapies
If two drugs are set with a combination flag, the old dataset needs to be refreshed. This is especially
important when mono therapy and combo therapy are analyzed in the same time. We may create new a
drug name for the different combined set of drugs and set the previous drug index to zero.
Reporting combination therapy can be formatted as a half triangle (see below). Take the antifungal drug
market as an example, we may design the output templates as Diagram 4. There is no need to report
diagonal cells because they represent mono therapies. As shown in the following template, there is no need
to report in the shaded cells.
CAB
LAB
Cancidas
Fluconzole
Sporanox
Vfend
*
*
*
*
*
*
*
*
*
*
*
*
*
*
CAB
LAB
Cancidas
Fluconazole
Sporanox
*
Vfend
Diagram 4) A sample template of reporting Concomitance
4) Consecutive condition check
When patients take medications, the days of administration are not always consecutive for a variety of
reasons including missing data entry or lapses in prescribing. It is advised that a consecutive check on the
generated switching or combination data be done. We want to ensure a drug is used in combination with
another drug at least two days or more. Therefore, the consecutive check is important in our data
manipulation. A LAG function is a good tool for this problem. Remember, the consecutive check is not a
must, it depends on the different business questions.
IMPLEMENTING STRATEGY
What is the best way to do the data analysis for clinical drug utilization analysis?
1)
Data cleaning. Both statistical and pharmacology knowledge is needed for a data quality check. It is
advisable to check the dose and administration information as a guard against data entry error
skewing study results.
3
2)
It is better to perform the combination study first and then do the switching study. For a combination
study, we need know if a consecutive usage check is needed and what is the threshold. Are we
interested in more than three drug combinations? Once we set up the combination flag we may
refresh the dataset to make the mono therapy flag zero. The new datasets will be a good starting
point for switching research.
Data Cleaning
Drug usage trend
study
Combo Study
N
Consecutive
Check?
Y
Consecutive check
Switching Study
N
Need Fresh Data
?
Y
Refreshing Data
Consecutive
Check?
N
Y
Consecutive Check
Other Studies
Diagram 5) Flow chart for the drug pattern identification
4
3)
For switching studies, a business decision is needed for whether we need consecutive check or
not. Are we interested in one Combination therapy or multiple difference combination therapies
etc?
4)
If the data is longitudinal, there are some other issues that might be involved. For example,
persistency, whether a patient is still on therapy at a given timeframe, patient wash out time period,
etc. Since those topics do not appear challenging in coding, they are not our focus.
In the appendix, we show a sample code for a mock up clinical data set to address a topic. Interested
readers can find out what the solution is for each topic.
BUILDING A PRODUCT FOR CLINICAL DRUG INTELLIGENCE
With SAS/Intranet or other OLAP tools like Microstrategy ©, we can build up a clinical drug intelligence
solution tool for pharmaceutical or other health care business marketing department.
SAS Clinical Drug Intelligence Tools 1.0
Choose a Standard Report
Select a Standard Report from the drop-down list box. If you want to create a name for your report, type
it in the Name Your Report field.
Available Drug Therapy Reports
Drug sw itching report
Name Your Report
Antifungal Drug Sw itching Patterns
Diagram 6) An example of the drug market intelligence solution tool
In this market basket analysis, we need address the effectiveness of:
•
Market segmentation (including patient, physician and hospital)
•
Characteristics of drug therapy
•
Cross effect of drugs therapy
•
Market share of chosen drugs
Market segmentation definition is usually based on who the customer is. If targeting physicians, the
characteristic of physician like specialty, graduate years etc will be factors for modeling. Hospitals can be
broken by bed size, teaching or non teaching status. Patients can be segmented by diagnosis and
procedures, or by drug therapies or even combination of them. For instance, for antifungal drug patients, we
may break days of therapy by prophylaxis, first line treatment usage, subsequent treatment etc. Or, by
diagnosis and procedures, we can break the days of therapy as cancer, HIV/AIDS, burn, renal insufficiency,
liver dysfunction, diabetes, or other. For drug therapy we have the flexibility to choose selected drug route or
dosage. Patients can also be broken by drug switching patterns etc. Besides those methods, statistical
methods like cluster analysis or factor analysis are also applicable. We also have the capability to report the
days of drug initiation trend, length of therapy, average dosage etc. Drop-down windows are created for
analyzing drug occurrence, combination and switching of therapy. Diagram 6 shows such an example.
5
To help business analysts, this tool has the functionality to project patient counts and dosage units to
national levels. To help make comparisons, risk adjustment and severity adjusting factors also need to be
considered.
Based on these techniques for drug utilization, a tool for drug market intelligence can refresh the clinical
drug ad hoc studies from product centric to customer centric. Therefore, the ROI of the efforts can be
tremendously increased.
CONCLUSION
A strategic solution for clinical drug utilization is always needed before coding because of the complexity of
the question. It is important to select the right sequence of studies because one study may be the basis of
the other. For a comprehensive strategic solution, we can use SAS to create a standard product to get better
insight.
REFERENCE
SAS institute Inc. (1999), SAS online Document©, Cary, NC: SAS institute Inc.
Aslam Chaudhry (2004), CRM: Making it Simple for the Banking Industry, Proceedings of the Twenty-ninth
Annual SAS Users Group International Conference, Cary, NC: SAS Institute Inc.
ACKNOWLEDGEMENTS
Thanks to Anne Mahoney for valuable comments.
SAS and all other Institute Inc. product or service names are registered trademarks or trademarks of SAS
institute Inc. in the USA and other countries. ® indicates USA registration. Other brand and product names
are trademarks of their respective companies.
CONTACTS
Jianming He
Solucient LLC
Berkeley Heights, NJ 07922
(734) 669-7835
[email protected]
Brian Griffin
Solucient LLC
Berkeley Heights, NJ 07922
(734) 669-7834
[email protected]
6
APPENDIX
******************************************************************************
*
A Sample Code for Clinical Drug Utilization Pattern
*
*
*
******************************************************************************
;
******************************************************************************
* Create a mock up dataset for clinical drug
*
* For example,we randomly choose a sample with 100 sample and 3 drugs.We want*
* a dataset with patient id (PID),service day(SERD) and drug identifier (DRUG*
* including zosyn,invanz and vancomycin as an example);
*
******************************************************************************;
proc format ;
value drug
1='Zosyn'
2='Invanz'
3='Vancomycin'
;
data seed(keep=pid drug serd l);
do pid=1 to 100;
do drug=1 to 3;
eddate=max(ceil(ranuni(0)*5),ceil(ranuni(7)*7));
stdate=min(ceil(ranuni(0)*5),ceil(ranuni(7)*7));
do serd=stdate to eddate;
l=1;
label pid='Patient Id'
serd='Service Day';
output;
end;
end;
end;
run;
* Creating a Random Sample without Replacement;
data master(drop=obsleft sampsize);
sampsize=100;
format drug drug.;
obsleft=totobs;
do while(sampsize>0);
pickit+1;
if ranuni(0)<sampsize/obsleft then do;
set seed point=pickit
nobs=totobs;
output;
sampsize=sampsize-1;
end;
obsleft=obsleft-1;
end;
stop;
run;
* Complete mock up dataset;
******************************************************************************
* Code for Drug Switching;
*
*
*
* We use Lag function to track how drug switching happens if the initial drug*
* is a combo therapy, the following only pick the first drug depend on how
*
* they are sorted. We recommend to do switching pattern analysis after combo *
* analysis
*
******************************************************************************;
proc sql noprint;
7
select distinct drug , count(distinct drug) into:drugl separated by ' ',
:ct from master;
quit;
proc sort data=master nodupkey ; by pid serd drug;
proc transpose data=master out=switch1 prefix=d ; by pid serd; id drug; var l;
run;
%macro switch;
data switch2 (keep=pid todrug serd);
set switch1 ;
select;
%do i=1 %to &ct;
%let drug&i=%scan(&drugl, &i);
when (d&&drug&i) todrug=&i;
%end;
otherwise;
end;
data finalswitch (drop=fromdrug todrug);
set switch2; by pid todrug notsorted;
where todrug ne . ;
if first.todrug then do;
fromdrug=lag(todrug);
change =compress(put(fromdrug, drug.)||'->'||put(todrug,drug.));
if not first.pid then output;
end;
run;
%mend;
%switch;
proc print data=finalswitch label;
title1 'Switching pattern';
******************************************************************************
* Combo therapy analysis
*
*
*
* We use proc plan to generate the combination patterns
*
******************************************************************************;
proc sort data=master(keep=pid serd drug l) nodupkey ; by pid serd drug;
proc sql noprint;
select distinct drug, count(distinct drug) into: drugl separated
by ' ',:ct from master;
quit;
data _null_;
com= fact(&ct)/(fact(%eval(&ct)-2) * fact(2));
call symput('combin', com);
proc transpose data=master out=trans ; by pid serd ; id drug; var l;
run;
%macro combo;
data temp;
set trans;
%do i=1 %to &ct;
%let drug&i=%scan(&drugl, &i);
if &&drug&i=. then &&drug&i=0;
%end;
if %do i=1 %to &ct;
8
%let drug&i=%scan(&drugl, &i); &&drug&i+
%end; 0>1;
run;
ods output Plan=combinations;
proc plan;
factors Block=&combin ordered Treat= 2 of &ct comb;
run;
data new;
set combinations;
j=_n_;
format var1 var2 $15.;
select (treat1);
%do i=1 %to &ct;
%let v&i=%scan(&drugl, &i);
when (&i) var1="&&v&i";
%end;
otherwise;
end;
select (treat2);
%do i=1 %to &ct;
%let v=%scan(&drugl, &i);
when (&i) var2="&&v&i";
%end;
otherwise;
end;
master=compress(var1||var2||'='||var1||'*'||var2);
ifcon=
'if '||compress(var1||var2)||'=1 then do;'||var1||'=0;'||var2||'=0 ; end';
run;
proc sql noprint;
select distinct master , ifcon into: list1 separated by';', :refresh
separated by ';' from new ;
quit;
data combo;
set temp;
&list1;
&refresh;
drop _name_ %do i=1 %to &ct ;
%let drug&i=%scan(&drugl, &i); &&drug&i %end;;
run;
%mend combo;
%combo;
proc print data=combo label; title 'Combo Pattern';
run;
******************************************************************************
* Consective check
*
* Before coding, business rule needs to be make on threshold of therapy
*
* Pattern
*
******************************************************************************;
ods output variablesalpha=member;
proc contents data=combo ;run;
proc sql noprint;
9
select distinct variable, count(distinct variable)into :list separated by
' ',:ctl from member where upcase(variable) not in ('PID','SERD');
create table all as select distinct pid, min(serd) as start, max(serd) as
end from combo group by pid order by pid;
data alld;
set all;
do serd=start to end;
output;
end;
proc sort data=alld ; by pid serd;
proc sort data=combo; by pid serd;
data new;
merge alld(in=l) combo(in=m); by pid serd;
if m then ident=1;
else ident=0;
%macro consecheck;
%do i=1 %to &ctl;
%let drug&i=%scan(&list,&i);
data temp;
set new(keep=pid serd &&drug&i); by pid;
drug="&&drug&i";
if &&drug&i=1 and lag(&&drug&i)
/*and lag2(&&drug&i)=1*/ then id=1;
* Depending the threshold, if two consecutive days we need one LAG function;
* If three consecutive days two LAG functions are needed;
if id=1 then output;
proc sql noprint;
select count(*) into:con from temp;
%if &con>0 %then %do;
data temp;
set temp;
output;
* if at least two consecutive days, use one following statement;
* if at least three consecutive days, duplicate the following statement;
serd=serd-1;
&&drug&i=1;
id=1;
output;
proc sort data=temp (keep =pid serd drug);by pid serd;
proc append data=temp base=finalcheck;
%end;
%mend;
%end;
%consecheck;
run;
proc print data=finalcheck label;
title 'Consective Check Pattern';
run;
10