Tag Archive for Ethiopia

Profiling of Antibiotic Resistance of Bacterial Species Recovered from Routine Clinical Isolates in Ethiopia.

Melaku Tesfaye1
Witold Frederik ten Hove2
Mesfin Nigussie1
1. International Clinical Laboratories, Addis Ababa, Ethiopia
2. HAN University of Applied Sciences, Nijmegen, the Netherlands

This is a guide to explain the aggregation and visualisation of raw data extracted from the Polytech Laboratory Information Management System, at International Clinical Laboratories, Addis Ababa, Ethiopia. The guide starts with a piece of R-code, followed by an explanation.

setwd("~/Documents/workspace/R-project/Antibiogram")

# libraries
library(plyr)
library(dplyr)
library(tidyr)
library(stringr)
library(xlsx)
library(ggplot2)
library(knitr)
library(reshape2)
library(scales)
library(knitr)

The working directory need to be set and, I like to put all libraries together.

# Read text file (file should be in the same working directory as this script)
con <- file("antibiogram_raw.txt")
txtData <- readLines(con, warn = FALSE, skipNul = TRUE)
close(con)
head(txtData)
## [1] "Page 1/176\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"                            
## [2] "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"                                      
## [3] "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"                                      
## [4] "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"                                      
## [5] "Sensitive/Resistant/Intermediate Count\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"
## [6] "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"

The raw data was exported by a query from LIMS. It resulted in 176 PDF pages. With Copy-Paste, the data was then saved as a simple .txt file. This text file is read into R. First as a file(con) and then as a string (txtData).

# Clean up
txtData <- gsub("\t{1,}", ";", txtData)
txtData <- gsub("^Page", NA, txtData)
txtData <- gsub("Site:", "", txtData)
txtData <- gsub("^;$", NA, txtData)
txtData <- gsub("^Sensitive.*", "New", txtData)
txtData <- gsub("^;", "", txtData)
txtData <- gsub(";$", "", txtData)
txtData <- gsub("S;R;I", "Data", txtData)
txtData <- na.omit(txtData)

With the gsub command, specific texts can be replaced (also by ‘nothing’:“”). The function na.omit(txtData) returns the object txtData with listwise deletion of missing values.

# Rename Antibiotics
txtData <- gsub("^Ampic[a-z]{1,}", "AMP10", txtData)        
txtData <- gsub("^Amox/K Clav'ate", "AMC30", txtData)   
txtData <- gsub("^Chloramp[a-z]{1,}", "C30", txtData) 
txtData <- gsub("^Ceftriax[a-z]{1,}", "CRO30", txtData) 
txtData <- gsub("^Cephaloph[a-z]{1,}", "CF30", txtData) #Cephalophin doesn't exist
txtData <- gsub("^Cephaloth[a-z]{1,}", "CF30", txtData) 
txtData <- gsub("^Ciproflo[a-z]{1,}", "CIP5", txtData) 
txtData <- gsub("^Clindam[a-z]{1,}", "CC2", txtData) 
txtData <- gsub("^Cefotax[a-z]{1,}", "CTX30", txtData) 
txtData <- gsub("^Cefurox[a-z]{1,}", "CXM30", txtData) 
txtData <- gsub("^Cefoxit[a-z]{1,}", "FOX30", txtData) 
txtData <- gsub("^Erythrom[a-z]{1,}", "E15", txtData) 
txtData <- gsub("^Gentam[a-z]{1,}", "GM10", txtData) 
txtData <- gsub("^Metroni[a-z]{1,}", "METR", txtData)
txtData <- gsub("^Nalidixic Acid", "NA30", txtData) 
txtData <- gsub("^Norfloxa[a-z]{1,}", "NOR10", txtData) 
txtData <- gsub("^Nitrofur[a-z]{1,}", "FM300", txtData) 
txtData <- gsub("^Oxac[a-z]{1,}", "OX1", txtData) 
txtData <- gsub("^Penic[a-z]{1,}", "P10", txtData) 
txtData <- gsub("^Pyrazinamide{1,}", "PYR", txtData)
txtData <- gsub("^Sulfameth[a-z]{1,}", "SXT25", txtData) 
txtData <- gsub("^Tetrac[a-z]{1,}", "TE30", txtData) 
txtData <- gsub("^Vancom[a-z]{1,}", "VA30", txtData) 
txtData <- gsub("^Imip[a-z]{1,}", "IMP", txtData) 
txtData <- gsub("^Rifamp[a-z]{1,}", "RIF", txtData)  
txtData <- gsub("^Ethamb[a-z]{1,}", "ETB", txtData) 
txtData <- gsub("^Streptom[a-z]{1,}", "STREP", txtData) 

Antibiotics are renamed into easy to use abbreviations. Also, often the antibiotics are mispelled, e.a. Ampicilline / Ampiciline / Ampicyline…

# Function to split vector into list
VectorToList <- function(vec, ind) {
  
  n = 1
  splitIndex <- which(vec == ind)
  myList <- NULL
  
  for (i in splitIndex[-length(splitIndex)]) {
    
    myList[[n]] <- vec[(i+1):(splitIndex[n+1]-1)]
    n <- n+1
  }
  return(myList)
}

Prepare a function which will split the vector (txtData) into a list (myList).

# Function to split vector into data frame
VectorToDF <- function(vec, ind){
  
  d <- which(vec[[1]] == ind)+1
  l <- length(vec[[1]])
  
  myDf <- data.frame(
    matrix(unlist(
      strsplit(
        vec[[1]][d:l], split = ";", fixed = FALSE, perl = FALSE, useBytes = FALSE
      )
    )
    , ncol = 4, byrow = TRUE
    )
  )
  
  return(myDf)
  
}

The next function is to split the vector and make a dataframe (myDF) from it.

SelectListItem <- function(lst, elnt = 1, lkp) {
  
  itemVec <- sapply(lst, function(x) x[[elnt]][[1]]) # Create vector with all items from selected list element
  myList <- lst[which(itemVec == lkp)] # Use which function on vector to create vector of indexnumbers and select items from original list
  
  return(myList)
}

Function to select elements from list.

# Create list of separate vectors
txtList <- VectorToList(txtData, "New") 

‘txtList’ is created with comprehensable chunks of data (lists).

# Create list of lists with results in data frame
newList <- NULL
for (m in 1:length(txtList)) {
  
  testresDf <- VectorToDF(txtList[m], "Data")
  colnames(testresDf) <- c("Antibiotics", "S", "R", "I")
  newList[[m]] <- list(bacteria = txtList[[m]][1], source = txtList[[m]][2], result = testresDf)
  
}

The function VectorToDF aggregates txtList into Dataframe

# Create data frame from list
newDF <- NULL
for (s in 1:length(newList)) {
  
  cntRows <- length(newList[[s]]$result[,1])
  bact <- rep_len(newList[[s]]$bacteria,cntRows)
  srce <-  rep_len(newList[[s]]$source,cntRows)
  tmpDF <- cbind(Bacteria = bact, Source = srce, newList[[s]]$result)
  newDF <- rbind(newDF, tmpDF)
}
newDF$Bacteria <- gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", newDF$Bacteria, perl=TRUE) # Change all first letters of bacteria names to upper case

Now to make a workable database.

# Correct Bacteria species
newDF$Bacteria <- gsub("?Species", "species", newDF$Bacteria) 
newDF$Bacteria <- gsub("Actinomyces Viscosus", "Actinomyces viscosus", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Fragilis", "fragilis", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Braakii", "braakii", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Farmeri", "farmeri", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Freundii", "freundii", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Koseri", "koseri", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Cloacae", "cloacae", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Faecalis", "faecalis", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Coli", "coli", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Influenzae", "influenzae", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Biotype", "biotype", newDF$Bacteria) 
newDF$Bacteria <- gsub("HEMOPHILUS INFLUENZA", "Haemophilus influenzae", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Ornithinolytica", "ornithinolytica", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Oxytoca", "oxytoca", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Pneumoniae", "pneumoniae", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Terrigena", "terrigena", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Lacunata", "lacunata", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Morganii", "morganii", newDF$Bacteria) 
newDF$Bacteria <- gsub("Mycobacteria Tuberculosis Conplex", "Mycobacterium tuberculosis complex", newDF$Bacteria)
newDF$Bacteria <- gsub("Mycobacterium Tuberculosis Complex", "Mycobacterium tuberculosis complex",newDF$Bacteria)
newDF$Bacteria <- gsub("?Mirabilis", "mirabilis", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Penneri", "penneri", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Vulgaris", "vulgaris", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Aeruginosa", "aeruginosa", newDF$Bacteria) 
newDF$Bacteria <- gsub("SALMONELLA GROUP.*", "Salmonella group", newDF$Bacteria) 
newDF$Bacteria <- gsub("?Paratyphi", "paratyphi", newDF$Bacteria) 
newDF$Bacteria <- gsub("?SALMONELLA PARATYPHI", "Salmonella paratyphi", newDF$Bacteria) 
newDF$Bacteria <- gsub("Boydii", "boydii", newDF$Bacteria)
newDF$Bacteria <- gsub("Dysenteriae", "dysenteriae", newDF$Bacteria) 
newDF$Bacteria <- gsub("SHIGELLA GROUP", "Shigella group", newDF$Bacteria) 
newDF$Bacteria <- gsub("Sonnei", "sonnei", newDF$Bacteria)
newDF$Bacteria <- gsub("Aureus", "aureus", newDF$Bacteria) 
newDF$Bacteria <- gsub("Lugdunensis", "lugdunensis", newDF$Bacteria) 
newDF$Bacteria <- gsub("Saprophyticus", "saprophyticus", newDF$Bacteria)
newDF$Bacteria <- gsub("Agalactiae", "agalactiae", newDF$Bacteria) 
newDF$Bacteria <- gsub("Streptococcus Anginosus/milleri", "Streptococcus anginosus/milleri", newDF$Bacteria)
newDF$Bacteria <- gsub("Pyogenes", "pyogenes", newDF$Bacteria)
newDF$Bacteria <- gsub("4\\(\\ Erwina species)", "4 (Erwina species)", newDF$Bacteria) 
newDF$Bacteria <- gsub("Viridans Streptococcus", "Viridans streptococci", newDF$Bacteria)
newDF$Bacteria <- gsub("Coagulase-negative Staphylococcus species", "CNS", newDF$Bacteria)

The bacteria species names contain many mistakes. They need to be corrected one by one.

## change factors into numeric
newDF$S <- as.numeric(newDF$S)
newDF$I <- as.numeric(newDF$I)
newDF$R <- as.numeric(newDF$R)
## summ all cultures (Sensitive + Intermediate + Resitant)
newDF$N <- newDF$S + newDF$I + newDF$R

The numbers under S, I & R are stored as ‘factors’. They can be changed into numeric with command ‘as.numeric’. ‘N’ is the sum off antibiograms.

###  Tuberculosis and its drugs
myco <- newDF[grep("Mycobacterium tuberculosis complex", newDF$Bacteria), ]
sum(myco$N)
## [1] 334
write.csv(myco, "myco.csv")
newDF <- newDF[-grep("Mycobacterium tuberculosis complex", newDF$Bacteria), ]
sum(newDF$N)
## [1] 15989

First make a seperate dataframe for Mycobacteria species. Next is to remove Mycobacterium from the dataframe by using the command ‘-grep’. The commands ‘sum’ show that 334 Mycobacterium antibiograms were removed, leaving 15989 remaining antibiograms.

# Cleaning up Source
## Rename 'W' and 'WOUND' as 'Wound' 
newDF$Source <- gsub("WOUND", "AIAIAI", fixed = TRUE, newDF$Source) 
newDF$Source <- gsub("W", "Wound", fixed = TRUE, newDF$Source) 
newDF$Source <- gsub("AIAIAI", "Wound", fixed = TRUE, newDF$Source) 

newDF$Source <- gsub("BODY FLUID", "Body fluid", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("BLOOD-PEADITRIC", "Blood-pediatric", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("BLOOD-AEROBIC", "Blood-aerobic", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("BLOOD-ANAEROBIC", "Blood-anaerobic", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("EAR CULTURE", "Ear culture", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("NASAL DISCHARGE", "Nasal discharge", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("PUS", "Pus", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("ROUTINE", "Routine", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("SPUTUM", "Sputum", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("STOOL", "Stool", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("Thorat culture", "Throat culture", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("EYE CULTURE", "Eye culture", fixed = TRUE, newDF$Source)

Correct the ‘SOURCE’ and change to lower case

### Merge Blood-anaerobic with Blood-aerobic to simply 'Blood' 
newDF$Source <- gsub("Blood-aerobic", "Blood", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("Blood-anaerobic", "Blood", fixed = TRUE, newDF$Source)

### Merge "Throat culture" with "Throat swab" to simply "Throat"
newDF$Source <- gsub("Throat swab", "Throat", fixed = TRUE, newDF$Source)
newDF$Source <- gsub("Throat culture", "Throat", fixed = TRUE, newDF$Source)

Merging the ‘Blood-aerobic’ and ‘Blood-anaerobic into simply ’Blood’ The same for ‘Throat swab’ and ‘Throat culture’.

### Aggregate double sources and antibiotics.
newDF <- aggregate(cbind(S,I,R,N)~Bacteria+Source+Antibiotics, data=newDF, sum, na.rm=TRUE)
sum(newDF$N)
## [1] 15989

Many lines now contain the same Bacterium species with same source Source. These are grouped together with the R, S and I’s summed up.

## Export data
write.csv(newDF, "newDF.csv")

An intermediate raw-data file is made.

newDF
Bacteria Source Antibiotics S I R N
CNS Blood AMC30 11 3 6 20
Citrobacter braakii Blood AMC30 4 2 2 8
Enterobacter cloacae Blood AMC30 1 1 3 5
Escherichia coli Blood AMC30 7 14 21 42
Group C Streptococcus Blood AMC30 1 1 3 5
Klebsiella pneumoniae Blood AMC30 2 2 5 9
Pseudomonas species Blood AMC30 1 3 3 7
Staphylococcus aureus Blood AMC30 10 4 2 16
Staphylococcus lugdunensis Blood AMC30 4 2 6 12
Streptococcus pyogenes (Group A) Blood AMC30 4 2 2 8
Actinomyces viscosus Blood-pediatric AMC30 2 1 1 4
Bacteroides fragilis Blood-pediatric AMC30 2 1 1 4
CNS Blood-pediatric AMC30 8 1 1 10
Escherichia coli Blood-pediatric AMC30 3 2 3 8
Group A Streptococcus Blood-pediatric AMC30 2 1 1 4
Klebsiella oxytoca Blood-pediatric AMC30 2 2 6 10
Pseudomonas species Blood-pediatric AMC30 2 2 6 10
The dataframe (first 17 rows).
newDF2 <- read.csv("newDF.csv", sep = ",")
newDF2 <- subset(newDF, select=c(Bacteria, Source, Antibiotics, S, I, R, N))

To start with a fresh new Dataset

### Aggregate on Species.
DFspecies <- aggregate(cbind(N)~Bacteria, data=newDF2, sum, na.rm=TRUE)
Bacteria species with number of antibiograms
Bacteria N
Acinetobacter species 54
Actinomyces viscosus 37
Bacteroides fragilis 8
Beta Hemolytic Non-group A 30
CNS 2585
Citrobacter braakii 64
Citrobacter farmeri 33
Citrobacter freundii 39
Citrobacter koseri 40
Enterobacter cloacae 140
Enterobacter species 68
Enterococcus faecalis 619
Enterococcus species 50
Escherichia coli 2931
Group A Streptococcus 128
Group B Streptococcus 224
Group C Streptococcus 113
Group F Streptococcus 38
Group G Streptococcus 42
Haemophilus influenzae 47
To give an overview on the nu mber of antibiograms per Bacteria species (only first 20 rows).
##### Group species together
##### \\ = space    [a-z] = any character   {,1} = repeat previous 1 or more time
# put together Citrobacter species (C. braakii, farmeri, freundii & koseri)
newDF2$Bacteria <- gsub("Citrobacter\\s[a-z]{1,}", "Citrobacter spp.", newDF2$Bacteria) 
# put together Enterobacter cloacae & species
newDF2$Bacteria <- gsub("Enterobacter\\s[a-z]{1,}", "Enterobacter spp.", newDF2$Bacteria) 
# put together Enterococcus faecalis & species
newDF2$Bacteria <- gsub("Enterococcus\\s[a-z]{1,}", "Enterococcus spp.", newDF2$Bacteria) 
# put together Klebsiella ornithinolytica, oxytoca, pneumoniae, terrigena & species
newDF2$Bacteria <- gsub("Klebsiella\\s[a-z]{1,}", "Klebsiella spp.", newDF2$Bacteria) 
# put together Proteus mirabilis, penneri, vulgaris & species
newDF2$Bacteria <- gsub("Proteus\\s[a-z]{1,}", "Proteus spp.", newDF2$Bacteria) 
# put together Pseudomonas auruginosa & species
newDF2$Bacteria <- gsub("Pseudomonas\\s[a-z]{1,}", "Pseudomonas spp.", newDF2$Bacteria) 
# put together Salmonella group, paratyphi A & B & species
newDF2$Bacteria <- gsub("Salmonella\\s[a-z]{1,}", "Salmonella spp.", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Salmonella spp.\\s[AB]", "Salmonella spp.", newDF2$Bacteria) 
# put together Shigella boydii, dysenteriae, group A1, sonnei & species
newDF2$Bacteria <- gsub("Shigella\\s[a-z]{1,}", "Shigella spp.", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Shigella spp.\\sA1", "Shigella spp.", newDF2$Bacteria)
# put together Staphylococcus lugdunensis & saprophyticus as CNS (keep S. aureus seperate)
newDF2$Bacteria <- gsub("Staphylococcus lugdunensis", "CNS", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Staphylococcus saprophyticus", "CNS", newDF2$Bacteria)
# Rename Group [A-Z] Streptococcus as 'Streptococcus Group [A-Z]'
newDF2$Bacteria <- gsub("Group\\sA\\sStreptococcus", "Streptococcus Group A", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Group\\sB\\sStreptococcus", "Streptococcus Group B", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Group\\sC\\sStreptococcus", "Streptococcus Group C", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Group\\sF\\sStreptococcus", "Streptococcus Group F", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Group\\sG\\sStreptococcus", "Streptococcus Group G", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Streptococcus\\sagalactiae\\s[:(:]Group\\sB[:):]", "Streptococcus Group B", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Streptococcus\\sanginosus[:/:]milleri", "Streptococcus Group F", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Streptococcus\\spyogenes\\s[:(:]Group\\sA[:):]", "Streptococcus Group A", newDF2$Bacteria)
# Put together Streptococcus species & Viridans
newDF2$Bacteria <- gsub("Streptococcus\\sspecies", "Streptococcus spp.", newDF2$Bacteria) 
newDF2$Bacteria <- gsub("Viridans\\sstreptococci", "Streptococcus spp.", newDF2$Bacteria) 
# In case needed, put all Streptococcus Group [A-Z] together as Beta-hemolytic Streptococci
newDF2$Bacteria <- gsub("Streptococcus\\sGroup\\s[A-Z]", "Beta-hemolytic Streptococci", newDF2$Bacteria) 

Instead of having small groups of Bacteria species, they are merged together into bacteria genus.

# aggregate new groups.
newDF2 <- aggregate(newDF2[,c("S","I","R", "N")], by=list(newDF2$Bacteria, newDF2$Source, newDF2$Antibiotics), "sum")
names(newDF2)[names(newDF2)=="Group.1"] <- "Bacteria"
names(newDF2)[names(newDF2)=="Group.2"] <- "Source"
names(newDF2)[names(newDF2)=="Group.3"] <- "Antibiotics"

The same Bacteria genus rows are merged together with aggregate comment. New names are put in the header.

newDF2$n <- (newDF2$S + newDF2$R)

The sum is calculated for sensitive plus resistant antibiograms.

# When calculating %resistance, leave out the intermediates. 
newDF2$Resis <- ((newDF2$R/(newDF2$S + newDF2$R))*100)
newDF2$Resis <- formatC(newDF2$Resis, digits=3)
newDF2$Resis <- as.numeric(newDF2$Resis)
#sumDF$n <- (sumDF$S + sumDF$R)
sum(newDF2$N)
## [1] 15989
sum(newDF2$n)
## [1] 13073

For this study, the resistance rate is calculated from the sum of sensitive plus resistant cultures, leaving the intermediate out.

newDF3 <- newDF2[newDF2$n > 6,]

After keeping out the intermediates, also groups are left out that contain only 6 or less cultures. Setting the threshold on 6 is on one hand ambiguous. However, after checking all the group-size, it was observed that a particular large proportion of ‘small groups’ was removed when setting the threshold on 7 or more cultures per group.

### new dataset without SOURCE, aggregated again ####
Plot7 <- aggregate(newDF3[,c("S","R","n")], by=list(newDF3$Bacteria, newDF3$Antibiotics), "sum")
names(Plot7)[names(Plot7)=="Group.1"] <- "Bacteria"
names(Plot7)[names(Plot7)=="Group.2"] <- "Antibiotics"

Plot7$Resis <- ((Plot7$R/Plot7$n)*100)

Plot7$Resis <- formatC(Plot7$Resis, digits=3)
Plot7$Resis <- as.numeric(Plot7$Resis)
  

sum(newDF3$n)
## [1] 10684
sum(Plot7$n)
## [1] 10684

Now, the dataset is aggregated with antibiotics on the Y-axis and bacteria genus on the x-axis.

### MAKE PLOT

Plot7g <- ggplot(Plot7) + geom_point(aes(x = Bacteria, y = Antibiotics, colour = Resis, size = n)) +
  scale_colour_gradient(name = '% resistance', high = "red", low = "green") +
  scale_size(name = 'sample size', range = c(2,9)) +
  xlab('Bacteria groups') + ylab('Antibiotic') +
  theme(text = element_text(size = 12), axis.text.x = element_text(angle=60, hjust=1, size=12) )

Plot7g

And plotting the aggregated dataset.

SELLING MY CAR IN ETHIOPIA

A month ago, during an interview for a new position at the European Commission, I was asked if I could deal with the infamous bureaucracy. I looked at them… and laughed… and laughed. Guys, I work in Ethiopia!

So now, I sold my car and the ownership needs to be transferred. A two minute procedure in most countries. In Ethiopia, day two and I’m still stuck in bureaucratic madness. I feel like I’m in Franz Kafka’s wet dream.

Step one.

Drive to the road authorities where the car is registered. Luckily, it’s in Addis Ababa and not in Axum or something. At the entrance, together with the new owner and three witnesses, I need to fill in this selling-agreement document. Later, the tax is calculated over the selling price. The selling price is below a certain threshold, therefor, the authorities fixed a selling price for us.

The witnesses can be arranged on the spot for a small compensation. If I want to bypass the lines at the road authorities, a witness said, he could arrange it for 1000,- etb. Not negotiable because many people then need to be paid. I refused as I came prepared with a very thick novel.

After a couple of hours in line, I was summoned to a window. A minute later I was told to come back tomorrow. Closing time…

Step two

The selling of the car needs to be authenticated by the court at a notary’s office, or something. I am married and therefore I’m fucked. Literally and figuratively.

Step … oh fuck it…

  • My wife has to be at the notary in person. Check.
  • I need to present a marriage certificate. Check
  • The certificate needs to be in English. Check
  • The certificate needs to be stamped and signed by the Netherlands ministry of foreign affairs in the Hague. Check
  • The certificate needs to be stamped and signed by the Ethiopian embassy in Brussel. Check
  • The certificate needs to be stamped by the Ethiopian ministry of foreign affairs. Check
  • The Ethiopian stamp was older then 6 months, so i needed to get a new stamp. oookaaaay
  • The certificate was just over 2 years old SO THEY REFUSED TO STAMP IT…

…aaaand the usual YOU GO AWAY! Yes, I am trying. I am trying.

to be continued.

Driving in Addis III

Get your Bole!

Cars in Ethiopia require an annual technical inspection certificate, a so called ‘Bole’. How it is possible that many of the cars i see on the road pass this technical inspection, is a mystery to me. Anyway, this year, rules have changed (suprise!). Bole certificate

Every Ethiopian new year (end of september), the car should get a new Bole. You can do the thing a couple of months later but you may find yourself in a long queu.

When I got to the Federal transport branch office where they do the checkup, they send me away to pay some kind of fee. I wasted a couple of hours so therefore I’m writing this blog for you.

 

car inspectionBEFORE you go to one of the Federal transport branch office where they do the checkup, you need to go to a post-office to pay some additional road fund fee of 125,- ETB. I was send first to an office around Mexico, which was closed for unknown reasons for unknown time. I finally found a post office near la Gare where the road fund fee could be paid (but then the person responsible for writing the receipt was gone…). Anyway, when you paid and got the receipt, go to the technical inspection (see map of one location in Addis) and show them the receipt. The inspection will take around 20 minutes and you have to pay 214,- ETB for the report.

Next step is to go to the road authorities WHERE YOUR CAR IS REGISTERED. Before you go, make a photocopy of 1) the receipt of the road fund fee, 2) your car ownership certificate and 3) the certificate of insurance.

Bole docWhen you get to the road authorities (for example in Kaility or Megenaghna), you need to buy at the entrance a form for 5,- ETB. It’s in amharic so you will be approached by people who ‘want to help’ you. See in the picture how you should fill in the form by your self.

After you filled in the form, go to the window for the Bole (in Megenesha it was window nr 3.). The lady will have a look at the papers and will send you to the next window (in Megenesha upstairs window nr 9). Hand over again the originals and the copies and pay 65,- ETB.

That’s it and one last tip, stay polite to the ladies behind the windows.

160429-traffic

Addis_Rail from Rob Hove on Vimeo.

Driving in Addis II

Besides driving your own car through Addis Ababa, there other means of transportation. There are plenty of taxi’s, but they are bloody expensive. A drive of 15 minutes to the airport and they charge 350 ETB (15 euro’s). Taxi’s in New York are less expensive!

The other option are the mini-taxi’s. They charge only a few birr. But how to find out which mini-taxi will take you to the place you need to be? On Twitter I came across a map for mini-taxi’s in Addis Abeba. Unfortunately, the resolution is very low. It has been designed by W. Wigerske & N. Salamanek, if I distinguish there names right.

Because I have guests who like to explore the city by local transport, I re-designed the map. It can be downloaded here:

 

Minibus addis plan

 

The distances between the mini-taxi stops are not in relation with the actual distances. Therefor, another detailed map of Addis Ababa might be helpful:

Map Addis

This map has been put together with screen-shots from the OpenStreetMap site. For Addis Abeba, it’s more detailed compared to Google maps.

If you have any comments on the mini-taxi map or if you would like to receive the original files, let me know.

Driving in Addis Abeba

For driving in Addis Abeba you don’t need special skills; just don’t think about traffic-rules and you will blend in nicely. Driving on the opposite lane of the ring-road, stop on the middle of the road to telephone, don’t look when changing lanes, et cetera. Anyway, in this blog I’ll give some practical tips for expats coming to Addis Abeba and dare to drive a car.

IMG_1482

Car-hire

When you get to Addis Abeba, you’ll most likely want to hire a car. There are plenty taxi’s, however, you’ll pay around 700,- ETB per day for hiring one. A car can be rented for example at ABC car rental next to Edna Mall. Or ask around and you will find someone who will rent you his private car (300,- / 400,- ETB). It’s not legal; just say to the police that you borrowed the car from a friend. One important warning, if you hit a pedestrian, even if (s)he jumped in front of your car on purpose, you WILL end up in jail.

IMG_1225Picture of cab drove into market.

Drivers license.

After three months of residing in Ethiopia, you need to have an Ethiopian drivers license. Ethiopia is one of the few countries (among Vietnam & North Korea) where you are not allowed to drive with you international recognized drivers license. An Ethiopian license needs to be obtained. Don’t worry that you have to take lessons again (that would be ironic), worry about the bureaucracy. It can drive you to madness!

140623 driving final

Step 1: go to your embassy and leave your license for an official translation (777,- ETB @Dutch embassy). KEEP THE RECEIPT! KEEP THE RECEIPT!

Step 2) pick up your license and the translation from the embassy.

Step 3) go to Ministry of Internal affairs (between Josef Tito Street & Zewditu Street) and legalize the translated document. You need to prove that you paid for the translation, therefore the receipt. Don’t argue with Ethiopian reason.

Step 4) take 2 passport photographs (they have to be the same).

Step 5) go to your sub-city road authorities. Bring all the receipts. You will need someone to help you filling in the documents because they are in Amharic. You’ll pay 10 ETB here, 100 ETB there, fill in more documents and voila, you may officially drive like a nutcase.

Buying a car.

Cars are very expensive in Ethiopia, unless you have a duty-free or other kind of status. You can buy a car from a dealer or from a friend of a friend of a friend. Often you will have to deal with ‘brokers’. Some of these brokers can be a pain in the ass. The usual broker fee is 2% from the selling price from the buyer and/or 2% from the selling party.

IMG_1272This car is a joke!

It’s normal to take the car of interest to a garage of your own choice for a check-up. Make sure that the car-papers are in order. A contract is then written, signed additionally by three witnesses and an advance is paid. Then, it all starts to get fuzzy and it’s the moment when the broker has to make his money worth.

IMG_1337

The transfer of ownership is done at the road-authority bureau where the car is registered. First, you need to get a document, similar as the contract, which also needs to be signed by the three witnesses. Tax has to be paid around 2% of the selling price. IMPORTANT, don’t give the price that you actually paid for the car! You might as well write down that you paid 1 ETB for the car. The road-authorities will then make their own estimation of what the car is worth, which is usually much lower than the actual price. Otherwise, they will charge tax over the higher amount that you put in the documents. Next, papers need to be legalized or authenticated at an ‘authentication office’. It’s a sort of notary. Questions will be asked, if there are any remaining payments and if everything is understood. In between, two (same) passport photo’s have to be made. Then, go to the bank to pay a fee. Go back to the authentication office. Collect all papers.

IMG_1335

Go back to the road authorities, fill in some more documents and then finally, the car is yours. A tip, keep an eye on ALL papers, documents and receipts. You may even want to take a picture of each paper slip with your mobile phone, just in case.

IMG_1336At the road authorities.

Insurance.

Once a year, the car needs a technical checkup (200, ETB) and a sticker is placed on your windscreen. Furthermore, car insurance needs to be bought. Full coverage for a mediocre car will cost around 5000,- ETB per year.

IMG_1223Somali Police car.

I think that’s it. Hopefully you found some useful tips in this blog. I wish you good luck (!) driving in Ethiopia.

Do you want to know how to do the annual car inspection in Ethiopia? Read this blog.

Driving in Addis from Rob Hove on Vimeo.

Proposal for a research partnership in Addis Abeba

International Clinical Laboratories. Addis Abebe, Ethiopia.

www.icladdis.com

Prepared by: Dr. Mesfin Nigussie, Medical Director & Dr. Ir. Robert-Jan ten Hove, Parasitologist

Ethiopia – Country profile

Unique among African countries, the ancient Ethiopian monarchy, that maintained its freedom throughout the history. Ethiopia is home to numerous cultures, religions and languages and its total population is estimated at 93,877,025 (July 2013 est.). The climate of Ethiopia is as diverse as the geographical areas. The highest mountain, Ras Dashen rises to an impressive 4620 meters, while the Dalol depression is located 130 meters below sea level. Disease patterns follow this diverse geographical and ethnic diversity. Infectious diseases rank top among public health problems while non-communicable “western” disease are on the rise at an alarming rate.

About International Clinical Laboratories

International Clinical Laboratories (ICL) is a private diagnostic facility, established in Ethiopia in 2004. The mission of ICL is to contribute to the health of the nation while guarantying that the services are both affordable and of high quality. It is the only clinical diagnostic laboratory that is accredited by Joint Commission International (JCI) in sub-Saharan Africa.

ICL

ICL main facility is located in the capital, Addis Ababa and houses the main laboratory. The laboratory has over 200 test menus and performs clinical chemistry, hematology, immunoassays, molecular diagnostics, bacteriology, parasitology and mycology. In addition it is in the process of establishing a histopathology / cytopathology section.

The ICL is continuously expanding its operations with patient service centers all over the nation and, in the near future across the East-African region. At the service centers, samples are collected and transported to the main testing facility in Addis Ababa. ICL has unprecedented reach in laboratory services in Ethiopia. This gives us the opportunity to get biological specimens from all over the country and, as such, gives a valuable research opportunity.

Screen Shot 2014-08-01 at 10.54.20 ICL service centers on 1/08/2014

Besides the expansion of testing services, the management of ICL envisions that public health will benefits most by preventive measures. Promoting healthy lifestyle and focus on upcoming healthcare problems will have a more positive impact on the public health than diagnosing and treating the diseases. Scientific research will help understand the healthcare problems that the country has to deal with today, and in the future.

Profile of guest researcher

For the continual improvement of the laboratory services, the ICL is keen on attracting health professionals. We are therefore inviting researchers who are willing to work at the clinical laboratory in Addis Abeba for a period of several weeks or months. The ideal candidate has:

  • A PhD, or is in the trajectory of a PhD in the field of medical microbiology and / or pathology.
  • At least one year of hands-on experience in a routine clinical laboratory
  • Good interpersonal skills to cooperate with local staff and willing to train local personal or supervise local students.
  • Willing to publish and / or present the research to the national and international scientific community.

Examples of research areas

  • Sero-epidemiological studies have shown show that Helicobacter pylori is an important gastric pathogen among the Ethiopian population. There are few data on resistance in Ethiopian strains, complicating the treatment of the associated illnesses. H. pylori tends to be highly localized among families or communities and resistance patterns can be different between strains. Characterizing the H. pylori strains in Addis Abeba should be useful for future management in order to effectively deal with this illness.
  • In several African countries beside Ethiopia, the cause of severe diarrhea in pediatric patients has mainly been attributed to Rotavirus, Shigella, Cryptosporidium and ST-ETEC. In Ethiopia there is limited data on the most important causes of diarrhea both in the pediatric patient group as in the general population. For example, patients with diarrhea are often treated for Entamoeba histolytica based on microscopic examination or for Salmonella without confirmative culture (personal communications). Reliable diagnostic data on infectious diarrheal diseases give insight on the main communicable diarrheal diseases in Addis Abeba. Using molecular diagnostics with subsequent culture and analysis of resistance patterns of the bacterial infections, valuable feedback can be offered to the health-care providers.
  • Ethiopia is one of the fastest growing economies in the world. The lab-work is reflected by the increase of the middle class and changes in lifestyle; all the non-communicable diseases are rising rapidly. The exact impact of diseases such as diabetes, cancer and autoimmune disorders on the Ethiopian public health is largely unknown.
  • What are the most common causes of seasonal flu like symptoms in Ethiopians? Every flu like symptom is ascribed to “colds” and nobody has done any investigation which viruses are the causes, and if it is viral at all.
  • Clinical laboratories in Ethiopia do not have a good functioning quality management system. There is no well organized national proficiency testing (External QA) and therefore nobody knows how reliable or unreliable routine lab tests are in the country. Initiating inter-lab comparison on selected common lab tests will be very interesting for the labs as well as policy makers.
  • Ethiopia is one of the countries in Africa with a high HIV burden. Antiretroviral therapy was initiated in 2005. It has been more than ten years since the treatment program was launched, however, we have no data on drug resistance. Such investigation will be extremely valuable in decision making for treatment and prevention strategies.
  • Cervical cancer is the number one killer in women of reproductive age when infectious causes are disregarded. Because of the seemingly rising incidence of cancers in Ethiopia, the government has started to take non-communicable diseases seriously. There are no national screening programs for cervical cancer and there is limited data on HPV prevalence and types. Factual information is needed to initiate vaccination or screening programs.
  • Molecular characterization of breast carcinoma in Ethiopian patients is an interesting subject. There have been sporadic investigations, however, conclusive molecular characterization is unavailable (ER, PR, HER2, BRAC, etc). With treatment increasingly available, such knowledge will be crucial in medical decision-making.
  • Parasites of the blood and of the GI are common in Ethiopia. Still, we rely on traditional microscopic methods for diagnosis. There seems to be no movement in modernizing this tradition. In the era of molecular diagnosis, can we bring about change to this old method? Is it possible to adapt molecular methods so that we will be able to make molecular parasitological diagnosis affordable and of high quality?

Contact

Questions, suggestions and propositions can be directed to:

Dr. Mesfin Nigussie, Medical Director. T +251-11 4671818. E mesfin@icl.com.et

Dr. Robert-Jan ten Hove, Parasitologist. T +251-939881532. E robert@icladdis.com

 

Molecular diagnostics in Ethiopia

Ethiopia was mentioned by the Washington Post as one of the top ten up coming economies in the world, however, extreme difficult business environment severely hamper growth aspects. This does not only apply for business, but for all entrepreneurs. From agricultural cooperatives to the health sector.

In Ethiopia there is a great demand for quality health services. The suffocating bureaucracy is hampering and damaging the sector. Crucial spare parts for diagnostic equipment are waiting in line between the shampoo and socks at he customs for weeks (months?). Human samples sent for analysis to Europe are withheld for obscure reasons. Well, let’s look at it from the optimistic point of view and suppose that regulations in Ethiopia will be more submissive in the near future.

In the medical microbiology a major development is taking place in which conventional diagnostics are being replaced and expanded by molecular biological tests. These tests are for a majority based on nucleic acid amplification. High sensitivity, a relative short turn-around-time in combination with an increasing reliability and robustness are characteristics for molecular diagnostics. Therefore, also in Ethiopia there is great interest for molecular diagnostics. Some laboratories have set up molecular tests,  for research or for diagnostics.

Molecular tests are being used for clinical diagnostics in resource-poor settings, for example tuberculosis detection using the GeneXpert point of care machines by Medecins Sans Frontieres. This kind of application of molecular tests is not sustainable and only to be used for emergency situations. For research, the veterinary section in Jimma University apparently has a well-equipped PCR lab. The lab cooperates with the University of Gent, Belgium lead by Professor Gryseelt. In Addis Abeba, the college of Health Sciences has much interest in teaching and applying molecular techniques. At the Institute for Plant and Livestock Research (ILRI) is a ready-to-use molecular lab. Unfortunately, consumables are hard to get. The Ethiopian Health & Nutrition Research Institute (EHNRI) in Addis Abeba, is cooperating with the CDC (Atlanta, USA) to set up a reference laboratory for the East African Region. Molecular biology would obviously play here a major role. It is not clear in what direction the Institute wants to move; do they want to focus on diagnostics? On Research? Or both? It’s a government organ and rumors are that foreign parties are being deterred from cooperation because of the obstructing bureaucracy. Subsequently, they turn to commercial laboratories. Commercial laboratories, such as the International Clinical Laboratories are building on foreign private investors and are therefore much more driven to get things done. Unfortunately, they also have to deal with silly laws and un-cooperating civil servants. Still, some of these laboratories already have experience with molecular diagnostics and have developed the appetite for more.