Introduction

In this metadata analysis, 63 bacteria were obtained from 28 different studies from which the reaction kinetic constant and half-life values were calculated for each study and used to make a comparison of previous studies of the biodegradation of used engine lubricating oils by bacteria, where the half-life and reaction kinetic constant is given by the following equation:

\(Ln[A]=-kt + Ln[A]_{0}\)
# load library
 library("pracma")
library ("tidyverse")
library("pastecs")
library("matlab")
library("plotly")
library("knitr")
library("agricolae")

Load and transform data:

The data shown below are extracted from scientific papers published in different journals if you wish to have more information you can see the complete document in the repository of the Universidad de la Salle.

# Load data and Rename Columns
metadata<- read_csv2("Metadata.csv")
df <- data.frame(metadata)
colnames(df)[colnames(df) == "Ini_Con_.mg.kg."] <- "Ini_Con_mg/Kg"
colnames(df)[colnames(df) == "Fin_Con_.mg.kg."] <- "Fin_Con_mg/Kg"
kable(head(df))
Class Specie Ini_Con_mg/Kg Fin_Con_mg/Kg Days
Actinobacteria Arthrobacter sp, ZnC1 100 79.30 7
Actinobacteria Kocuria varians PbB3 100 94.20 7
Actinobacteria Kocuria varians MB2 100 63.70 7
Actinobacteria Corynebacterium sp 100 28.15 15
Actinobacteria Micrococcus sp 100 43.71 28
Alphaproteobacteria Ochrobactrum anthropi HM-1  100 42.10 21

The following equation can be obtained by solving the general equation of the degradation kinetics degree 1 to calculate k:

\[\begin{equation} k =- \cfrac{ln(\frac{A}{A}_0)}{d} \end{equation}\]

# Calculate k 
df= df %>% 
    mutate(k=abs(log(`Fin_Con_mg/Kg`/`Ini_Con_mg/Kg`)/(`Days`)))
kable(head(df))
Class Specie Ini_Con_mg/Kg Fin_Con_mg/Kg Days k
Actinobacteria Arthrobacter sp, ZnC1 100 79.30 7 0.0331332
Actinobacteria Kocuria varians PbB3 100 94.20 7 0.0085357
Actinobacteria Kocuria varians MB2 100 63.70 7 0.0644265
Actinobacteria Corynebacterium sp 100 28.15 15 0.0845082
Actinobacteria Micrococcus sp 100 43.71 28 0.0295569
Alphaproteobacteria Ochrobactrum anthropi HM-1  100 42.10 21 0.0411963

To calculate Half live value use the following equation:

\(Half live = ln(\frac{2}{k})\)
# Calculate Half Time value
df = df  %>% 
    mutate(Half_Time=log(2)/k)
kable(head(df))
Class Specie Ini_Con_mg/Kg Fin_Con_mg/Kg Days k Half_Time
Actinobacteria Arthrobacter sp, ZnC1 100 79.30 7 0.0331332 20.92005
Actinobacteria Kocuria varians PbB3 100 94.20 7 0.0085357 81.20552
Actinobacteria Kocuria varians MB2 100 63.70 7 0.0644265 10.75872
Actinobacteria Corynebacterium sp 100 28.15 15 0.0845082 8.20213
Actinobacteria Micrococcus sp 100 43.71 28 0.0295569 23.45128
Alphaproteobacteria Ochrobactrum anthropi HM-1  100 42.10 21 0.0411963 16.82547
# Descriptive Statistics 
kable(stat.desc(df,))
Class Specie Ini_Con_mg/Kg Fin_Con_mg/Kg Days k Half_Time
nbr.val NA NA 5.400000e+01 54.00000 54.0000000 54.0000000 54.000000
nbr.null NA NA 0.000000e+00 0.00000 0.0000000 0.0000000 0.000000
nbr.na NA NA 0.000000e+00 0.00000 0.0000000 0.0000000 0.000000
min NA NA 1.000000e+02 1.00000 7.0000000 0.0018659 2.984117
max NA NA 1.720000e+04 6278.00000 50.0000000 0.2322788 371.487571
range NA NA 1.710000e+04 6277.00000 43.0000000 0.2304129 368.503453
sum NA NA 2.740000e+04 11103.33000 927.0000000 3.0744905 1917.231226
median NA NA 1.000000e+02 49.54500 14.0000000 0.0461015 15.060595
mean NA NA 5.074074e+02 205.61722 17.1666667 0.0569350 35.504282
SE.mean NA NA 3.277611e+02 121.35259 1.3607634 0.0062150 8.737168
CI.mean NA NA 6.574055e+02 243.40246 2.7293458 0.0124657 17.524541
var NA NA 5.801076e+06 795228.31169 99.9905660 0.0020858 4122.258022
std.dev NA NA 2.408542e+03 891.75575 9.9995283 0.0456708 64.204813
coef.var NA NA 4.746762e+00 4.33697 0.5824968 0.8021570 1.808368
# Calculate mean by bacteria class 
K_Mean= df %>% 
        group_by(Class)%>% 
        summarise (mean=mean(k))
        Mean_K=data.frame(K_Mean)
kable(Mean_K)
Class mean
Actinobacteria 0.0440321
Alphaproteobacteria 0.0530060
Bacilli 0.0454821
Betaproteobacteria 0.0398795
Consortium 0.0995013
Flovobacteria 0.0242860
Gammaproteobacteria 0.0551736

The following equation can be obtained by solving the general equation of the degradation kinetics degree 1 to calculate A(Final Concentration), this will be used to calculate final concentration at a given time using k mean by class to predict the biodegradation by every bacteria class:

\(A=A_0*e^{-k*t}\)
# Extract mean by bacteria class 
Mean_Ac=Mean_K [1,2]
Mean_Al=Mean_K [2,2]
Mean_Ba=Mean_K [3,2]
Mean_Be=Mean_K [4,2]
Mean_Co=Mean_K [5,2]
Mean_Fl=Mean_K [6,2]
Mean_Ga=Mean_K [7,2]
# Set Initial Concentration
Ci=5000
# Set number of days 
Day <- linspace(0,80,17)
# Calculate concentration at given day with k mean for each class bacteria
Cf_Ac=Ci*exp(-Mean_Ac*Day)
Cf_Al=Ci*exp(-Mean_Al*Day)
Cf_Ba=Ci*exp(-Mean_Ba*Day)
Cf_Be=Ci*exp(-Mean_Be*Day)
Cf_Co=Ci*exp(-Mean_Co*Day)
Cf_Fl=Ci*exp(-Mean_Fl*Day)
Cf_Ga=Ci*exp(-Mean_Ga*Day)
Actinobacteria<- c(Cf_Ac)
Alphaproteobacteria <- c(Cf_Al)
Bacilli<- c(Cf_Ba)
Betaproteobacteria<- c(Cf_Be)
Consortium<- c(Cf_Co)
Flovobacteria<- c(Cf_Fl)
Gammaproteobacteria<- c(Cf_Ga)
# Create data frame with concentration at given day
df_k <- data.frame(Day,Actinobacteria,Alphaproteobacteria,Bacilli,Betaproteobacteria,Consortium,Flovobacteria,Gammaproteobacteria)
kable(head(df_k))
Day Actinobacteria Alphaproteobacteria Bacilli Betaproteobacteria Consortium Flovobacteria Gammaproteobacteria
0 5000.000 5000.000 5000.000 5000.000 5000.0000 5000.000 5000.000
5 4011.950 3835.914 3982.968 4096.121 3040.2246 4428.265 3794.566
10 3219.149 2942.848 3172.806 3355.641 1848.5931 3921.906 2879.747
15 2583.013 2257.702 2527.437 2749.022 1124.0276 3473.448 2185.478
20 2072.584 1732.071 2013.340 2252.066 683.4593 3076.269 1658.588
25 1663.021 1328.815 1603.814 1844.947 415.5740 2724.507 1258.724

Plot of biodegradation over time

# Plot result of concentracion over a given time 
fig <- plot_ly(df_k, x = ~Day, y = ~Consortium, name = 'Consortium', type = 'scatter', mode = 'lines') 
fig <- fig %>% add_trace(y = ~Actinobacteria, name = 'Actinobacteria', mode = 'lines')
fig <- fig %>% add_trace(y = ~Alphaproteobacteria, name = 'Alphaproteobacteria', mode = 'lines') 
fig <- fig %>% add_trace(y = ~Bacilli, name = 'Bacilli', mode = 'lines')
fig <- fig %>% add_trace(y = ~Betaproteobacteria, name = 'Betaproteobacteria', mode = 'lines')
fig <- fig %>% add_trace(y = ~Flovobacteria, name = 'Flovobacteria', mode = 'lines')
fig <- fig %>% add_trace(y = ~Gammaproteobacteria, name = 'Gammaproteobacteria', mode = 'lines')
fig <- fig %>% layout(title = "Concentration mg/Kg by bacteria class",
         xaxis = list(title = "Days"),
         yaxis = list (title = "Concentration mg/Kg"))
fig

Statistical Analysis

The results obtained from these two tests show that there is a difference between the consortia and the other classes of bacteria analyzed, so it can be concluded that to optimize the degradation time of used lubricating oils of motor oil the best option is to perform its degradation by bacterial consortia.

# Anova Test
anova <- aov(k~Class , data = df)
summary(anova)
##             Df  Sum Sq  Mean Sq F value Pr(>F)
## Class        6 0.01970 0.003284   1.699  0.142
## Residuals   47 0.09085 0.001933
# Least Significant Difference
lsd_test <- LSD.test(anova,"Class")
lsd_test$statistics
##       MSerror Df       Mean       CV
##   0.001932906 47 0.05693501 77.21931
lsd_test$parameters
##         test p.ajusted name.t ntr alpha
##   Fisher-LSD      none  Class   7  0.05
lsd_test$groups
##                              k groups
## Consortium          0.09950130      a
## Gammaproteobacteria 0.05517356      b
## Alphaproteobacteria 0.05300602      b
## Bacilli             0.04548215      b
## Actinobacteria      0.04403210      b
## Betaproteobacteria  0.03987950      b
## Flovobacteria       0.02428602      b
# Plot result LSD test groups
plot(lsd_test)

Created by : Juan Sebastian Hernandez Gomez