Compound intake estimator calculates intakes of compounds based on food or food supplement intake, compound concentration in food, and guidance values for the compound.
Question
How to estimate intakes and compare them to guidance values?
Answer
Intake and risk estimates
The concern indicator is calculated for each compound separately. If the intake is smaller than the threshold of concern, the indicator is < 1 and there is no concern. The threshold of concern is acceptable daily indake (ADI), benchmark dose (BMDL10), or threshold of toxicological concern (TTC), depending on what data is available for each compound.
The total intake of essential oil is calculated like this:
intakeoil = amountsuppl * fractionoil + amountoil
where
- intake is the total intake of essential oil
- amountsuppl is the intake of food supplement
- fractionoil is the fraction of essential oil in the food supplement
- amountoil is the intake of the essential oil consumed directly, i.e. in addition to what is in the food supplement.
The intakes of individual compounds are calculated like this:
intakecomp = intakeoil * conccomp
where
- intakecomp are the intakes of each compound
- intakeoil is the total intake of essential oil
- conccomp are the concentrations of each compound in the essential oil.
Compound concentrations
The following code allows to calculate the mean and median value of the concentration of each compound in the input data.
For seeing details of what the code actually does, click Show code. The code will appear, with documentation of each part on rows starting with ###. In brief, the code reads a piece of concentration and other data from Opasnet database, selects the rows defined by the user through the interface above, and shows the data on a summary table and a few graphs.
Rationale
Benefit-risk assessment
The idea of the tool is to look at consumption of a particular PFS product, and estimate whether any of the compounds in the product cause concern. The estimation follows this equation:
compound intakes = product intake (g /day) * concentration of each compound in the product (mg /g) / 60
(60 kg is the assumed body weight of the person)
concern indicator = compound intakes (mg /kg /d) / threshold of concern (mg /kg /d)
The concern indicator is calculated for each compound separately. If the intake is smaller than the threshold of concern, the indicator is < 1 and there is no concern. The threshold of concern is acceptable daily indake (ADI), benchmark dose (BMDL10), or threshold of toxicological concern (TTC), depending on what data is available for each compound.
You can fill in the following information:
- Name of plant food supplement (PFS) product. If this is given, it is shown on the graphs and outputs as title.
- Fraction of essential oil in the supplement. How much (as a percentage) does the total product contain the essential oil?
- Amount of supplement per day. How much is the supplement (the total product) consumed per day (given as grams of product per day)?
- The compound concentration data is taken from a table on this page. However, if you know that the product contains something that is not listed in the table, you may add the information here.
- Name of additional compound. The name is used to combine the concentration data with toxicological data. So, the name should be found in one of these two tables on this page: Cramer classes of compounds, or Guidance values.
- Concentration of the additional compound in the supplement. This is given as mg of compound per g of PFS product.
- Show intermediate results? If Yes is selected, you will see a table of intake estimates for each compound, and the same data as a graph. Otherwise, only a default output is shown (see below).
- Which extraction techniques to consider? Different extraction methods result in different concentration estimates even from the same product. Some of the toxicological information is given having a particular extraction method in mind, and it is not always possible to use toxicological information with any concentration information. Therefore, if you know that some extraction methods should not be used to estimate toxicology, you can unselect them from the list.
- The default outcome shows a graph where the level of concern is shown for each compound. However, because there are dozens of compounds in any product, the graph shows only those which has the level more than one, i.e. those compounds that need further scrutiny.
Concentrations
The concentration code allows to calculate the mean and median value of the concentration of each compound that appear in table in a new page. In addition, it is possible to plot the concentration (expressed as percentage of essential oil) of each compound reported in the table below. Each single value is reported in the chart.
Data
Example data(%)Obs | Extraction.technique | Compound | Result | Reference |
---|
1 | Superheated water extraction, 100 °C | 2-Carene | 0.08; 0.1; 0.12 | Jayawardena & Smith, 2010 |
2 | Superheated water extraction, 100 °C | Z-Cinnamaldehyde | 1.63; 2.1; 2.57 | Jayawardena & Smith, 2010 |
3 | Superheated water extraction, 100 °C | Cinnamaldehyde | 81.14; 83.7; 86.26 | Jayawardena & Smith, 2010 |
4 | Superheated water extraction, 100 °C | Eugenol | 0.45; 0.8; 1.15 | Jayawardena & Smith, 2010 |
5 | Hydrodistillation | 1,8-Cineole | 0.2 | Chericoni et al, 2005 |
6 | Superheated water extraction, 100 °C | Cinnamyl acetate | 5.47; 7.2; 8.93 | Jayawardena & Smith, 2010 |
Calculations
- You need to run the code below only if you update the data tables on this page.
+ Show code- Hide code
library(OpasnetUtils)
################## PRE-DEFINED INPUTS
# compound.conc is the concentration of a compound in the critical constituent (or food, if fr.const == 1)
# fr.const is the fraction of the critical constituent in the whole food
# extraction is a criteria to select specific extraction techniques
# addcomp is an additional compound not in the product. Data about its concentration in food is given by the user.
# compound.intake is the intakes of the compounds via food or food supplement, each given as mg /kg /d.
compound.intake <- Ovariable("compound.intake",
dependencies = data.frame(Names = c(
"food.amount", # amount of food supplement consumed
"compound.conc", # concentration of compounds in essential oil
"oil.amount", # amount of essential oil consumed in addition to the supplement product
"fr.const", # fraction of essential oil in the supplement product
"extraction", # Which extraction methods the user wants to consider
"addcomp" # concentrations of compounds in the essential oil (missing from default data)
# conc is the temporary ovariable for compound.conc used in calculations
)),
formula = function(...) {
conc <- compound.conc * 10 * extraction
# remove extractions that are not considered.
# compound.conc from w/w% to mg/g
# oapply would be an alternative to remove extra indices, but there is a bizarre error.
# compound.conc <- oapply(compound.conc, cols = "Extraction.technique", fun = mean)
test <- colnames(conc@output) != "Extraction.technique"
conc@marginal <- conc@marginal[test]
conc@output <- conc@output[test] # unit: mg /g
# removes index Extraction.technique, which is no longer needed.
conc@output <- orbind(conc, addcomp * 1)
# addcomp must not contain columns that are not in conc. It must contain Compound.
# It is multiplied by 1 to make the result column name "Result".
out <- (food.amount * fr.const / 100 + oil.amount) * conc / 60
# calculates the oil intake from food supplement and then adds direct oil intake.
# scale to 60 kg person
# fr.const from % to fraction
test2 <- unique(out@output$Compound[result(out) > 0]) # remove all compounds where intake = 0
out@output <- out@output[out@output$Compound %in% test2 , ]
return(out)
}
)
# guidance.values is the guidance value (ADI, BMDL10, TTC or similar) for compounds. unit: mg /kg /d
# cramer is cramer classes of compounds (temporary)
# cramer.values are the thresholds of toxicological concern for each Cramer class (temporary)
cramer <- tidy(opbase.data("Op_en6193", subset = "cramer_classes_of_compounds"))
cramer$Result <- NULL
cramer$Guidance <- "TTC" # Threshold for toxicological concern
cramer.values <- tidy(opbase.data("Op_en6193", subset = "cramer_values"))
cramer.values <- merge(cramer, cramer.values)
cramer.values[["Cramer class"]] <- NULL
cramer.values$Result <- cramer.values$Result / 1000 # from ug /kg /d to mg /kg /d
guidance.values <- tidy(opbase.data("Op_en6193", subset = "guidance_values"))
guidance.values <- orbind(cramer.values, guidance.values)
guidance.values <- Ovariable("guidance.values", data = guidance.values)
# food.risk calculates "hazard quotients" or risks relative to guidance values. Value < 1 are of minimal concern
food.risk <- Ovariable(name = "food.risk",
dependencies = data.frame(Name = c("compound.intake", "guidance.values")),
formula = function(...) {
# guidance.risk is intake compared with guidance values.
out <- compound.intake / guidance.values
removepoorguidance <- function(dat, goodg) { # Remove inferior guidance values
# Compounds that have good guidance values (goodg).
hasgoodg <- unique(dat[dat$Guidance == goodg , "Compound"])
# The row contains data about a chemical with a good guidance value
# but the data is about an inferior guidance value.
out <- dat[!(dat$Compound %in% hasgoodg & dat$Guidance != goodg) , ]
return(out)
}
out <- removepoorguidance(out@output, "ADI")
out <- removepoorguidance(out, "TDI")
out <- removepoorguidance(out, "BMDL10")
test2 <- unique(out$Compound[out$Result > 0]) # remove all compounds where risk = 0
out <- out[out$Compound %in% test2 , ]
return(out)
}
)
extraction <- Ovariable("extraction", ddata = "Op_en6193.extraction_techniques")
extraction@data$extractionResult <- 1
### Define formatting for the concentration graphs that will be shown.
concplot <- function(condition) {
dat <- compound.conc@output[condition, ]
if(nrow(dat) != 0) {
out <- ggplot(dat,
aes(
x = Compound,
y = compound.concResult,
colour = Extraction.technique
)) +
geom_point(size=5) +
theme_grey(base_size = 24) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
labs(y = "Concentration (%)")
return(out)
} else {
warning("No data to show")
}
}
objects.store(compound.intake, guidance.values, food.risk, extraction, concplot)
cat("The following objects were successfully stored:
compound.intake, guidance.values, food.risk, extraction, concplot\n")
| |
Using different data on different layers: [1].
Extraction techniques(-)Obs | Extraction.technique | Notes |
---|
1 | Not known | |
2 | Hydrodistillation | |
3 | Solvent extraction | |
4 | Steam distillation | |
5 | Supercritical fluid extraction, 120 bar, 40 °C | |
6 | Supercritical fluid extraction, 90 bar, 40 °C | |
7 | Supercritical fluid extraction, 90 bar, 50 °C | |
8 | Superheated water extraction, 100 °C | |
9 | Superheated water extraction, 150 °C | |
10 | Superheated water extraction, 200 °C | |
11 | Solid phase | |
Data about guidance values
[1]
Guidance values(mg /kg-BW /d)Obs | Compound | Guidance | Result | Notes |
---|
1 | 1,8-Cineole | ADI | 2.8 | |
2 | 4-Terpineol | ADI | 1.2 | |
3 | Benzylbenzoate | ADI | 5 | |
4 | Cinnamaldehyde | ADI | 0.7 | |
5 | Coumarin | TDI | 0.1 | |
6 | Estragole | BMDL10 | 3.3-6.5 | Data said BMD10 but probably BMDL10 |
7 | Eugenol | ADI | 2.5 | |
8 | Fenchone | ADI | 10.64 | |
9 | Limonene | ADI | 1 | |
10 | Linalool | ADI | 0.5 | |
11 | Myrcene | ADI | 2.5 | |
12 | Trans-anethole | ADI | 2 | |
13 | Safrole | BMDL10 | 1.9-5.1 | |
14 | α-Terpineol | ADI | 1.2 | |
Cramer values(µg /kg-BW /d)Obs | Cramer class | Threshold of toxicological concern | Description |
---|
1 | 1 | 30 | |
2 | 2 | 1.5 | |
3 | 3 | 1.5 | |
4 | 4 | 0.0025 | This comes from Apiole?! Is this correct? |
Values 30 and 1.5 µg /kg /d come from EFSA (2012)[2]
Cramer classes of compounds
|
Cramer classes of compounds(-)Obs | Compound | Cramer class | Notes |
---|
1 | 1,8-Cineole | 3 | A new line was created for 1.8-Cineole based on "ß-Phellandrene + 1,8-Cineole: 1+3" | 2 | 2-Carene | 1 | | 3 | 2-Methoxycinnamaldehyde | 1 | | 4 | 3-Phenylpropyl acetate | 1 | | 5 | 4-Methoxyphenylacetone | 1 | | 6 | 4-Terpineol | 3 | | 7 | Allo-ocimene | 1 | | 8 | Apiole | 4 | This is 0.0025 ug/kg/d!? Is this Cramer class at all? | 9 | Aromadendrene | 1 | | 10 | Aromatic compound | | Class could not be assigned | 11 | Benzaldehyde | 1 | | 12 | Benzenepropanal | 1 | | 13 | Benzenepropanol acetate | 1 | | 14 | Benzenepropanol | 1 | | 15 | Benzylbenzoate | 1 | | 16 | Borneol | 1 | | 17 | Cadinene | 1 | | 18 | Calamenene | 2 | | 19 | Camphene | 1 | | 20 | Camphor | 3 | | 21 | Carvacrol | 1 | | 22 | Carveol isomere | 1 | Carveol (2-methyl-5-prop-1-en-2-ylcyclohex-2-en-1-ol) is 1. Isomere is not specified so the class was assigned to the general compound | 23 | Caryophyllene alcohol | 3 | | 24 | Caryophyllene oxide | 3 | | 25 | Caryophyllene | 1 | | 26 | Chavicol | 1 | | 27 | Cinnamaldehyde | 1 | | 28 | Cinnamic acid | 1 | | 29 | Cinnamyl acetate | 1 | | 30 | Cinnamyl alcohol | 1 | | 31 | Cis-anethole | 2 | | 32 | Cis-limonene oxide | 2 | | 33 | Cis-P-menth-2-en-1-ol | 3 | | 34 | Cis-sabinene hydrate | 2 | | 35 | Cis-ß-Ocimene | 1 | | 36 | Cis-α-ocimene | 1 | | 37 | Cis-β-ocimene | 1 | | 38 | Coumarin | 3 | | 39 | Cryptone | 2 | | 40 | Cymene isomere | 1 | cymene is 1. Isomere is not specified so the class was assigned to the general compound | 41 | E-Anethole | 1 | | 42 | e-Cadinene + Pioncarvone | | Class could not be assigned | 43 | E-Cinnamyl acetate | 1 | | 44 | E-o-Methoxycinnamaldehye | 1 | | 45 | Epoxy-6.7-Humulene + Mw=220 | | Class could not be assigned | 46 | Estragole | 1 | Test compound, not real value | 47 | Eugenol acetate | 3 | | 48 | Eugenol | 1 | | 49 | Fenchyl acetate | 1 | | 50 | Humulene epoxide II | 3 | | 51 | Isoledene | 1 | | 52 | Limonene | 1 | | 53 | Linalool | 3 | | 54 | Methoxy eugenol | 3 | | 55 | Methyl cinnamaldehyde | 1 | | 56 | Methyl eugenol | 1 | | 57 | Monoterpenes | | Class could not be assigned | 58 | N-Hexadecanoic acid | 1 | | 59 | N-Octadecanoic acid | 1 | | 60 | o-Cymene | 1 | | 61 | p-Anisaldehyde | 1 | | 62 | Para-Methoxy cinnamic aldehyde | 1 | | 63 | p-Cymene | 1 | | 64 | P-Cymene-8-ol | 3 | | 65 | Phenyl cyclohexene | 2 | | 66 | Phenylmethyle isovalerate | 1 | | 67 | Rutin | 1 | Test compound, not real value | 68 | Sabinene | 1 | | 69 | Safrole | 3 | | 70 | Sesquiterpene epoxide | | Class could not be assigned. Sesquierpene is class 3, but don't now if something changes with epoxide | 71 | Sesquiterpenol Mw=220 | | Class could not be assigned | 72 | Sesquiterpenol Mw=222 | | Class could not be assigned | 73 | Spathulenol | 3 | | 74 | ß-Bisabolene | 1 | | 75 | ß-Cubebene | 1 | | 76 | ß-Elemene | 1 | | 77 | ß-Myrcene | 1 | | 78 | ß-Phellandrene | 1 | ß-Phellandrene + 1,8-Cineole: 1+3 | 79 | ß-Pinene | 1 | | 80 | Styrene | 1 | | 81 | Terpinen-4-ol | 3 | | 82 | Terpinolene isomere | 1 | terpinolene is 1 , isomere not known. Isomere is not specified so the class was assigned to the general compound | 83 | Terpinolene | 1 | | 84 | Tetradecanal | 1 | | 85 | Trans-2-methoxycinnamaldehyde | 1 | | 86 | Trans-limonene oxide | 2 | | 87 | Trans-pinene hydrate | 2 | | 88 | Trans-Pinocarveol | 1 | | 89 | Trans-Piperitol | 1 | | 90 | Trans-P-menth-2-en-1-ol | 3 | | 91 | Trans-ß-Ocimene | 1 | | 92 | Z-Cinnamaldehyde | 1 | | 93 | α-Cadinol | 3 | | 94 | α-Calacorene | 2 | | 95 | α-Copaene | 1 | | 96 | α-Cubebene | 1 | | 97 | α-Famesene | | Class could not be assigned | 98 | α-Gurjunene | 1 | | 99 | α-Humulene | 1 | | 100 | α-Muurolene | 1 | | 101 | α-Muurolol | 3 | | 102 | α-P-Dimethylstyrene | 1 | | 103 | α-Phellandrene | 1 | | 104 | α-Pinene | 1 | | 105 | α-Selinene | 1 | | 106 | α-Terpinene | 1 | | 107 | α-Terpineol | 3 | | 108 | α-Thujene | 1 | | 109 | β-Anise aldehyde | 1 | | 110 | β-Phellandrene | 1 | | 111 | β-Pinene | 1 | | 112 | γ-Cadinene | 1 | | 113 | γ-terpinene | 1 | | 114 | γ-Terpinene | 1 | | 115 | Δ3-Carene | 1 | | 116 | δ-Cadinene | 1 | |
|
See also
References
- ↑ New data obtained from Antonella Guzzon, personal communication (email) 31 March 2014.
- ↑ EFSA (2012). Scientific Opinion on Exploring options for providing advice about possible human health risks based on the concept of Threshold of Toxicological Concern (TTC). EFSA Journal 2012;10(7):2750