Difference between revisions of "POPs in Baltic salmon"

From Testiwiki
Jump to: navigation, search
m (Answer)
m (Rationale: code updated)
Line 14: Line 14:
 
== 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 26: Line 37:
 
Y <- length(congeners) #number of congeners and j's in for loop
 
Y <- length(congeners) #number of congeners and j's in for loop
  
#resultsall <-c('congener', 'meanorig', 'sdorig', 'meanlog', 'meanpost') #comined results table structure to store results of individual congener runs
+
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:3] , ] #data for current congener
 
Compound <- log(compdat$Result+1E-2) #+1E-2 because zero concentrations are not allowed
 
  
 
mo <- textConnection("model{
 
mo <- textConnection("model{
    for (j in 1 : 3 ) { # for testing reduced to 3 congeners, real loop amount is Y (=79)
+
                    for (j in 1 : Y ) {
      tau1[j] ~ dunif(0.001, 1000)
+
                    tau1[j] ~ dunif(0.001, 1000)
      muOfCompound[j] ~ dnorm(0, 0.001)
+
                    muOfCompound[j] ~ dnorm(0, 0.001)
    }
+
                    }
    for( i in 1 : N ) {
+
                    for( i in 1 : N ) {
      Compound[i] ~ dnorm(muOfCompound[POP[i]], tau2[i])
+
                    Compound[i] ~ dnorm(muOfCompound[POP[i]], tau2[i])
      tau2[i] <- tau1[POP[i]]*sqrt(n[i])
+
                    tau2[i] <- tau1[POP[i]]*sqrt(n[i])
    }
+
                    }
  }
+
                    }
")
+
                    ")
 
 
#  shap <- shapiro.test(compdat$Result) #test of normality
 
 
 
#filename <- paste("shap", j, sep="") #save shapiro test result for each congener, just for fun
 
 
 
#assign(filename, shap)
 
 
 
 
 
#  if(shap$p.value < 0.05) { #if skewed, logtransformation, if not continue with original data. Or should the logtransformation be done in any case?
 
#Compound <- log(compdat$Result+1E-2) #+1E-2 because zero concentrations are not allowed
 
#  } else {
 
#    Compound <- compdat$Result
 
#  }
 
 
 
 
dataList = list(
 
dataList = list(
 +
  Y = Y,
 
   Compound = Compound,
 
   Compound = Compound,
 
   POP = as.numeric(compdat$POP),
 
   POP = as.numeric(compdat$POP),
Line 71: Line 67:
 
plot(out)
 
plot(out)
  
#filename <- paste("out", j, sep="") #save posterior for each congener
+
Meanlogpost = c()
#assign(filename, out)
+
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
   Meanpost = c(mean((out[[4]])[,1]), #calculate mean of mu for posterior (test 4)
+
   Meanlogpost = Meanlogpost,
              mean((out[[4]])[,2]),
+
  Sdlogpost = Sdlogpost,
              mean((out[[4]])[,3])
+
  Medianpost = 10^Meanlogpost-1E-02,
    ),
+
  Sdpost = 10^Sdlogpost-1E-02 #this might be incorrect
    Sdpost = c(sqrt(1/(mean((out[[4]])[,4]))), #calculate mean of mu for posterior (test 4)
+
  )
                sqrt(1/(mean((out[[4]])[,5]))),
 
                sqrt(1/(mean((out[[4]])[,6])))
 
    )
 
)
 
  
 
oprint(resultsall)
 
oprint(resultsall)
  
ggplot(dat, aes(x = Result, colour = Catch_location))+geom_density()+scale_x_log10()
+
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>
 
</rcode>

Revision as of 10:29, 30 June 2016



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.

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.

+ Show code

Rationale

Dependencies

Formula

See also

Keywords

References


Related files

<mfanonymousfilelist></mfanonymousfilelist>

POPs in Baltic salmon. Opasnet . [1]. Accessed 17 May 2024.