Difference between revisions of "Benefit-risk assessment of Baltic herring and salmon intake"

From Testiwiki
Jump to: navigation, search
(Health impact model (Monte Carlo))
(Health impact model (Monte Carlo))
Line 138: Line 138:
 
* Model run 14.3.2017 bugs not fixed [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=jCTKrJR6HQ4qXjF5]
 
* Model run 14.3.2017 bugs not fixed [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=jCTKrJR6HQ4qXjF5]
 
* Model run 30.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=0jq0LB5tfp7mvvCt]
 
* Model run 30.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=0jq0LB5tfp7mvvCt]
 +
* Model run 2.6.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=slkyUprL6Kef3PNA]
  
 
<rcode name="hia" graphics=1>
 
<rcode name="hia" graphics=1>
 
# This is code Op_en7748/hia on page [[Benefit-risk assessment of Baltic herring and salmon intake]]
 
# This is code Op_en7748/hia on page [[Benefit-risk assessment of Baltic herring and salmon intake]]
Code does not work yet.
+
#Code does not work yet.
 
library(OpasnetUtils)
 
library(OpasnetUtils)
 
library(ggplot2)
 
library(ggplot2)
Line 311: Line 312:
 
ERF <- ERF[ , !colnames(ERF@output) %in% c("Exposure", "Source")]
 
ERF <- ERF[ , !colnames(ERF@output) %in% c("Exposure", "Source")]
 
threshold <- threshold[ , !colnames(threshold@output) %in% c("Exposure", "Source")]
 
threshold <- threshold[ , !colnames(threshold@output) %in% c("Exposure", "Source")]
 +
 +
# Default dose but adjustments are needed before use.
 +
# Log10 scaling changes some doses to -Inf and rows drop out in e.g. summary.
 +
# Should we add some minuscule exposure or does that cause other problems?
 +
objects.latest("Op_en2261", code_name = "dose")
 
dose <- unkeep(dose, sources = TRUE, prevresults = TRUE)
 
dose <- unkeep(dose, sources = TRUE, prevresults = TRUE)
  
Line 325: Line 331:
 
)
 
)
  
dummy <- NULL
+
dummy <- 0
  
 
BoDt <- Ovariable(
 
BoDt <- Ovariable(
Line 334: Line 340:
 
     BoDt <- BoDt[BoDt[[1]]=="DALY" , -1]
 
     BoDt <- BoDt[BoDt[[1]]=="DALY" , -1]
 
     # Measure has a special character in name, so use position.
 
     # Measure has a special character in name, so use position.
 
+
   
 
     # levels(BoDt$Country)
 
     # levels(BoDt$Country)
 
     # [1] "Denmark" "Estonia" "Finland" "Sweden"  
 
     # [1] "Denmark" "Estonia" "Finland" "Sweden"  
 
     levels(BoDt$Country) <- c("DK", "EST", "FI", "SWE")
 
     levels(BoDt$Country) <- c("DK", "EST", "FI", "SWE")
 
+
   
 
     # levels(BoDt$Age)
 
     # levels(BoDt$Age)
 
     #[1] "1 to 4"  "10 to 14" "15 to 19" "20 to 24" "25 to 29" "30 to 34" "35 to 39" "40 to 44"
 
     #[1] "1 to 4"  "10 to 14" "15 to 19" "20 to 24" "25 to 29" "30 to 34" "35 to 39" "40 to 44"
Line 346: Line 352:
 
     levels(BoDt$Ages) <-  c(NA,NA,rep("18-45",6),">45","18-45",rep(">45",7),NA)
 
     levels(BoDt$Ages) <-  c(NA,NA,rep("18-45",6),">45","18-45",rep(">45",7),NA)
 
     BoDt <- BoDt[!is.na(BoDt$Ages) , ]
 
     BoDt <- BoDt[!is.na(BoDt$Ages) , ]
 
+
   
 
     #levels(BoDt$Response)
 
     #levels(BoDt$Response)
 
     #[1] "Hemorrhagic stroke"    "Ischemic heart disease" "Ischemic stroke"       
 
     #[1] "Hemorrhagic stroke"    "Ischemic heart disease" "Ischemic stroke"       
Line 400: Line 406:
 
# Unit risk (UR), cancer slope factor (CSF), and Exposure-response slope (ERS) estimates.
 
# Unit risk (UR), cancer slope factor (CSF), and Exposure-response slope (ERS) estimates.
 
# threshold is not used for RR. And the interpretation is strange for ERS (use as X intercept instead).
 
# threshold is not used for RR. And the interpretation is strange for ERS (use as X intercept instead).
 +
 +
# These have NA and are fillna'ed wrong
 +
# UR concSource, expoRawSource, BWSource.
 +
# Step concSource, expoRawSource
 +
# out  Country, populationSource, frexposedSource
 +
 +
# Why is Country a marginal in casesabs? It should not be.
 +
# RR does not have Country as index, so it has disappeared. Why?
 +
# After casesabs, there should be some sorting to choose the best ER_functions and Responses for the purpose.
 +
 +
# sumExposcen calculates the difference between scenarios BAU and No exposure.
 +
sumExposcen <- function(out) {
 +
  if("Exposcen" %in% colnames(out@output)) {
 +
    out <- out * Ovariable(
 +
      output = data.frame(Exposcen = c("BAU", "No exposure"), Result = c(1, -1)),
 +
      marginal = c(TRUE, FALSE)
 +
    )
 +
    out <- oapply(out, NULL, sum, "Exposcen")
 +
  }
 +
  return(out)
 +
}
  
 
casesabs <- Ovariable(
 
casesabs <- Ovariable(
   "casesabs", # This calculates the burden of disease for endpoints using ERS.
+
   "casesabs", # This calculates the burden of disease for background-independent endpoints.
 
   dependencies = data.frame(
 
   dependencies = data.frame(
 
     Name = c(
 
     Name = c(
Line 409: Line 436:
 
       "ERF", # Other ERFs than those that are relative to background.
 
       "ERF", # Other ERFs than those that are relative to background.
 
       "threshold", # exposure level below which the agent has no impact.
 
       "threshold", # exposure level below which the agent has no impact.
       "frexposed" # fraction of population that is exposed
+
       "frexposed", # fraction of population that is exposed
 +
      "sumExposcen" # function that calculates difference between exposure scenarios
 
     ),  
 
     ),  
 
     Ident = c(
 
     Ident = c(
Line 416: Line 444:
 
       "Op_en2031/initiate",  # [[Exposure-response function]]
 
       "Op_en2031/initiate",  # [[Exposure-response function]]
 
       "Op_en2031/initiate",  # [[Exposure-response function]]
 
       "Op_en2031/initiate",  # [[Exposure-response function]]
       "Op_en2261/frexposed"   # [[Health impact assessment]]
+
       "Op_en2261/frexposed",  # [[Health impact assessment]]
 +
      "Op_en2261/sumExposcen" # [[Health impact assessment]]
 
     )
 
     )
 
   ),
 
   ),
Line 422: Line 451:
 
     out <- NULL
 
     out <- NULL
 
     UR <- ERF[ERF$ER_function %in% c("UR", "CSF", "ERS") , ]
 
     UR <- ERF[ERF$ER_function %in% c("UR", "CSF", "ERS") , ]
 
+
   
 
     # Dose could be simplified with combine.
 
     # Dose could be simplified with combine.
 
     if(testforrow(UR, dose)) {
 
     if(testforrow(UR, dose)) {
Line 428: Line 457:
 
       # threshold is here interpreted as the baseline response (intercept of the line). It should be 0 for
 
       # threshold is here interpreted as the baseline response (intercept of the line). It should be 0 for
 
       # UR and CSF but it may have meaningful values with ERS
 
       # UR and CSF but it may have meaningful values with ERS
 +
      # But this interpretation is problematic. Threshold should have same units as exposure, not response.
 
        
 
        
 
       UR <- oapply(UR, NULL, sum, "Exposure_agent")
 
       UR <- oapply(UR, NULL, sum, "Exposure_agent")
     
 
 
       out <- population * UR
 
       out <- population * UR
 
     }
 
     }
 
     UR <- NULL
 
     UR <- NULL
   
+
 
 
     # Step estimates: value is 1 below threshold and above ERF, and 0 in between.
 
     # Step estimates: value is 1 below threshold and above ERF, and 0 in between.
 
     # frexposed cannot be used with Step because this may be used at individual and maybe at population level.
 
     # frexposed cannot be used with Step because this may be used at individual and maybe at population level.
Line 441: Line 470:
 
     Step <- ERF[ERF$ER_function %in% c("Step", "ADI", "TDI", "RDI", "NOAEL") , ]
 
     Step <- ERF[ERF$ER_function %in% c("Step", "ADI", "TDI", "RDI", "NOAEL") , ]
 
     if(testforrow(Step, dose)) { # See RR for explanation.
 
     if(testforrow(Step, dose)) { # See RR for explanation.
       Step <- 1 - (dose >= threshold) * (dose <= Step) # Actual equation
+
     
      # Population size should be taken into account here. Otherwise different population indices may go unnoticed.(?)
+
       Step <- (1 - (dose >= threshold) * (dose <= Step)) * frexposed # Actual equation
 
        
 
        
 
       Step <- oapply(Step, NULL, sum, "Exposure_agent")
 
       Step <- oapply(Step, NULL, sum, "Exposure_agent")
 +
      Step <- population * Step
 
        
 
        
 
       if(is.null(out)) out <- Step else out <- combine(out, Step)
 
       if(is.null(out)) out <- Step else out <- combine(out, Step)
 
     }
 
     }
 
     Step <- NULL
 
     Step <- NULL
 
+
   
     if("Exposcen" %in% colnames(out@output)) {
+
     return(sumExposcen(out))
      out <- out * Ovariable(
 
        output = data.frame(Exposcen = c("BAU", "No exposure"), Result = c(1, -1)),
 
        marginal = c(TRUE, FALSE)
 
      )
 
      out <- oapply(out, NULL, sum, "Exposcen")
 
    }
 
    return(out)
 
 
   }
 
   }
 
)
 
)
Line 467: Line 490:
 
       "population", # Population divided into subgroups as necessary
 
       "population", # Population divided into subgroups as necessary
 
       "RR", # Relative risks for the given exposure
 
       "RR", # Relative risks for the given exposure
       "incidence" # incidence of responses
+
       "incidence", # incidence of responses
 +
      "sumExposcen" # function that calculates difference between exposure scenarios
 
     ),  
 
     ),  
 
     Ident = c(
 
     Ident = c(
 
       "Op_en2261/population", # [[Health impact assessment]]
 
       "Op_en2261/population", # [[Health impact assessment]]
 
       "Op_en2261/RR",        # [[Health impact assessment]]
 
       "Op_en2261/RR",        # [[Health impact assessment]]
       "Op_en5917/initiate"  # [[Disease risk]]
+
       "Op_en5917/initiate",   # [[Disease risk]]
 +
      "Op_en2261/sumExposcen" # [[Health impact assessment]]
 
     )
 
     )
 
   ),
 
   ),
 
   formula = function(...) {
 
   formula = function(...) {
 +
   
 
     out <- population * incidence * (RR - 1)/RR
 
     out <- population * incidence * (RR - 1)/RR
     if("Exposcen" %in% colnames(out@output)) {
+
 
      out <- out * Ovariable(
+
     return(sumExposcen(out))
        output = data.frame(Exposcen = c("BAU", "No exposure"), Result = c(1, -1)),
 
        marginal = c(TRUE, FALSE)
 
      )
 
      out <- oapply(out, NULL, sum, "Exposcen")
 
    }
 
   
 
    return(out)
 
 
   }
 
   }
 
)
 
)
Line 495: Line 514:
 
       "population", # Population relative to the scale (often 1 or 1M) of BoDt
 
       "population", # Population relative to the scale (often 1 or 1M) of BoDt
 
       "BoDt", # Total burden of disease of the studied responses per a defined time interval
 
       "BoDt", # Total burden of disease of the studied responses per a defined time interval
       "RR" # Relative risks for the given exposure
+
       "RR", # Relative risks for the given exposure
 +
      "sumExposcen" # function that calculates difference between exposure scenarios
 
     ),  
 
     ),  
 
     Ident = c(
 
     Ident = c(
 
       "Op_en2261/population", # [[Health impact assessment]]
 
       "Op_en2261/population", # [[Health impact assessment]]
 
       "Op_en5917/BoDt",      # [[Disease risk]]
 
       "Op_en5917/BoDt",      # [[Disease risk]]
       "Op_en2261/RR"        # [[Health impact assessment]]
+
       "Op_en2261/RR",       # [[Health impact assessment]]
 +
      "Op_en2261/sumExposcen" # [[Health impact assessment]]
 
     )
 
     )
 
   ),
 
   ),
Line 506: Line 527:
 
      
 
      
 
     out <- BoDt * population * (RR-1)/RR
 
     out <- BoDt * population * (RR-1)/RR
     return(out)
+
 
 +
     return(sumExposcen(out))
 
      
 
      
 
   }
 
   }
Line 539: Line 561:
 
# Some warning against double counting should be created.
 
# Some warning against double counting should be created.
 
BoD <- Ovariable(
 
BoD <- Ovariable(
   "BoD", # This calculates the burden of disease for endpoints using numbers of cases.
+
   "BoD", # This calculates the total burden of disease.
 
   dependencies = data.frame(
 
   dependencies = data.frame(
 
     Name = c(
 
     Name = c(
Line 553: Line 575:
 
      
 
      
 
     out <- combine(BoDpaf, BoDcase)
 
     out <- combine(BoDpaf, BoDcase)
     if(exists("BoDpaf") & exists("casesrr")) {
+
     doublecount <- intersect(unique(BoDpaf$Response), unique(BoDcase$Response))
      doublecount <- intersect(unique(BoDpaf$Response), unique(caserr$Response))
+
    if(length(doublecount>0)) warning(paste(
      if(length(doublecount>0)) warning(paste(
+
      "The following response(s) are probably double counted from both disease burdens and incidences:",
        "The response(s)",
+
       paste(doublecount, collapse = ", ")
        doublecount,
+
     ))
        "are probably double counted from both disease burdens and incidences."
 
       ))
 
     }
 
 
     return(out)
 
     return(out)
   
 
 
   }
 
   }
 
)
 
)
  
objects.latest("Op_en2261", code_name="RR")
+
objects.latest("Op_en2261", code_name="RR") # Default RR but has to be adjusted before use.
 +
 
 +
# Why do RR have interations for each combination of Gender and Ages although they are not marginals?
 +
 
 
RR <- EvalOutput(RR)
 
RR <- EvalOutput(RR)
 
#levels(RR$Response)
 
#levels(RR$Response)
Line 572: Line 593:
 
#[3] "Stroke mortality"                "CHD arrythmia mortality"         
 
#[3] "Stroke mortality"                "CHD arrythmia mortality"         
 
levels(RR$Response) <- c(NA,"Ischaemic heart disease", "Stroke",NA)
 
levels(RR$Response) <- c(NA,"Ischaemic heart disease", "Stroke",NA)
 +
RR <- RR[!is.na(RR$Response) , ]
 +
 +
disabilityweight <- 0.1
 +
duration <- 1
  
 
BoDpaf <- EvalOutput(BoDpaf)
 
BoDpaf <- EvalOutput(BoDpaf)
BoD <- EvalOutput(BoD)
+
oprint(summary(BoDpaf,fun="length"))
oprint(summary(BoD))
+
BoDcase <- EvalOutput(BoDcase)
 +
oprint(summary(BoDcase,fun="length"))
 +
Bod <- EvalOutput(BoD)
 +
oprint(summary(BoD,fun="length"))
 +
 
 +
oprint(showLoctable())
 +
 
 +
odag()
  
 
#ggplot(BoD@output, aes(x = Response, weight = totcasesResult, fill = Gender))+geom_bar(position="dodge")
 
#ggplot(BoD@output, aes(x = Response, weight = totcasesResult, fill = Gender))+geom_bar(position="dodge")

Revision as of 07:21, 2 June 2017



Scope

This assessment is part of the WP5 work in Goherr project. Purpose is to evaluate health benefits and risks caused of eating Baltic herring and salmon in four Baltic sea countries (Denmark, Estonia, Finland and Sweden). This assessment is currently on-going.

Question

What are the current population level health benefits and risks of eating Baltic herring and salmon in Finland, Estonia, Denmark and Sweden? How would the health effects change in the future, if consumption of Baltic herring and salmon changes due to actions caused by different management scenarios of Baltic sea fish stocks?

Intended use and users

Results of this assessment are used to inform policy makers about the health impacts of fish. Further, this assessment will be combined with the results of the other Goherr WPs to produce estimates of future health impacts of Baltic fish related to different policy options. Especially, results of this assessment will be used as input in the decision support model built in Goherr WP6.

Participants

  • National institute for health and welfare (THL)
  • Goherr project group

Boundaries

  • Four baltic sea countries (Denmark, Estonia, Finland, Sweden)
  • Current situation (fish use year 2016, pollutant levels in fish year 2010)
  • Estimation for future (not year specific)

Decisions and scenarios

Management scenarios developed in Goherr WP3 frames the following boundaries to the use and consumption of Baltic herring and salmon as human food. Effect of these scenarios to the dioxin levels and the human food use will be evalauted quantitatively and feed into the health benefit-risk model to assess the health effect changes.

  • Scenario 1: “Transformation to sustainability”
    • Hazardous substances, including dioxins, are gradually flushed out and the dioxin levels in Baltic herring are below or close to the maximum allowable level.
    • Fish stocks are allowed to recover to levels, which makes maximum sustainable yield possible and increases the total catches of wild caught fish. The catches of salmon by commercial fisheries has stabilized at low level, while the share of recreational catch increases slightly.
    • The use of the Baltic herring catch for food increases. A regional proactive management plan for the use of catch has increased the capacity of the fishing fleets to fish herring for food and through product development and joint marketing, have increased consumer demand for Baltic herring.
  • Scenario 2: “Business-as-usual”
    • The commercial catches of salmon continue to decrease. The demand for top predatory species, such as salmon and cod remains high, while the demand for herring decreased further as a result of demographic changes.
    • Most of the herring catch are used for fish meal and oil production in the region.
    • The use of Baltic herring from the southern parts of the Baltic Sea where the dioxin contents are not likely to exceed the maximum allowable level, are prioritised for human consumption. In the absence of the demand in many of the Baltic Sea countries, majority of the herring intended for direct human consumption are exported to Russia.
  • Scenario 3: “Inequality”
    • The nutrient and dioxins levels continue to decrease slowly.
    • The commercial catches of salmon have decreased further as the general attitudes favour recreational fishing, which has also resulted in decreased demand.
    • The herring catches have increased slightly, but the availability of herring suitable for human consumption remains low due to both, dioxin levels that remain above the maximum allowable limit in the northern Baltic Sea and the poor capacity to fish for food.
    • The use of the catch varies between countries. In Estonia, for example, where the whole catch has been traditionally used for human consumption, there is no significant change in this respect, but in Finland, Sweden and Denmark, herring fishing is predominantly feed directed.
  • Scenario 4: “Transformation to protectionism”
    • The level of hazardous substances also increases as emission sources are not adequately addressed.
    • Commercial salmon fisheries disappears almost completely from the Baltic Sea, although restocking keeps small scale fisheries going.
    • Many of the Baltic herring stocks are also fished above the maximum sustainable yield and total catches are declining.
    • Owing to the growing dioxin levels detected in herring, majority of the catch is used for aquaculture.

Timing

  • Model development during 2016 and 2017
  • First set of results in March 2017, draft publication in March 2018

Answer

This section will be updated as soon as preliminary results are available

Results

Conclusions

Rationale

Error creating thumbnail: Unable to save thumbnail to destination
Schematic picture of the health benefit-risk model for Baltic herring and salmon intake.

Stakeholders

  • Policy makers
    • Food safety authorities
    • Fisheries management
  • Researchers
    • Food safety
    • Health
  • NGO's
    • WWF
    • Active consumers
    • Marine Stewardship Council
  • Baltic sea fishers and producers?

Dependencies

Calculation of cases of disease

Calculation of DALYs:

Background exposure(-)
ObsBackgroundCountryGenderExposure_agentResultUnitDescription
1YesFIMaleVitamin D11.7µg /dFinriski 12 - 0.3 silakasta
2YesSWEMaleVitamin D11.7µg /dFinriski 12 - 0.3 silakasta
3YesESTMaleVitamin D11.7µg /dFinriski 12 - 0.3 silakasta
4YesDKMaleVitamin D11.7µg /dFinriski 12 - 0.3 silakasta
5YesFemaleVitamin D8.5µg /dFinriski 8.7 - 0.2 silakasta
6YesMaleEPA120mg /dFinriski 125 - 4.6 silakasta
7YesFemaleEPA96mg /dFinriski 100 - 3.9 silakasta
8YesMaleDHA118mg /dFinriski 125 - 6.7 silakasta
9YesFemaleDHA94mg /dFinriski 100 - 5.4 silakasta
10YesPCDDF0pg /d (TEQ)
11YesPCB0pg /d (TEQ)
12YesMeHg0µg /d
13YeslogTEQ0log(pg /g)
14No0

Analyses

Indices

  • Country (Denmark, Estonia, Finland, Sweden)
  • Year (current, future)
  • Gender
  • Age: 18-45 years or >45 years
  • Fish species (Baltic herring, Baltic salmon)
  • Health end-point, specified by name
  • Compound: TEQ (PCDD/F and PCB), Vitamin D, Omega3 (includes EPA and DHA), MeHg

Calculations

This section will have the actual health benefit-risk model (schematically described in the above figure) written with R. The code will utilise all variables listed in the above Dependencies section. Model results are presented as tables and figures when those are available.

  • 18.5.2017: Archived exposure model Op7748/exposure by Arja (used separate ovariables for salmon and herring) [1]

Health impact model (Monte Carlo)

  • Model run 13.3.2017: a simple copy of op_fi:Silakan hyöty-riskiarvio [2]
  • Model run 13.3.2017 with showLocations function [3]
  • Model run 13.3.2017 produces totcases results but are not meaningful yet [4]
  • Model run 14.3.2017 with exposure graph [5]
  • Model run 14.3.2017 bugs not fixed [6]
  • Model run 30.5.2017 [7]
  • Model run 2.6.2017 [8]

+ Show code

Plot concentrations and survey

  • Requires codes Op_en7748/bayes and indirectly Op_en7748/preprocess.
  • Model run 1.3.2017 [9]

+ Show code

References


Keywords

See also

Goherr Research project 2015-2018: Integrated governance of Baltic herring and salmon stocks involving stakeholders
Error creating thumbnail: Unable to save thumbnail to destination
Goherr public website

Workpackages including task description and follow-up:
WP1 Management · WP2 Sociocultural use, value and goverrnance of Baltic salmon and herring · WP3 Scenarios and management objectives · WP4 Linking fish physiology to food production and bioaccumulation of dioxin · WP5 Linking the health of the Baltic Sea with health of humans: Dioxin · WP6 Building a decision support model for integrated governance · WP7 Dissemination

Other relevant pages in Opasnet: GOHERR assessment · Relevant literature

Relevant data: Exposure response functions of dioxins · Fish consumption in Sweden · POP concentrations in Baltic sea fish · Exposure response functions of Omega3 fatty acids

Relevant methods: Health impact assessment · OpasnetBaseUtils‎ · Modelling in Opasnet

Relevant assessments: Benefit-risk assessment of Baltic herring · Benefit-risk assessment on farmed salmon · Benefit-risk assessment of methyl mercury and omega-3 fatty acids in fish · Benefit-risk assessment of fish consumption for Beneris · Benefit-risk assessment of Baltic herring (in Finnish)

Error creating thumbnail: Unable to save thumbnail to destination
Error creating thumbnail: Unable to save thumbnail to destination

http://www.bonusportal.org/ http://www.bonusprojects.org/bonusprojects

Related files