Ero sivun ”Ruori” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
(vahinkopoisto. Kumottu muokkaus 36817, jonka teki Jouni (keskustelu))
 
(47 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 1: Rivi 1:
[[Luokka:Projekti]]
[[Luokka:Projekti]]
{{arviointi|moderaattori=Jouni}}
{{arviointi|moderaattori=Jouni}}
'''Ruori''' on VN-TEAS-hanke, jossa arvioidaan erilaisia ruokaan liittyviä riskitekijöitä, niiden vähentämispotentiaalia ja niiden terveys- ja talousvaikutuksia.
'''Ruori''' on VN-TEAS-hanke, jossa arvioidaan erilaisia ruokaan liittyviä riskitekijöitä, niiden vähentämispotentiaalia ja niiden terveys- ja talousvaikutuksia. Hankkeen [http://urn.fi/URN:ISBN:978-952-287-796-3 loppuraportti] on julkaistu 2019.


== Rajaus ==
== Rajaus ==
Rivi 7: Rivi 7:
=== Kysymys ===
=== Kysymys ===


Millaista tautitaakkaa Suomessa aiheuttavat Ruori-altisteet (tyydyttynyt rasva, vähäiset vihannekset, vähäiset hedelmät, liiallnen suola, dioksiinit, lyijy, toksoplasma, norovirus ja legionella?
Millaista tautitaakkaa Suomessa aiheuttavat Ruori-altisteet (tyydyttynyt rasva, vähäiset vihannekset, vähäiset hedelmät, liiallnen suola, dioksiinit, lyijy, aflatoksiini, toksoplasma, norovirus, trikinella ja legionella) ja miten erilaiset vähentämistoimet vaikuttavat?


=== Aikataulu ja käyttäjät ===
=== Aikataulu ja käyttäjät ===


* Hanke alkoi 2018 ja loppuu 30.6.2019.
* Hanke alkoi 2018 ja loppui 30.6.2019.
* Toteuttajina ovat Ruokavirasto, THL ja Helsingin yliopisto.
* Toteuttajina ovat Ruokavirasto, THL ja Helsingin yliopisto.
* Seuraavat skenaariot ovat tarkastelussa:
* Seuraavat skenaariot ovat tarkastelussa:
**  
** Listeria: mikrobinäytteitä otetaan elintarvikkeiden lisäksi tuotantoympäristöstä.
** Norovirus: pintapuhtausnäytteitä otetaan suuratalouskeittiöistä ja sellaisenaan syötäviä ruokia valmistavista laitoksista.
** Toksoplasma: kaikki raskaana olevat tutkitaan toksoplasman varalta.
** Trikinella: trikinella tutkitaan ainoastaan vientiin menevistä sianruhoista.
** Vierasesineet: tarkastelusta luovuttiin
** Aflatoksiini: tuontipähkinöiden valvontanäytteitä lisätään 10 %.
** Dioksiinit: Itämeren kala vaihdetaan järvikalaan.
** Lyijy: laihdutusvalmiteisiin ja teejauheisiin aloitetaan tehovalvonta.
** Hedelmät: poistetaan arvonlisävero kulutuksen lisäämiseksi.
** Vihannekset: poistetaan arvonlisävero kulutuksen lisäämiseksi.
** Suola: henkilöstöravintoloissa tarjolla ainoastaan sydänmerkkiaterioita.
** Tyydyttynyt rasva: henkilöstöravintoloissa tarjolla ainoastaan sydänmerkkiaterioita.


== Vastaus ==
== Vastaus ==


Vastaus kirjoitetaan tähän pian.
[[image:Ruori-tautitaakat.svg|thumb|400px]]
[[image:Ruori-toimenpideiden vaikutus.svg|thumb|400px]]
Ravitsemustekijät osoittautuivat huomattavasti tärkeämmiksi tautitaakkaa aiheuttaviksi tekijöiksi kuin ruoassa olevat ympäristömyrkyt. Myös ravitsemukseen vaikuttamalla pystyttiin vaikuttamaan kansanterveyteen enemmän, joskin myös mikrobiriskien vähentämiseen löytyi tehokkaita keinoja. Päätulokset on esitetty kuvissa. Tarkemmat tulokset löytyvät [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=IMy5dmICIwDKkesL tästä malliajosta].
 
=== Pohdinta ===
 
[[File:Tautitaakka maittain ruokavalio ja hygienia.svg|thumb|400px|Maakohtainen tautitaakan vertailu ruokavalioon ja toisaalta hygieniaan liittyvistä tunnetuista riskitekijöistä. Tiedot: IHME-instituutti.]]
Kuvassa esitetään maakohtainen kokonaistautitaakka toisaalta tunnettujen ruokavalioon liittyvien riskitekijöiden (poislukien aliravitsemus) ja toisaalta hygieniaan liittyvien riskitekijöiden suhteen. Hygienia sisältää käsienpesun, puhtaan juomaveden ja sanitaation eli siinä ei ole mukana nimenomaan ruokavälitteisiä mikrobeja, mutta se antaa kuitenkin kohtalaisen kuvan mikrobivälitteisistä taudeista maavertailua varten.
 
On syytä huomata, että asteikot ovat logaritmisia ja ruokavalioriskien suhteen maiden välillä on yli kymmenkertaisia eroja mutta toisaalta hygienian osalta erot voivat olla yli tuhatkertaisia. Suomi on ravitsemuksen suhteen länsieurooppalaista keskikastia mutta hygieniassa maailman parhaiden joukossa. Luvuista saa vertailukelpoisia tämän raportin lukuihin suhteuttamalla niitä Suomen väkilukuun eli kertomalla noin viidelläkymmenellä.
 
Globaalissa vertailussa voi sanoa, että ravitsemuksen suhteen on selvästi parannettavaa. Jopa tautitaakan puolittaminen vie vasta tasolle, jolla lukuisat maat tällä hetkellä todellisuudessa ovat eli joka on periaatteessa aivan saavutettavissa. Kulttuurin muuttaminen on toki aina vaikeaa, myös ruokakulttuurin.
 
Sen sijaan hygieniassa ei juuri kukaan ole päässyt parempaan tilanteeseen, joten sillä puolella huomio on syytä kiinnittää tekijöihin, jotka saattavat rapauttaa hyvää nykytilannetta. Esimerkiksi salmonellan osalta Suomen tilanne jopa lähinaapureihin verrattuna on erittäin hyvä, eikä tästä ole syytä luopua. Tosin vaikka romahtaisimme hygieniassa EU:n keskitasolle, absoluuttinen tautitaakan lisäys olisi Suomessa vain suuruusluokkaa 500 DALYa vuodessa. Vastaavan suuruinen parannus olisi helposti saavutettavissa ravitsemuksen puolella.
 
Ruori-hankkeessa osoittautui yllättävän vaikeaksi löytää tietoa elintarvikevalvonnan vaikutuksesta hygieniaan. Tärkeää olisi pystyä arvioimaan valvonnassa tehtävän muutoksen vaikutusta tautitaakan muutokseen. Hygienian osalta kiinnostus on nimenomaan niin päin, että voidaanko valvontaa keventää ilman kostautumista tautien lisääntymisenä. Tätä tietoa ei järjestelmällisesti synny, koska valvonta on yleensä pakollista ja siksi vaihtoehdosta ei kerry kokemusta.
 
Tilannetta voisi parantaa kahdella eri tavalla. Ensinnäkin systemaattisesti pitäisi kuvata, mitä tehtiin tilanteessa, jossa havaittiin laatupoikkeama. Tieto pois vedetyistä eristä tai muista toimista auttaa arvioimaan, kuinka suuri haitta onnistuttiin välttämään eli mikä oli valvonnan lisäarvo. Trikinella on tästä mielenkiintoinen ääriesimerkki: koska positiivisia näytteitä ei tule, valvonta ei vaikuta toimintaan vaikka periaatteessa eriä vedettäisiin kontaminaatiotapauksessa pois. Valvonnan arvo kontaminaation vähentämisessä on siis nolla, ja hyöty tulee ainoastaan hyvän maineen säilyttämisen kautta. Muiden mikrobien osalta tällaista tietoa ei Ruorin käytössä ollut, vaikka tietoa elintarviketeollisuudella itsellään olisikin. Tässä ehkä tarvittaisiin yhteistyötä tiedon saamiseksi yhteiskunnan käyttöön.
 
Toinen tapa on tehdä kokeluja toisaalta tuotantoprosessissa (kalarehuvalmisteiden puhdistamista dioksiineista kokeiltiin aikanaan menestyksekkäästi, joten se on Suomessa nykyään tavallista eikä pitoisuuksien valvonta ei ole kovin tarpeellista) ja toisaalta tehokkaimman valvontapisteen tunnistamisessa (HACCP eli hazard analysis and critical control point on edelleen hyvä käytäntö).
 
Ruokavalion osalta tilanne on erilainen. Ei ole pelkoa, että jokin ruoka yllättäen sisältäisi enemmän suolaa tai vähemmän hedelmää kuin toisen erän valmiste; terveyteen vaikuttavat tekijät ovat siis hyvin ennakoitavissa ja vakioitu. Haasteet ovat yksilöiden käyttäytymisen ohjailussa niin, että hänen kokonaisruokavalionsa olisi terveellinen. Yksittäisen tuotteen suosiminen tai rajoittaminen ei riitä. Vaikuttamisen keinot kuten verotus myös ovat karkeita eli eivät kohdistu tehokkaasti oikeisiin yksilöihin tai asioihin.
 
Tässäkin kokeilut voisivat tuottaa uudenlaista lisäarvoa. Kansalaispalkkakokeilu toi suppeudestaan huolimatta arvokasta tietoa siitä, mihin kansalaispalkka vaikuttaa ja mihin ei. Samalla tavalla terveellisen ruoan verokohtelua, sokeriveroa tai sydänmerkkiaterioita ja niiden tehoa ja toimivuutta pitäisi yrittää kokeilujen avulla mitata ja onnistuneita keinoja ottaa laajaan käyttöön. Elintarvike- ja kaupan ala toki tekee jatkuvasti omia kokeilujaan ja lienee varsin hyvin perillä siitä, miten joidenkin tuotteiden myyntiä voidaan lisätä sopivalla sijoittelulla, hinnoittelulla ja pakkauksilla. Tässä tavoitteet vain ovat kansanterveyden kannalta osittain ristiriitaiset. On myös vaikea keksiä, miten nämä liikesalaisuudet voitaisiin saada yhteiskunnan käyttöön terveyden edistämiseksi.
 
Kun tarkastellaan eri maiden tilannetta ja ruoan ravitsemuksellisia ja hygieenisiä riskejä kokonaisuutena, voidaan tehdä kokoava päätelmä. Valvonta on hyödyllisimmillään eli tieto arvokkaimmillaan silloin, kun toiminnan, raaka-aineiden tai tuotteiden laatu vaihtelee paljon. Silloin valvonnan avulla voidaan tehokkaasti ohjata toimintaa turvallisemmaksi esimerkiksi hylkäämällä saastuneita eriä. Huonon hygienian oloissa tiedetään käsien pesun välttämättömyys ilman mittauksiakin, ja huippuunsa viritetyssä elintarvikeketjussa syntyy kovin vähän hylättävää. Ravitsemuspuolella laadun vaihtelu ei ole elintarvikkeissa vaan ihmisten tavassa käyttää epäterveellisiä tuotteita. Myös ravitsemusriskien kokemisessa ja tietämyksessä lienee erittäin suuria yksilöllisiä eroja. Näiden tutkiminen ja ymmärtäminen auttaisi suunnittelemaan sellaisia kansanterveyttä parantavia toimia, joilla ei kuitenkaan rajoitettaisi liikaa ihmisten mahdollisuuksia syödä myös herkkuja.


== Perustelut ==
== Perustelut ==
Rivi 28: Rivi 64:
* Vähävihanneksinen ruokavalio: vihannesten kulutus alle 4 annosta  (400 g yhteensä) (sisältää tuoreet, pakastetut, keitetyt, säilötyt ja kuivatut vihannekset mukaan lukien palkokasvit mutta ei sisällä suolaan tai etikkaan säilöttyjä vihanneksia eikä pähkinöitä, siemeniä tai tärkkelyspitoisia vihanneksia kuten perunaa tai maissia). Diet low in vegetables: Consumption of less than 4 servings (400 g total) of vegetables per day (includes fresh, frozen, cooked, canned, or dried vegetables including legumes but excluding salted or pickled, juices, nuts and seeds, and starchy vegetables such as potatoes or corn).
* Vähävihanneksinen ruokavalio: vihannesten kulutus alle 4 annosta  (400 g yhteensä) (sisältää tuoreet, pakastetut, keitetyt, säilötyt ja kuivatut vihannekset mukaan lukien palkokasvit mutta ei sisällä suolaan tai etikkaan säilöttyjä vihanneksia eikä pähkinöitä, siemeniä tai tärkkelyspitoisia vihanneksia kuten perunaa tai maissia). Diet low in vegetables: Consumption of less than 4 servings (400 g total) of vegetables per day (includes fresh, frozen, cooked, canned, or dried vegetables including legumes but excluding salted or pickled, juices, nuts and seeds, and starchy vegetables such as potatoes or corn).


Luken tilastoista löytyy tietoja kalansyönnistä Suomessa. Järvikalaa ei ole eritelty, mutta muut kuin viljellyt ja merilajit ovat yhteensä 2.6 kg/a henkeä kohti. https://stat.luke.fi/en/fish-consumption-2017_en
Luken tilastoista löytyy tietoja kalansyönnistä Suomessa. Järvikalaa ei ole eritelty, mutta muut kuin viljellyt ja merilajit ovat yhteensä 2.6 kg/a henkeä kohti. [https://stat.luke.fi/en/fish-consumption-2017_en]. Kalansyöntidatat löytyvät myös Opasnetistä [[:op_en:Goherr: Fish consumption study]].


Voiko DALYt muuntaa euroiksi, ja miten se tehdään?
Voiko DALYt muuntaa euroiksi, ja miten se tehdään?
Rivi 37: Rivi 73:
* Toisaalta Hammitt todistelee, että hinta per tilastollinen elämä (value per statistical life, VSL) ja hinta per DALY muuttuvat epälineaarisesti suhteessa toisiinsa, eikä näin ollen olisi mahdollista käyttää hyvinvointimuutoksen mittarina vakiolla kerrottua DALY-arvoa, ainakaan taloudellisen hyvinvointiteorian (economic welfare theory) puitteissa.<ref>Hammitt, J.K. (2013) Admissible utility functions for health, longevity, and wealth: integrating monetary and life-year measures. J Risk Uncertain 47: 311. https://doi.org/10.1007/s11166-013-9178-4</ref>
* Toisaalta Hammitt todistelee, että hinta per tilastollinen elämä (value per statistical life, VSL) ja hinta per DALY muuttuvat epälineaarisesti suhteessa toisiinsa, eikä näin ollen olisi mahdollista käyttää hyvinvointimuutoksen mittarina vakiolla kerrottua DALY-arvoa, ainakaan taloudellisen hyvinvointiteorian (economic welfare theory) puitteissa.<ref>Hammitt, J.K. (2013) Admissible utility functions for health, longevity, and wealth: integrating monetary and life-year measures. J Risk Uncertain 47: 311. https://doi.org/10.1007/s11166-013-9178-4</ref>


Pitoisuusanalyysien kustannukset (poistettu).
Pitoisuusanalyysien kustannukset on poistettu tästä.


Trikiinin valvontakustannukset: Tämän artikkelin mukaan trikiinin DALYt ovat vain luokkaa 100 DALY/miljardi ihmistä, joten valvonta ei ole mielekästä<ref>Brecht Devleesschauwer, Nicolas Praet, Niko Speybroeck, Paul R. Torgerson, Juanita A. Haagsma, KrisDe Smet, K. Darwin Murrell, Edoardo Pozio, Pierre Dorny. (2015) The low global burden of trichinellosis: evidence and implications. International Journal for Parasitology 45, 2–3, 95-99. [https://doi.org/10.1016/j.ijpara.2014.05.006] [https://www.sciencedirect.com/science/article/pii/S0020751914001374]</ref>.
Trikiinin valvontakustannukset: Tämän artikkelin mukaan trikiinin DALYt ovat vain luokkaa 100 DALY/miljardi ihmistä, joten valvonta ei ole mielekästä<ref>Brecht Devleesschauwer, Nicolas Praet, Niko Speybroeck, Paul R. Torgerson, Juanita A. Haagsma, KrisDe Smet, K. Darwin Murrell, Edoardo Pozio, Pierre Dorny. (2015) The low global burden of trichinellosis: evidence and implications. International Journal for Parasitology 45, 2–3, 95-99. [https://doi.org/10.1016/j.ijpara.2014.05.006] [https://www.sciencedirect.com/science/article/pii/S0020751914001374]</ref>.
==== Skenaarioista ====
Tyydyttyneen rasvan ja suolan osalta tarkastellaan sydänmerkkiaterioita. Oletetaan, että kaikki lounasruokaloiden ateriat muuttuvat sydänmerkkiaterioiksi. Väestön suuruudeksi oletetaan nykyinen lounaspaikkaruokailijoiden päivittäinen määrä eli 279000, ja heille oletetaan pysyvä muutos ruokavalioon.
Kun ei murehdita altistusjakaumasta, voidaan keskimääräisestä saannista vähentää vähennys, ja tämä muutos kohdennetaan vain 25-69-vuotiaaseen alaryhmään (jos alaryhmä on kyseiselle vasteelle määritelty). Skenaariossa kerrotaan PAF luvulla, joka saa arvon 1 nykyisellä altistuksella ja arvon 0 suosituksen mukaisella arvolla. Tätäitä laimennetaan altistujien osuudella. Niinpä käytetään tätä kaavaa kertoimen laskemiseksi:
PAF_factor = 1-(reduction / (intake-recommendation)) * eaters / population
'''Suola:
Sydänmerkki vähensi 2016 suolan saantia 1 g/d eli 4.2-5.2 g/vk eli 10 %. Tässä oletetaan 3.3-5.1 g/vk vähennys eli 0.471 - 0.729 g/d myös viikoloput huomioiden. Jula (2011) arvioi, että 1 g/d vähennys koko väestössä alentaa kustannuksia 70 Me/a. (Tarkista onko tautitaakkaa!)
Suositus on enintään 5 g/d. Nykysaanti (Valsta 2018) on miehillä 8.7 g/d ja naisilla 6.4 g/d ja tätä käytetään tasajakaumana koko väestölle, koska sukupuolia ei tarkastella erikseen.
'''Rasva:
Sydänmerkkiateria vähensi saantia 14 E%:sta 10 E%:iin. Tässä oletetaan, että vähennys on 22.0-58.1 g/vk.
Suositus on enintään 10 E%.
Valsta (2018): Tyydyttyneiden rasvahappojen osuus kokonaisenergiasta oli naisilla 14 % (28 g/vrk) ja miehillä 15 % (38 g/vrk). Naisilla muuntosuhde on 2 g /d /E% ja miehillä 2.53 g /d /E%, käytetään 2.25 g /d /E%. Grammamääräinen altistus on muutettava energiaosuudeksi.
22.0-58.1 g/vk / (7d/vk) / (2.25 g /d /E%) = 1.397 - 3.689 E%
Näiden tietojen avulla lasketaan PAF-kertoimen jakauma, joka sijoitetaan päätöstauluun päätöksenä Scenario ja vaihtoehtona Action.


==== Malliparametrit ====
==== Malliparametrit ====
Malliparametrit saat näkyviin klikkaamalla.
{{piilotettu|


<t2b name="Malliparametrit" index="Response,Exposure_agent,Type,Subgroup,Unit" obs="Result" desc="Description" unit="various">
<t2b name="Malliparametrit" index="Response,Exposure_agent,Type,Subgroup,Unit" obs="Result" desc="Description" unit="various">
Rivi 64: Rivi 128:
Listeriosis||case burden|Age:Total population|DALY/case|10 (5 - 13.3)|WHO 2015 report, European values (Table A8.2)
Listeriosis||case burden|Age:Total population|DALY/case|10 (5 - 13.3)|WHO 2015 report, European values (Table A8.2)
Noro infection||case burden|Age:Total population|DALY/case|0.0015 - 0.0025|WHO 2015 report, European values (Table A8.2)
Noro infection||case burden|Age:Total population|DALY/case|0.0015 - 0.0025|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||case burden|Age:Age 0 (congenital)|DALY/case|7|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||case burden|Age:Age 0 (congenital)|DALY/case|7 (3 - 10)|WHO 2015 report, European values (Table A8.4) 2 (1-3) / 0.3
Toxoplasmosis||case burden|Age:Age 1+ (acquired)|DALY/case|0.05|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||case burden|Age:Age 1+ (acquired)|DALY/case|0.05 (0.03 - 0.08)|WHO 2015 report, European values (Table A8.4) 6 (4 - 10) / 119
Cancer morbidity||case burden|Age:Total population|DALY/case|0 - 0.28|Goherr assessment
Cancer morbidity||case burden|Age:Female 18-45|DALY/case|0 - 0.28|Goherr assessment
Sperm concentration||case burden|Age:Total population|DALY/case|0 - 2.5|Goherr assessment
Cancer morbidity||case burden|Age:Non female 18-45|DALY/case|0 - 0.28|Goherr assessment
Yes or no dental defect||case burden|Age:Total population|DALY/case|0 - 0.12|Goherr assessment
Sperm concentration||case burden|Age:Age 1|DALY/case|0 - 5|Goherr assessment
|Aflatoxin|exposure|Age:Age 25-64|ng /kg /d|0.85 - 1.14|Finravinto 2012
Yes or no dental defect||case burden|Age:Age 1|DALY/case|0 - 0.12|Goherr assessment
|Aflatoxin|exposure|Age:Age 65-74|ng /kg /d|0.5 - 0.67|Finravinto 2012
|Aflatoxin|exposure|Exposure:To eater; Age:Age 25-64|ng /kg /d|0.85 - 1.14|Finravinto 2012
|Lead|exposure|Age:Age 1|ug /l|27.9|Measured as blood concentration. RASKURI, Z:\Projects\RUORI\tautitaakka\Lyijy\Lyijy_tautitaakkadata.xlsx
|Aflatoxin|exposure|Exposure:To eater; Age:Age 65-74|ng /kg /d|0.5 - 0.67|Finravinto 2012
|Saturated fat|exposure|Age:Age 25-69|E%|13.1 (12.9 - 13.4)|Finland, 2010 situation from Wang et al. Supplementary
|TEQ|exposure|Exposure:To child; Age: Age 1|pg /g|1.65 (0.38 - 3.47)|Ruori code; data from Goherr assessment
|Saturated fat|exposure|Age:Age 70+|E%|13.2 (12.8 - 13.6)|Finland, 2010 situation from Wang et al. Supplementary
|TEQ|exposure|Exposure:To eater; Age: Female 18-45|pg /d|4.79 (1.07 - 11.48)|Ruori code; data from Goherr assessment
|TEQ|exposure|Exposure:To eater; Age: Non female 18-45|pg /d|22.61 (9.43 - 44.75)|Ruori code; data from Goherr assessment
|Lead|exposure|Exposure:To eater; Age:Age 1|ug /l|2:12:30|Measured as blood concentration, triangular distribution for Age 1. RASKURI, Z:\Projects\RUORI\tautitaakka\Lyijy\Lyijy_tautitaakkadata.xlsx
|Saturated fat|exposure|Exposure:To eater; Age:Age 25-69|E%|13.1 (12.9 - 13.4)|Finland, 2010 situation from Wang et al. Supplementary
|Saturated fat|exposure|Exposure:To eater; Age:Age 70+|E%|13.2 (12.8 - 13.6)|Finland, 2010 situation from Wang et al. Supplementary
|Aflatoxin|frexposed|Age:Age 25-64|fraction|1|dummy variable
|Aflatoxin|frexposed|Age:Age 25-64|fraction|1|dummy variable
|Aflatoxin|frexposed|Age:Age 65-74|fraction|1|dummy variable
|Aflatoxin|frexposed|Age:Age 65-74|fraction|1|dummy variable
|Lead|frexposed|Age:Age 1|fraction|0.0657|Population exposed to lead over threshold: 3126. RASKURI, Z:\Projects\RUORI\tautitaakka\Lyijy\Lyijy_tautitaakkadata.xlsx
|Lead|frexposed|Age:Age 1|fraction|1|Already in the exposure distribution
|TEQ|frexposed|Age:Age 1|fraction|1|frexposed is already in the exposure distribution
|TEQ|frexposed|Age:Female 18-45|fraction|1|frexposed is already in the exposure distribution
|TEQ|frexposed|Age:Non female 18-45|fraction|1|frexposed is already in the exposure distribution
IQ loss||incidence|Age:Age 1|IQ /100000py|596000|On average, a population has ca. 6 IQ points per person below 100: mean(abs(rnorm(10000, 100,15)-100))/2
IQ loss||incidence|Age:Age 1|IQ /100000py|596000|On average, a population has ca. 6 IQ points per person below 100: mean(abs(rnorm(10000, 100,15)-100))/2
Listeriosis||incidence|Age:Total population|# /100000py|1.22|Tartuntatautirekisteri 2016: 66 kpl. WHO 2015 report, European values (Table A8.2): 0.2 (0.2 - 0.3)
Listeriosis||incidence|Age:Total population|# /100000py|1.22|Tartuntatautirekisteri 2016: 66 kpl. WHO 2015 report, European values (Table A8.2): 0.2 (0.2 - 0.3)
Rivi 82: Rivi 153:
Liver cancer||incidence|Age:Age 65-74|# /100000py|26.16|Finnish Cancer Registry, average 2011-2015
Liver cancer||incidence|Age:Age 65-74|# /100000py|26.16|Finnish Cancer Registry, average 2011-2015
Noro infection||incidence|Age:Total population|# /100000py|1652 (630 - 3294)|WHO 2015 report, European values (Table A8.2)
Noro infection||incidence|Age:Total population|# /100000py|1652 (630 - 3294)|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||incidence|Age:Age 0 (congenital)|# /100000py|0.3 (0.2 - 0.7)|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||incidence|Age:Age 0 (congenital)|# /100000py|35 (23 - 81)|WHO 2015 report, European values (Table A8.4) Numbers are per whole population, so scale up to Age0: 0.3 (0.2 - 0.7) * 5517919/47663
Toxoplasmosis||incidence|Age:Age 1+ (acquired)|# /100000py|119 (77 - 188)|WHO 2015 report, European values (Table A8.2)
Toxoplasmosis||incidence|Age:Age 1+ (acquired)|# /100000py|119 (79 - 188)|WHO 2015 report, European values (Table A8.4)
Cancer morbidity||incidence|Age:Female 18-45|# /100000py|657|Statistics Finland https://tilastot.syoparekisteri.fi/syovat/ applies to all subgroups because cancer is lifetime risk
Cancer morbidity||incidence|Age:Non female 18-45|# /100000py|657|Statistics Finland https://tilastot.syoparekisteri.fi/syovat/ applies to all subgroups because cancer is lifetime risk
Sperm concentration||incidence|Age:Age 1|# /100000py|7000|Male infertility rate is 7 % (Wikipedia)
Yes or no dental defect||incidence|Age:Age 1|# /100000py|22400|Alaluusua et al 2004 found 11/49 cases in two lowest groups
Diet low in fruits|Fruits|PAF|Age:Total population|fraction|1|dummy variable
Diet low in fruits|Fruits|PAF|Age:Total population|fraction|1|dummy variable
Listeriosis|Listeria|PAF|Age:Total population|fraction|1|dummy variable
Listeriosis|Listeria|PAF|Age:Total population|fraction|1|dummy variable
Rivi 101: Rivi 176:
||population|Age:Age 0 (congenital)|#|47663|Statistics Finland
||population|Age:Age 0 (congenital)|#|47663|Statistics Finland
||population|Age:Age 1+ (acquired)|#|5470256|Statistics Finland
||population|Age:Age 1+ (acquired)|#|5470256|Statistics Finland
||population|Age:Female 18-45|#|923697|Statistics Finland
||population|Age:Non female 18-45|#|4594222|Statistics Finland
Hepatitis||prevalence|Hepatitis:Hepatitis B-|fraction|0.005|TerveSuomi
Hepatitis||prevalence|Hepatitis:Hepatitis B-|fraction|0.005|TerveSuomi
Hepatitis||prevalence|Hepatitis:Hepatitis B+|fraction|0.995|TerveSuomi
Hepatitis||prevalence|Hepatitis:Hepatitis B+|fraction|0.995|TerveSuomi
Rivi 111: Rivi 188:
|Saturated fat|scenario exposure|Age:Female 45-64|E%|14.3|Finravinto 2017. Supplementary table 7.12. Average daily intake of saturated fats by gender and age.
|Saturated fat|scenario exposure|Age:Female 45-64|E%|14.3|Finravinto 2017. Supplementary table 7.12. Average daily intake of saturated fats by gender and age.
|Saturated fat|scenario exposure|Age:Female 65-74|E%|14.0|Finravinto 2017. Supplementary table 7.12. Average daily intake of saturated fats by gender and age.
|Saturated fat|scenario exposure|Age:Female 65-74|E%|14.0|Finravinto 2017. Supplementary table 7.12. Average daily intake of saturated fats by gender and age.
IQ loss|Lead|threshold|Age:Age 1|ug /l|24|Lanphear et al 2005 https://doi.org/10.1289/ehp.7688 CHECK THRESHOLD
IQ loss|Lead|threshold|Age:Age 1|ug /l|0-24|Lanphear et al 2005 https://doi.org/10.1289/ehp.7688 CHECK THRESHOLD
Liver cancer|Aflatoxin|UR|Hepatitis:Hepatitis B-|# /(ng /kg /d /100000py)|0.01 (0.002 - 0.03)|WHO Is this per year or per lifetime?
Liver cancer|Aflatoxin|UR|Hepatitis:Hepatitis B-|# /(ng /kg /d /100000py)|0.01 (0.002 - 0.03)|WHO Is this per year or per lifetime?
Liver cancer|Aflatoxin|UR|Hepatitis:Hepatitis B+|# /(ng /kg /d /100000py)|0.3 (0.01 - 0.5)|WHO Is this per year or per lifetime?
Liver cancer|Aflatoxin|UR|Hepatitis:Hepatitis B+|# /(ng /kg /d /100000py)|0.3 (0.01 - 0.5)|WHO Is this per year or per lifetime?
IQ loss|Lead|UR|Age:Age 1|IQ l /ug|0.039|Lanphear et al 2005 https://doi.org/10.1289/ehp.7688 CHECK THRESHOLD
IQ loss|Lead|UR|Age:Age 1|IQ l /ug|0.039 (0.024 - 0.053)|Lanphear et al 2005 https://doi.org/10.1289/ehp.7688 using the first increment from 24 to 100 ug/l
|Sodium|reduction|Age:Total population|g /d|0.471 - 0.729|RUORI estimates 3.3-5.1 g/week reduction for workplace lunches with heart-friendly label
|Sodium|reduction|Age:Total population|g /d|0.471 - 0.729|RUORI estimates 3.3-5.1 g/week reduction for workplace lunches with heart-friendly label
|Sodium|intake|Age:Total population|g /d|6.4 - 8.7|Valsta 2018 estimated the lower value for females and upper for males.
|Sodium|intake|Age:Total population|g /d|6.4 - 8.7|Valsta 2018 estimated the lower value for females and upper for males.
Rivi 148: Rivi 225:
Scenario|Action|exposure|Exposure_agent:Aflatoxin|Multiply|0.95-1|0-5% reduction of exposure based on 10 % more testing
Scenario|Action|exposure|Exposure_agent:Aflatoxin|Multiply|0.95-1|0-5% reduction of exposure based on 10 % more testing
Scenario|Action|exposure|Exposure_agent:Lead|Multiply|0.963-0.975|2.5-3.7% reduction of exposure based on more testing
Scenario|Action|exposure|Exposure_agent:Lead|Multiply|0.963-0.975|2.5-3.7% reduction of exposure based on more testing
Threshold|Yes|ERF|Exposure_agent:Lead;Observation:Threshold|Identity||Lanphear 2005 had the lowest exposure level at 24 ug/l
Threshold|No|ERF|Exposure_agent:Lead;Observation:Threshold|Replace|0-24|Sensitivity analysis looks whether reducing or removing threshold is important
Scenario|BAU|exposure||Identity||For completion
Scenario|BAU|exposure||Identity||For completion
Scenario|Action|PAF|Exposure_agent:Noro virus|Multiply|0.65 : 1 : 1|35 % are from food industry so that is the max reduction from testing
Scenario|Action|PAF|Exposure_agent:Noro virus|Multiply|0.65 : 1 : 1|35 % are from food industry so that is the max reduction from testing
Rivi 153: Rivi 232:
Scenario|Action|PAF|Exposure_agent:Fruits|Multiply|0.82 - 1|Based on RUORI modelling (see code)
Scenario|Action|PAF|Exposure_agent:Fruits|Multiply|0.82 - 1|Based on RUORI modelling (see code)
Adjust|BAU|exposure||Add|0.01|Roughly 98 % of all exposures for Exposure_agents is > 0.005. This prevents NaN in log scaling.
Adjust|BAU|exposure||Add|0.01|Roughly 98 % of all exposures for Exposure_agents is > 0.005. This prevents NaN in log scaling.
Scenario|Action|exposure|Exposure: To child; Age: Age 1|Replace|0.98 (0.17 - 2.9)|Based on RUORI modelling (see code)
Scenario|Action|exposure|Exposure: To eater; Age: Female 18-45|Replace|2.79 (0.56 - 7.08)|Based on RUORI modelling (see code)
Scenario|Action|exposure|Exposure: To eater; Age: Non female 18-45|Replace|11.38 (3.44 - 46.22)|Based on RUORI modelling (see code)
</t2b>
</t2b>


Rivi 159: Rivi 241:
PAF|Unit, Exposure, Scaling,Exposcen, ER_function, ERFchoiceSource, exposureSource, bgexposureSource, BWSource, doseSource, thresholdSource, ERFSource, RRSource, frexposedSource, incidenceSource, InpPAFSource||sum|1|Remove redundant
PAF|Unit, Exposure, Scaling,Exposcen, ER_function, ERFchoiceSource, exposureSource, bgexposureSource, BWSource, doseSource, thresholdSource, ERFSource, RRSource, frexposedSource, incidenceSource, InpPAFSource||sum|1|Remove redundant
case_burden|case_burdenSource||sum|1|Fill missing Ages
case_burden|case_burdenSource||sum|1|Fill missing Ages
BoDattr|PAFSource, Hepatitis||sum|1|Remove redundant
BoDattr|PAFSource, Hepatitis, Adjust||sum|1|Remove redundant
amount|assumpSource, oftenSource, muchSource, oftensideSource, muchsideSource, amountRawSource, effinfoSource, effrecommSource, amountSource||sum|1|Remove redundant
amount|assumpSource, oftenSource, muchSource, oftensideSource, muchsideSource, amountRawSource, effinfoSource, effrecommSource, amountSource||sum|1|Remove redundant
expo_indir|f_ingSource, t0.5Source,f_mtocSource, BFSource||sum|1|Remove redundant
expo_indir|f_ingSource, t0.5Source,f_mtocSource, BFSource||sum|1|Remove redundant
dose|Source, concSource, expo_dirSrouce, exposureSource, BWSource, Source.1||sum|1|Remove redundant
dose|Source, concSource, expo_dirSrouce, exposureSource, BWSource, Source.1||sum|1|Remove redundant
conc|Fish|0, 1, 0, 0, 0, 0, 0.19, 0.19, 0.19, 0, 0, 0, 0, 0, 0, 0, 0.29, 0.14|sample|1|Probs relative to consumption; Baltic herring has equal weight with others combined because it is another scenario. Arctic char, Baltic herring, Bream, Burbot, Cod, Flounder, Perch, Pike, Pike-perch, Rainbow trout, River lamprey, Roach, Salmon, Sea trout, Sprat, Trout, Vendace, Whitefish
ERF|Exposure, Age||sum|1|Remove redundant
threshold|Exposure, Age||sum|1|Remove redundant
</t2b>
</t2b>
}}


=== Laskenta ===
=== Laskenta ===


==== Arviointimalli ====
[[image:Terveysvaikutusten arviointimalli.svg|thumb|400px|Yleiskuva terveysvaikutusten laskentamallista.]]


'''Skenaariot
==== Keskeiset tulosteet ====


Tyydyttyneen rasvan ja suolan osalta tarkastellaan sydänmerkkiaterioita. Oletetaan, että kaikki lounasruokaloiden ateriat muuttuvat sydänmerkkiaterioiksi. Väestön suuruudeksi oletetaan nykyinen lounaspaikkaruokailijoiden päivittäinen määrä eli 279000, ja heille oletetaan pysyvä muutos ruokavalioon.
* Malliajo 5000 iteraatiota 11.8.2019 [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=IMy5dmICIwDKkesL]
 
<rcode label="Laske uudestaan mallin perustulokset" graphics=1>
# This is code Op_fi5889/ on page [[Ruori]]
library(OpasnetUtils)
library(ggplot2)
library(thlGraphs)
library(plotly)
 
openv.setN(10)
 
objects.latest("Op_fi5889", code_name="model")


Kun ei murehdita altistusjakaumasta, voidaan keskimääräisestä saannista vähentää vähennys, ja tämä muutos kohdennetaan vain 25-69-vuotiaaseen alaryhmään (jos alaryhmä on kyseiselle vasteelle määritelty). Skenaariossa kerrotaan PAF luvulla, joka saa arvon 1 nykyisellä altistuksella ja arvon 0 suosituksen mukaisella arvolla. Tätäitä laimennetaan altistujien osuudella. Niinpä käytetään tätä kaavaa kertoimen laskemiseksi:
# First empty all objects for a fresh start. Otherwise may be problems with CheckDecisions.
PAF_factor = 1-(reduction / (intake-recommendation)) * eaters / population
oempty(all=TRUE)


'''Suola:
InpBoD <- EvalOutput(InpBoD)
InpPAF <- EvalOutput(InpPAF)
utility <- EvalOutput(utility, verbose=TRUE)


Sydänmerkki vähensi 2016 suolan saantia 1 g/d eli 4.2-5.2 g/vk eli 10 %. Tässä oletetaan 3.3-5.1 g/vk vähennys eli 0.471 - 0.729 g/d myös viikoloput huomioiden. Jula (2011) arvioi, että 1 g/d vähennys koko väestössä alentaa kustannuksia 70 Me/a. (Tarkista onko tautitaakkaa!)
# Sample from default and sensitivity scenario about lead threshold.


Suositus on enintään 5 g/d. Nykysaanti (Valsta 2018) on miehillä 8.7 g/d ja naisilla 6.4 g/d ja tätä käytetään tasajakaumana koko väestölle, koska sukupuolia ei tarkastella erikseen.
cat("Elintarvikeperäisen lyijyn vaikutukset herkkyystarkastelussa.\n")
oprint(summary(BoDattr[BoDattr$Exposure_agent=="Lyijy",]))


'''Rasva:
BoDattr <- CollapseMarginal(BoDattr,"Threshold","sample")
utility <- CollapseMarginal(utility,"Threshold","sample")


Sydänmerkkiateria vähensi saantia 14 E%:sta 10 E%:iin. Tässä oletetaan, että vähennys on 22.0-58.1 g/vk.
levels(BoDattr$Exposure_agent)[levels(BoDattr$Exposure_agent)=="Vihannesvaje"] <- "Kasvisvaje"


Suositus on enintään 10 E%.
#levels(BoDattr$Response)
#[1] "Cancer morbidity"        "IQ loss"                "Listeriosis"            "Liver cancer"         
#[5] "Noro infection"          "Sperm concentration"    "Toxoplasmosis"          "Yes or no dental defect"
#[9] "CHD death"              "Diet high in sodium"    "Diet low in fruits"      "Diet low in vegetables"


Valsta (2018): Tyydyttyneiden rasvahappojen osuus kokonaisenergiasta oli naisilla 14 % (28 g/vrk) ja miehillä 15 % (38 g/vrk). Naisilla muuntosuhde on 2 g /d /E% ja miehillä 2.53 g /d /E%, käytetään 2.25 g /d /E%. Grammamääräinen altistus on muutettava energiaosuudeksi.
levels(BoDattr$Response) <- c(
22.0-58.1 g/vk / (7d/vk) / (2.25 g /d /E%) = 1.397 - 3.689 E%
  "Syöpä",
  "Älykkyysosamäärän lasku",
  "Listerioosi",
  "Maksasyöpä",
  "Noroinfektio",
  "Miehen hedelmättömyys",
  "Toksoplasmoosi",
  "Hammasvaurio",
  "Sydäntauti",
  "Liika suola",
  "Hedelmävaje",
  "Kasvisvaje"
)


Näiden tietojen avulla lasketaan PAF-kertoimen jakauma, joka sijoitetaan päätöstauluun päätöksenä Scenario ja vaihtoehtona Action.
cat("Elintarvikeperäisiä tautitaakkoja Suomessa arpoen lyijylle oletetun tai matalamman kynnysarvon.\n")
tmp <- summary(oapply(BoDattr[BoDattr$Scenario=="BAU",],NULL,sum,c("Age","Response")))
oprint(data.frame(
  Altiste = tmp$Exposure_agent,
  Keskiarvo = signif(tmp$mean,2),
  "95 luottamusväli" = paste0(signif(tmp$Q0.025,2)," - ", signif(tmp$Q0.975,2)),
  Keskihajonta = signif(tmp$sd,2)
)[rev(match(lev, tmp$Exposure_agent)),])


* Malliajo 29.5.2019 [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=dbscMpzNoaiytUi3]
cat("Elintarvikeperäisiä tautitaakkoja Suomessa ikä- ja tautiryhmittäin arpoen lyijylle oletetun tai matalamman kynnysarvon.\n")
* Malliajo 31.5.2019 [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=JLSryIWqMiZEMhBh]
tmp <- summary(BoDattr[BoDattr$Scenario=="BAU",])
* Malliajo 4.6.2019, ovariablet haetaan ao. sivuilta ja OpasnetUtilsista on päivitetty versio (ei toimi vanhalla) [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=QAoBrPJXrwJl8qmv]
oprint(data.frame(
* Malliajo 12.6.2017 jossa suolan ja rasvan skenaario [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=X47Rgy5MFnb4C8VN]
  Altiste = tmp$Exposure_agent,
* Malliajo 12.6. myös muita skenaarioita [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=64AGnWrXc5WO7phW]
  Ikä = tmp$Age,
* Malliajo 13.6.2019 skenaariot dioksiinia lukuunottamatta [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=wWy7cM9RHlvJGSBc]
  Vaste = tmp$Response,
  Keskiarvo = signif(tmp$mean,2),
  Mediaani = signif(tmp$median,2),
  "95 luottamusväli" = paste0(signif(tmp$Q0.025,2)," - ", signif(tmp$Q0.975,2)),
  Keskihajonta = signif(tmp$sd,2)
))


<rcode graphics=1>
cat("Ruori-skenaarioiden vaikutus tautitaakkaan\n")
# This is code Op_fi5889/ on page [[Ruori]]
tmp <- summary(utility)
library(OpasnetUtils)
oprint(data.frame(
library(ggplot2)
  Altiste = tmp$Exposure_agent,
  Keskiarvo = signif(tmp$mean,2),
  "95 luottamusväli" = paste0(signif(tmp$Q0.025,2)," - ", signif(tmp$Q0.975,2)),
  Keskihajonta = signif(tmp$sd,2)
)[rev(match(lev, tmp$Exposure_agent)),])


### TARKISTA VÄESTÖN KOKO AJANKOHTAISESTA TILASTOSTA JA KAIKKI SAMASTA.
dodge <- position_dodge(width=0.7)
### TARKISTA MIKÄ SUOLAVÄHENNYS PITÄÄ OTTAA LASKENTAAN.


if(FALSE) {
if(FALSE) {
  # Read population data from Statistics Finland
  vae <- re#ad.csv("https://pxnet2.stat.fi:443/PXWeb/sq/ac3373d0-e303-4c67-b32a-73c6d26df809", skip=2)
  vae$Ikä <- as.numeric(as.character(vae$Ikä))
  vae$Ikä[is.na(vae$Ikä)] <- 100 # Previously "100+"
    
    
   c(
   gg <-  ggplot(summary(oapply(BoDattr[BoDattr$Scenario=="BAU",],NULL,sum,"Age")),
    sum(vae$X2018[vae$Ikä==1]), # Age 1
                aes(x=Exposure_agent, weight=unlist(mean), fill=Response))+geom_bar()+
     sum(vae$X2018[vae$Ikä>=25 & vae$Ikä <65]), # Age 25-64
    theme(legend.position = "bottom")+
     sum(vae$X2018[vae$Ikä>=65 & vae$Ikä <75]), # Age 65-74
    labs(
     sum(vae$X2018[vae$Ikä>=25 & vae$Ikä <70]), # Age 25-69
      title="Elintarvikkeiden tautitaakkoja Suomessa",
     sum(vae$X2018[vae$Ikä>=70 & vae$Ikä <101]), # Age 70+
      subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
     sum(vae$X2018), # Total population
    coord_flip()
     sum(vae$X2018[vae$Ikä==0]), # Age 1
 
     sum(vae$X2018[vae$Ikä>=1]) # Age 1+
  print(gg)
   )
 
  gg <- ggplot(summary(oapply(BoDattr, NULL, sum,c("Age","Response"))),
              aes(x=Exposure_agent, weight=unlist(mean), fill=Scenario))+geom_bar(position="dodge")+
    coord_flip(ylim=c(0,70000))+
    labs(
      title="Elintarvikeperäisiä tautitaakkoja Suomessa",
      subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
    geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975),group=Scenario),position=dodge, width=0.3)+
     geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.975)+5000, group=Scenario), position=dodge)
 
  print(gg)
 
  # Utility of actions
 
  gg <- ggplot(summary(utility),aes(x=Exposure_agent, weight=unlist(mean)))+geom_bar(fill="lightblue")+
    coord_flip(ylim=c(-9000,0))+
    labs(
      title="Ruori-skenaarioiden vaikutus tautitaakkaan",
      subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
    geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975)), width=0.3)+
     geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.025)-600))
 
  print(gg)
 
} else {
 
  ###### RUN THESE ON OWN COMPUTER WITH thlGraphs PACKAGE
 
#  levels(BoDattr$Exposure_agent)
[1] "Aflatoksiini"      "Dioksiini"        "Norovirus"        "Toksoplasma"     
#  [5] "Lyijy"            "Listeria"          "Tyydyttynyt rasva" "Vihannesvaje"   
#  [9] "Suola"            "Hedelmävaje"     
 
  levels(BoDattr$Exposure_agent) <- c(
    "Aflatoxin","Dioxin","Noro virus","Toxoplasma", "Lead","Listeria",
     "Saturated fat","Lack of vegetables","Sodium","Lack of fruits")
 
  thlBarPlot(summary(oapply(BoDattr[BoDattr$Scenario=="BAU",],NULL,sum,"Age")),
            xvar=Exposure_agent, yvar=unlist(mean), groupvar=Response, legend.position="bottom",
            colors=thlColors(n=12),
            title="Elintarvikkeiden tautitaakkoja Suomessa", subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+coord_flip()
 
  thlBarPlot(summary(oapply(BoDattr, NULL, sum,c("Age","Response"))),xvar=Exposure_agent, yvar=unlist(mean),
            groupvar=Scenario,stacked=FALSE, ylimits=c(0,70000),
#             title="Elintarvikeperäisiä tautitaakkoja Suomessa",
#            subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
title="Burden of disease of selected food-mediated risk factors in Finland",
subtitle="Disability-adjusted life years per year (DALY/a)")+
     coord_flip()+
    geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975),group=Scenario),position=dodge, width=0.3)+
     geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.975)+5000, group=Scenario), position=dodge)
 
  ggsave("Ruori Burden of disease.png",width=10,height=6)
#  ggsave("Ruori-tautitaakka.png",width=10,height=6)
 
 
  # Error bars are not used in this plotly because it is unclear what it means in a stacked bar.
p <-plot_ly(
     summary(oapply(BoDattr[BoDattr$Scenario=="BAU",], NULL, sum,c("Age"))),
     y=~Exposure_agent,
    x=~signif(mean,3),
    text=~Response,
    name=~Response,
    type="bar",
    orientation = "h"
  ) %>%
    layout(
      barmode="stack",
      title="Elintarvikeperäisiä tautitaakkoja Suomessa",
      xaxis=list(title="Haittapainotettua elinvuotta vuodessa (DALY/a)"),
      yaxis=list(title="")
      )
#  pushIndicatorGraph(p, 117)
  #  ggsave("Ruori-tautitaakat.png",width=10/1.2,height=6/1.2)
 
  # Utility of actions
 
  thlBarPlot(summary(utility),xvar=Exposure_agent, yvar=unlist(mean), ylimits=c(-9000,0),
            title="Ruori-skenaarioiden vaikutus tautitaakkaan",
            subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+coord_flip()+
    geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975)), width=0.3)+
    geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.025)-600))
    
 
  #  ggsave("Ruori-toimenpideiden vaikutus.png",width=10/1.2,height=6/1.2)
}
}
</rcode>
==== Arviointimallin alustus ====


# First remove all objects for a fresh start. Otherwise may be problems with CheckDecisions.
* Linkit vanhempiin ajoihin [http://fi.opasnet.org/fi-opwiki/index.php?title=Ruori&oldid=35883#Arviointimallin_alustus arkistosta].
#rm(list=ls())
* Malliajo 10.8.2019 toksoplasma korjattu. Stored-versio [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=VXNKkIPPZVSDhjUm]
#rm(list=ls(envir=openv),envir=openv)
 
<rcode name="model" label="Alusta koko Ruori-malli" graphics=1>
# This is code Op_fi5889/model on page [[Ruori]]
library(OpasnetUtils)
library(ggplot2)
 
# First empty all objects for a fresh start. Otherwise may be problems with CheckDecisions.
oempty(all=TRUE)


openv.setN(1000)
openv.setN(1000)
Rivi 261: Rivi 483:
}
}


objects.latest("Op_en2031", code_name="initiate") # [[Exposure-response function]] subgrouping
objects.latest("Op_en2031", code_name="subgrouping") # [[Exposure-response function]] subgrouping


population <- Ovariable("population", data = prepare(dat,"population",c("Type","Exposure_agent","Response","Unit")))
population <- Ovariable("population", data = prepare(dat,"population",c("Type","Exposure_agent","Response","Unit")))
Rivi 271: Rivi 493:
incidence <- Ovariable("incidence", data = prepare(dat,"incidence",c("Type","Exposure_agent","Unit")))
incidence <- Ovariable("incidence", data = prepare(dat,"incidence",c("Type","Exposure_agent","Unit")))


reduction <- Ovariable("reduction", data = prepare(dat,"reduction",c("Type","Response")))
ERFChoice <- Ovariable(
 
  "ERFchoice",
intake <- Ovariable("intake", data = prepare(dat,"intake",c("Type","Response")))
  data=data.frame(
 
    Response=c("IQ loss","Liver cancer","Yes or no dental defect","Cancer morbidity","Sperm concenctration"),
recommendation <- Ovariable("recommendation", data = prepare(dat,"recommendation",c("Type","Response")))
    Exposure_agent=c("Lead","Aflatoxin","TEQ","TEQ","TEQ"),
 
    Result=1)
eaters <- Ovariable("eaters", data = prepare(dat,"eaters",c("Type","Response","Unit")))
 
###### This is temporary code that is used to calculate the option "Action" of decision "Scenario".
 
PAF_factor <- Ovariable(
  "PAF_factor",
  dependencies=data.frame(Name=c("reduction","intake","recommendation","eaters","population")),
  formula = function(...) {
    out <- 1 - reduction / (intake - recommendation) * eaters / population
    return(out)
  }
)
)


PAF_factor <- EvalOutput(PAF_factor)  
case_burden <- Ovariable("case_burden", data= prepare(dat,"case burden",c("Type","Exposure_agent","Unit")))


ggplot(PAF_factor@output, aes(x=PAF_factorResult, fill=Exposure_agent))+geom_density()+facet_wrap(~Exposure_agent)
InpPAF <- EvalOutput(Ovariable("InpPAF", data =  prepare(dat,"PAF","Type")))


summary(PAF_factor)
InpBoD <- EvalOutput(Ovariable("InpBoD", data = prepare(dat, "BoD", c("Type","Exposure_agent"))))


# The PAF_factor distributions for saturated fat and sodium are NOT normally distributed. Instead, triangular
objects.latest("Op_en2261",code_name="BoDattr2") # [[Health impact assessment]]
# distribution seems to be a reasonable fit with parameters:
# Sodium: triangular 0.975 : 0.990 : 0.993
# Saturated fat: triangular 0.911 : 0.944 : 0.971


######### End of temporary code
#levels(BoDattr$Exposure_agent)
#[1] "Aflatoxin"        "Lead"    "TEQ"        "Fruits"            "Listeria"          "Noro virus"        "Saturated fat"    "Sodium"         
#[8] "Toxoplasma gondii" "Vegetables"     


# case_burden equals disabilityweight * duration
BoDattrOrigFormula <- BoDattr@formula


case_burden <- Ovariable(
BoDattr@formula <- function(...) {
   "case_burden",
   BoDattr <- BoDattrOrigFormula()
  ddata = "Op_en7748", # [[Goherr assessment]]
 
  subset = "DALYs of responses"
  levels(BoDattr$Exposure_agent) <- c("Aflatoksiini","Lyijy", "Dioksiini", "Hedelmävaje","Listeria","Norovirus",
)
                                      "Tyydyttynyt rasva","Suola", "Toksoplasma","Vihannesvaje")
colnames(case_burden@data)[match(
 
   c("Resp","case_burdenResult"),
   lev <- oapply(BoDattr[BoDattr$Scenario=="BAU",],"Exposure_agent",sum)
   colnames(case_burden@data))] <- c("Response","Result")
   lev <- lev$Exposure_agent[order(result(lev))]
  BoDattr$Exposure_agent <- factor(BoDattr$Exposure_agent, levels=lev)
  return(BoDattr)
}


case_burden@data <- orbind(
utility <- Ovariable(
   case_burden@data,
   "utility",
   prepare(dat,"case burden",c("Type","Exposure_agent","Unit"))
  dependencies = data.frame(Name="BoDattr"),
   formula = function(...) {
    out <- BoDattr * Ovariable(data=data.frame(Scenario=c("Action","BAU"),Result=c(1,-1)))
    out <- oapply(out, cols=c("Scenario","Response","Age"),FUN=sum)
    return(out)
  }
)
)


InpPAF <- EvalOutput(Ovariable("InpPAF", data =  prepare(dat,"PAF","Type")))
utility <- EvalOutput(utility)
 
InpBoD <- EvalOutput(Ovariable("InpBoD", data = prepare(dat, "BoD", c("Type","Exposure_agent"))))
 
objects.latest("Op_en2261",code_name="BoDattr") # [[Health impact assessment]]
 
BoDattr <- CheckCollapse(EvalOutput(BoDattr,verbose=TRUE))
 
#levels(BoDattr$Exposure_agent)
#[1] "Aflatoxin"        "Lead"              "Fruits"            "Listeria"          "Noro virus"        "Saturated fat"    "Sodium"         
#[8] "Toxoplasma gondii" "Vegetables"     
 
levels(BoDattr$Exposure_agent) <- c("Aflatoksiini","Lyijy","Hedelmät","Listeria","Norovirus","Tyydyttynyt rasva","Natrium",
                                    "Toksoplasma","Vihannekset")


utility <- oapply(Ovariable(data=data.frame(Scenario=c("Action","BAU"),Result=c(1,-1))) * BoDattr, cols="Scenario",FUN=sum)
lev <- levels(BoDattr$Exposure_agent)


cat("exposure\n")
cat("exposure\n")
oprint(summary(exposure),digits=7)
oprint(summary(exposure,marginals=c("Exposure_agent","Age","Scenario")),digits=7)
#cat("dose\n")
oprint(exposure@output[exposure$Iter==1,])
#oprint(summary(dose),digits=7)
cat("dose\n")
oprint(summary(dose),digits=7)
cat("ERF\n")
cat("ERF\n")
oprint(ERF@output[ERF$Iter==1,],digits=7)
oprint(ERF@output[ERF$Iter==1,],digits=7)
Rivi 353: Rivi 559:
oprint(summary(BoDattr,marginals=c("Response","Exposure_agent","Scenario","Age")),digits=7)
oprint(summary(BoDattr,marginals=c("Response","Exposure_agent","Scenario","Age")),digits=7)
cat("Vähennyspotentiaali\n")
cat("Vähennyspotentiaali\n")
tmp <- summary(utility, marginals=c("Response","Exposure_agent"))
tmp <- summary(utility, marginals=c("Exposure_agent"))
oprint(tmp[order(unlist(tmp$mean)),])
oprint(tmp[order(unlist(tmp$mean)),])


objects.store(list=setdiff(ls(), "wiki_username"))
cat("Objects", setdiff(ls(), "wiki_username"), "stored.\n")
###################
# Disease burden
# Disease burden


tmp <-   oapply(BoDattr, NULL, mean,c("Iter","Age"))@output
# Sample from default and sensitivity scenario about lead threshold.
colnames(tmp)[colnames(tmp)=="BoDattrResult"] <- "Mean"
 
tmp <- merge(
cat("Elintarvikeperäisen lyijyn vaikutukset herkkyystarkastelussa.\n")
   tmp,
oprint(summary(BoDattr[BoDattr$Exposure_agent=="Lyijy",]))
   oapply(BoDattr, NULL, function(x) quantile(x, 0.025),c("Iter","Age"))@output
 
)
BoDattr <- CollapseMarginal(BoDattr,"Threshold","sample")
colnames(tmp)[colnames(tmp)=="BoDattrResult"] <- "Q025"
utility <- CollapseMarginal(utility,"Threshold","sample")
tmp <- merge(
 
   tmp,
cat("Elintarvikeperäisiä tautitaakkoja Suomessa\n")
   oapply(BoDattr, NULL, function(x) quantile(x, 0.975),c("Iter","Age"))@output
tmp <- summary(oapply(BoDattr[BoDattr$Scenario=="BAU",],NULL,sum,c("Age","Response")))
)
oprint(data.frame(
colnames(tmp)[colnames(tmp)=="BoDattrResult"] <- "Q975"
   Altiste = tmp$Exposure_agent,
   Keskiarvo = signif(tmp$mean,2),
  "95 luottamusväli" = paste0(signif(tmp$Q0.025,2)," - ", signif(tmp$Q0.975,2)),
  Keskihajonta = signif(tmp$sd,2)
)[rev(match(lev, tmp$Exposure_agent)),])
 
cat("Ruori-skenaarioiden vaikutus tautitaakkaan\n")
tmp <- summary(utility)
oprint(data.frame(
   Altiste = tmp$Exposure_agent,
   Keskiarvo = signif(tmp$mean,2),
  "95 luottamusväli" = paste0(signif(tmp$Q0.025,2)," - ", signif(tmp$Q0.975,2)),
  Keskihajonta = signif(tmp$sd,2)
)[rev(match(lev, tmp$Exposure_agent)),])
 
dodge <- position_dodge(width=0.7)


ggplot(tmp, aes(x=Exposure_agent, weight=Mean,fill=Scenario))+
ggplot(summary(oapply(BoDattr[BoDattr$Scenario=="BAU",],NULL,sum,"Age")),
   geom_bar(position="dodge")+coord_flip()+theme_gray(base_size=24)+
      aes(x=Exposure_agent, weight=unlist(mean), fill=Response))+geom_bar()+
   theme(legend.position = "bottom")+
   labs(
   labs(
    title="Eri tekijöiden tautitaakka Suomessa",
  title="Elintarvikkeiden tautitaakkoja Suomessa",
    y="Haittapainotettua elinvuotta (DALY/a)",
  subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
    x="Altiste"
coord_flip()
  )+
  geom_errorbar(aes( ymin=Q025, ymax=Q975),position="dodge")


#ggsave("Ruori-tautitaakat.png",width=10,height=6)
ggplot(summary(oapply(BoDattr, NULL, sum,c("Age","Response"))),
      aes(x=Exposure_agent, weight=unlist(mean), fill=Scenario))+geom_bar(position="dodge")+
  coord_flip(ylim=c(0,70000))+
  labs(
    title="Elintarvikeperäisiä tautitaakkoja Suomessa",
    subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
  geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975),group=Scenario),position=dodge, width=0.3)+
  geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.975)+5000, group=Scenario), position=dodge)


# Utility of actions
# Utility of actions


tmp <-  oapply(utility, NULL, mean,c("Iter","Age"))@output
ggplot(summary(utility),aes(x=Exposure_agent, weight=unlist(mean)))+geom_bar(fill="lightblue")+
colnames(tmp)[colnames(tmp)=="Result"] <- "Mean"
  coord_flip(ylim=c(-9000,0))+
tmp <- merge(
  tmp,
  oapply(utility, NULL, function(x) quantile(x, 0.025),c("Iter","Age"))@output
)
colnames(tmp)[colnames(tmp)=="Result"] <- "Q025"
tmp <- merge(
  tmp,
  oapply(utility, NULL, function(x) quantile(x, 0.975),c("Iter","Age"))@output
)
colnames(tmp)[colnames(tmp)=="Result"] <- "Q975"
 
ggplot(tmp, aes(x=Exposure_agent, weight=Mean,fill=Response))+
  geom_bar(position="dodge")+coord_flip()+theme_gray(base_size=24)+
   labs(
   labs(
    title="Tautitaakan vähennys skenaarioissa",
  title="Ruori-skenaarioiden vaikutus tautitaakkaan",
    y="Haittapainotettua elinvuotta (DALY/a)",
  subtitle="Haittapainotettua elinvuotta vuodessa (DALY/a)")+
    x="Altiste"
   geom_errorbar(aes(ymin=unlist(Q0.025),ymax=unlist(Q0.975)), width=0.3)+
  )+
  geom_text(aes(label=signif(unlist(mean),2), y=unlist(Q0.025)-600))
   geom_errorbar(aes( ymin=Q025, ymax=Q975),position="dodge")
 
#ggsave("Ruori-toimenpideiden vaikutus.png",width=10,height=6)
</rcode>
</rcode>


==== Dioksiiniskenaario ====
==== Dioksiini- ja muu valmistelu ====


* Malliajo 13.6.2019 [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=jzA0GmAvApVUdodr]
* Linkit vanhempiin ajoihin löytyvät [http://fi.opasnet.org/fi-opwiki/index.php?title=Ruori&oldid=35883#Dioksiiniskenaario arkistosta].
* Malliajo 14.6.2019 [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=k39kYXgQEAIirFfE] [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=ecs2er0vlUEaaCNb]
* Malliajo 18.6.2019 toimii omalla koneella [http://fi.opasnet.org/fi-opwiki/index.php?title=Toiminnot:RTools&id=PRqtiUhfxvL0V8hK]


<rcode name="dioxin" graphics=1>
<rcode name="prepare" graphics=1>
# This is code Op_fi5889/dioxin on page [[Ruori]]
# This is code Op_fi5889/prepare on page [[Ruori]]


library(OpasnetUtils)
library(OpasnetUtils)
Rivi 423: Rivi 638:
rm(list=ls(envir = openv),envir=openv)
rm(list=ls(envir = openv),envir=openv)


openv.setN(1000)
openv.setN(10000)
 
##############################
 
# Pb exposure in children
# Data feched from \\helfs01.thl.fi/documents/YMAL/Projects/TUORI/tautitaakka/lyijy/Lyijy_tautitaakkadata.xlsx
 
# Pb <- re#ad.csv("clipboard",sep="\t",dec=",")
# ggplot(Pb, aes(x=Pb, fill=as.character(Age)))+geom_density(alpha=0.5)
 
 
# Population data
 
if(FALSE) {
  # Read population data 2018 from Statistics Finland
  #vae <- re#ad.csv("https://pxnet2.stat.fi:443/PXWeb/sq/ac3373d0-e303-4c67-b32a-73c6d26df809", skip=2)
  #vae$Ikä <- as.numeric(gsub(" -","",as.character(vae$Ikä)))
 
  cat("Ages 1, 25-64, 65-74, 25-29, 70+, Total population, 0, 1+, Female 18-45, Non female 18-45\n")
  c(
    sum(vae$X2018[vae$Ikä==1]), # Age 1
    sum(vae$X2018[vae$Ikä>=25 & vae$Ikä <65]), # Age 25-64
    sum(vae$X2018[vae$Ikä>=65 & vae$Ikä <75]), # Age 65-74
    sum(vae$X2018[vae$Ikä>=25 & vae$Ikä <70]), # Age 25-69
    sum(vae$X2018[vae$Ikä>=70 & vae$Ikä <101]), # Age 70+
    sum(vae$X2018), # Total population
    sum(vae$X2018[vae$Ikä==0]), # Age 0
    sum(vae$X2018[vae$Ikä>=1]), # Age 1+
    sum(vae$X2018[vae$Ikä>=18 & vae$Ikä <46 & vae$Sukupuoli=="Naiset"]), #Female 18-45
    sum(vae$X2018[!(vae$Ikä>=18 & vae$Ikä <46 & vae$Sukupuoli=="Naiset")]) #Non female 18-45
  )
}
 
##########################3


dat <- opbase.data("Op_fi5889", subset="Malliparametrit")[-1]
dat <- opbase.data("Op_fi5889", subset="Malliparametrit")[-1]
Rivi 456: Rivi 704:
objects.latest("Op_en2031", code_name="initiate") # [[Exposure-response function]] subgrouping
objects.latest("Op_en2031", code_name="initiate") # [[Exposure-response function]] subgrouping


if(FALSE) {
###### Concentration data
  objects.latest("Op_en7748",code_name="hia") # [[Goherr assessment]]
 
 
objects.latest("Op_en3104", code_name="preprocess") # [[EU-kalat]]") eu2
  goherr <- c(
 
    "addexposure",  "agel",  "amount",  "amountRaw",  "assump",  "BF",  "bgexposure",
# Get a lognormal concentration distribution for each fish species using same sd and individual means
    "binoptest",  "BoD",  "BoDcase",  "BoDpaf",  "BoDRaw",  "BoDt",  "BW",  "casesabs",
 
    "casesrr",  "ColBoDpaf",  "ColBW",  "Colcasesabs",  "Colcasesrr",  "Colconc",
conc <- Ovariable(
    "Coleffrecomm",  "ColexpoRaw",  "CollapseTableParser",  "conc",  "conc_mehg",
  "conc",
    "conc_pcddf",  "conc_vit",  "conc.param",  "countryl",  "Decamount",  "Decbgexposure",
  dependencies=data.frame(Name=c("eu2")),
    "Decconc",  "Deceffinfo",  "Deceffrecomm",  "deci",  "decsel",  "Decsizes",
  formula = function(...) {
    "Dectime",  "disabilityweight",  "dose",  "dummy",  "duration",  "dx.expo.child",
     out <- (oapply(eu2[eu2$Compound %in% c("PCDDF", "PCB") , ], NULL, sum, "Compound"))
     "effinfo", "effrecomm", "ERF", "ERF_diox", "ERF_env", "ERF_mehg",  "ERF_omega3",
     out <- oapply(log(out), c("Fish","eu2Source"), mean)
     "ERF_vit", "ERFchoice", "expoRaw",  "exposure",  "f_ing",  "f_mtoc",  "fisl",
     result(out) <- paste(result(out), oapply(out, c("eu2Source"), sd)$eu2Result, sep="+-")
     "frexposed", "genderl", "Hg", "incidence", "info",  "jsp",  "lengt",  "margi",
     out <- out@output[colnames(out@output)!="eu2Source"]
     "mc2d",  "mc2dparam",  "much",  "muchside",  "N",  "often",  "oftenside",
     colnames(out)[colnames(out)=="eu2Result"] <- "Result"
     "ovashapetest",  "population",  "RR",  "samps.j",  "showind",  "showLoctable",
     out$Exposure_agent <- "TEQ"
     "sizes",  "sumExposcen",  "surv",  "survey1",  "t0.5",  "threshold",
     out <- exp(EvalOutput(Ovariable("conc",data=out)))
     "threshold_diox",  "threshold_env",  "threshold_mehg",  "threshold_omega3",
     out$Scenario <- ifelse(out$Fish=="Baltic herring", "BAU","Action")
     "threshold_vit", "time", "vit.param",  "wiki_username"
    return(out)
  )
   }
    
)
  rm(list= goherr[!goherr %in% c("amount", "frexposed", "info", "population")])
}


#tarvitaan uudelleenlaskettuna: expoRaw, dx.expo.child
######## Fish intake data
#tarvitaan valmiiksi laskettuna: amount, frexposed, population, #incidence


objects.latest("Op_en7749", code_name = "initiate") # [[Goherr: Fish consumption study]]
objects.latest("Op_en7749", code_name = "initiate") # [[Goherr: Fish consumption study]]
## Variables assump, often, much, oftenside, muchside, amountRaw, effinfo, effrecomm, amount
## Variables assump, often, much, oftenside, muchside, amountRaw, effinfo, effrecomm, amount


effinfo <- 0
effinfo <- 0 # We are not interested in changes in amount
effrecomm <- 0
effrecomm <- 0


Rivi 492: Rivi 737:
amount@formula <- function(...) {
amount@formula <- function(...) {
   out <- amountOrigFormula(...)
   out <- amountOrigFormula(...)
  out <- out * info[info$Country=="FI",]
   out <- oapply(out[out$Fish=="Herring",], NULL, sum, "Fish")
   out <- oapply(out[out$Fish=="Herring",], NULL, sum, "Fish")
  out <- out * info
   return(out)
   return(out)
}
}
population <- Ovariable(
  "population",
  ddata = "Op_en7748",
  subset = "Population"
)


# Stores non-marginal columns for further use.
# Stores non-marginal columns for further use.
Rivi 509: Rivi 748:
   formula = function(...) {
   formula = function(...) {
     out <- unique(jsp@output[c("Iter","Country","Gender","Ages","Row")])
     out <- unique(jsp@output[c("Iter","Country","Gender","Ages","Row")])
    out <- out[out$Country=="FI",]
    out$Group <- paste(out$Gender, out$Ages)
    out$Group <- ifelse(out$Group=="Female 18-45", out$Group, "Non female 18-45")
     out$Result <- 1
     out$Result <- 1
     return(out)
     return(out)
   }
   }
)
)
frexposed <- Ovariable(
  "frexposed",
  dependencies = data.frame(Name = c("jsp","exposure","info")),
  formula = function(...) {
    out <- merge(
      unique(jsp@output[c("Gender", "Ages", "Country", "Iter")]),
      unique(exposure@output["Exposure"])
    )
    out$Result <- ifelse(
      out$Exposure == "To child",
      ifelse(
        out$Gender == "Female" & out$Ages == "18-45",
        0.1, # Probability of birth during a year.
        0
      ),
      1
    )
    out$Result[is.na(out$Result)] <- 1
    return(info * Ovariable(output=out))
  }
)
objects.latest("Op_en2031", "initiate") # [[Exposure-response function]] ERF, threshold
ERFOrigFormula <- ERF@formula # Update column Exposure)
ERF@formula <- function(...) {
  out <- ERFOrigFormula(...)
  out$Exposure <- as.factor(ifelse(
    out$Exposure %in% c(
      "Maternal intake through placenta",
      "Maternal ingested intake",
      "Intake through placenta and mother's milk"
    ),
    "To child",
    "To eater"
  ))
  return(out)
}
thresholdOrigFormula <- threshold@formula # Update column Exposure)
threshold@formula <- function(...) {
  out <- thresholdOrigFormula(...)
  out$Exposure <- as.factor(ifelse(
    out$Exposure %in% c(
      "Maternal intake through placenta",
      "Maternal ingested intake",
      "Intake through placenta and mother's milk"
    ),
    "To child",
    "To eater"
  ))
  return(out)
}


expo_bg <- 0
expo_bg <- 0
Rivi 587: Rivi 775:
       )
       )
     )
     )
    out@marginal[colnames(out@output)=="Exposcen"]<- TRUE
     return(out)
     return(out)
   }
   }
)
)


#objects.latest("Op_en7749", "initiate") # [[Goherr: Fish consumption study]] amount and upstream
### mc2d makes a 2D Monte Carlo with assumed 50 individuals in data. Exposure is their average.
objects.latest("Op_en7797", "expo_indir") # [[Infant's dioxin exposure]] # expo_indir


exposure <- Ovariable(
exposure <- Ovariable(
   "exposure",
   "exposure",
   dependencies = data.frame(Name = c(
   dependencies = data.frame(
    "expo_dir", # direct exposure, i.e. the person eats or breaths the exposure agent themself
    Name = c(
    "expo_indir" # indirect exposure, i.e. the person (typically fetus or infant) is exposed via someone else (mother)
      "expo_dir", # direct exposure, i.e. the person eats or breaths the exposure agent themself
   )),
      "expo_indir", # indirect exposure, i.e. the person (typically fetus or infant) is exposed via someone else (mother)
      "mc2d" # 2D Monte Carlo function
    ),
    Ident = c(
      NA,
      "Op_en7797/expo_indir", # [[Infant's dioxin exposure]] # expo_indir
      "Op_en7805/mc2d") # [[Two-dimensional Monte Carlo]]
   ),
   formula = function(...) {
   formula = function(...) {
     out <- combine(expo_dir, expo_indir)
     out <- combine(expo_dir, expo_indir)
     return(out) #
    out <- unkeep(out, "Source.1", sources=TRUE)
    out <- mc2d(out)
     return(out)
   }
   }
)
)
exposure@meta <- c(
exposure@meta <- c(
   exposure@meta,  
   exposure@meta,  
   list(units = "PCDDF, PCB, TEQ: pg /day; Vitamin D, MeHg: µg /day; DHA, EPA, Omega3: mg /day")
   list(units = "To eater: pg /day; to child: pg /g fat")
)
)


domfish <- Ovariable(
mc2dparam<- list(
   "domfish",
  N2 = 1000, # Number of iterations in the new Iter
   ddata = "Op_en7749", subset="Fish consumption as food in Finland"
  strength = 50, # Sample size to which the fun is to be applied. Resembles number of observations
  run2d = TRUE, # Should the mc2d function be used or not?
  info = info, # Ovariable that contains additional indices, e.g. newmarginals.
   newmarginals = c("Group","Exposure"), # Names of columns that are non-marginals but should be sampled enough to become marginals
   method = "bootstrap", # which method to use for 2D Monte Carlo? Currently bootsrap is the only option.
  fun = mean # Function for aggregating the first Iter dimension.
)
)
domfish@data <- domfish@data[domfish@data$Origin=="domestic fish" & !domfish@data$Species %in% c(
  "Total", "Farmed rainbow trout","Baltic herring") & domfish@data$Year==2017 ,
  !colnames(domfish@data) %in% c("Origin", "Year")]
colnames(domfish@data)[colnames(domfish@data)=="Species"] <- "Fish"
levels(domfish@data$Fish)[
  match(c("European whitefish", "Pike perch"), levels(domfish@data$Fish))] <- c("Whitefish","Pike-perch")
domfish@data$domfishResult <- domfish@data$domfishResult / sum(domfish@data$domfishResult)


objects.latest("Op_en3104", code_name="preprocess") # [[EU-kalat]]") eu2
exposure <- EvalOutput(exposure,verbose=TRUE)
 
oprint(summary(exposure[exposure$Exposcen=="BAU",], marginals=c("Exposure_agent","Scenario","Group","Exposure")))
oprint(summary(conc))
oprint(summary(amount*info,marginals="Group"))
 
ggplot(conc@output, aes(x=concResult, colour=Scenario))+stat_ecdf()+scale_x_log10()
 
ggplot((info*amount)@output, aes(x=amountResult+0.01, colour=Group))+stat_ecdf()+scale_x_log10()
 
ggplot(info*expo_indir@output, aes(x=expo_indirResult+0.01, colour=Group))+stat_ecdf()+scale_x_log10()+facet_grid(Group~Exposure)
 
ggplot(exposure@output[exposure$Exposcen=="BAU",], aes(x=exposureResult, colour=Scenario))+geom_density()+facet_grid(Group~Exposure)
 
tmp <- summary(exposure[exposure$Exposcen=="BAU",], marginals=c("Scenario","Group","Exposure"))
tmp[4:10] <- as.data.frame(lapply(tmp[4:10], function(x) round(x, 2)))
tmp$out <- paste0(tmp$mean, " (",tmp$Q0.025, " - ", tmp$Q0.975, ")")
oprint(tmp)
tmp$out
 
##############################
 
# Domestic fish consumption. Used to give weights to fish species concentration data
 
tmp <- opbase.data("Op_en7749", subset="Fish consumption as food in Finland")
tmp <- tmp[tmp$Origin=="domestic fish" & !tmp$Species %in% c(
  "Total", "Farmed rainbow trout","Baltic herring", "Other domestic fish") & tmp$Year==2017 ,
  !colnames(tmp) %in% c("Obs","Origin", "Year")]
colnames(tmp)[colnames(tmp)=="Species"] <- "Fish"
levels(tmp$Fish)[
  match(c("European whitefish", "Pike perch"), levels(tmp$Fish))] <- c("Whitefish","Pike-perch")
tmp$Result <- tmp$Result / sum(tmp$Result)
tmp <- merge(unique(eu2@output["Fish"]), tmp, all.x=TRUE)
tmp$Result[is.na(tmp$Result)] <- 0
tmp$Result[tmp$Fish=="Baltic herring"] <- 1 # Baltic herring is on BAU scenario and gets equal weight with others combined
 
cat("Copy these weights to CollapseMarginal table for conc Collapsing.\n")
round(tmp$Result,2)
 
###### This is temporary code that is used to calculate the option "Action" of decision "Scenario".
 
population <- Ovariable("population", data = prepare(dat,"population",c("Type","Exposure_agent","Response","Unit")))
 
reduction <- Ovariable("reduction", data = prepare(dat,"reduction",c("Type","Response")))
 
intake <- Ovariable("intake", data = prepare(dat,"intake",c("Type","Response")))


#eu2 <- EvalOutput(eu2)
recommendation <- Ovariable("recommendation", data = prepare(dat,"recommendation",c("Type","Response")))


# Get a lognormal concentration distribution for each fish species using same sd and individual means
eaters <- Ovariable("eaters", data = prepare(dat,"eaters",c("Type","Response","Unit")))


conc <- Ovariable(
PAF_factor <- Ovariable(
   "conc",
   "PAF_factor",
   dependencies=data.frame(Name=c("eu2","domfish")),
   dependencies=data.frame(Name=c("reduction","intake","recommendation","eaters","population")),
   formula = function(...) {
   formula = function(...) {
     out <- log(oapply(eu2[eu2$Compound %in% c("PCDDF", "PCB") , ], NULL, sum, "Compound"))
     out <- 1 - reduction / (intake - recommendation) * eaters / population
    out <- oapply(out, c("Fish","eu2Source"), mean)
    result(out) <- paste(result(out), oapply(out, c("eu2Source"), sd)$eu2Result, sep="+-")
    out <- out@output[colnames(out@output)!="eu2Source"]
    colnames(out)[colnames(out)=="eu2Result"] <- "Result"
    out$Exposure_agent <- "TEQ"
    out <- exp(EvalOutput(Ovariable("conc",data=out)))
    out <- oapply(out * domfish, NULL, sum, "Fish")
     return(out)
     return(out)
   }
   }
)
)


# case_burden equals disabilityweight * duration
PAF_factor <- EvalOutput(PAF_factor)


case_burden <- Ovariable( # Do we actually need Goherr data here?
ggplot(PAF_factor@output, aes(x=PAF_factorResult, fill=Exposure_agent))+geom_density()+facet_wrap(~Exposure_agent)
  "case_burden",
  ddata = "Op_en7748", # [[Goherr assessment]]
  subset = "DALYs of responses"
)
colnames(case_burden@data)[match(
  c("Resp","case_burdenResult"),
  colnames(case_burden@data))] <- c("Response","Result")


case_burden@data <- orbind(
summary(PAF_factor)
  case_burden@data,
  prepare(dat,"case burden",c("Type","Exposure_agent","Unit"))
)
 
#population <- Ovariable(
#  "population",
#  ddata = "Op_en7748",
#  subset = "Population"
#)


incidence <- 0.1
# The PAF_factor distributions for saturated fat and sodium are NOT normally distributed. Instead, triangular
# distribution seems to be a reasonable fit with parameters:
# Sodium: triangular 0.975 : 0.990 : 0.993
# Saturated fat: triangular 0.911 : 0.944 : 0.971


mc2dparam <- list(run2d=FALSE)
##### Q25 was used when 25 quantiles were estimated. Now we use rnorm estimate.
 
Q25 <- function(x) {
objects.latest("Op_en2261", "BoDattr") # [[Health impact assessment]] BoDattr
  return(round(quantile(x, probs = seq(0.02, 0.98, 0.04)),1))
 
}
#expoRaw <- EvalOutput(expoRaw)
#exposure <- EvalOutput(exposure)
#dose <- EvalOutput(dose)
#casesabs <- EvalOutput(casesabs)
#BoDcase <- EvalOutput(BoDcase)
#RR <- EvalOutput(RR)
#BoDpaf <- EvalOutput(BoDpaf)
#BoDRaw <- EvalOutput(BoDRaw)


BoDattr <- EvalOutput(BoDattr, verbose=TRUE)
summary(exposure[exposure$Exposcen=="BAU",], marginals=c("Exposure","Group","Scenario"), "Q25")


oprint(summary(BoDattr, marginals=c("Exposure_agent","Scenario")))
################ Insight network
oprint(summary(exposure))
oprint(summary(ERF))
#oprint(summary(info))
oprint(summary(BoD,marginals=c("Response","Hepatitis")))
oprint(summary(conc))
oprint(summary(domfish))
oprint(summary(amount,marginals="infoSource"))
oprint(summary(PAF))


gr <- scrape(type="assessment")
gr <- scrape(type="assessment")
Rivi 698: Rivi 902:
#export_graph(gr, "ruori.svg")
#export_graph(gr, "ruori.svg")
render_graph(gr)
render_graph(gr)
</rcode>
==== Maavertailu hygienian ja ravinnon tautitaakasta ====
Koodin ajamiseksi on ensin haettava [http://ghdx.healthdata.org/gbd-results-tool?params=gbd-api-2017-permalink data] IHME-instituutista. Koodi tuottaa kuvan {{#l:Tautitaakka maittain ruokavalio ja hygienia.svg}}.
<rcode graphics=1>
# This is code Op_fi5889& on page Ruori
library(OpasnetUtils)
library(plotly)
library(thlGraphs)
# permalink to IHME data: http://ghdx.healthdata.org/gbd-results-tool?params=gbd-api-2017-permalink/7c1842c34d51287572a49c78b74c4801
dat <- opasnet.csv(
  "/d/d3/IHME-GBD_2017_diet_hygiene_by_country.zip", wiki="opasnet_en",
  unzip="IHME-GBD_2017_DATA-c3ad9a2c-1.csv",
  dec=".", sep=",", header=TRUE, quote="\""
)
tmp <- reshape(
  dat[c("location_name","rei_name","val","upper","lower")],
  v.names=c("val","upper","lower"),
  timevar="rei_name",
  idvar=c("location_name"),
  direction="wide"
)
#colnames(tmp)
#[1] "location_name"                                 
#[2] "val.Unsafe water, sanitation, and handwashing" 
#[3] "upper.Unsafe water, sanitation, and handwashing"
#[4] "lower.Unsafe water, sanitation, and handwashing"
#[5] "val.Dietary risks"                             
#[6] "upper.Dietary risks"                           
#[7] "lower.Dietary risks"                           
colnames(tmp) <- c("Location","Hygiene","Hygupper","Hyglower","Diet","Dietupper","Dietlower")
eng <- c(
  "Finland",
  "Israel",
  "France",
  "Qatar",
  "Taiwan",
  "Indonesia",
  "Guatemala",
  "Papua New Guinea",
  "European Union",
  "United States",
  "Ukraine",
  "Afghanistan",
  "Nigeria",
  "Chad",
  "Brazil"
)
fi <- c(
  "Suomi",
  "Israel",
  "Ranska",
  "Qatar",
  "Taiwan",
  "Indonesia",
  "Guatemala",
  "Papua Uusi-Guinea",
  "EU",
  "USA",
  "Ukraina",
  "Afganistan",
  "Nigeria",
  "Tsad",
  "Brasilia"
)


#BoDcase <- BoDcase*info
tmp$Point <- tmp$Location %in% eng
tmp <- oapply(BoD[BoD$Country=="FI",],NULL,mean,"Iter")@output
tmp$Paikka <- fi[match(tmp$Location,eng)]
tmp$Diettext <- 0.9 * tmp$Diet
tmp$Diettext <- ifelse(tmp$Location=="United States", 1.25 * tmp$Diettext, tmp$Diettext)


ggplot(tmp, aes(x=Country,weight=BoDResult,fill=Response))+
p <- plot_ly() %>%
   geom_bar()#+facet_grid(. ~ Background)
  add_trace(
    x=signif(tmp$Hygiene,3),
    y=~signif(tmp$Diet,3),
    text=tmp$Location,
    name="all countries",
    type="scatter",
    mode="markers",
    marker=list(color=rgb(10,187,239,maxColorValue = 255))
  ) %>%
  add_trace(
    x=~signif(tmp$Hygiene[tmp$Point],3),
    y=signif(tmp$Diet[tmp$Point],3),
    text=tmp$Paikka[tmp$Point],
    name="selected",
    type="scatter",
    mode="markers",
    marker=list(size=10, color=rgb(251,112,29, maxColorValue = 255))
  ) %>%
  add_trace(
    x=~signif(tmp$Hygiene[tmp$Point],3),
    y=signif(0.9*tmp$Diet[tmp$Point],3),
    text=tmp$Paikka[tmp$Point],
    name="selected",
    type="scatter",
    mode="text",
    hoverinfo="skip",
    text=list(color=rgb(251,112,29, maxColorValue = 255))
  ) %>%
  layout(
    xaxis = list(title="Huonon hygienian tautitaakka",type = "log"),
    yaxis = list(title="Huonon ruokavalion tautitaakka",type = "log"),
    title="Tautitaakka maittain ruokavalio- ja hygieniatekijöiden mukaan (DALY/100000 henkilövuotta)",
    showlegend=FALSE
  )
 
#pushIndicatorGraph(p, 191)
 
ggplot() +
  geom_point(data=tmp, aes(x=Hygiene, y=Diet),color=rgb(10,187,239,maxColorValue = 255))+
   geom_point(data=tmp[tmp$Point,], aes(x=Hygiene, y=Diet), color=rgb(251,112,29, maxColorValue = 255),size=4)+
  geom_text(data=tmp[tmp$Point,], size=7, aes(x=Hygiene, y=Diettext, label=Paikka))+#Location))+
  scale_x_log10() + scale_y_log10()+
      thlTheme(x.axis.title = TRUE, base.size=32, y.axis.title.vertical = TRUE)+ # Assumes an adjustment available at github.com/jtuomist/thlGraph
  labs(
    title="Tautitaakka maittain ruokavalio- ja hygieniatekijöiden mukaan",
    subtitle="Tautitaakka (DALY/100000 henkilövuotta)",
    x="Huonon hygienian tautitaakka",
    y="Huonon ruokavalion tautitaakka"
#    title="Burden of disease of dietary and hygiene risk factors by country",
#    subtitle="Burden of disease (DALY/100000 person-years",
#    x="Burden of disease due to poor hygiene",
#    y="Burden of disease due to dietary factors"
  )
 
#ggsave(
#  "Tautitaakka maittain ruokavalio ja hygienia.png",
##  "Burden of disease of diet and hygiene by country.png",
#  width=9.7/0.6, height=4.1/0.6)
</rcode>
</rcode>


==== Tautitaakkakuvia ====
==== Tautitaakkakuvia ====
Kuvat on tehty Ruori-seminaariin 25.4.2019. Uudemmat kuvat löytyvät tuloksista.


<rcode label="Ruori ja tautitaakka -esityksen kuvat (aja omalla koneella)">
<rcode label="Ruori ja tautitaakka -esityksen kuvat (aja omalla koneella)">
Rivi 1 084: Rivi 1 422:


<references/>
<references/>
* Bruce P. Lanphear, Richard Hornung, Jane Khoury, Kimberly Yolton, Peter Baghurst, David C. Bellinger, Richard L. Canfield, Kim N. Dietrich, Robert Bornschein, Tom Greene, Stephen J. Rothenberg, Herbert L. Needleman, Lourdes Schnaas, Gail Wasserman, Joseph Graziano, and Russell Roberts. (2005) Low-Level Environmental Lead Exposure and Children’s Intellectual Function: An International Pooled Analysis. Environmental Health Perspectives. 1 July 2005 https://doi.org/10.1289/ehp.7688
* Johanna Suomi, Pirkko Tuominen, Jukka Ranta, Kirsti Savela. (2015) Riskinarviointi suomalaisten lasten altistumisesta elintarvikkeiden ja talousveden raskasmetalleille. Eviran tutkimuksia 2/2015. [https://www.ruokavirasto.fi/globalassets/tietoa-meista/julkaisut/julkaisusarjat/tutkimukset/riskiraportit/riskinarviointi-suomalaisten-lasten-altistumisesta-elintarvikkeiden-ja-talousveden-raskasmetalleille.pdf]
* EFSA. Lead dietary exposure in the European population. EFSA Journal 2012;10(7):2831 {{doi|10.2903/j.efsa.2012.2831}}


== Katso myös ==
== Katso myös ==


* {{#l:Ruori-hankkeen tautitaakka-arviot.pptx}}
* {{#l:Ruori-hankkeen tautitaakka-arviot.pptx}}
* {{#l:Ruori.zip}} Virallinen Ruori-malliajo, josta on otettu luvut ja kuvat Ruori-loppuraporttiin.

Nykyinen versio 5. syyskuuta 2021 kello 10.03


Ruori on VN-TEAS-hanke, jossa arvioidaan erilaisia ruokaan liittyviä riskitekijöitä, niiden vähentämispotentiaalia ja niiden terveys- ja talousvaikutuksia. Hankkeen loppuraportti on julkaistu 2019.

Rajaus

Kysymys

Millaista tautitaakkaa Suomessa aiheuttavat Ruori-altisteet (tyydyttynyt rasva, vähäiset vihannekset, vähäiset hedelmät, liiallnen suola, dioksiinit, lyijy, aflatoksiini, toksoplasma, norovirus, trikinella ja legionella) ja miten erilaiset vähentämistoimet vaikuttavat?

Aikataulu ja käyttäjät

  • Hanke alkoi 2018 ja loppui 30.6.2019.
  • Toteuttajina ovat Ruokavirasto, THL ja Helsingin yliopisto.
  • Seuraavat skenaariot ovat tarkastelussa:
    • Listeria: mikrobinäytteitä otetaan elintarvikkeiden lisäksi tuotantoympäristöstä.
    • Norovirus: pintapuhtausnäytteitä otetaan suuratalouskeittiöistä ja sellaisenaan syötäviä ruokia valmistavista laitoksista.
    • Toksoplasma: kaikki raskaana olevat tutkitaan toksoplasman varalta.
    • Trikinella: trikinella tutkitaan ainoastaan vientiin menevistä sianruhoista.
    • Vierasesineet: tarkastelusta luovuttiin
    • Aflatoksiini: tuontipähkinöiden valvontanäytteitä lisätään 10 %.
    • Dioksiinit: Itämeren kala vaihdetaan järvikalaan.
    • Lyijy: laihdutusvalmiteisiin ja teejauheisiin aloitetaan tehovalvonta.
    • Hedelmät: poistetaan arvonlisävero kulutuksen lisäämiseksi.
    • Vihannekset: poistetaan arvonlisävero kulutuksen lisäämiseksi.
    • Suola: henkilöstöravintoloissa tarjolla ainoastaan sydänmerkkiaterioita.
    • Tyydyttynyt rasva: henkilöstöravintoloissa tarjolla ainoastaan sydänmerkkiaterioita.

Vastaus

Ravitsemustekijät osoittautuivat huomattavasti tärkeämmiksi tautitaakkaa aiheuttaviksi tekijöiksi kuin ruoassa olevat ympäristömyrkyt. Myös ravitsemukseen vaikuttamalla pystyttiin vaikuttamaan kansanterveyteen enemmän, joskin myös mikrobiriskien vähentämiseen löytyi tehokkaita keinoja. Päätulokset on esitetty kuvissa. Tarkemmat tulokset löytyvät tästä malliajosta.

Pohdinta

Maakohtainen tautitaakan vertailu ruokavalioon ja toisaalta hygieniaan liittyvistä tunnetuista riskitekijöistä. Tiedot: IHME-instituutti.

Kuvassa esitetään maakohtainen kokonaistautitaakka toisaalta tunnettujen ruokavalioon liittyvien riskitekijöiden (poislukien aliravitsemus) ja toisaalta hygieniaan liittyvien riskitekijöiden suhteen. Hygienia sisältää käsienpesun, puhtaan juomaveden ja sanitaation eli siinä ei ole mukana nimenomaan ruokavälitteisiä mikrobeja, mutta se antaa kuitenkin kohtalaisen kuvan mikrobivälitteisistä taudeista maavertailua varten.

On syytä huomata, että asteikot ovat logaritmisia ja ruokavalioriskien suhteen maiden välillä on yli kymmenkertaisia eroja mutta toisaalta hygienian osalta erot voivat olla yli tuhatkertaisia. Suomi on ravitsemuksen suhteen länsieurooppalaista keskikastia mutta hygieniassa maailman parhaiden joukossa. Luvuista saa vertailukelpoisia tämän raportin lukuihin suhteuttamalla niitä Suomen väkilukuun eli kertomalla noin viidelläkymmenellä.

Globaalissa vertailussa voi sanoa, että ravitsemuksen suhteen on selvästi parannettavaa. Jopa tautitaakan puolittaminen vie vasta tasolle, jolla lukuisat maat tällä hetkellä todellisuudessa ovat eli joka on periaatteessa aivan saavutettavissa. Kulttuurin muuttaminen on toki aina vaikeaa, myös ruokakulttuurin.

Sen sijaan hygieniassa ei juuri kukaan ole päässyt parempaan tilanteeseen, joten sillä puolella huomio on syytä kiinnittää tekijöihin, jotka saattavat rapauttaa hyvää nykytilannetta. Esimerkiksi salmonellan osalta Suomen tilanne jopa lähinaapureihin verrattuna on erittäin hyvä, eikä tästä ole syytä luopua. Tosin vaikka romahtaisimme hygieniassa EU:n keskitasolle, absoluuttinen tautitaakan lisäys olisi Suomessa vain suuruusluokkaa 500 DALYa vuodessa. Vastaavan suuruinen parannus olisi helposti saavutettavissa ravitsemuksen puolella.

Ruori-hankkeessa osoittautui yllättävän vaikeaksi löytää tietoa elintarvikevalvonnan vaikutuksesta hygieniaan. Tärkeää olisi pystyä arvioimaan valvonnassa tehtävän muutoksen vaikutusta tautitaakan muutokseen. Hygienian osalta kiinnostus on nimenomaan niin päin, että voidaanko valvontaa keventää ilman kostautumista tautien lisääntymisenä. Tätä tietoa ei järjestelmällisesti synny, koska valvonta on yleensä pakollista ja siksi vaihtoehdosta ei kerry kokemusta.

Tilannetta voisi parantaa kahdella eri tavalla. Ensinnäkin systemaattisesti pitäisi kuvata, mitä tehtiin tilanteessa, jossa havaittiin laatupoikkeama. Tieto pois vedetyistä eristä tai muista toimista auttaa arvioimaan, kuinka suuri haitta onnistuttiin välttämään eli mikä oli valvonnan lisäarvo. Trikinella on tästä mielenkiintoinen ääriesimerkki: koska positiivisia näytteitä ei tule, valvonta ei vaikuta toimintaan vaikka periaatteessa eriä vedettäisiin kontaminaatiotapauksessa pois. Valvonnan arvo kontaminaation vähentämisessä on siis nolla, ja hyöty tulee ainoastaan hyvän maineen säilyttämisen kautta. Muiden mikrobien osalta tällaista tietoa ei Ruorin käytössä ollut, vaikka tietoa elintarviketeollisuudella itsellään olisikin. Tässä ehkä tarvittaisiin yhteistyötä tiedon saamiseksi yhteiskunnan käyttöön.

Toinen tapa on tehdä kokeluja toisaalta tuotantoprosessissa (kalarehuvalmisteiden puhdistamista dioksiineista kokeiltiin aikanaan menestyksekkäästi, joten se on Suomessa nykyään tavallista eikä pitoisuuksien valvonta ei ole kovin tarpeellista) ja toisaalta tehokkaimman valvontapisteen tunnistamisessa (HACCP eli hazard analysis and critical control point on edelleen hyvä käytäntö).

Ruokavalion osalta tilanne on erilainen. Ei ole pelkoa, että jokin ruoka yllättäen sisältäisi enemmän suolaa tai vähemmän hedelmää kuin toisen erän valmiste; terveyteen vaikuttavat tekijät ovat siis hyvin ennakoitavissa ja vakioitu. Haasteet ovat yksilöiden käyttäytymisen ohjailussa niin, että hänen kokonaisruokavalionsa olisi terveellinen. Yksittäisen tuotteen suosiminen tai rajoittaminen ei riitä. Vaikuttamisen keinot kuten verotus myös ovat karkeita eli eivät kohdistu tehokkaasti oikeisiin yksilöihin tai asioihin.

Tässäkin kokeilut voisivat tuottaa uudenlaista lisäarvoa. Kansalaispalkkakokeilu toi suppeudestaan huolimatta arvokasta tietoa siitä, mihin kansalaispalkka vaikuttaa ja mihin ei. Samalla tavalla terveellisen ruoan verokohtelua, sokeriveroa tai sydänmerkkiaterioita ja niiden tehoa ja toimivuutta pitäisi yrittää kokeilujen avulla mitata ja onnistuneita keinoja ottaa laajaan käyttöön. Elintarvike- ja kaupan ala toki tekee jatkuvasti omia kokeilujaan ja lienee varsin hyvin perillä siitä, miten joidenkin tuotteiden myyntiä voidaan lisätä sopivalla sijoittelulla, hinnoittelulla ja pakkauksilla. Tässä tavoitteet vain ovat kansanterveyden kannalta osittain ristiriitaiset. On myös vaikea keksiä, miten nämä liikesalaisuudet voitaisiin saada yhteiskunnan käyttöön terveyden edistämiseksi.

Kun tarkastellaan eri maiden tilannetta ja ruoan ravitsemuksellisia ja hygieenisiä riskejä kokonaisuutena, voidaan tehdä kokoava päätelmä. Valvonta on hyödyllisimmillään eli tieto arvokkaimmillaan silloin, kun toiminnan, raaka-aineiden tai tuotteiden laatu vaihtelee paljon. Silloin valvonnan avulla voidaan tehokkaasti ohjata toimintaa turvallisemmaksi esimerkiksi hylkäämällä saastuneita eriä. Huonon hygienian oloissa tiedetään käsien pesun välttämättömyys ilman mittauksiakin, ja huippuunsa viritetyssä elintarvikeketjussa syntyy kovin vähän hylättävää. Ravitsemuspuolella laadun vaihtelu ei ole elintarvikkeissa vaan ihmisten tavassa käyttää epäterveellisiä tuotteita. Myös ravitsemusriskien kokemisessa ja tietämyksessä lienee erittäin suuria yksilöllisiä eroja. Näiden tutkiminen ja ymmärtäminen auttaisi suunnittelemaan sellaisia kansanterveyttä parantavia toimia, joilla ei kuitenkaan rajoitettaisi liikaa ihmisten mahdollisuuksia syödä myös herkkuja.

Perustelut

Data

Mitä kaikkea kuuluu vähäiseen hedelmien tai vihannesten syöntiin?

  • Vähähedelmäinen ruokavalio: hedelmien kulutus alle 3 annosta päivässä (310 g yhteensä) (sisältää tuoreet, pakastetut, keitetyt, säilötyt ja kuivatut hedelmät mutta ei sisällä hedelmämehuja tai suolaan tai etikkaan säilöttyjä hedelmiä) http://www.healthdata.org/terms-defined. Diet low in fruits: Consumption of less than 3 servings (310 g total) of fruits per day (includes fresh, frozen, cooked, canned, or dried fruit but excludes fruit juices and salted or pickled fruits).
  • Vähävihanneksinen ruokavalio: vihannesten kulutus alle 4 annosta (400 g yhteensä) (sisältää tuoreet, pakastetut, keitetyt, säilötyt ja kuivatut vihannekset mukaan lukien palkokasvit mutta ei sisällä suolaan tai etikkaan säilöttyjä vihanneksia eikä pähkinöitä, siemeniä tai tärkkelyspitoisia vihanneksia kuten perunaa tai maissia). Diet low in vegetables: Consumption of less than 4 servings (400 g total) of vegetables per day (includes fresh, frozen, cooked, canned, or dried vegetables including legumes but excluding salted or pickled, juices, nuts and seeds, and starchy vegetables such as potatoes or corn).

Luken tilastoista löytyy tietoja kalansyönnistä Suomessa. Järvikalaa ei ole eritelty, mutta muut kuin viljellyt ja merilajit ovat yhteensä 2.6 kg/a henkeä kohti. [3]. Kalansyöntidatat löytyvät myös Opasnetistä op_en:Goherr: Fish consumption study.

Voiko DALYt muuntaa euroiksi, ja miten se tehdään?

  • Drake ehdottaa globaalin arvon päättämistä DALYn hinnaksi, samaan tapaan kuin 1,25 dollarin alittava päivätulo on määritelty absoluuttiseksi köyhyydeksi. Tällöin kaikki tuota hintaa kustannustehokkaammat toimet kannattaisi tehdä joko kansallisin, tai jos se ei jostain syystä onnistu, kansainvälisin toimin. Hän ei kuitenkaan ehdota suuruutta tälle hinnalle.[1]
  • Brent on analysoinut implisiittisiä hintoja DALYlle Global Fund for AIDS, Tuberculosis, and Malaria -säätiön rahoituspäätöksistä. DALYn hinta näyttää olevan 6300 USD kaikille taudeille keskimäärin, ja 11900 USD erityisesti HIV/AIDSille[2]. Globaalit luvut ovat toki pienemmät kuin mitä rikkaissa länsimaissa katsottaisiin aiheelliseksi käyttää.
  • Erilaisista arvioinneista löytyy vaihtelevia lukuja yhden DALYn rahalliselle hinnalle. Esimerkiksi IOMin Shecan-projekti käytti arvoa 50393 €/menetetty elinvuosi[3], ja IGCB(N)-meluarviointiryhmä käyttää arvoa 60000 GBP/QALY (laatupainotettu elinvuosi) mutta samalla toteaa, että eri arvioinneissa arvot voivat vaihdella välillä 29000 - 130000 GBP/QALY[4][5].
  • Berryn ja Flindellin mukaan Isossa-Britanniassa käytäntö on muodostunut sellaiseksi, että lääkkeet tai muut lääketieteelliset toimenpiteet saavat kansallisessa terveysjärjestelmässä helposti puollon, jos ne tuottavat yhden terveen elinvuoden alle 20000 GBP:n kustannuksilla. Tyypillisesti toteutetaan hankkeita tasolla 30000 GBP/QALY, mutta hankkeilta hinnaltaan yli 50000 GBP/QALY vaaditaan erityisiä perusteluja[6].
  • Toisaalta Hammitt todistelee, että hinta per tilastollinen elämä (value per statistical life, VSL) ja hinta per DALY muuttuvat epälineaarisesti suhteessa toisiinsa, eikä näin ollen olisi mahdollista käyttää hyvinvointimuutoksen mittarina vakiolla kerrottua DALY-arvoa, ainakaan taloudellisen hyvinvointiteorian (economic welfare theory) puitteissa.[7]

Pitoisuusanalyysien kustannukset on poistettu tästä.

Trikiinin valvontakustannukset: Tämän artikkelin mukaan trikiinin DALYt ovat vain luokkaa 100 DALY/miljardi ihmistä, joten valvonta ei ole mielekästä[8].

Skenaarioista

Tyydyttyneen rasvan ja suolan osalta tarkastellaan sydänmerkkiaterioita. Oletetaan, että kaikki lounasruokaloiden ateriat muuttuvat sydänmerkkiaterioiksi. Väestön suuruudeksi oletetaan nykyinen lounaspaikkaruokailijoiden päivittäinen määrä eli 279000, ja heille oletetaan pysyvä muutos ruokavalioon.

Kun ei murehdita altistusjakaumasta, voidaan keskimääräisestä saannista vähentää vähennys, ja tämä muutos kohdennetaan vain 25-69-vuotiaaseen alaryhmään (jos alaryhmä on kyseiselle vasteelle määritelty). Skenaariossa kerrotaan PAF luvulla, joka saa arvon 1 nykyisellä altistuksella ja arvon 0 suosituksen mukaisella arvolla. Tätäitä laimennetaan altistujien osuudella. Niinpä käytetään tätä kaavaa kertoimen laskemiseksi:

PAF_factor = 1-(reduction / (intake-recommendation)) * eaters / population

Suola:

Sydänmerkki vähensi 2016 suolan saantia 1 g/d eli 4.2-5.2 g/vk eli 10 %. Tässä oletetaan 3.3-5.1 g/vk vähennys eli 0.471 - 0.729 g/d myös viikoloput huomioiden. Jula (2011) arvioi, että 1 g/d vähennys koko väestössä alentaa kustannuksia 70 Me/a. (Tarkista onko tautitaakkaa!)

Suositus on enintään 5 g/d. Nykysaanti (Valsta 2018) on miehillä 8.7 g/d ja naisilla 6.4 g/d ja tätä käytetään tasajakaumana koko väestölle, koska sukupuolia ei tarkastella erikseen.

Rasva:

Sydänmerkkiateria vähensi saantia 14 E%:sta 10 E%:iin. Tässä oletetaan, että vähennys on 22.0-58.1 g/vk.

Suositus on enintään 10 E%.

Valsta (2018): Tyydyttyneiden rasvahappojen osuus kokonaisenergiasta oli naisilla 14 % (28 g/vrk) ja miehillä 15 % (38 g/vrk). Naisilla muuntosuhde on 2 g /d /E% ja miehillä 2.53 g /d /E%, käytetään 2.25 g /d /E%. Grammamääräinen altistus on muutettava energiaosuudeksi.

22.0-58.1 g/vk / (7d/vk) / (2.25 g /d /E%) = 1.397 - 3.689 E%

Näiden tietojen avulla lasketaan PAF-kertoimen jakauma, joka sijoitetaan päätöstauluun päätöksenä Scenario ja vaihtoehtona Action.

Malliparametrit

Malliparametrit saat näkyviin klikkaamalla.



Laskenta

Yleiskuva terveysvaikutusten laskentamallista.

Keskeiset tulosteet

  • Malliajo 5000 iteraatiota 11.8.2019 [4]

+ Näytä koodi

Arviointimallin alustus

  • Linkit vanhempiin ajoihin arkistosta.
  • Malliajo 10.8.2019 toksoplasma korjattu. Stored-versio [5]

+ Näytä koodi

Dioksiini- ja muu valmistelu

  • Linkit vanhempiin ajoihin löytyvät arkistosta.
  • Malliajo 18.6.2019 toimii omalla koneella [6]

+ Näytä koodi

Maavertailu hygienian ja ravinnon tautitaakasta

Koodin ajamiseksi on ensin haettava data IHME-instituutista. Koodi tuottaa kuvan Tautitaakka maittain ruokavalio ja hygienia.

+ Näytä koodi

Tautitaakkakuvia

Kuvat on tehty Ruori-seminaariin 25.4.2019. Uudemmat kuvat löytyvät tuloksista.

+ Näytä koodi

Viitteet

  1. Drake T. (2014) Priority setting in global health: towards a minimum DALY value. Health Economics Letter 23:2:248-252. https://doi.org/10.1002/hec.2925
  2. Brent RJ. (2011) An implicit price of a DALY for use in a cost-benefit analysis of ARVs. Applied Economics 43:11:1413-1421. https://doi.org/10.1080/00036840802600475
  3. Minstry R. (2011) Methodology for valuing health impacts on the SHEcan project. IOM Research Project P937/96. http://ec.europa.eu/social/BlobServlet?docId=10178&langId=en
  4. The Interdepartmental Group on Costs and Benefits Noise Subject Group. (2014) Environmental Noise: Valuing impacts on sleep disturbance, annoyance, hypertension, productivity and quiet. https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/380852/environmental-noise-valuing-imapcts-PB14227.pdf
  5. The Interdepartmental Group on Costs and Benefits Noise Subject Group (IGCB(N)). (2010) Noise & Health – Valuing the Human Health Impacts of Environmental Noise Exposure. https://khub.net/c/document_library/get_file?uuid=6a229977-e27a-43c5-a780-e224649bd2df&groupId=6197021
  6. Berry BF, Flindell IH. (2009) Estimating Dose-Response Relationships between Noise Exposure and Human Health Impacts in the UK. BEL Technical Report 2009-002. https://webarchive.nationalarchives.gov.uk/20130123222353/http://archive.defra.gov.uk/environment/quality/noise/igcb/documents/tech-report.pdf
  7. Hammitt, J.K. (2013) Admissible utility functions for health, longevity, and wealth: integrating monetary and life-year measures. J Risk Uncertain 47: 311. https://doi.org/10.1007/s11166-013-9178-4
  8. Brecht Devleesschauwer, Nicolas Praet, Niko Speybroeck, Paul R. Torgerson, Juanita A. Haagsma, KrisDe Smet, K. Darwin Murrell, Edoardo Pozio, Pierre Dorny. (2015) The low global burden of trichinellosis: evidence and implications. International Journal for Parasitology 45, 2–3, 95-99. [1] [2]
  • Bruce P. Lanphear, Richard Hornung, Jane Khoury, Kimberly Yolton, Peter Baghurst, David C. Bellinger, Richard L. Canfield, Kim N. Dietrich, Robert Bornschein, Tom Greene, Stephen J. Rothenberg, Herbert L. Needleman, Lourdes Schnaas, Gail Wasserman, Joseph Graziano, and Russell Roberts. (2005) Low-Level Environmental Lead Exposure and Children’s Intellectual Function: An International Pooled Analysis. Environmental Health Perspectives. 1 July 2005 https://doi.org/10.1289/ehp.7688
  • Johanna Suomi, Pirkko Tuominen, Jukka Ranta, Kirsti Savela. (2015) Riskinarviointi suomalaisten lasten altistumisesta elintarvikkeiden ja talousveden raskasmetalleille. Eviran tutkimuksia 2/2015. [7]
  • EFSA. Lead dietary exposure in the European population. EFSA Journal 2012;10(7):2831 doi

Katso myös