CMS 2008 Basic Stand Alone (BSA) Prescription Drug Events (PDE) Public Use Files: https://www.cms.gov/Research-Statistics-Data-and-Systems/Downloadable-Public-Use-Files/BSAPUFS/BSA_PDE_PUF.html
These datasets contain randomly selected 5% Prescription Drug Events/records for Medicare beneficiaries during 2008.
The aims were to describe the prescription drug spending by drug category, age and drug type (brands vs. generics). Results highlit an outstanding cost of the central nervous system-acting agents prescribed to the population younger than 65-year old.
Efficient wealth redistribution and cost containment approach are critical for sustainability of healthcare coverge and the drug expense could have been saved by limiting this kind of prescriptions or lowering of drug acquisition cost.
age_tab <- claims %>% select(BENE_AGE_CAT_CD) %>% group_by(BENE_AGE_CAT_CD) %>% summarise(Percent = round(100*n()/dim(claims)[1],1)) %>% data.frame()
age_tab$BENE_AGE_CAT_CD <- as.character(age_tab$BENE_AGE_CAT_CD)
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "1"] <-"64_or_younger"
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "2"] <-"65-69"
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "3"] <-"70-74"
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "4"] <-"75-79"
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "5"] <-"80-84"
age_tab$BENE_AGE_CAT_CD[age_tab$BENE_AGE_CAT_CD == "6"] <-"85_or_older"
names(age_tab) <- c("Age_Group", "Percent")
kable(age_tab, format = "markdown")
Age_Group | Percent |
---|---|
64_or_younger | 22.9 |
65-69 | 16.5 |
70-74 | 16.8 |
75-79 | 15.2 |
80-84 | 15.6 |
85_or_older | 13.0 |
#------- The Cost of Brand and Generic Drugs --------------
summary_1 <- claims %>% group_by(BENE_AGE_CAT_CD, PDE_DRUG_TYPE_CD,PDE_DRUG_CLASS_CD) %>% select(BENE_AGE_CAT_CD, PDE_DRUG_CLASS_CD,PDE_DRUG_TYPE_CD, PDE_DRUG_COST, PDE_DRUG_QTY_DIS) %>% summarise(Number_of_Prescriptions_Events = n(),Total_Cost= sum(PDE_DRUG_COST),
Total_Quntity = sum(PDE_DRUG_QTY_DIS) ) %>% arrange(desc(Number_of_Prescriptions_Events)) %>% data.frame()
#Replace Drug Class Codes with Description, Drug Codes with Drug Name
drug_type<-foreach(i=1:dim(summary_1)[1], .combine=c) %do% {
if(summary_1[i,1]==0) "Unknown"
else if(summary_1[i,1]==1) "Brand"
else if(summary_1[i,1]==2) "Generic"}
summary_1$PDE_DRUG_TYPE_CD <- drug_type
drug_class<- foreach(i=1:dim(summary_1)[1], .combine=c) %do% {
drugClass$NDF_VA_MAJOR_CLASS[which(drugClass$PDE_DRUG_CLASS_CD ==
summary_1$PDE_DRUG_CLASS_CD[i])]}
drug_class[is.na(drug_class)]<-"Unknown"
summary_1$PDE_DRUG_CLASS_CD <- drug_class
summary_1$BENE_AGE_CAT_CD <- as.character(summary_1$BENE_AGE_CAT_CD)
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "1"] <-"under_65"
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "2"] <-"65-69"
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "3"] <-"70-74"
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "4"] <-"75-79"
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "5"] <-"80-84"
summary_1$BENE_AGE_CAT_CD[summary_1$BENE_AGE_CAT_CD == "6"] <-"85_plus"
summary_1$Cost_per_unit <- summary_1$Total_Cost/summary_1$Total_Quntity
names(summary_1)[1:3]<-c("Age", "Brand_Generic","Therapeutic_Class")
The rank order of drug spending by therapeutic category was Central Nervous System, Cardiovascular System, Hormones, Gastrointestinal, etc. The proportion of Brand was 50% or higer.
summary_1 %>% group_by(Therapeutic_Class,Brand_Generic) %>% summarise(Total_Cost= sum(Total_Cost)) %>% ggplot(aes(Therapeutic_Class, Total_Cost/10^6, fill=Brand_Generic))+geom_bar(stat = "identity") + ylab("Million USD") +xlab("Therapeutic Category") + ggtitle("Figure 1. 2008 Drug Expense in Medicare, 5% overall sample population") + theme_gray(base_size = 10) + theme(axis.text.x = element_text(angle = 90, hjust = 1), legend.position = c(0.9,0.9))
The results of Figure 1 are broken into age groups. Medicare beneficiaries under the age of 65 years constituted a large proportion of Central Nervous System Medication spending whereas those over the age of 65 years constituted a great proportion of Cardiovascular Medication spending.
summary_1 %>% group_by(Age, Therapeutic_Class,Brand_Generic) %>% summarise(Total_Cost= sum(Total_Cost))%>% ggplot(aes(Therapeutic_Class, Total_Cost/10^6, fill=Brand_Generic))+geom_bar(stat = "identity") + ylab("Million USD") +xlab("Therapeutic Category") + ggtitle("Figure 2. 2008 Drug Expense in Medicare, 5% overall sample population") + facet_wrap(~Age) + theme_gray(base_size = 8) + theme(axis.text.x = element_text(angle = 90, hjust = 1), legend.position = c(0.8,0.9))
Some prescriptions were paid 100% by Medicare beneficiaries without Medicare reimbursement. Figure 3 describes the drug’s therapeutic categories for which patient paid their 100% cost out of pocket. The rank order was cardiovascular drugs, central nervous system drugs, hormones, etc. Of note is that the central nervous system drug category was second to cardiovascular drug category. Medicare beneficiaries were less willing or less capable to pay for central nervous system drugs by themselves than cardiovascular drugs.
summary_2 <- claims %>% filter(PDE_DRUG_PAT_PAY_CD==3) %>% select(PDE_DRUG_CLASS_CD, PDE_DRUG_COST, PDE_DRUG_CD, PDE_DRUG_TYPE_CD)%>% group_by(PDE_DRUG_CLASS_CD, PDE_DRUG_CD,PDE_DRUG_TYPE_CD) %>% summarise(Total_Paid=sum(PDE_DRUG_COST)) %>% arrange(desc(Total_Paid)) %>% data.frame()
#Replace Drug Class Codes with Description, Drug Codes with Drug Name
drug_class<- foreach(i=1:dim(summary_2)[1], .combine=c) %do% {
drugClass$NDF_VA_MAJOR_CLASS[which(drugClass$PDE_DRUG_CLASS_CD ==
summary_2$PDE_DRUG_CLASS_CD[i])]}
drug_class[is.na(drug_class)]<-"Unknown"
summary_2$PDE_DRUG_CLASS_CD <- drug_class
drug_name<- foreach(i=1:dim(summary_2)[1], .combine=c) %do% {
drugName$RXNORM_GENERIC_NAME[which(drugName$PDE_DRUG_CD ==
summary_2$PDE_DRUG_CD[i])]}
summary_2$PDE_DRUG_CD <- drug_name
summary_2$PDE_DRUG_CD[is.na(summary_2$PDE_DRUG_CD)] <- "Unkown"
summary_2 %>% ggplot(aes(PDE_DRUG_CLASS_CD, Total_Paid/10^6, fill=PDE_DRUG_CLASS_CD)) + geom_bar(stat = 'identity') + ylab("Million USD") + xlab("Therapeutic Category") +ggtitle("Figure 3. Therapeutic Category, for which Patients paid 100% Cost") + theme_gray(base_size = 12)+ theme( legend.position="none", axis.text.x = element_text(angle = 90, hjust = 1))
Figure 4 describes the drugs for which beneficieries paid a 100% drug cost out of pocket. These drugs included a blood thinner clopidgrel, antidyslipidemic statins, anti-Alzheimer drugs, angiotensin blockers, etc. Most of these were patented drugs at that time.
summary_2 <- claims %>% filter(PDE_DRUG_PAT_PAY_CD==3) %>% select(PDE_DRUG_CLASS_CD, PDE_DRUG_COST, PDE_DRUG_CD, PDE_DRUG_TYPE_CD)%>% group_by(PDE_DRUG_CLASS_CD, PDE_DRUG_CD,PDE_DRUG_TYPE_CD) %>% summarise(Total_Paid=sum(PDE_DRUG_COST)) %>% arrange(desc(Total_Paid)) %>% data.frame()
#Replace Drug Class Codes with Description, Drug Codes with Drug Name
drug_class<- foreach(i=1:dim(summary_2)[1], .combine=c) %do% {
drugClass$NDF_VA_MAJOR_CLASS[which(drugClass$PDE_DRUG_CLASS_CD ==
summary_2$PDE_DRUG_CLASS_CD[i])]}
drug_class[is.na(drug_class)]<-"Unknown"
summary_2$PDE_DRUG_CLASS_CD <- drug_class
drug_name<- foreach(i=1:dim(summary_2)[1], .combine=c) %do% {
drugName$RXNORM_GENERIC_NAME[which(drugName$PDE_DRUG_CD ==
summary_2$PDE_DRUG_CD[i])]}
summary_2$PDE_DRUG_CD <- drug_name
summary_2$PDE_DRUG_CD[is.na(summary_2$PDE_DRUG_CD)] <- "Unkown"
top_25 <- summary_2[1:25,]
top_25 %>% ggplot(aes(PDE_DRUG_CD, Total_Paid/10^6, fill=PDE_DRUG_CLASS_CD)) + geom_bar(stat = 'identity') + ylab("Million USD") + xlab("Drug Name") +ggtitle("Figure 4. Top 25 List: Drug Costs 100% Paid by Patients") + theme_gray(base_size = 10)+ theme(legend.position=c(0.8, 0.7), axis.text.x = element_text(angle = 90, hjust = 1))