Difference between revisions of "EU-kalat"
(→Bayes model for dioxin concentrations: first draft of new model) |
(→Bayes model for dioxin concentrations) |
||
Line 129: | Line 129: | ||
* Model run 28.2.2017 with Mu estimates [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=TwY2bAIiWr037zqb] | * Model run 28.2.2017 with Mu estimates [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=TwY2bAIiWr037zqb] | ||
* Model run 1.3.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=3Xu19vkWK1lyWVg3] | * Model run 1.3.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=3Xu19vkWK1lyWVg3] | ||
+ | * Model run 23.4.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=yblH8XsmSUp0yRPL] produces list conc.param and ovariable concantration | ||
− | <rcode name="bayes" label="Sample Bayes model (for developers only)"> | + | <rcode name="bayes" label="Sample Bayes model (for developers only)" graphics=1> |
# This is code Op_en3014/bayes on page [[EU-kalat]] | # This is code Op_en3014/bayes on page [[EU-kalat]] | ||
Line 136: | Line 137: | ||
library(reshape2) | library(reshape2) | ||
library(rjags) | library(rjags) | ||
+ | library(MASS) # mvrnorm | ||
+ | library(car) # scatterplotMatrix | ||
objects.latest("Op_en3104", code_name = "preprocess") # [[EU-kalat]] | objects.latest("Op_en3104", code_name = "preprocess") # [[EU-kalat]] | ||
Line 150: | Line 153: | ||
conl <- as.character(unique(eu@output$Congener)) | conl <- as.character(unique(eu@output$Congener)) | ||
fisl <- sort(as.character(unique(eu@output$Fish))) | fisl <- sort(as.character(unique(eu@output$Fish))) | ||
+ | C <- length(conl) | ||
+ | Fi <- length(fisl) | ||
+ | N <- 1000 | ||
conl | conl | ||
fisl | fisl | ||
Line 165: | Line 171: | ||
names(LOQ) <- conl | names(LOQ) <- conl | ||
cong <- data.matrix(fishsamples[3:ncol(fishsamples)]) | cong <- data.matrix(fishsamples[3:ncol(fishsamples)]) | ||
− | cong[ | + | cong <- sapply(1:length(LOQ), FUN = function(x) ifelse(cong[,x]==0, 0.5*LOQ[x], cong[,x])) |
mod <- textConnection(" | mod <- textConnection(" | ||
model{ | model{ | ||
for(i in 1:S) { # s = fish sample | for(i in 1:S) { # s = fish sample | ||
− | + | # below.LOQ[i,j] ~ dinterval(-cong[i,j], -LOQ[j]) | |
− | + | cong[i,1:C] ~ dmnorm(mu[fis[i],], Omega[fis[i],,]) | |
− | |||
− | |||
} | } | ||
− | for(i in 1: | + | for(i in 1:Fi) { # Fi = fish species |
− | mu[i,1:C] ~ dmnorm(mu0[1:C], | + | mu[i,1:C] ~ dmnorm(mu0[1:C], Omega0[1:C,1:C]) |
− | Omega[i,1:C,1:C] ~ dwish( | + | Omega[i,1:C,1:C] ~ dwish(Omega0[1:C,1:C],S) |
ans.pred[i,1:C] ~ dmnorm(mu[i,], Omega[i,,]) # Model prediction | ans.pred[i,1:C] ~ dmnorm(mu[i,], Omega[i,,]) # Model prediction | ||
} | } | ||
Line 183: | Line 187: | ||
") | ") | ||
− | |||
jags <- jags.model( | jags <- jags.model( | ||
mod, | mod, | ||
Line 189: | Line 192: | ||
S = nrow(fishsamples), | S = nrow(fishsamples), | ||
C = C, | C = C, | ||
− | + | Fi = Fi, | |
cong = log(cong), | cong = log(cong), | ||
# LOQ = LOQ, | # LOQ = LOQ, | ||
# below.LOQ = is.na(cong)*1, | # below.LOQ = is.na(cong)*1, | ||
fis = match(fishsamples$Fish, fisl), | fis = match(fishsamples$Fish, fisl), | ||
− | mu0 = rep( | + | mu0 = rep(0,C), |
− | + | Omega0 = diag(C)/100000 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
), | ), | ||
n.chains = 4, | n.chains = 4, | ||
n.adapt = 100 | n.adapt = 100 | ||
) | ) | ||
− | |||
update(jags, 100) | update(jags, 100) | ||
Line 240: | Line 209: | ||
jags, | jags, | ||
c('mu', 'Omega', 'ans.pred'), | c('mu', 'Omega', 'ans.pred'), | ||
− | + | N | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
) | ) | ||
+ | dimnames(samps.j$mu) <- list(Fish = fisl, Compound = conl, Iter = 1:N, Chain = 1:4) | ||
+ | dimnames(samps.j$Omega) <- list(Fish = fisl, Compound = conl, Compound2 = conl, Iter=1:N, Chain=1:4) | ||
+ | dimnames(samps.j$ans.pred) <- list(Fish = fisl, Compound=conl,Iter=1:N, Chain=1:4) | ||
− | # | + | ##### cong.param contains expected values of the distribution parameters from the model |
− | + | cong.param <- list( | |
− | # | + | mu = apply(samps.j$mu[,,,1], MARGIN = c(1,2), FUN = mean), |
− | + | Omega = apply(samps.j$Omega[,,,,1], MARGIN = c(1,2,3), FUN = mean) | |
− | # | ||
− | |||
− | |||
− | |||
− | |||
− | # | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | # | ||
− | |||
− | |||
− | mu = apply( | ||
− | Omega = | ||
− | |||
− | |||
− | |||
− | |||
− | |||
) | ) | ||
− | + | concentration <- Ovariable( | |
− | " | + | "concentration", |
− | dependencies = data.frame(Name = " | + | dependencies = data.frame(Name = "cong.param"), |
formula = function(...) { | formula = function(...) { | ||
jsp <- lapply( | jsp <- lapply( | ||
− | 1: | + | 1:length(cong.param$mu[,1]), |
FUN = function(x) { | FUN = function(x) { | ||
− | mvrnorm(openv$N, | + | temp <- exp(mvrnorm(openv$N, cong.param$mu[x,], cong.param$Omega[x,,])) |
+ | dimnames(temp) <- c(list(Iter = 1:openv$N), dimnames(cong.param$mu)[2]) | ||
+ | return(temp) | ||
} | } | ||
) | ) | ||
− | + | names(jsp) <- dimnames(cong.param$mu)[[1]] | |
− | + | jsp <- melt(jsp, value.name = "Result") | |
− | + | colnames(jsp)[colnames(jsp)=="L1"] <- "Fish" # Convert automatic name to meaningful | |
− | + | jsp <- Ovariable(output=jsp, marginal = colnames(jsp) != "Result") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | jsp <- Ovariable(output=jsp, marginal = colnames(jsp) | ||
return(jsp) | return(jsp) | ||
} | } | ||
) | ) | ||
− | # | + | #objects.store(concentration, conc.param) |
− | # | + | #cat("Ovariable concentration and list conc.params stored.\n") |
− | + | # Predictions for all congeners of fish1 (Baltic herring) | |
− | + | scatterplotMatrix(t(samps.j$ans.pred[1,,,1])) | |
− | + | # Predictions for all fish species for TCDD | |
− | + | scatterplotMatrix(t(samps.j$ans.pred[,1,,1])) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ) | ||
− | |||
− | |||
− | + | concentration <- EvalOutput(concentration) | |
− | |||
− | |||
− | |||
− | + | ggplot(melt(exp(samps.j$ans.pred[,,,1])), aes(x=value, colour=Compound))+geom_density()+ | |
− | + | facet_wrap( ~ Fish,scales = "free_y")+scale_x_log10() | |
+ | ggplot(eu@output, aes(x = euResult, colour=Congener))+geom_density()+ | ||
+ | facet_wrap( ~ Fish, scales = "free_y")+scale_x_log10() | ||
+ | #stat_ellipse() | ||
− | + | #coda.j <- coda.samples( | |
− | + | # jags, | |
− | + | # c('mu', 'Omega', 'ans.pred'), | |
− | + | # N | |
− | + | #) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ) | ||
− | # | + | #plot(coda.j) |
− | |||
</rcode> | </rcode> | ||
Revision as of 13:12, 23 April 2017
This page is a study.
The page identifier is Op_en3104 |
---|
Moderator:Arja (see all) |
Give your opinion to the peer rating of the content of this page. |
Upload data
|
EU-kalat is a study, where concentrations of PCDD/Fs, PCBs, PBDEs and heavy metals have been measured from fish
Contents
Question
The scope of EU-kalat study was to measure concentrations of persistent organic pollutants (POPs) including dioxin (PCDD/F), PCB and BDE in fish from Baltic sea and Finnish inland lakes and rivers. [1] [2] [3].
Answer
The original sample results can be acquired from Opasnet base. The study showed that levels of PCDD/Fs and PCBs depends especially on the fish species. Highest levels were on salmon and large sized herring. Levels of PCDD/Fs exceeded maximum level of 4 pg TEQ/g fw multiple times. Levels of PCDD/Fs were correlated positively with age of the fish.
Mean congener concentrations as WHO2005-TEQ in Baltic herring can be printed out with the Run code below.
Rationale
Data
Data was collected between 2009-2010. The study contains years, tissue type, fish species, and fat content for each concentration measurement. Number of observations is 285.
There is a new study EU-kalat 3, which will produce results in 2016.
Calculations
- Preprocess model 22.2.2017 [4]
- Objects used in Benefit-risk assessment of Baltic herring and salmon intake
- Model run 25.1.2017 [5]
Bayes model for dioxin concentrations
- Model run 28.2.2017 [6]
- Model run 28.2.2017 with corrected survey model [7]
- Model run 28.2.2017 with Mu estimates [8]
- Model run 1.3.2017 [9]
- Model run 23.4.2017 [10] produces list conc.param and ovariable concantration
See also
References
- ↑ A. Hallikainen, H. Kiviranta, P. Isosaari, T. Vartiainen, R. Parmanne, P.J. Vuorinen: Kotimaisen järvi- ja merikalan dioksiinien, furaanien, dioksiinien kaltaisten PCB-yhdisteiden ja polybromattujen difenyylieettereiden pitoisuudet. Elintarvikeviraston julkaisuja 1/2004. [1]
- ↑ E-R.Venäläinen, A. Hallikainen, R. Parmanne, P.J. Vuorinen: Kotimaisen järvi- ja merikalan raskasmetallipitoisuudet. Elintarvikeviraston julkaisuja 3/2004. [2]
- ↑ Anja Hallikainen, Riikka Airaksinen, Panu Rantakokko, Jani Koponen, Jaakko Mannio, Pekka J. Vuorinen, Timo Jääskeläinen, Hannu Kiviranta. Itämeren kalan ja muun kotimaisen kalan ympäristömyrkyt: PCDD/F-, PCB-, PBDE-, PFC- ja OT-yhdisteet. Eviran tutkimuksia 2/2011. ISSN 1797-2981 ISBN 978-952-225-083-4 [3]