Corrected on 3/28/2017

Study Aims and Intrepretaion

Trading of counterfeit medicines is a profitable business. If a quality of such product meets consumers’ need, consumers could benefit form such products even when it falls under the quality standard set by stringent medicine regulatory agencies.

Though these are not always true, oral medicines that are often encapsulated have a slower rate of absorption than parenteral medicines and a lower propensity to cause a rapid or perceivable toxic effect. Also, oral medicines do not require additional material to furnish, such as syringe. From these charasteristics as well as their number of products traded in the legitimate market, oral drugs have been preferred by illegitimate pharmaceutical entrepreneurs.

The aims of analysis were to compare the trend of counterfeit drug reporting, including cases not confirmed, between administration routes, using the US-FDA FAERS quarterly datasets during years from 2013 to 2016. My assumption is that the reporting of suspicousness itself could indicate consumer’s or prescriber’s uncertainity about drug sources, irrespective of the product authenticity.

Results suggest that the number of cases for oral and injectable drugs decreased from year 2015 to year 2016. In contrast, the number of cases with inhalational and topical dugs slightly increased, although these numbers were much smaller than those for oral and injectables drugs. The limitation is that the US-FDA FAERS collects spontaneous reporting therefore that the datasets are unlikely to have captured all cases.

Data Source

Files in the csv format were used. https://www.fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/Surveillance/AdverseDrugEffects/ucm082193.htm

Read files and Collect Case-ID/caseid for Counterfeit Incident

setwd("/Volumes/LaCie/FAERS/")
directories <- dir()
cl <- makeCluster(3)
registerDoParallel(cl)
caseid_fake <- foreach(i = 1: length(directories), .combine = c) %dopar% {
  setwd(paste0("/Volumes/LaCie/FAERS/", directories[i], "/ascii"))
  files <- grep("txt", dir(), value = T)
  files <- grep("^REAC", files, value = TRUE)
  data<-read.csv(files, header = TRUE, sep = "$")
  data[grep("counterfeit", data$pt, ignore.case = TRUE), "caseid"]
}
stopCluster(cl)

Collect Record of Counterfeit Incident with Drug Name of Primary Suspect and Route

setwd("/Volumes/LaCie/FAERS")
directories <- dir()
cl <- makeCluster(3)
registerDoParallel(cl)
drug <- foreach(i = 1: length(directories), .combine = rbind) %dopar% {
  setwd(paste0("/Volumes/LaCie/FAERS/", directories[i], "/ascii"))
  files <- grep("txt", dir(), value = T)
  files <- grep("^DRUG", files, value = TRUE)
  data<-read.csv(files, header = TRUE, sep = "$")
  data[data$caseid %in% caseid_fake & data$role_cod == "PS",
       c("caseid", "drugname", "route")]
}
drug[]<-parLapply(cl, drug, as.character)
stopCluster(cl)

Collect Date/fda_dt, Type of Reporter/occup_cod and Country/occur_country of Incident from Demographic data

setwd("/Volumes/LaCie/FAERS")
directories <- dir()
cl <- makeCluster(3)
registerDoParallel(cl)
date <- foreach(i = 1: length(directories), .combine = rbind) %dopar% {
  setwd(paste0("/Volumes/LaCie/FAERS/", directories[i], "/ascii"))
  files <- grep("txt", dir(), value = T)
  files <- grep("^DEMO", files, value = TRUE)
  data<-read.csv(files, header = TRUE, sep = "$")
  data[data$caseid %in% caseid_fake, c("caseid", "fda_dt", "occp_cod","occr_country")]
}
date[] <- parLapply(cl, date, as.character)
stopCluster(cl)

Merge the Recor fo Counterfeit Incident and the Date in Demographic Data

data <- merge(drug, date, by="caseid")
data$drugname <- toupper(data$drugname)
data$route <- toupper(data$route)
data[] <- lapply(data, as.character)
data$route <- toupper(data$route) %>% str_replace_all("-", "") %>% str_extract("[A-Z]+")
data$route[is.na(data$route)] <- "UNKNOWN"
data$occp_cod[data$occp_cod ==""] <- "UNKNOWN"
data$occr_country[data$occr_country ==""] <- "UNKNOWN"

Results

Route of Administration

Table 1 Route of Administration as reported in the datasets

cat("Frequency of Drug Administration Route, as was in the database")
## Frequency of Drug Administration Route, as was in the database
data$route %>% table
## .
##     INHALATION  INTRAMUSCULAR    INTRAOCULAR   INTRAUTERINE    INTRAVENOUS 
##              6              9              2              7             30 
##          NASAL     OPHTHALMIC           ORAL          OTHER    RESPIRATORY 
##              5             16            623             37             17 
##   SUBCUTANEOUS      SUBDERMAL        TOPICAL    TRANSDERMAL TRANSPLACENTAL 
##             17              1             14              5              4 
##        UNKNOWN        VAGINAL 
##            614              6

Table 2 Route of Administration, recategorized

data$route[data$route %in% c("INHALATION", "RESPIRATORY")] <- "INHALATIONAL"
data$route[grep("^INTRA|^SUB|^TRANS", data$route) ] <- "INJECTABLES"
data$route[data$route %in% c("NASAL", "OPHTHALMIC", "TOPICAL","VAGINAL")] <- "TOPICAL"
cat("Frequency of Drug Administration Routes, recategorized")
## Frequency of Drug Administration Routes, recategorized
data$route %>% table
## .
## INHALATIONAL  INJECTABLES         ORAL        OTHER      TOPICAL 
##           23           75          623           37           41 
##      UNKNOWN 
##          614

Table 3 Drug Name with Unknown Route of Administration

This table shows drugs that had 5 or more records of counterfeit incindents.

data %>% filter(route=="UNKNOWN") %>% group_by(drugname) %>% summarise(Number_of_Cases = n()) %>% arrange(desc(Number_of_Cases)) %>% filter(Number_of_Cases > 5)
## # A tibble: 17 × 2
##                       drugname Number_of_Cases
##                          <chr>           <int>
## 1                       VIAGRA             135
## 2                       CIALIS             117
## 3                     CYMBALTA              30
## 4                  ALPRAZOLAM.              17
## 5                     GLUCOBAY              16
## 6    HYDROCODONE/ACETAMINOPHEN              15
## 7                      AVASTIN               9
## 8                     CELEBREX               9
## 9  FENTANYL TRANSDERMAL SYSTEM               9
## 10                  NOVOTHYROX               9
## 11                       ADVIL               8
## 12                       XANAX               8
## 13         SILDENAFIL CITRATE.               7
## 14                     ABILIFY               6
## 15                   FENTANYL.               6
## 16                     LEVITRA               6
## 17                    PREMARIN               6

The total number of drugs, route of which was recorded as ‘blank’ or unknown:

data %>% filter(route=="UNKNOWN") %>% group_by(drugname) %>% summarise(Number_of_Cases = n()) %>% arrange(desc(Number_of_Cases)) %>% select(drugname) %>% unlist %>% length
## [1] 164

Figure 1. The Number of Counterfeit Case by Route of Administration

Year <- data$fda_dt %>% str_extract("201[0-9]") %>% as.numeric()
data$Year <- Year %>% as.factor()
data %>% select(Year, route) %>% group_by(Year, route) %>% summarise(Number_Incident=n()) %>%
  ggplot(aes(Year, Number_Incident, group=route)) + geom_point(aes(shape = route, color = route), size=4) +geom_line() + ggtitle("Counterfeit Cases Recorded in US-FDA FAERS\n   All routes, 2013 to 2016") +ylab("Number of Cases")

Figure 2. The Number of Counterfeit Case by Route of Administration

Year <- data$fda_dt %>% str_extract("201[0-9]") %>% as.numeric()
data$Year <- Year %>% as.factor()
data %>% filter(route %in% c("INJECTABLES","INHALATIONAL","TOPICAL")) %>% select(Year, route) %>% group_by(Year, route) %>% summarise(Number_Incident=n()) %>%
  ggplot(aes(Year, Number_Incident, group=route)) + geom_point(aes(shape = route, color = route), size=4) +geom_line() + ggtitle("Counterfiet Cases for INHALATION, INJECTABLE and TOPICAL Drugs\n   2013 to 2016") +ylab("Number of Cases") + ylim(0,50)

Figure 3. The Reporting Person by Profession

Year <- data$fda_dt %>% str_extract("201[0-9]") %>% as.numeric()
data$Year <- Year %>% as.factor()
data$occp_cod[data$occp_cod == "CN"] <- "CONSUMER"
data$occp_cod[data$occp_cod == "LW"] <- "LAWYER"
data$occp_cod[data$occp_cod == "MD"] <- "PHYSICIAN"
data$occp_cod[data$occp_cod == "OT"] <- "OTHER PROFESSIONAL"
data$occp_cod[data$occp_cod == "PH"] <- "PHARMACIST"
data %>% select(Year, occp_cod, occr_country) %>% group_by(Year, occp_cod) %>% summarise(num=n()) %>%
  ggplot(aes(Year, num, group = occp_cod)) + geom_point(aes(shape = occp_cod, color = occp_cod), size=4) +geom_line() + ggtitle("Reporter's Occupation (occp_cod)\n   2013 to 2016") +ylab("Number of Cases") + ylim(0,500)