EU-kalat: Difference between revisions
(6 intermediate revisions by the same user not shown) | |||
Line 455: | Line 455: | ||
==== Initiate conc_pcddf for PFAS disease burden study ==== | ==== Initiate conc_pcddf for PFAS disease burden study ==== | ||
===== Initiate euw data.frame ===== | |||
This code is similar to preprocess but is better and includes PFAS concentrations from [[:op_fi:PFAS-yhdisteiden tautitaakka]]. It produces data.frame euw that is the EU-kalat + PFAS data in wide format and, for PFAS but not EU-kalat, a sampled value for measurements below the level of quantification. | |||
<rcode name="preprocess2" label="Preprocess and initiate data.frame euw (for developers only)" embed=1> | |||
# This is code Op_en3104/preprocess2 on page [[EU-kalat]] | |||
library(OpasnetUtils) | |||
library(ggplot2) | |||
library(reshape2) | |||
openv.setN(1) | |||
opts = options(stringsAsFactors = FALSE) | |||
euRaw <- Ovariable("euRaw", ddata = "Op_en3104", subset = "POPs") # [[EU-kalat]] | |||
eu <- Ovariable( | |||
"eu", | |||
dependencies = data.frame( | |||
Name=c("euRaw", "TEF"), | |||
Ident=c(NA,"Op_en4017/initiate") | |||
), | |||
formula = function(...) { | |||
out <- euRaw | |||
out$Length<-as.numeric(as.character(out$Length_mean_mm)) | |||
out$Year <- as.numeric(substr(out$Catch_date, nchar(as.character(out$Catch_date))-3,100)) | |||
out$Weight<-as.numeric(as.character(out$Weight_mean_g)) | |||
out <- out[,c(1:6, 8: 10, 14:17, 19:22, 18)] # See below | |||
#[1] "ﮮTHL_code" "Matrix" "POP" "Fish_species" | |||
#[5] "Catch_site" "Catch_location" "Catch_season" "Catch_square" | |||
#[9] "N_individuals" "Sex" "Age" "Fat_percentage" | |||
#[13] "Dry_matter_percentage" "euRawSource" "Length" "Year" | |||
#[17] "Weight" "euRawResult" | |||
colnames(out@output)[1:13] <- c("THLcode", "Matrix", "Compound", "Fish", "Site", "Location", "Season", | |||
"Square","N","Sex","Age","Fat","Dry_matter") | |||
out@marginal <- colnames(out)!="euRawResult" | |||
tmp <- oapply(out * TEF, cols = "Compound", FUN = "sum") | |||
colnames(tmp@output)[colnames(tmp@output)=="Group"] <- "Compound" | |||
# levels(tmp$Compound) | |||
# [1] "Chlorinated dibenzo-p-dioxins" "Chlorinated dibenzofurans" "Mono-ortho-substituted PCBs" | |||
# [4] "Non-ortho-substituted PCBs" | |||
levels(tmp$Compound) <- c("PCDD","PCDF","moPCB","noPCB") | |||
out <- OpasnetUtils::combine(out, tmp) | |||
out$Compound <- factor( # Compound levels are ordered based on the data table on [[TEF]] | |||
out$Compound, | |||
levels = unique(c(levels(TEF$Compound), unique(out$Compound))) | |||
) | |||
out$Compound <- out$Compound[,drop=TRUE] | |||
return(out) | |||
} | |||
) | |||
eu <- EvalOutput(eu) | |||
euw <- reshape( | |||
eu@output, | |||
v.names = "euResult", | |||
idvar = c("THLcode", "Matrix", "Fish"), # , "Site","Location","Season","Square","N","Sex","Age","Fat", "Dry_matter","Length","Year","Weight" | |||
timevar = "Compound", | |||
drop = c("euRawSource","TEFversion","TEFrawSource","TEFSource","Source","euSource"), | |||
direction = "wide" | |||
) | |||
colnames(euw) <- gsub("euResult\\.","",colnames(euw)) | |||
euw$PCDDF <- euw$PCDD + euw$PCDF | |||
euw$PCB <- euw$noPCB + euw$moPCB | |||
euw$TEQ <- euw$PCDDF + euw$PCB | |||
euw$PFOA <- euw$PFOA / 1000 # pg/g --> ng/g | |||
euw$PFOS <- euw$PFOS / 1000 # pg/g --> ng/g | |||
euw$PFAS <- euw$PFOA + euw$PFOS | |||
#################### PFAS measurements from Porvoo | |||
conc_pfas_raw <- EvalOutput(Ovariable( | |||
"conc_pfas_raw", | |||
data=opbase.data("Op_fi5932", subset="PFAS concentrations"), # [[PFAS-yhdisteiden tautitaakka]] | |||
unit="ng/g f.w.") | |||
)@output | |||
conc_pfas_raw <- reshape(conc_pfas_raw, | |||
v.names="conc_pfas_rawResult", | |||
timevar="Compound", | |||
idvar=c("Obs","Fish"), | |||
drop="conc_pfas_rawSource", | |||
direction="wide") | |||
colnames(conc_pfas_raw) <- gsub("conc_pfas_rawResult\\.","",colnames(conc_pfas_raw)) | |||
conc_pfas_raw <- within(conc_pfas_raw, PFAS <- PFOS + PFHxS + PFOA + PFNA) | |||
conc_pfas_raw$Obs <- NULL | |||
euw <- orbind(euw, conc_pfas_raw) | |||
objects.store(euw) | |||
cat("Data.frame euw stored.\n") | |||
</rcode> | |||
===== Initiate conc_param using Bayesian approach ===== | |||
Bayesian approach for PCDDF, PCB, OT, PFAS. | Bayesian approach for PCDDF, PCB, OT, PFAS. | ||
* Model run 2021-03-08 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ZvJDOo7xL8d7x7EI] | * Model run 2021-03-08 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ZvJDOo7xL8d7x7EI] | ||
* Model run 2021-03-08 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=VpSUS4pfGavspLG9] with the fish needed in PFAS assessment | * Model run 2021-03-08 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=VpSUS4pfGavspLG9] with the fish needed in PFAS assessment | ||
* Model run 2021-03-12 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Lc9KWY7r1tTuGWVD] using euw | |||
* Model run 2021-03-13 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=pTiMHkD4Lq0EdLab] with location parameter for PFAS | |||
* Model run 2021-03-17 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Mrko9rrynNRELP07] location parameter not plotted because problems with older R version in Opasnet. | |||
<rcode name="pollutant_bayes" label="Initiate | <rcode name="pollutant_bayes" label="Initiate conc_param with PCDDF, PFAS, OT (for developers only)" embed=0 graphics=1> | ||
# This is code Op_en3104/pollutant_bayes on page [[EU-kalat]] | # This is code Op_en3104/pollutant_bayes on page [[EU-kalat]] | ||
# The code is also available at https://github.com/jtuomist/pfas/blob/main/conc_pcddf_preprocess.R | # The code is also available at https://github.com/jtuomist/pfas/blob/main/conc_pcddf_preprocess.R | ||
Line 473: | Line 576: | ||
#' @param df data.frame | #' @param df data.frame | ||
#' @return data.matrix | #' @return data.matrix | ||
add_loq <- function(df) { | add_loq <- function(df) { # This should reflect the fraction of observations below LOQ. | ||
LOQ <- unlist(lapply(df, FUN = function(x) min(x[x!=0], na.rm=TRUE))) | LOQ <- unlist(lapply(df, FUN = function(x) min(x[x!=0], na.rm=TRUE))) | ||
out <- sapply( | out <- sapply( | ||
Line 485: | Line 588: | ||
#size <- Ovariable("size", ddata="Op_en7748", subset="Size distribution of fish species") | #size <- Ovariable("size", ddata="Op_en7748", subset="Size distribution of fish species") | ||
#time <- Ovariable("time", data = data.frame(Result=2015)) | #time <- Ovariable("time", data = data.frame(Result=2015)) | ||
objects.latest("Op_en3104", code_name = " | objects.latest("Op_en3104", code_name = "preprocess2") # [[EU-kalat]] euw | ||
# Hierarchical Bayes model. | # Hierarchical Bayes model. | ||
Line 502: | Line 601: | ||
# Catchment year affects all species similarly. | # Catchment year affects all species similarly. | ||
eu3 <- euw[!colnames(euw) %in% c("MPhT","DOT","BDE138")] # No values > 0 | |||
eu3 <- | eu3 <- eu3[eu3$Matrix == "Muscle" , ] | ||
eu3 <- | eu3$Locat <- ifelse(eu3$Location=="Porvoo",2, | ||
ifelse(eu3$Location=="Helsinki, Vanhankaupunginlahti Bay",3,1)) | |||
locl <- c("Finland","Porvoo","Helsinki") | |||
) | |||
#conl_nd <- c("PFAS","PFOA","PFOS","DBT","MBT","TBT","DPhT","TPhT") | #conl_nd <- c("PFAS","PFOA","PFOS","DBT","MBT","TBT","DPhT","TPhT") | ||
conl_nd <- c("PFAS","PFOS" | conl_nd <- c("PFAS","PFOS") # TBT would drop Porvoo measurements | ||
fisl <- fisl_nd <- c("Baltic herring","Bream","Flounder","Perch","Roach","Salmon","Whitefish") | fisl <- fisl_nd <- c("Baltic herring","Bream","Flounder","Perch","Roach","Salmon","Whitefish") | ||
eu4 <- eu3[rowSums(is.na(eu3[conl_nd]))<length(conl_nd) & eu3$Fish %in% fisl_nd , | eu4 <- eu3[rowSums(is.na(eu3[conl_nd]))<length(conl_nd) & eu3$Fish %in% fisl_nd , | ||
c(1:5,match(conl_nd,colnames(eu3)))] | c(1:5,match(c("Locat",conl_nd),colnames(eu3)))] | ||
conc_nd <- add_loq(eu4[ | conc_nd <- add_loq(eu4[conl_nd]) | ||
conl <- c("TEQ","PCDDF","PCB") # setdiff(colnames(eu3)[-(1:5)], conl_nd) | conl <- c("TEQ","PCDDF","PCB") # setdiff(colnames(eu3)[-(1:5)], conl_nd) | ||
eu3 <- eu3[!is.na(eu3$PCDDF) & eu3$Fish %in% fisl , c(1:5, match(conl,colnames(eu3)))] | eu3 <- eu3[!is.na(eu3$PCDDF) & eu3$Fish %in% fisl , c(1:5, match(conl,colnames(eu3)))] | ||
oprint(head(eu3)) | oprint(head(eu3)) | ||
Line 544: | Line 632: | ||
fisl_nd | fisl_nd | ||
eu3 <- eu3[rowSums(is.na(eu3))==0,] | |||
conc <- add_loq(eu3[conl]) # Remove rows with missing data. | |||
# The model assumes that all fish groups have the same Omega but mu varies. | # The model assumes that all fish groups have the same Omega but mu varies. | ||
Line 559: | Line 648: | ||
for(j in 1:C_nd) { | for(j in 1:C_nd) { | ||
conc_nd[i,j] ~ dnorm(muind_nd[i,j], tau_nd[j]) | conc_nd[i,j] ~ dnorm(muind_nd[i,j], tau_nd[j]) | ||
muind_nd[i,j] <- mu_nd[fis_nd[i],j] #+ lenp[fis[i]]*length[i] + timep*year[i] | muind_nd[i,j] <- mu_nd[fis_nd[i],j] + mulocat[locat[i]] #+ lenp[fis[i]]*length[i] + timep*year[i] | ||
} | } | ||
} | } | ||
Line 579: | Line 668: | ||
} | } | ||
# Non-dioxins | # Non-dioxins | ||
mulocat[1] <- 0 | |||
mulocat[2] ~ dnorm(0,0.001) | |||
mulocat[3] ~ dnorm(0,0.001) | |||
for(j in 1:C_nd) { | for(j in 1:C_nd) { | ||
tau_nd[j] ~ dgamma(0.001,0.001) | tau_nd[j] ~ dgamma(0.001,0.001) | ||
Line 600: | Line 692: | ||
conc = log(conc), | conc = log(conc), | ||
conc_nd = log(conc_nd), | conc_nd = log(conc_nd), | ||
locat = eu4$Locat, | |||
# length = eu3$Length-170, # Subtract average herring size | # length = eu3$Length-170, # Subtract average herring size | ||
# year = eu3$Year-2009, # Substract baseline year | # year = eu3$Year-2009, # Substract baseline year | ||
Line 624: | Line 717: | ||
'pred_nd', | 'pred_nd', | ||
'mu_nd', | 'mu_nd', | ||
'tau_nd' | 'tau_nd', | ||
'mulocat' | |||
), | ), | ||
thin=thin, | thin=thin, | ||
Line 637: | Line 731: | ||
dimnames(samps.j$tau_nd) <- list(Compound = conl_nd, Iter = 1:N, Chain = 1:4) | dimnames(samps.j$tau_nd) <- list(Compound = conl_nd, Iter = 1:N, Chain = 1:4) | ||
#dimnames(samps.j$timep) <- list(Dummy = "time", Iter = 1:N, Chain = 1:4) | #dimnames(samps.j$timep) <- list(Dummy = "time", Iter = 1:N, Chain = 1:4) | ||
dimnames(samps.j$mulocat) <- list(Area = locl, Iter = 1:N, Chain = 1:4) | |||
##### conc_param contains expected values of the distribution parameters from the model | ##### conc_param contains expected values of the distribution parameters from the model | ||
Line 652: | Line 747: | ||
# ) | # ) | ||
mu_nd = apply(samps.j$mu_nd, MARGIN = 1:2, FUN = mean), | mu_nd = apply(samps.j$mu_nd, MARGIN = 1:2, FUN = mean), | ||
tau_nd = apply(samps.j$tau_nd, MARGIN = 1, FUN = mean) | tau_nd = apply(samps.j$tau_nd, MARGIN = 1, FUN = mean), | ||
mulocat = apply(samps.j$mulocat, MARGIN = 1, FUN = mean) | |||
) | ) | ||
# names(dimnames(conc_param$lenp)) <- c("Fish","Metaparam") | # names(dimnames(conc_param$lenp)) <- c("Fish","Metaparam") | ||
Line 660: | Line 756: | ||
colnames(conc_param)[colnames(conc_param)=="value"] <- "Result" | colnames(conc_param)[colnames(conc_param)=="value"] <- "Result" | ||
colnames(conc_param)[colnames(conc_param)=="L1"] <- "Parameter" | colnames(conc_param)[colnames(conc_param)=="L1"] <- "Parameter" | ||
conc_param$Compound[conc_param$Parameter =="tau_nd"] <- conl_nd # drops out | conc_param$Compound[conc_param$Parameter =="tau_nd"] <- conl_nd # drops out because one-dimensional | ||
conc_param <- fillna(conc_param,"Fish") | conc_param$Area[conc_param$Parameter =="mulocat"] <- locl # drops out because one-dimensional | ||
conc_param <- fillna(conc_param,c("Fish","Area")) | |||
for(i in 1:ncol(conc_param)) { | for(i in 1:ncol(conc_param)) { | ||
if("factor" %in% class(conc_param[[i]])) conc_param[[i]] <- as.character(conc_param[[i]]) | if("factor" %in% class(conc_param[[i]])) conc_param[[i]] <- as.character(conc_param[[i]]) | ||
Line 668: | Line 765: | ||
objects.store(conc_param) | objects.store(conc_param) | ||
cat(" | cat("Ovariable conc_param stored.\n") | ||
######################3 | ######################3 | ||
Line 682: | Line 779: | ||
#)) | #)) | ||
tmp <- | #tmp <- euw[euw$Compound %in% c("PCDDF","PCB","BDE153","PBB153","PFOA","PFOS","DBT","MBT","TBT"),] | ||
ggplot(tmp, aes(x = eu2Result, colour=Fish))+stat_ecdf()+ | #ggplot(tmp, aes(x = eu2Result, colour=Fish))+stat_ecdf()+ | ||
# facet_wrap( ~ Compound, scales="free_x")+scale_x_log10() | |||
dimnames(samps.j$mulocat) | |||
scatterplotMatrix(t(exp(samps.j$pred[2,,,1])), main = paste("Predictions for several compounds for", | scatterplotMatrix(t(exp(samps.j$pred[2,,,1])), main = paste("Predictions for several compounds for", | ||
Line 694: | Line 793: | ||
scatterplotMatrix(t((samps.j$pred_nd[1,,,1])), main = paste("Predictions for several compounds for", | scatterplotMatrix(t((samps.j$pred_nd[1,,,1])), main = paste("Predictions for several compounds for", | ||
names(samps.j$pred_nd[,1,1,1])[1])) | names(samps.j$pred_nd[,1,1,1])[1])) | ||
#scatterplotMatrix(t((samps.j$mulocat[,,1])), main = paste("Predictions for location average difference", | |||
# names(samps.j$pred_nd[,1,1,1])[1])) | |||
#plot(coda.samples(jags, 'Omega', N)) | #plot(coda.samples(jags, 'Omega', N)) | ||
Line 701: | Line 803: | ||
plot(coda.samples(jags, 'pred', N*thin, thin)) | plot(coda.samples(jags, 'pred', N*thin, thin)) | ||
plot(coda.samples(jags, 'mu_nd', N*thin, thin)) | plot(coda.samples(jags, 'mu_nd', N*thin, thin)) | ||
plot(coda.samples(jags, 'mulocat', N*thin, thin)) | |||
tst <- (coda.samples(jags, 'pred', N)) | tst <- (coda.samples(jags, 'pred', N)) | ||
</rcode> | </rcode> | ||
===== Initiate conc_poll===== | |||
<rcode name="conc_poll" label="Initiate conc_poll" embed=1> | <rcode name="conc_poll" label="Initiate conc_poll" embed=1> | ||
#This is code Op_en3104/conc_poll on page [[EU-kalat]] | #This is code Op_en3104/conc_poll on page [[EU-kalat]] | ||
library(OpasnetUtils) | library(OpasnetUtils) | ||
conc_poll <- Ovariable( | conc_poll <- Ovariable( | ||
Line 728: | Line 830: | ||
out <- data.frame() | out <- data.frame() | ||
for(i in 1:nrow(tmp2)) { | for(i in 1:nrow(tmp2)) { | ||
############## PCDDF (with multivariate mvnorm) | |||
tmp <- tmp3[tmp3$Row == i , ] | tmp <- tmp3[tmp3$Row == i , ] | ||
Omega <- solve(tapply( | Omega <- solve(tapply( | ||
tmp$conc_paramResult[tmp$Parameter=="Omega"], | tmp$conc_paramResult[tmp$Parameter=="Omega"], | ||
tmp[tmp$Parameter=="Omega", c("Compound","Compound2")], | tmp[tmp$Parameter=="Omega", c("Compound","Compound2")], | ||
Line 748: | Line 853: | ||
rnd <- exp(mvrnorm(1, mu, Omega)) | rnd <- exp(mvrnorm(1, mu, Omega)) | ||
out <- rbind(out, merge(tmp2[i,], data.frame(Compound=con,Result=rnd))) | out <- rbind(out, merge(tmp2[i,], data.frame(Compound=con,Result=rnd))) | ||
#################### PFAS etc (with univariate norm) | |||
con <- tmp$Compound[tmp$Parameter=="mu_nd"] | |||
mu <- tmp$conc_paramResult[tmp$Parameter=="mu_nd"] | |||
tau <- tmp$conc_paramResult[tmp$Parameter=="tau_nd"][match(con,tmp$Compound[tmp$Parameter=="tau_nd"])] | |||
mulocat <- tmp$conc_paramResult[tmp$Parameter=="mulocat"] | |||
for(j in 1:length(con)) { | |||
rnd <- exp(rnorm(1 , mu[j] + mulocat , tau[j])) | |||
out <- rbind(out, | |||
data.frame(tmp2[i,],Compound = con[j],Result = rnd) | |||
) | |||
} | |||
} | } | ||
out$Row <- NULL | out$Row <- NULL | ||
Line 766: | Line 883: | ||
objects.store(conc_poll) | objects.store(conc_poll) | ||
cat("Ovariable conc_poll stored.\n") | cat("Ovariable conc_poll stored.\n") | ||
</rcode> | </rcode> | ||
Latest revision as of 09:04, 17 March 2021
[show] This page is a study.
The page identifier is Op_en3104 |
---|
EU-kalat is a study, where concentrations of PCDD/Fs, PCBs, PBDEs and heavy metals have been measured from fish
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 this link or by running the codel 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
- Preprocess model 22.2.2017 [4]
- Objects used in Benefit-risk assessment of Baltic herring and salmon intake
- Model run 25.1.2017 [5]
- Model run 22.5.2017 with new ovariables euRaw, euAll, euMain, and euRatio [6]
- Model run 23.5.2017 with adjusted ovariables euRaw, eu, euRatio [7]
- Model run 11.10.2017: Small herring and Large herring added as new species [8]
- Model rerun 15.11.2017 because the previous stored run was lost in update [9]
- Model run 21.3.2018: Small and large herring replaced by actual fish length [10]
- Model run 26.3.2018 eu2 moved here [11]
See an updated version of preprocess code for eu on Health effects of Baltic herring and salmon: a benefit-risk assessment#Code for estimating TEQ from chinese PCB7
Bayes model for dioxin concentrations
- Model run 28.2.2017 [12]
- Model run 28.2.2017 with corrected survey model [13]
- Model run 28.2.2017 with Mu estimates [14]
- Model run 1.3.2017 [15]
- Model run 23.4.2017 [16] produces list conc.param and ovariable concentration
- Model run 24.4.2017 [17]
- Model run 19.5.2017 without ovariable concentration [18] ⇤--#: . The model does not mix well, so the results should not be used for final results. --Jouni (talk) 19:37, 19 May 2017 (UTC) (type: truth; paradigms: science: attack)
- Model run 22.5.2017 with TEQdx and TEQpcb as the only Compounds [19]
- Model run 23.5.2017 debugged [20] [21] [22]
- Model run 24.5.2017 TEQdx, TECpcb -> PCDDF, PCB [23]
- Model run 11.10.2017 with small and large herring [24] (removed in update)
- Model run 12.3.2018: bugs fixed with data used in Bayes. In addition, redundant fish species removed and Omega assumed to be the same for herring and salmon. [25]
- Model run 22.3.2018 [26] Model does not mix well. Thinning gives little help?
- Model run 25.3.2018 with conc.param as ovariable [27]
Initiate conc_pcddf for PFAS disease burden study
Initiate euw data.frame
This code is similar to preprocess but is better and includes PFAS concentrations from op_fi:PFAS-yhdisteiden tautitaakka. It produces data.frame euw that is the EU-kalat + PFAS data in wide format and, for PFAS but not EU-kalat, a sampled value for measurements below the level of quantification.
Initiate conc_param using Bayesian approach
Bayesian approach for PCDDF, PCB, OT, PFAS.
- Model run 2021-03-08 [28]
- Model run 2021-03-08 [29] with the fish needed in PFAS assessment
- Model run 2021-03-12 [30] using euw
- Model run 2021-03-13 [31] with location parameter for PFAS
- Model run 2021-03-17 [32] location parameter not plotted because problems with older R version in Opasnet.
Initiate conc_poll
Initiate conc_pcddf for Goherr
- Model run 19.5.2017 [33]
- Model run 23.5.2017 with bugs fixed [34]
- Model run 12.10.2017: TEQ calculation added [35]
- Model rerun 15.11.2017 because the previous stored run was lost in update [36]
- 12.3.2018 adjusted to match the same Omega for all fish species [37]
- 26.3.2018 includes length and time as parameters, lengt ovariable initiated here [38]
⇤--#: . These codes should be coherent with POPs in Baltic herring. --Jouni (talk) 12:14, 7 June 2017 (UTC) (type: truth; paradigms: science: attack)
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]