Difference between revisions of "POPs in Baltic salmon"
m (→Answer) |
m (→Keywords) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
Answer is under work and results are preliminary. | Answer is under work and results are preliminary. | ||
− | POP concentrations in Baltic sea fish have been measured from samples collected in [[EU-kalat]] project. The original data of individual fish samples is accessible through [http://en.opasnet.org/w/Special:Opasnet_Base?id=Op_en3104 Opasnet base]. This data is used here for a Bayesian model to calculate posterior concentration distributions (median and SD) for each congener. This data is then translated into TEQ, and can be used for health benefit assessment of Baltic | + | POP concentrations in Baltic sea fish have been measured from samples collected in [[EU-kalat]] project. The original data of individual fish samples is accessible through [http://en.opasnet.org/w/Special:Opasnet_Base?id=Op_en3104 Opasnet base]. This data is used here for a Bayesian model to calculate posterior concentration distributions (median and SD) for each congener. This data is then translated into TEQ, and can be used for health benefit assessment of Baltic salmon. |
Posterior congener median concentrations are presented below for each compound group (PCDD/F, PCB, BDE) analysed in EU-kalat. | Posterior congener median concentrations are presented below for each compound group (PCDD/F, PCB, BDE) analysed in EU-kalat. | ||
+ | <gallery> | ||
+ | |||
+ | File:Median_PCB_posterior_salmon.jpg | ||
+ | File:Median_PCDDF_posterior_salmon.jpg | ||
+ | File:Median_BDE_posterior_salmon.jpg | ||
+ | |||
+ | </gallery> | ||
+ | |||
+ | Based on the mean posterior concentrations of individual congeners, TEQs are calculated for each congener by using [[TEF]] values by WHO and plotted below. | ||
+ | |||
+ | [[File:Median_posterior_TEQ_salmon.jpg|800px]] | ||
+ | |||
+ | You can print out the numerical results of prior and posterior congener concentrations below. In addition the possible updated versions of the above figures are printed out. | ||
+ | |||
+ | <rcode label="Show results" embed=1 graphics=1 > | ||
+ | |||
+ | library(OpasnetUtils) | ||
+ | library(ggplot2) | ||
+ | library(reshape2) | ||
+ | |||
+ | objects.latest("Op_en7486", "pop_bayes") | ||
+ | |||
+ | oprint(dcast(resultsall@output, Congener~variable, fill=0, value.var = "resultsallResult")) | ||
+ | |||
+ | ggplot(subset(resultsall@output, grepl("PCB", Congener) & grepl("Medianpost", variable)), aes(x = Congener, y = resultsallResult, fill = Congener)) + geom_bar(stat = "identity") + | ||
+ | labs(x = "Congener", y = "Concentration (pg/g fat)") + coord_flip() + ggtitle("Median posterior concentrations of PCB's in Baltic salmon") | ||
+ | |||
+ | ggplot(subset(resultsall@output, grepl("CD", Congener) & grepl("Medianpost", variable)), aes(x = Congener, y = resultsallResult, fill = Congener)) + geom_bar(stat = "identity") + | ||
+ | labs(x = "Congener", y = "Concentration (pg/g fat)") + coord_flip() + ggtitle("Median posterior concentrations of PCDD/F's in Baltic salmon") | ||
+ | |||
+ | ggplot(subset(resultsall@output, grepl("BDE", Congener) & grepl("Medianpost", variable)), aes(x = Congener, y = resultsallResult, fill = Congener)) + geom_bar(stat = "identity") + | ||
+ | labs(x = "Congener", y = "Concentration (pg/g fat)") + coord_flip() + ggtitle("Median posterior concentrations of BDE's in Baltic salmon") | ||
+ | |||
+ | ggplot(subset(teq@output, grepl("Medianpost", variable)), aes(x = Congener, y = Result, fill = Congener)) + geom_bar(stat = "identity") + | ||
+ | labs(x = "Congener", y = "TEQ (pg/g fat)") + coord_flip() + ggtitle("Median posterior TEQ of POPs in Baltic salmon") | ||
+ | |||
+ | </rcode> | ||
== Rationale == | == Rationale == | ||
− | <rcode graphics=1> | + | This model takes in measured congener concentrations of POPs in Baltic salmon in northern part of Baltic sea (Bothnian Bay, Bothnian Sea, Åland Sea, Gulf of Finland). Measured data is used for Bayesian model to produce posterior medians and sds for each congener and also to calculate TEQ values. Numerical results are saved as variables to Opasnetbase and result figures are presented above in the Answer section. |
+ | |||
+ | <rcode name="pop_bayes" label="Calculate (for developers only)" graphics=1 store=1> | ||
+ | ## This code is Op_en????/pop_bayes on page [[POPs_in_Baltic_salmon]] | ||
+ | |||
library(OpasnetUtils) | library(OpasnetUtils) | ||
library(ggplot2) | library(ggplot2) | ||
library(rjags) | library(rjags) | ||
+ | library(reshape2) | ||
dat <- opbase.data("Op_en3104", subset = "POPs") | dat <- opbase.data("Op_en3104", subset = "POPs") | ||
dat <- dat[dat$Fish_species == "Salmon" , ] | dat <- dat[dat$Fish_species == "Salmon" , ] | ||
+ | |||
+ | dat <- subset(dat,!(is.na(dat["Result"]))) | ||
+ | dat <- dropall(dat) | ||
+ | levels(dat$POP) <- gsub("HCDD", "HxCDD", levels(dat$POP)) | ||
+ | levels(dat$POP) <- gsub("HCDF", "HxCDF", levels(dat$POP)) | ||
+ | levels(dat$POP) <- gsub("CoPCB", "PCB", levels(dat$POP)) | ||
congeners <- levels(dat$POP) #names of different congeners in data | congeners <- levels(dat$POP) #names of different congeners in data | ||
Line 27: | Line 75: | ||
Y <- length(congeners) #number of congeners and j's in for loop | Y <- length(congeners) #number of congeners and j's in for loop | ||
− | + | compdat <- dat[dat$POP %in% congeners[1:Y] , ] #data for current congener | |
− | + | Compound <- log10(compdat$Result+1E-2) #+1E-2 because zero concentrations are not allowed | |
− | compdat <- dat[dat$POP %in% congeners[1: | ||
− | Compound <- | ||
mo <- textConnection("model{ | mo <- textConnection("model{ | ||
− | + | for (j in 1 : Y ) { | |
− | + | tau1[j] ~ dunif(0.001, 1000) | |
− | + | muOfCompound[j] ~ dnorm(0, 0.001) | |
− | + | } | |
− | + | for( i in 1 : N ) { | |
− | + | Compound[i] ~ dnorm(muOfCompound[POP[i]], tau2[i]) | |
− | + | tau2[i] <- tau1[POP[i]]*sqrt(n[i]) | |
− | + | } | |
− | + | } | |
− | ") | + | ") |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
dataList = list( | dataList = list( | ||
+ | Y = Y, | ||
Compound = Compound, | Compound = Compound, | ||
POP = as.numeric(compdat$POP), | POP = as.numeric(compdat$POP), | ||
Line 72: | Line 105: | ||
plot(out) | plot(out) | ||
− | + | Meanlogpost = c() | |
− | + | for (j in 1 : Y) { | |
+ | logmean <- mean(out[[4]][,j]) #calculate mean of logmu for posterior (test 4) | ||
+ | Meanlogpost = c(Meanlogpost, logmean) | ||
+ | } | ||
+ | Sdlogpost = c() | ||
+ | for (j in 1 : Y) { | ||
+ | logsd <- sqrt(1/(mean(out[[4]][,j+Y]))) | ||
+ | Sdlogpost = c(Sdlogpost, logsd) | ||
+ | } | ||
resultsall <- data.frame( | resultsall <- data.frame( | ||
Meanorig = aggregate(compdat$Result, compdat["POP"], mean), #calculate mean for original data | Meanorig = aggregate(compdat$Result, compdat["POP"], mean), #calculate mean for original data | ||
Sdorig = aggregate(compdat$Result, compdat["POP"], sd)$x, #calcaulte sd of original data | Sdorig = aggregate(compdat$Result, compdat["POP"], sd)$x, #calcaulte sd of original data | ||
+ | Medianorig = aggregate(compdat$Result, compdat["POP"], median)$x, #calculate median of original data | ||
Meanlog = aggregate(Compound, compdat["POP"], mean)$x, #calculate mean for logdata | Meanlog = aggregate(Compound, compdat["POP"], mean)$x, #calculate mean for logdata | ||
Sdlog = aggregate(Compound, compdat["POP"], sd)$x, #calculate sd for logdata | Sdlog = aggregate(Compound, compdat["POP"], sd)$x, #calculate sd for logdata | ||
− | + | Meanlogpost = Meanlogpost, | |
− | + | Sdlogpost = Sdlogpost, | |
− | + | Medianpost = 10^Meanlogpost-1E-02, | |
− | + | Sdpost = 10^Sdlogpost-1E-02 #this might be incorrect | |
− | + | ) | |
− | |||
− | |||
− | |||
− | ) | ||
oprint(resultsall) | oprint(resultsall) | ||
− | + | tef <- Ovariable("tef", ddata = "Op_en4017", subset = "TEF values") | |
+ | tef <- EvalOutput(tef) | ||
− | < | + | colnames(resultsall)[1] <- "Congener" |
+ | resultsall <- melt(resultsall) | ||
+ | colnames(resultsall)[3] <- "Result" | ||
+ | resultsall <- Ovariable("resultsall", data = resultsall) | ||
+ | resultsall <- EvalOutput(resultsall) | ||
+ | teq = resultsall * tef | ||
− | = | + | objects.store(resultsall, teq) |
+ | cat("resultsall and teq stored for later use:\n", paste(ls(), collapse = ", "), "\n") | ||
− | + | </rcode> | |
− | |||
− | |||
− | |||
− | |||
==See also== | ==See also== | ||
− | |||
− | |||
==References== | ==References== |
Latest revision as of 04:58, 1 July 2016
This page is a variable.
The page identifier is Op_en7486 |
---|
Moderator:Nobody (see all) Click here to sign up. |
This page is a stub. You may improve it into a full page, and then a rating bar will appear here. |
Upload data
|
Question
What are the levels of persistent organic pollutants (POPs) in Baltic sea salmon?
Answer
Answer is under work and results are preliminary.
POP concentrations in Baltic sea fish have been measured from samples collected in EU-kalat project. The original data of individual fish samples is accessible through Opasnet base. This data is used here for a Bayesian model to calculate posterior concentration distributions (median and SD) for each congener. This data is then translated into TEQ, and can be used for health benefit assessment of Baltic salmon.
Posterior congener median concentrations are presented below for each compound group (PCDD/F, PCB, BDE) analysed in EU-kalat.
- Error creating thumbnail: Unable to save thumbnail to destination
- Error creating thumbnail: Unable to save thumbnail to destination
- Error creating thumbnail: Unable to save thumbnail to destination
Based on the mean posterior concentrations of individual congeners, TEQs are calculated for each congener by using TEF values by WHO and plotted below.
You can print out the numerical results of prior and posterior congener concentrations below. In addition the possible updated versions of the above figures are printed out.
Rationale
This model takes in measured congener concentrations of POPs in Baltic salmon in northern part of Baltic sea (Bothnian Bay, Bothnian Sea, Åland Sea, Gulf of Finland). Measured data is used for Bayesian model to produce posterior medians and sds for each congener and also to calculate TEQ values. Numerical results are saved as variables to Opasnetbase and result figures are presented above in the Answer section.
See also
References
Related files
<mfanonymousfilelist></mfanonymousfilelist>