Bathing water guide: Difference between revisions

From Opasnet
Jump to navigation Jump to search
(Created page with "Category:Open model Category:Model Category:Contains R-code {{method|moderator:Heta}} == Question == How to asses the microbiological risks of natural bathing wa...")
 
 
(20 intermediate revisions by the same user not shown)
Line 3: Line 3:
[[Category:Contains R-code]]
[[Category:Contains R-code]]
{{method|moderator:Heta}}
{{method|moderator:Heta}}
[[op_fi:Uimavesiopas|Uimavesiopas]]


== Question ==
== Question ==
Line 10: Line 11:
== Answer ==
== Answer ==


Kysymyksiä, joihin pitää vielä vastata, jotta mallista saa kunnolla toimivan:
The model below is already functional. However, there is still work to do to ensure that the input data the model uses is accurate.
# Arviot mikrobipitoisuuksista eri luokituksilla pitää selvittää: mitä luokitusvaihtoehtoja tähän annetaan, ja mihin mikrobipitoisuuksiin ne viittaavat? (EU:n ja Suomen lainsäädännön käyttämät luokitukset löytyy Katso myös -otsikon alta.)
 
# Arviot rannalla kävijöiden (uimassa käyvien) ikäjakaumasta pitää selvittää. Tällä hetkellä käytössä on täysin päästä keksitty ikäjakauma.
The contamination classes used in the model are not comparable to the bathing water classification used by the EU. To see the microbe concentrations for each of the contamination classes, see page [[Pathogen concentrations in raw water]].


<rcode
<rcode
name="uimavesiopas"
name="bathingwaterguide"
label="Aja malli"
label="Run model"
embed=0
embed=0
graphics=1
graphics=1
variables="
variables="
name:rawclass|description:Uimaveden luokitus|type:selection|
name:rawclass|description:Bathing water contamination|type:selection|
options:
options:
'Surface water - low contamination';Vähäinen kuormitus;
'Surface water - low contamination';Low contamination by waste water;
'Surface water - medium contamination';Keskisuuri kuormitus;
'Surface water - medium contamination';Medium contamination by waste water;
'Surface water - high contamination';Suuri kuormitus;
'Surface water - high contamination';High contamination by waste water;
         'Hand input';Syötän mikrobipitoisuudet itse|
         'Hand input';I will give pathogen concentrations by hand|
         default:'Hand input'|
         default:'Hand input'|


category:Tilanne|
category:Situation|


name:total_population|default:100|description:Uimarannan päivittäinen kävijämäärä|
name:total_population|default:100|description:Beach goers per day|


name:Campylo|description:Kampylobakteerin pitoisuus (mikrobia/l)|default:0|
name:Campylo|description:Campylobacter concentration (microbes/l)|default:0|
category:Uimaveden mikrobipitoisuus|
category:Microbe concentration of bathing water|
category_conditions:rawclass;'User'|
category_conditions:rawclass;'User'|
name:E.coli|description:E.coli O157:H7 pitoisuus (mikrobia/l)|default:0|
name:E.coli|description:''E.coli'' O157:H7 concentration (microbes/l)|default:0|
name:Rota|description:Rotaviruksen pitoisuus (mikrobia/l)|default:0|
name:Rota|description:Rotavirus concentration (microbes/l)|default:0|
name:Noro|description:Noroviruksen pitoisuus (mikrobia/l)|default:0|
name:Noro|description:Norovirus concentration (microbes/l)|default:0|
name:Crypto|description:Cryptosporidiumin pitoisuus (mikrobia/l)|default:0|
name:Crypto|description:Cryptosporidium concentration (microbes/l)|default:0|
name:Giardia|description:Giardian pitoisuus (mikrobia/l)|default:0
name:Giardia|description:Giardia concentration (microbes/l)|default:0
"
"
>
>
# Tämä on koodi "Op_fi5895/uimavesiopas" sivulla [[Uimavesiopas]]
# This is code "Op_en7961/bathingwaterguide" on page [[Bathing water guide]]
library(OpasnetUtils)
library(OpasnetUtils)
library(ggplot2)
library(ggplot2)


objects.latest("Op_fi5895", code_name="alustus") # [[Uimavesiopas]] hakee koko mallin muuttujat
objects.latest("Op_en7961", code_name="initialization") # [[Bathing water guide]] fetches the variables needed in the model


# Luo ovariablet käyttäjän antamasta datasta
# Create variables from input data
RawClass <- Ovariable("RawClass", data=data.frame(RawWaterClass = rawclass, Result=1))
RawClass <- Ovariable("RawClass", data=data.frame(RawWaterClass = rawclass, Result=1))


# Jos mikrobipitoisuudet syötetään käsin, laitetaan ne yhteen Ovariableen
# If microbe concentrations are given by hand, they're put into an ovariable
if (rawclass == "Hand input") {
if (rawclass == "Hand input") {
   RawConcentration <- Ovariable(
   RawConcentration <- Ovariable(
Line 77: Line 78:
   "population",
   "population",
   dependencies=data.frame(
   dependencies=data.frame(
     Name=c("total_population")
     Name=c("total_population", "distribution"),
    Ident=c(NA, "Op_en7961/age_distribution")
   ),
   ),
   formula=function (...) {
   formula=function (...) {
     distribution <- Ovariable(
     return(distribution * total_population)
      ddata="Op_fi5895", subset="Kävijöiden ikäjakauma"
    )
    distribution <- EvalOutput(distribution)
    population <- distribution * total_population
    return(population)
   }
   }
)
)
Line 97: Line 94:
BoDattr <- EvalOutput(BoDattr, forceEval=TRUE)
BoDattr <- EvalOutput(BoDattr, forceEval=TRUE)


cat("Mikrobien määrät uimavedessä, mikrobia/litra. \n")
cat("Microbe concentrations in bathing water, microbes/liter. \n")
oprint(RawConcentration@output[,c("Pathogen", "RawConcentrationResult")])
oprint(RawConcentration@output[,c("Pathogen", "RawConcentrationResult")])
cat("Altistuminen: montako jokaista mikrobia eri ikäiset nielevät uimaveden mukana.\n")
cat("Exposure: how many of each microbe people of different ages swallow with bathing water.\n")
oprint(summary(exposure))
oprint(summary(exposure))


Line 109: Line 106:
   theme_gray(base_size=24)+
   theme_gray(base_size=24)+
   labs(
   labs(
     title="Uimavesien mikrobien päivässä aiheuttama tautitaakka",
     title="Burden of disease of bathing water microbes per day",
     subtitle=paste("uimarannalla, jolla uimareita on päivässä", sum(result(population))),
     subtitle=paste("on a beach of", sum(result(population)), "bathers daily"),
     y = "Tautitaakka (DALY/päivä)",
     y = "Burden of disease (DALY/day)",
     x = "Mikrobi"
     x = "Microbe"
   )
   )


# laske tautitapausten määrä
# number of cases
cases <- BoDattr/case_burden
cases <- BoDattr/case_burden


Line 125: Line 122:
   theme_gray(base_size=24)+
   theme_gray(base_size=24)+
   labs(
   labs(
     title="Uimavesien mikrobien päivässä aiheuttamat tautitapaukset",
     title="Cases of illness caused daily by bathing water microbes",
     subtitle=paste("uimarannalla, jolla uimareita on päivässä", sum(result(population))),
     subtitle=paste("on a beach of", sum(result(population)), "bathers daily"),
     y = "Tautitapauksia päivässä",
     y = "Cases per day",
     x = "Mikrobi"
     x = "Microbe"
   )
   )


# laske tautitapausten osuus uimareista
 
plotdata <- oapply(unkeep(cases, sources=TRUE), NULL, mean, "Iter")@output
plotdata$Age <- factor(plotdata$Age, ordered=T, levels=c("0-4", "5-9", "10-14", "15-24", "25-64", "65-79", "80+"))
 
cat("The cases of each disease are calculated as a sum of cases of that disease caused by each pathogen. Because it is possible for an individual to be ill as a result of diseases from multiple pathogens, in the figure below the numbers of sick individuals is higher than it would be in reality. For example, all six pathogens included in the model cause gastroenteritis, so if an individual is ill with gastroenteritis caused by all six pathogens, they would be counted in the gastroenteritis cases six times. In these cases the gastroenteritis this individual has would be worse than if ill from only one pathogen. It is also possible for an individual to get one disease from one pathogen and a different disease at the same time from a different one, in which case the individual is counted multiple, once in each disease they have. \n")
 
ggplot(
  plotdata,
  aes(x=Age, weight=Result, fill=Response)) +
  geom_bar() +
# coord_flip() +
  theme_gray(base_size=24)+
  labs(
    title="Cases of illness caused daily by bathing water microbes in different age groups",
    subtitle=paste("on a beach of", sum(result(population)), "bathers daily"),
    y = "Cases of illness daily",
    x = "Age"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust=1))
 
# cases as percent of beachgoers
cases_percent <- cases*100/total_population
cases_percent <- cases*100/total_population


Line 141: Line 158:
   theme_gray(base_size=24)+
   theme_gray(base_size=24)+
   labs(
   labs(
     title="Uimavesien mikrobeista sairastuneiden osuus rannan käyttäjistä",
     title="Proportion of bathers who get ill from bathing water microbes",
     subtitle=paste("uimarannalla, jolla uimareita on päivässä", sum(result(population))),
     subtitle=paste("on a beach of", sum(result(population)), "bathers daily"),
     y = "Prosenttia uimareista",
     y = "Percent of bathers",
     x = "Mikrobi"
     x = "Microbe"
   )
   )
</rcode>
</rcode>


: "Aja malli" -painikkeesta aukeaa uusi sivu, jolle mallin tulokset tulevat näkyviin sen ajettua. Mallin ajamiseen menee 1-2 minuuttia.
: "Run model" -button opens a new tab, on which the results will appear after the model is done running. Current running time is ~40 seconds.
 
== Rationale ==
 
=== Dependencies ===
 
{| {{prettytable}}
|+ '''Pages containing the data and codes used by the model
! Page !! What data or code the page has !! What is it used for !! Other observations
|----
| Op_en7961 Bathing water guide (this page) || Data on time spent in water and amount of water swallowed during bathing, as well as the age distribution of beach-goers. || The amount of water swallowed per hour is multiplied by time spent in water to find the total water swallowed per bathing event. The age distribution is used, because people of different ages swallow different amounts of water and spend different lengths of time in water. Also susceptibility to diseases and their severity changes with age, so burden of disease and cases of illness are calculated for each age group. ||
|----
| Op_en7953 [[Pathogen concentrations in raw water]] || The amounts of pathogens in different (raw) water classes || If the user has chosen a water contamination class, the amounts of each pathogen in water of that contamination class is found here. If the user has given the amounts of pahtogens by hand, the data on this page isn't used and the given values are used instead. || The data on this page is also used in [[Water guide]], and it is better suited to be used as data on rawa water for drinking water than for bathing water. This is alos why the classification does not match the bathing water classification used by the EU.
|----
| Op_en7947 [[Case burden of waterborne microbes]] || Case burdens of different pathogens, or how severe and long-lasting the diseases caused by them are || This data is used to calculate the health detriments caused by the pathogens in bathing water. ||
|----
| Op_en7957 [[Health impacts of waterborne microbes]] || Doesn't contain data, only code || These codes use the amount of water swallowed and the pathogen concentrations in bathing water to calculate the exposure to pathogens experienced by one individual, or how many of each pathogen an individual swallows during a swimming event. |
|----
| Op_en7948 [[ERF of waterborne microbes]] || Describes the exposure-response functions for the pathogens || These functions tell how likely an individual is to get sick with different exposures. This and the exposure are used to estimate the cases of illness. ||
|----
| Op_en2261 [[HIA]] || Code that combines all of the above || The code on the page uses exposure, exposure-response functions and the case burdens to calculate the total burdens caused by pathogens in bathing water. From here it is also possible to calculate the number of people getting ill from bathing water. These are the final results of the model. ||
|}


== Perustelut ==


=== Data ===
=== Data ===


'''Niellyn veden määrä ml/h'''
'''Amount of water swallowed, ml/h'''
{| {{prettytable}}
{| {{prettytable}}
! Viite !! Aikuiset !! Lapset !! Huomioita
! Reference !! Adults !! Children !! Notes
|----
|----
| Dufour et al. 2006 <ref> Dufour et al. 2006. Water ingestion during swimming activities in a pool: a pilot study. J Water Health (2006) 4 (4): 425-430. [https://doi.org/10.2166/wh.2006.0026] </ref>
| Dufour et al. 2006 <ref> Dufour et al. 2006. Water ingestion during swimming activities in a pool: a pilot study. J Water Health (2006) 4 (4): 425-430. [https://doi.org/10.2166/wh.2006.0026] </ref>
| 0 - 70,67 (keskiarvo 21,33)
| 0 - 70,67 (avg 21,33)
| 0 - 205,33 (keskiarvo 49,33)
| 0 - 205,33 (avg 49,33)
| Mittasi uima-allasveteen lisättyjen puhdistusaineiden esiintyvyyttä virtsasta
| They measured cleaning chemicals added to the pool water from the bathers' urine
|----
|----
| Dufour et al. 2017 <ref> Dufour et al. 2017. Ingestion of swimming pool water by recreational swimmers. J Water Health (2017) 15 (3): 429-437. [https://doi.org/10.2166/wh.2017.255]</ref>
| Dufour et al. 2017 <ref> Dufour et al. 2017. Ingestion of swimming pool water by recreational swimmers. J Water Health (2017) 15 (3): 429-437. [https://doi.org/10.2166/wh.2017.255]</ref>
| 12,4 (CI95 11-14)
| 12,4 (CI95 11-14)
| 6-10 vuotiaat: 23,9 (CI95 17-33)
| 6-10-year-olds: 23,9 (CI95 17-33)


11-15 vuotiaat: 23,7 (CI95 19-30)  
11-15 vuotiaat: 23,7 (CI95 19-30)  
| Sama kuin edellisessä, mutta isommalla otannalla
| Same as previous, but with a bigger sample size
|----
|----
| Suppes et al. 2013 <ref> Suppes et al. 2013. Assessment of swimmer behaviors on pool water ingestion. J Water Health (2013) 12 (2): 269-279. [https://doi.org/10.2166/wh.2013.123]</ref>
| Suppes et al. 2013 <ref> Suppes et al. 2013. Assessment of swimmer behaviors on pool water ingestion. J Water Health (2013) 12 (2): 269-279. [https://doi.org/10.2166/wh.2013.123]</ref>
| 0 - 50,9 (keskiarvo 3,5)
| 0 - 50,9 (avg 3,5)
| 0,9 - 105,5 (keskiarvo 25,7)
| 0,9 - 105,5 (avg 25,7)
| Mittasi myös virtsan aineita
| Also measuring chemicals in urine
|----
|----
| Suppes et al. 2016 <ref> Suppes et al. 2016. Cryptosporidium risk from swimming pool exposures. International Journal of Hygiene and Environmental Health 219(8):915-919 [https://doi.org/10.1016/j.ijheh.2016.07.001]</ref>
| Suppes et al. 2016 <ref> Suppes et al. 2016. Cryptosporidium risk from swimming pool exposures. International Journal of Hygiene and Environmental Health 219(8):915-919 [https://doi.org/10.1016/j.ijheh.2016.07.001]</ref>
| 0 - 60,6 (keskiarvo 6,3)
| 0 - 60,6 (avg 6,3)
| 0 - 105,5 (keskiarvo 24,2)
| 0 - 105,5 (avg 24,2)
| Samat metodit kun edellisessä
| Same methods as the previous one
|---
|---
| Schets et al. 2011 <ref> Schets et al. 2011. Exposure assessment for swimmers in bathing waters and swimming pools. Water Research 45:2392-2400. [https://doi.org/10.1016/j.watres.2011.01.025]</ref>
| Schets et al. 2011 <ref> Schets et al. 2011. Exposure assessment for swimmers in bathing waters and swimming pools. Water Research 45:2392-2400. [https://doi.org/10.1016/j.watres.2011.01.025]</ref>
| 20 - 30
| 20 - 30
| 28
| 28
| Kyselytutkimus. Nämä arvot makean veden arvot. Merivedelle ja allasvedelle eri arvot. Arvot keskiarvoja. 20 on naisten ja 30 miesten keskiarvo.
| Questionnaire. These values are for fresh water, but the study also looked at values for sea and pool water. Values are averages (20 for women, 30 for men).
|----
|----
| DeFlorio-Barker et al. 2018 <ref> DeFlorio-Barker et al. 2018. Child environmental exposures to water and sand at the beach: Findings from studies of over 68,000 subjects at 12 beaches. Journal of Exposure Science and Environmental Epidemiology 28:93–100 [https://www.nature.com/articles/jes201723]</ref>
| DeFlorio-Barker et al. 2018 <ref> DeFlorio-Barker et al. 2018. Child environmental exposures to water and sand at the beach: Findings from studies of over 68,000 subjects at 12 beaches. Journal of Exposure Science and Environmental Epidemiology 28:93–100 [https://www.nature.com/articles/jes201723]</ref>
| n. 0 - 114 (keskiarvo n. 16)
| n. 0 - 114 (keskiarvo n. 16)
| n. 0.7 - 144 (keskiarvo n. 27)
| n. 0.7 - 144 (keskiarvo n. 27)
| Kyselytutkimus, käyttäytymisen perusteella simuloitu niellyn veden määrää perustuen Dufourin (2017) lukuihin
| Quistionnaire, simulations of amounts of swallowed water based on behavior and Dufour (2017) values.
|}
|}


'''Uimassa vietetty aika (min)
'''Time spent in water (min)
{| {{prettytable}}
{| {{prettytable}}
! Viite !! Aikuiset !! Lapset !! Huomioita
! Reference !! Adults !! Children !! Notes
|----
|----
| Dufour et al. 2017
| Dufour et al. 2017
| 50,3 (CI95 49-52)
| 50,3 (CI95 49-52)
| 6-10 vuotiaat: 95,9 (CI95 88-104)
| 6-10-year.olds: 95,9 (CI95 88-104)


11-15 vuotiaat: 55,8 (CI95 55-59)
11-15-year-olds: 55,8 (CI95 55-59)
|
| The study participants were asked to stay in the water for approximately one hour
|----
|----
| Suppes et al. 2016
| Suppes et al. 2016
| 20 - 240 (keskiarvo 72)
| 20 - 240 (avg 72)
| 30 - 480 (keskiarvo 114)
| 30 - 480 (avg 114)
|
|
|----
|----
Line 213: Line 250:
|----
|----
| DeFlorio-Barker et al. 2018
| DeFlorio-Barker et al. 2018
| 1-360 (keskiarvo 45,4-47)
| 1-360 (avg 45,4-47)
| 0-3 vuotiaat: 2 - 300 (keskiarvo 56-66,7)
| 0-3-year-olds: 2 - 300 (avg 56-66,7)


4-18 vuotiaat: 1 - 360 (keskiarvo 64-93)
4-18-year-olds: 1 - 360 (avg 64-93)
|
|
|}
|}


Alla olevien taulukoiden data tulee artikkelista DeFlorio-Barker et al. 2018, ja sitä käytetään mallissa.
The data for the tables below is from DeFlorio-Barker et al. 2018, and is the data the model uses.


<t2b name="Nielty vesi" index = "Age" unit = "l/h">
<t2b name="Swallowed water" index = "Age" unit = "l/h">
age 0-4|0.024(0.0005-0.087)
0-4|0.024(0.0005-0.087)
age 5-9|0.024(0.0005-0.087)
5-9|0.024(0.0005-0.087)
age 10-14|0.027(0.0005-0.113)
10-14|0.027(0.0005-0.113)
age 15-24|0.020(0.001-0.112)
15-24|0.020(0.001-0.112)
age 25-64|0.014(0.0004-0.100)
25-64|0.014(0.0004-0.100)
age 65-79|0.013(0.0004-0.115)
65-79|0.013(0.0004-0.115)
age 80+|0.013(0.0004-0.115)
80+|0.013(0.0004-0.115)
</t2b>
</t2b>


<t2b name="Uintiaika" index = "Age" unit = "h">
<t2b name="Bathing time" index = "Age" unit = "h">
age 0-4|0.5-1.5
0-4|0.5-1.5
age 5-9|0.75-2
5-9|0.75-2
age 10-14|0.75-2
10-14|0.75-2
age 15-24|0.5-2
15-24|0.5-2
age 25-64|0.5-1.5
25-64|0.5-1.5
age 65-79|0.5-1.5
65-79|0.5-1.5
age 80+|0.5-1.5
80+|0.5-1.5
</t2b>
</t2b>


<t2b name="Kävijöiden ikäjakauma" index = "Age" unit="-">
The table below shows an estimate of the age distribution of beachgoers. The data in the table is provided by Finnish Swimming Teaching and Lifesaving Federation, and is a very, very rough estimate of the age distribution. No data is currently collected of the age distribution of beachgoers.
age 0-4|0.1
age 5-9|0.2
age 10-14|0.2
age 15-24|0.2
age 25-64|0.2
age 65-79|0.08
age 80+|0.02
</t2b>


Yllä oleva taulukko pyrkii kuvaamaan eri ikäisten ihmisten osuutta rannalla kävijöistä. Taulukon data perustuu Suomen uimaopetus- ja hengenpelastusliitolta kysyttyyn ''hyvin'' karkeaan arvioon, sillä tilastoa rantojen käyttäjien ikäjakaumasta ei tällä hetkellä kerätä.  
Some arguments for this distribution:
*0-4-year-olds only go to the beach with 25-64-year-olds (also to a much lesser extent with the 65-79-year-olds).
*25-64-year-olds cover 40 years, so even though this is a group of people working and spending time at summer cottages, the total proportion is probably 0.2
*Due to the lack of any real statistics, there is nothing to suggest differences in proportions between the age groups covering 5-64-year-olds.
*The children and young adults between ages 5-24 might well cover 60% of the beachgoers, also depending on any possible activities on the beach, such as a tower with diving platforms.


Jotakin annettuja perusteluja tälle ikäjakaumalle:
<t2b name="Beachgoers' age distribution" index = "Age" unit="-">
*Ryhmä 1 (0-4-vuotiaat) käy rannalla vain ryhmän 5 (25-64-vuotiaat) kanssa (ehkä osittain myös ryhmän 6 (65-79-vuotiaat) kanssa)
0-4|0.1
*Ryhmä 5 kattaa 40 vuotta, joten vaikka onkin työssä ja kesämökillä käyvien ryhmä, niin osuus lienee kuitenkin 0.2
5-9|0.2
*Koska mitään tarkempaa tutkimusta ei aiheesta ole, emme ylipäätään lähtisi tekemään eroa ryhmien 2-5 välille.
10-14|0.2
*Ryhmien 2-4 (lapset ja nuoret aikuiset) kokonaisosuus voi hyvinkin olla 0.6, riippuen osittain siitäkin, onko rannalla jotakin tekemistä (hyppypaikka yms.)
15-24|0.2
25-64|0.2
65-79|0.08
80+|0.02
</t2b>


=== Laskenta ===
=== Calculations ===


<rcode
<rcode
name="nielty_vesi"
name="swallowed_water"
embed=1
embed=1
label="Alusta niellyn veden määrä"
label="Initialize the amount of water swallowed"
>
>
# Tämä on koodi "Op_fi5895/nielty_vesi" sivulla [[Uimavesiopas]]
# This is code "Op_en7961/swallowed_water" on page [[Bathing water guide]]
library(OpasnetUtils)
library(OpasnetUtils)


nieltyvesi <- Ovariable("nieltyvesi", ddata="Op_fi5895", subset="Nielty vesi")
swallowedwater <- Ovariable("swallowedwater", ddata="Op_en7961", subset="Swallowed water")
uintiaika <- Ovariable("uintiaika", ddata="Op_fi5895", subset="Uintiaika")
bathingtime <- Ovariable("bathingtime", ddata="Op_en7961", subset="Bathing time")


Consumption <- Ovariable(
Consumption <- Ovariable(
   "Consumption",
   "Consumption",
   Dependencies=data.frame(
   Dependencies=data.frame(
     Names=c("uintiaika", "nieltyvesi")),
     Names=c("bathingtime", "swallowedwater")),
   formula=function(...){
   formula=function(...){
   return(uintiaika*nieltyvesi)  
   return(bathingtime*swallowedwater)  
   }
   }
)
)


objects.store(Consumption, nieltyvesi, uintiaika)
objects.store(Consumption, swallowedwater, bathingtime)
#oprint(EvalOutput(Consumption)@output, show_all=TRUE)
#oprint(EvalOutput(Consumption)@output, show_all=TRUE)
cat("Ovariablet Consumption, nieltyvesi ja uintiaika tallennettu. \n")
cat("Ovariables Consumption, swallowedwater and bathingtime saved. \n")


</rcode>
</rcode>


<rcode
name="age_distribution"
embed=1
label="Initialize age distribution"
>
# This is code "Op_en7961/age_distibution" on page [[Bathing water guide]]
library(OpasnetUtils)
distribution <- Ovariable("distribution", ddata="Op_en7961", subset="Beachgoers' age distribution")
objects.store(distribution)
cat("Ovariable distribution saved. \n")
</rcode>


<rcode
<rcode
name="alustus"
name="initialization"
label="Alusta uimavesiopas"
label="Initialize bathing water model"
embed=0
embed=0
graphics=1
graphics=1
>
>
# This is code Op_fi5895/alustus on page [[Water guide]]
# This is code Op_en7961/initialization on page [[Bathing water guide]]
library(OpasnetUtils)
library(OpasnetUtils)
library(ggplot2)
library(ggplot2)
Line 316: Line 367:
   dependencies=data.frame(
   dependencies=data.frame(
     Name=c("Consumption", "RawConcentration"),
     Name=c("Consumption", "RawConcentration"),
     Ident=c("Op_fi5895/nielty_vesi", "Op_en7953/variable")
     Ident=c("Op_en7961/swallowed_water", "Op_en7953/variable")
   ),
   ),
   formula = function(...) {
   formula = function(...) {
Line 369: Line 420:
</rcode>
</rcode>


== Katso myös ==
====Plotly graphs. Code doesn't work in Opasnet====
 
<rcode
name = plotly
label = "Run on own computer">
 
# This is code Op_en7961/plotly on page [[Bathing water guide]]
 
library(OpasnetUtils)
library(plotly)
library(stringr)
 
openv.setN(100)
 
## Datan valmistelu ----
 
objects.latest("Op_en7961", code_name="initialization") # [[Uimavesiopas]] hakee koko mallin muuttujat
 
rawclass <- c("Surface water - low contamination",
              "Surface water - medium contamination",
              "Surface water - high contamination")
total_population <- Ovariable("total_population",
                              data=data.frame(Pop = seq(50,500,50),
                                              Result = seq(50,500,50)))
labels <- c("Low contamination", "Medium contamination", "High contamination")
 
population <- Ovariable(
  "population",
  dependencies=data.frame(
    Name=c("total_population", "distribution"),
    Ident=c(NA, "Op_en7961/age_distribution")
  ),
  formula=function (...) {
    return(distribution * total_population)
  }
)
 
uimavesidata <- data.frame(matrix(ncol=7, nrow=0))
colnames(uimavesidata) <- c("Response", "Exposure_agent", "Pop", "RawWaterClass", "BoDattrResult", "Result", "label")
 
for(i in 1:length(rawclass)) {
  RawClass <- Ovariable("RawClass", data=data.frame(RawWaterClass = rawclass[i], Result=1))
  BoDattr <- EvalOutput(BoDattr, forceEval=TRUE)
  cases <- BoDattr/case_burden
  cases <- oapply(cases, c("Response","Exposure_agent","Pop","RawWaterClass", "Iter", "BoDattrResult"), sum)
  cases <- aggregate(cases@output[,c("BoDattrResult", "Result")], by=cases@output[,c("Response", "Exposure_agent", "Pop", "RawWaterClass")], FUN=mean)
 
  uimavesidata <- rbind(uimavesidata, data.frame(cases, label = labels[i]))
}
 
 
uimavesidata$proportion <- uimavesidata$Result/uimavesidata$Pop
 
uimavesidata$Pop <- as.factor(uimavesidata$Pop)
uimavesidata$visible <- F
uimavesidata$visible[uimavesidata$Pop==levels(uimavesidata$Pop)[1]] = T # smallest population visible
 
uimavesidata <- uimavesidata[uimavesidata$Response == "gastroenteritis",]
colnames(uimavesidata)[colnames(uimavesidata) == "BoDattrResult"] <- "DALY"
colnames(uimavesidata)[colnames(uimavesidata) == "Result"] <- "cases"
 
#
## RANNAN KOKO + RAW CLASS MUUTTUJINA ----
 
 
# create steps and plot all traces
beach_size <- list()
uimavesi_plot <- plot_ly()
for (i in 1:length(unique(uimavesidata$Pop))) {
  uimavesi_plot <- add_trace(uimavesi_plot, # add traces to uimavesi_plot
                            type = "scatter",
                            x=uimavesidata$cases[uimavesidata$Pop==levels(uimavesidata$Pop)[i]], # x (BoD) on x
                            y=uimavesidata$Exposure_agent[uimavesidata$Pop==levels(uimavesidata$Pop)[i]], # y (exposure agent) on y
                            visible = uimavesidata$visible[uimavesidata$Pop==levels(uimavesidata$Pop)[i]], # is this trace visible
                            mode="markers",
                            marker = list(size=10, # marker size
                                          colorscale = list(list(0, 'rgba(200,200,200,0.2)'), list(1, 'rgba(0,181,204,1)')), # sets the colors used when color=0 and color=1
                                          color = c(rep(1, 6), # the first 17 markers use color 1
                                                    rep(0, 6*2))),
                            hoverinfo = "x", # what is the info shown when mouse on top of marker
                            showlegend=F)
 
  bw <- list(args = list('visible', rep(FALSE, length(unique(uimavesidata$Pop)))), # set all steps to not visible
            method = 'restyle',
            label= levels(uimavesidata$Pop)[i]) # Sets the text label to appear on the menu
  bw$args[[2]][i] = TRUE  # set data on i step to be visible when step i is chosen
  beach_size[[i]] = bw # make a list with all the steps
 
water_qlty <- list(list(args = list('marker.color', # marker color is changed
                                  array(c(rep(1, 6), rep(0, 6*2)), dim=c(1, 18))), # these are the new markers with color 1 and 0
                      method = 'restyle', # restyling the markers
                      label = "Vähäinen kuormitus"),
#                      label = "Low contamination"), # label on the button
                  list(args = list('marker.color',
                                  array(c(rep(0, 6), rep(1, 6), rep(0, 6)), dim=c(1, 18))),
                      method = 'restyle',
                      label = "Keskisuuri kuormitus"),
#                      label = "Medium contamination"),
                  list(args = list('marker.color',
                                  array(c(rep(0, 6*2), rep(1, 6)), dim=c(1, 18))),
                      method = 'restyle',
                      label = "Suuri kuormitus")
#                      label = "High contamination")
)
 
# add slider control to plot
uimavesi_plot <- uimavesi_plot %>%
  layout(sliders = list(list(active = 0, #Determines which button (by index starting from 0) is active.
                            currentvalue = list(prefix = "Uimarannan kävijämäärä:"), #suomeksi
#                            currentvalue = list(prefix = "Daily beach goers: "), # in English
                            # the text under the graph that tells what the slider values mean
                            steps = beach_size)),
        updatemenus = list(list(active = 0,
                                y = -0.15,
                                x = -0.1,
                                direction = "up",
                                buttons = water_qlty)),
#        title = paste("Cases of illness caused by bathing water"), # in English
        title = paste("Uimaveden aiheuttamat tautitapaukset päivässä"), # suomeksi
        xaxis = list(title ="Tautitapaukset"),
        yaxis = list(title =""))
 
uimavesi_plot
 
#
 
## X:N YKSIKKÖ + RAW CLASS MUUTTUJINA ----
 
 
uimavesi_leikattu <- uimavesidata[uimavesidata$Pop == 150,]
 
nakyma <- list()
uimavesiplot <- plot_ly()
steps <- c("DALY", "cases", "proportion")
label <- c("DALY", "tautitapaukset", "sairastumistodennäköisyys")
visible <- c(T, F, F)
for (i in 1:3) {
  uimavesiplot <- add_trace(uimavesiplot, # add traces to uimavesi_plot
                            type = "scatter",
                            x=uimavesi_leikattu[,colnames(uimavesi_leikattu) == steps[i]],
                            y=uimavesi_leikattu$Exposure_agent, # y (exposure agent) on y
                            visible = visible[i], # is this trace visible
                            mode="markers",
                            marker = list(size=10, # marker size
                                          colorscale = list(list(0, 'rgba(200,200,200,0.2)'), list(1, 'rgba(0,181,204,1)')), # sets the colors used when color=0 and color=1
                                          color = c(rep(1, 6), # the first 17 markers use color 1
                                                    rep(0, 6*2))),
                            hoverinfo = "x", # what is the info shown when mouse on top of marker
                            showlegend=F)
 
  bw <- list(args = list('visible', rep(FALSE, 3)), # set all steps to not visible
            method = 'restyle',
            label= label[i]) # Sets the text label to appear on the menu
  bw$args[[2]][i] = TRUE  # set data on i step to be visible when step i is chosen
  nakyma[[i]] = bw # make a list with all the steps
 
water_qlty <- list(list(args = list('marker.color', # marker color is changed
                                    array(c(rep(1, 6), rep(0, 6*2)), dim=c(1, 18))), # these are the new markers with color 1 and 0
                        method = 'restyle', # restyling the markers
                        label = "Vähäinen kuormitus"),
                  #                      label = "Low contamination"), # label on the button
                  list(args = list('marker.color',
                                    array(c(rep(0, 6), rep(1, 6), rep(0, 6)), dim=c(1, 18))),
                        method = 'restyle',
                        label = "Keskisuuri kuormitus"),
                  #                      label = "Medium contamination"),
                  list(args = list('marker.color',
                                    array(c(rep(0, 6*2), rep(1, 6)), dim=c(1, 18))),
                        method = 'restyle',
                        label = "Suuri kuormitus")
                  #                      label = "High contamination")
)
 
# add slider control to plot
uimavesiplot <- uimavesiplot %>%
  layout(updatemenus = list(list(active = 0,
                                y = 1,
                                x = -0.2,
                                buttons = water_qlty),
                            list(active = 0, #Determines which button (by index starting from 0) is active.
                                y = 0.85,
                                x = -0.2,
                                buttons = nakyma)),
#        title = paste("Cases of illness caused by bathing water on a beach of 150 dialy visitors"), # in English
        title = "Uimaveden mikrobien aiheuttama terveyshaitta päivässä 150 kävijän rannalla", # suomeksi
#        xaxis = list(title ="Tautitapaukset"),
        yaxis = list(title =""))
 
uimavesiplot
 
 
</rcode>
 
== See also ==


* [[Vesiopas]]
* [[Water guide]]
* EU-direktiiviin perustuva uimavesien laatuluokittelu [htps://www.finlex.fi/data/sdliite/liite/5516.pdf] (Sosiaali- ja terveysministeriön [htps://www.finlex.fi/fi/laki/alkup/2008/20080177|asetuksen] liite)
* Quality classification of bathing waters based on an EU-directive [https://www.finlex.fi/data/sdliite/liite/5516.pdf] (An appendix of [https://www.finlex.fi/fi/laki/alkup/2008/20080177|a decree] of the ministry of social affairs and health)


* A Randomized Controlled Trial Assessing Infectious Disease Risks from Bathing in Fresh Recreational Waters in Relation to the Concentration of Escherichia coli, Intestinal Enterococci, Clostridium perfringens, and Somatic Coliphages [https://doi.org/10.1289/ehp.8115]
* A Randomized Controlled Trial Assessing Infectious Disease Risks from Bathing in Fresh Recreational Waters in Relation to the Concentration of Escherichia coli, Intestinal Enterococci, Clostridium perfringens, and Somatic Coliphages [https://doi.org/10.1289/ehp.8115]
* Detection of Cryptosporidium, Giardia and Enterocytozoon bieneusi in surface water, including recreational areas: a one-year prospective study [https://doi.org/10.1111/j.1574-695X.2006.00098.x]
* Detection of Cryptosporidium, Giardia and Enterocytozoon bieneusi in surface water, including recreational areas: a one-year prospective study [https://doi.org/10.1111/j.1574-695X.2006.00098.x]
* WHO: [https://apps.who.int/iris/bitstream/handle/10665/246195/9789241565370-eng.pdf?sequence=1 Quantitative Microbial Risk Assessment: Application for Water Safety Management]


== Viitteet ==
== Viitteet ==
<references/>
<references/>

Latest revision as of 07:00, 21 September 2019


Question

How to asses the microbiological risks of natural bathing waters, and the health effects they have? Data on the water and bathing behaviour must be possible to give to the model as input.

Answer

The model below is already functional. However, there is still work to do to ensure that the input data the model uses is accurate.

The contamination classes used in the model are not comparable to the bathing water classification used by the EU. To see the microbe concentrations for each of the contamination classes, see page Pathogen concentrations in raw water.

Situation

Bathing water contamination:

Beach goers per day:

Microbe concentration of bathing water

Campylobacter concentration (microbes/l):

E.coli O157:H7 concentration (microbes/l):

Rotavirus concentration (microbes/l):

Norovirus concentration (microbes/l):

Cryptosporidium concentration (microbes/l):

Giardia concentration (microbes/l):

+ Show code

"Run model" -button opens a new tab, on which the results will appear after the model is done running. Current running time is ~40 seconds.

Rationale

Dependencies

Pages containing the data and codes used by the model
Page What data or code the page has What is it used for Other observations
Op_en7961 Bathing water guide (this page) Data on time spent in water and amount of water swallowed during bathing, as well as the age distribution of beach-goers. The amount of water swallowed per hour is multiplied by time spent in water to find the total water swallowed per bathing event. The age distribution is used, because people of different ages swallow different amounts of water and spend different lengths of time in water. Also susceptibility to diseases and their severity changes with age, so burden of disease and cases of illness are calculated for each age group.
Op_en7953 Pathogen concentrations in raw water The amounts of pathogens in different (raw) water classes If the user has chosen a water contamination class, the amounts of each pathogen in water of that contamination class is found here. If the user has given the amounts of pahtogens by hand, the data on this page isn't used and the given values are used instead. The data on this page is also used in Water guide, and it is better suited to be used as data on rawa water for drinking water than for bathing water. This is alos why the classification does not match the bathing water classification used by the EU.
Op_en7947 Case burden of waterborne microbes Case burdens of different pathogens, or how severe and long-lasting the diseases caused by them are This data is used to calculate the health detriments caused by the pathogens in bathing water.
Op_en7957 Health impacts of waterborne microbes Doesn't contain data, only code
Op_en7948 ERF of waterborne microbes Describes the exposure-response functions for the pathogens These functions tell how likely an individual is to get sick with different exposures. This and the exposure are used to estimate the cases of illness.
Op_en2261 HIA Code that combines all of the above The code on the page uses exposure, exposure-response functions and the case burdens to calculate the total burdens caused by pathogens in bathing water. From here it is also possible to calculate the number of people getting ill from bathing water. These are the final results of the model.


Data

Amount of water swallowed, ml/h

Reference Adults Children Notes
Dufour et al. 2006 [1] 0 - 70,67 (avg 21,33) 0 - 205,33 (avg 49,33) They measured cleaning chemicals added to the pool water from the bathers' urine
Dufour et al. 2017 [2] 12,4 (CI95 11-14) 6-10-year-olds: 23,9 (CI95 17-33)

11-15 vuotiaat: 23,7 (CI95 19-30)

Same as previous, but with a bigger sample size
Suppes et al. 2013 [3] 0 - 50,9 (avg 3,5) 0,9 - 105,5 (avg 25,7) Also measuring chemicals in urine
Suppes et al. 2016 [4] 0 - 60,6 (avg 6,3) 0 - 105,5 (avg 24,2) Same methods as the previous one
Schets et al. 2011 [5] 20 - 30 28 Questionnaire. These values are for fresh water, but the study also looked at values for sea and pool water. Values are averages (20 for women, 30 for men).
DeFlorio-Barker et al. 2018 [6] n. 0 - 114 (keskiarvo n. 16) n. 0.7 - 144 (keskiarvo n. 27) Quistionnaire, simulations of amounts of swallowed water based on behavior and Dufour (2017) values.

Time spent in water (min)

Reference Adults Children Notes
Dufour et al. 2017 50,3 (CI95 49-52) 6-10-year.olds: 95,9 (CI95 88-104)

11-15-year-olds: 55,8 (CI95 55-59)

The study participants were asked to stay in the water for approximately one hour
Suppes et al. 2016 20 - 240 (avg 72) 30 - 480 (avg 114)
Schets et al. 2011 54 (CI95 6-220) 79
DeFlorio-Barker et al. 2018 1-360 (avg 45,4-47) 0-3-year-olds: 2 - 300 (avg 56-66,7)

4-18-year-olds: 1 - 360 (avg 64-93)

The data for the tables below is from DeFlorio-Barker et al. 2018, and is the data the model uses.

Swallowed water(l/h)
ObsAgeResult
10-40.024(0.0005-0.087)
25-90.024(0.0005-0.087)
310-140.027(0.0005-0.113)
415-240.020(0.001-0.112)
525-640.014(0.0004-0.100)
665-790.013(0.0004-0.115)
780+0.013(0.0004-0.115)
Bathing time(h)
ObsAgeResult
10-40.5-1.5
25-90.75-2
310-140.75-2
415-240.5-2
525-640.5-1.5
665-790.5-1.5
780+0.5-1.5

The table below shows an estimate of the age distribution of beachgoers. The data in the table is provided by Finnish Swimming Teaching and Lifesaving Federation, and is a very, very rough estimate of the age distribution. No data is currently collected of the age distribution of beachgoers.

Some arguments for this distribution:

  • 0-4-year-olds only go to the beach with 25-64-year-olds (also to a much lesser extent with the 65-79-year-olds).
  • 25-64-year-olds cover 40 years, so even though this is a group of people working and spending time at summer cottages, the total proportion is probably 0.2
  • Due to the lack of any real statistics, there is nothing to suggest differences in proportions between the age groups covering 5-64-year-olds.
  • The children and young adults between ages 5-24 might well cover 60% of the beachgoers, also depending on any possible activities on the beach, such as a tower with diving platforms.
Beachgoers' age distribution(-)
ObsAgeResult
10-40.1
25-90.2
310-140.2
415-240.2
525-640.2
665-790.08
780+0.02

Calculations

+ Show code

+ Show code

+ Show code

Plotly graphs. Code doesn't work in Opasnet

+ Show code

See also

  • Water guide
  • Quality classification of bathing waters based on an EU-directive [7] (An appendix of decree of the ministry of social affairs and health)
  • A Randomized Controlled Trial Assessing Infectious Disease Risks from Bathing in Fresh Recreational Waters in Relation to the Concentration of Escherichia coli, Intestinal Enterococci, Clostridium perfringens, and Somatic Coliphages [8]
  • Detection of Cryptosporidium, Giardia and Enterocytozoon bieneusi in surface water, including recreational areas: a one-year prospective study [9]
  • WHO: Quantitative Microbial Risk Assessment: Application for Water Safety Management

Viitteet

  1. Dufour et al. 2006. Water ingestion during swimming activities in a pool: a pilot study. J Water Health (2006) 4 (4): 425-430. [1]
  2. Dufour et al. 2017. Ingestion of swimming pool water by recreational swimmers. J Water Health (2017) 15 (3): 429-437. [2]
  3. Suppes et al. 2013. Assessment of swimmer behaviors on pool water ingestion. J Water Health (2013) 12 (2): 269-279. [3]
  4. Suppes et al. 2016. Cryptosporidium risk from swimming pool exposures. International Journal of Hygiene and Environmental Health 219(8):915-919 [4]
  5. Schets et al. 2011. Exposure assessment for swimmers in bathing waters and swimming pools. Water Research 45:2392-2400. [5]
  6. DeFlorio-Barker et al. 2018. Child environmental exposures to water and sand at the beach: Findings from studies of over 68,000 subjects at 12 beaches. Journal of Exposure Science and Environmental Epidemiology 28:93–100 [6]