Ero sivun ”Radonin terveysvaikutukset” versioiden välillä
(→Laskenta: korjattu ja viilattu. Toimii.) |
(→Laskenta: yleiset ovariablet käännetty englanniksi) |
||
Rivi 154: | Rivi 154: | ||
### VÄESTÖN LASKENTA | ### VÄESTÖN LASKENTA | ||
population <- Ovariable("population", | |||
dependencies = data.frame(Name = c("kunnat", "asuntovaesto", "aluevastaavuus", "tupakointi")), | dependencies = data.frame(Name = c("kunnat", "asuntovaesto", "aluevastaavuus", "tupakointi")), | ||
formula = function(...) { | formula = function(...) { | ||
Rivi 172: | Rivi 172: | ||
objects.latest('Op_fi2759', code_name = 'alusta') # [[Radon sisäilmassa]], ovariable radonpit, data.frame radon. | objects.latest('Op_fi2759', code_name = 'alusta') # [[Radon sisäilmassa]], ovariable radonpit, data.frame radon. | ||
radon$ | radon$Pollutant <- "Radon" # Uusi sarake kuvaamaan sitä, minkä altisteen altistumisesta tai riskistä on kyse ko. rivillä. | ||
Rivi 178: | Rivi 178: | ||
tupakkaaltistus <- Ovariable("tupakkaaltistus", | tupakkaaltistus <- Ovariable("tupakkaaltistus", | ||
data = data.frame(Tupakoija = c("Kyllä", "Ei"), | data = data.frame(Tupakoija = c("Kyllä", "Ei"), Pollutant = "Tupakka", Result = c(1, 0)) | ||
) | ) | ||
Rivi 185: | Rivi 185: | ||
radonpit <- EvalOutput(radonpit, N = N) | radonpit <- EvalOutput(radonpit, N = N) | ||
exposure <- Ovariable("exposure", | |||
dependencies = data.frame(Name = c("tupakkaaltistus", "radonpit")), | dependencies = data.frame(Name = c("tupakkaaltistus", "radonpit")), | ||
formula = function(...) { | formula = function(...) { | ||
Rivi 204: | Rivi 204: | ||
ERF <- Ovariable("ERF", data = data.frame( | ERF <- Ovariable("ERF", data = data.frame( | ||
Primaaripaikka = "Keuhkot, henkitorvi", # ICD.10.koodi == "C33-34" | Primaaripaikka = "Keuhkot, henkitorvi", # ICD.10.koodi == "C33-34" | ||
Pollutant = c("Radon", "Tupakka"), | |||
Result = c(1.0016, 20) | Result = c(1.0016, 20) | ||
)) | )) | ||
bkgrexposure <- 0 # Radonille voisi olla 5. | |||
### SYÖPÄKUOLLEISUUS | ### SYÖPÄKUOLLEISUUS | ||
Rivi 214: | Rivi 214: | ||
objects.latest('Op_fi3912', code_name = 'alusta') # [[Syöpäkuolleisuus Suomessa]], ovariable syopakuolleisuus. | objects.latest('Op_fi3912', code_name = 'alusta') # [[Syöpäkuolleisuus Suomessa]], ovariable syopakuolleisuus. | ||
syopakuolleisuus@data <- | disincidence <- syopakuolleisuus | ||
disincidence@name <- "disincidence" | |||
disincidence@data <- disincidence@data[disincidence@data$Primaaripaikka == "Keuhkot, henkitorvi" , ] | |||
# ICD.10.koodi == "C33-34" | # ICD.10.koodi == "C33-34" | ||
###### OSA 3: TAUTIKUORMA | ###### OSA 3: TAUTIKUORMA | ||
### | ### ESTIMATES OF ATTRIBUTABLE CASES BASED ON ATTRIBUTABLE FRACTION | ||
# We estimate the number of cases and their attributable causes based on [[Population attributable fractions]]. | |||
# | |||
# | #popfraction <- 1 # We don't need the fraction of exposed population, because exposure distribution is | ||
# calculated for each population subroup separately. If there are unexposed people, they are already included | |||
# in the exposure distribution. | |||
totcases <- Ovariable("totcases", # This calculates the total number of cases in each population subgroup. | |||
dependencies = data.frame(Name = c(" | # The cases are NOT attributed to specific (combinations of) causes. | ||
dependencies = data.frame(Name = c( | |||
"population", # Population divided into subgroups as necessary | |||
"disincidence", # Incidence of the disease of interest | |||
"ERF", # Exposure-response function of the pollutants or agents | |||
"exposure", # Exposure to the pollutants | |||
"bkgrexposure" | |||
)), # Background exposure (a level below which you cannot get in practice) | |||
formula = function(...) { | formula = function(...) { | ||
# | # Calcualte the risk ratio to each subgroup based on the exposure in that subgroup. | ||
# Combine pollutant-specific RRs by multiplying. | |||
RR <- unkeep(exp(log(ERF) * (exposure - bkgrexposure)), prevresults = TRUE, sources = TRUE) | |||
RR <- oapply(RR, cols = "Pollutant", FUN = prod) | |||
# Remove redundant columns. | |||
population@output <- dropall(population@output) | |||
population <- unkeep(population, sources = TRUE, prevresults = TRUE) | |||
disincidence <- unkeep(disincidence, sources = TRUE, prevresults = TRUE) | |||
# takeout is a vector of column names of indices that are NOT in the disease incidence. | |||
takeout <- setdiff( | |||
colnames(population@output)[population@marginal], | |||
colnames(disincidence@output)[disincidence@marginal] | |||
) | |||
# | # pci is the proportion of cases across different population subroups based on differential risks and | ||
# | # population sizes. pci sums up to 1 for each larger subgroup found in disincidence. | ||
# | # See [[Population attributable fraction]]. | ||
pci <- unkeep(population * RR, prevresults = TRUE, sources = TRUE) | |||
pci <- pci / oapply(pci, cols = takeout, FUN = sum) | |||
# | population <- oapply(population, cols = takeout, FUN = sum) # Aggregate to larger subgroups. | ||
population@output <- population@output[!is.na(result(population)) , ] # Not sure if this is necessary. | |||
# pci | # The cases are divided into smaller subgroups based on weights in pci. | ||
# Redundant columns are removed because totcases are used within attrcases which has same columns. | |||
out <- disincidence * population * pci | |||
# | |||
out <- | |||
out <- unkeep(out, sources = TRUE, prevresults = TRUE) | out <- unkeep(out, sources = TRUE, prevresults = TRUE) | ||
Rivi 265: | Rivi 273: | ||
) | ) | ||
attrcases <- Ovariable("attrcases", # Cases attributed to specific (combinations of) causal exposures. | |||
dependencies = data.frame(Name = c("ERF", " | dependencies = data.frame(Name = c( | ||
"ERF", # Exposure-response function | |||
"exposure", # Total exposure to an agent or pollutant | |||
"bkgrexposure", # Background exposure to an agent (a level below which you cannot get in practice) | |||
"population", # Population of concern, divided into subgroups as necessary | |||
"totcases" # Total (i.e., not attributed to causes) amount of cases within population subgroups | |||
)), | |||
formula = function(...) { | formula = function(...) { | ||
# | # First calculate risk ratio and remove redundant columns because they cause harm when operated with itself. | ||
RR <- unkeep(exp(log(ERF) * ( | RR <- unkeep(exp(log(ERF) * (exposure - bkgrexposure)), prevresults = TRUE, sources = TRUE) | ||
PAF <- (RR - 1) / RR | PAF <- (RR - 1) / RR | ||
# pollutants is a vector of pollutants considered. | |||
pollutants <- unique(exposure@output$Pollutant) | |||
pollutants <- levels(pollutants)[pollutants] | |||
out <- 1 | out <- 1 | ||
for(i in 1:length( | for(i in 1:length(pollutants)) { | ||
# | # Attributable fraction of a particular pollutant is combined with all pollutant AFs. | ||
# 2^n | # The combination has 2^n rows (n = number of pollutants). Pollutant is either + or - depending on | ||
# whether it caused the disease or not. | |||
temp <- Ovariable(data = data.frame( | temp <- Ovariable(data = data.frame( | ||
Pollutant = pollutants[i], | |||
Temp1 = c(paste( | Temp1 = c(paste(pollutants[i], "-", sep = ""), paste(pollutants[i], "+", sep = "")), | ||
Result = c(-1, 1) # | Result = c(-1, 1) # Non-causes are temporarily marked with negative numbers. | ||
)) | )) | ||
temp <- temp * PAF | temp <- temp * PAF | ||
# | # Non-causes are given the remainder (1-AF) of attributable fraction AF. | ||
result(temp) <- ifelse(result(temp) > 0, result(temp), 1 + result(temp)) | result(temp) <- ifelse(result(temp) > 0, result(temp), 1 + result(temp)) | ||
# | # Causes with 0 AF are marked 1. This must be corrected. | ||
result(temp) <- ifelse(result(temp) == 1 & grepl("\\+", temp@output$Temp1), 0, result(temp)) | result(temp) <- ifelse(result(temp) == 1 & grepl("\\+", temp@output$Temp1), 0, result(temp)) | ||
out <- out * temp | out <- out * temp | ||
out <- unkeep(out, cols = " | out <- unkeep(out, cols = "Pollutant", sources = TRUE, prevresults = TRUE) | ||
# Combine and rename columns. | |||
if(i == 1) { | if(i == 1) { | ||
colnames(out@output)[colnames(out@output) == "Temp1"] <- "Causes" | colnames(out@output)[colnames(out@output) == "Temp1"] <- "Causes" | ||
Rivi 306: | Rivi 322: | ||
} | } | ||
out <- | out <- totcases * out | ||
return(out) | return(out) | ||
Rivi 312: | Rivi 328: | ||
) | ) | ||
###################### ACTUAL MODEL | |||
attrcases <- EvalOutput(attrcases) | |||
####################### OUTPUT GRAPHS AND TABLES | |||
oprint(head( | oprint(head(attrcases@output)) | ||
ggplot( | ggplot(attrcases@output, aes(weight = attrcasesResult / N, x = Causes, fill = Talotyyppi)) + | ||
geom_bar(position = 'dodge') | geom_bar(position = 'dodge') | ||
ggplot( | ggplot(attrcases@output, aes(weight = attrcasesResult / N, x = Causes, fill = Tupakoija)) + | ||
geom_bar(position = 'dodge') | geom_bar(position = 'dodge') | ||
ggplot( | ggplot(attrcases@output, aes(weight = attrcasesResult / N, x = Causes, fill = Maakunta)) + | ||
geom_bar(position = 'stack') | geom_bar(position = 'stack') | ||
if(verbose) { | if(verbose) { | ||
cat("Väestö\n") | cat("Väestö\n") | ||
print(nrow( | print(nrow(population@output)) | ||
oprint(head( | oprint(head(population@output)) | ||
cat("Kunnat\n") | cat("Kunnat\n") | ||
print(nrow(kunnat@output)) | print(nrow(kunnat@output)) | ||
Rivi 343: | Rivi 363: | ||
cat("Altistus\n") | cat("Altistus\n") | ||
print(nrow( | print(nrow(exposure@output)) | ||
oprint(head( | oprint(head(exposure@output)) | ||
cat("ERF\n") | cat("ERF\n") | ||
Rivi 354: | Rivi 374: | ||
cat("Syöpäkuolleisuus\n") | cat("Syöpäkuolleisuus\n") | ||
print(nrow( | print(nrow(disincidence@output)) | ||
oprint(head( | oprint(head(disincidence@output), digits = 6) | ||
cat("Kokonaisvaikutus PAF-menetelmällä\n") | cat("Kokonaisvaikutus PAF-menetelmällä\n") | ||
print(nrow( | print(nrow(attrcases@output)) | ||
oprint(head( | oprint(head(attrcases@output)) | ||
} | } | ||
ggplot(attrcases@output, aes(weight = attrcasesResult, x = Tupakoija, fill = Talotyyppi)) + geom_bar(position = "dodge") + | |||
ggplot( | |||
theme_grey(base_size = 24) + | theme_grey(base_size = 24) + | ||
labs( # label names | labs( # label names | ||
Rivi 372: | Rivi 388: | ||
) | ) | ||
ggplot(population@output, aes(x = Talotyyppi, weight = populationResult)) + geom_bar() + labs(title = "Väestö") | |||
ggplot( | ggplot(exposure@output[exposure@output$Pollutant == "Radon" , ], aes(x = exposureResult, fill = Talotyyppi)) + geom_density(alpha = 0.2) | ||
## POISTETTIIN KOKO KUNTAKARTTATOIMINNALLISUUS, KOSKA JOTKIN OSAT OVAT VANHENTUNEET. ON HELPOMPI RAKENTAA ALUSTA UUDESTAAN. | ## POISTETTIIN KOKO KUNTAKARTTATOIMINNALLISUUS, KOSKA JOTKIN OSAT OVAT VANHENTUNEET. ON HELPOMPI RAKENTAA ALUSTA UUDESTAAN. |
Versio 28. huhtikuuta 2014 kello 10.06
Moderaattori:Jouni (katso kaikki)
Sivun edistymistä ei ole arvioitu. Arvostuksen määrää ei ole arvioitu (ks. peer review). |
Lisää dataa
|
Kysymys
Mitkä ovat radonin terveysvaikutukset Suomessa? Erityisesti pitäisi tarkastella näitä kysymyksiä:
- Mikä on radonin kokonaistautitaakka?
- Kuinka suuri on radonin ja tupakan yhteisvaikutus?
- Onko kyseessä riippumaton, additiivinen, multiplikatiivinen tai yhteisvaikutus, ja mitä nämä tarkoittavat?
- Miten radonin tautitaakka jakautuu erilaisissa asunnoissa asuvien kesken (esim. yli tai alle 300 Bq/m3)?
- Mitä eri toimenpiteitä olisi mahdollista tehdä radonin tautitaakan pienentämiseksi?
- Mitä muita vaikutuksia näillä toimepiteillä on (kustannukset, kiellot, elämäntapamuutokset, terveyssynergiat?)
- Mitkä arvoarvostelmat määräävät sitä, mitkä toimepidevaihtoehdoista näyttäytyvät suositeltavina?
Vastaus
Radonin kokonaistautitaakka näyttäisi olevan 1973 DALY /vuosi (ks. Tautitaakka Suomessa ja SETURI/TEKAISU: Sisäilman radonin tautitapausmäärä ja tautitaakka arviot
Kuinka suuri on radonin ja tupakan yhteisvaikutus?
- Riippumaton: BoD = Tr + Tt - T(r ja t)
- Additiivinen: BoD = BG * RRr * RRt
- Multiplikatiivinen: BoD > BG * RRr * RRt
- Yhteisvaikutus: jotain muuta vai mikä tahansa noista?
Jossa
- BoD: burden of disease eli tautitaakka
- T: tapausmäärä (ilmoitettuna DALYina)
- r: radon
- t: tupakka
- BG: taustariski
Ne asunnot, joissa radonpitoisuus on yli 300 Bq/m3, johtavat arviolta 65-80 keuhkosyöpätapaukseen vuodessa. Näistä pelkän radonin aiheuttamia on noin kymmenen tapausta (loput: radon + tupakka). Tämän verran siis vähenisivät tapaukset , jos kaikki 300 Bq/m3 ylitykset korjattaisiin tasolle 0 Bq/m3.
Jos yli 300 Bq/m3 radonpitoisuudet korjataan tasolle 300 Bq/m3, vähenevät keuhkosyöpätapaukset noin 25-40 tapauksella vuodessa (näistä 3- 5 keuhkosyöpää on pelkän radonin aiheuttamaa).
Arvioinnissa on otettu huomioon 300 Bq/m3 ylittävän väestön altistusarvion epätarkkuus 95% luottamusvälillä (10%). Kaikkien radonin (tai radon+tupakka) aiheuttamien keuhkosyöpien määrä, 300 kpl vuodessa, on oletettu tässä arvioinnissa tarkaksi, vaikka vaihteluväli onkin 100 – 600 tapausta. Eli näihin lukuihin täytyy suhtautua lähinnä suuntaa antavina.R↻
Toimenpiteitä radonin tautitaakan pienentämiseksi?
- Radontuuletus kaikkiin uusiin rakennuksiin.
- Radontuuletusvalmius kaikkiin uusiin rakennuksiin, tuuletus vain jos mittaus osoittaa korkeita pitoisuuksia.
- Radontuuletus myös vanhoihin rakennuksiin.
- Tupakointikielto.
- Kansalaistiedotus.
- Radonmittausten kannustaminen tiedolla tai rahallisella tuella.
- Edellä mainittujen toimien kohdistaminen vain tupakoiviin.
- Edellä mainittujen toimien kohdistaminen vain radonalueille.
Radontoimepiteiden muita kuin terveysvaikutuksia:
- Kustannukset.
- Kiellot ja itsemääräämisoikeus.
- Elämäntapamuutokset.
- Vaikutusten kohdistuminen erilaisena kansalaiseen, lähimmäiseen tai yhteiskuntaan.
Arvoarvostelmia:
- Tautitaakkaa on pienennettävä.
- Tautitaakkaa on pienennettävä kaikilla toimilla, jotka ovat halvempia kuin 10000 € / DALY (tai jokin muu raja).
- Kansalaisten itsemääräämisoikeuteen ei saa puuttua.
- Kansalaisia ja erityisesti lapsia on suojeltava altisteilta, jonka määrään ei voi itse vaikuttaa.
Näkökulmia radonhaitan torjuntaan
Perustelut
Vastaus on alustava, ja malli pitäisi tarkistaa ennen kuin vankkoja päätelmiä tehdään. Kehityskohteita:
- Maakuntien ja kuntien yhdistäminen pitäisi tehdä jotenkin älykkäästi skräpätystä datasta eikä tässä koodissa.
- Itä-Uudenmaan kunnat voisi korjata näin: out$Kunta[out$Kunta %in% c("Mäntsälä", "Pornainen", "Porvoo", "etc", "", "", "")] <- "Itä-Uusimaa"
- Radonpitoisuudet pitää sämplätä maakunnittain, ei kunnittain kuten nyt. Pienillä ännän arvoilla tulee isoja eroja kuntien välille, mutta se on pelkkää harhaa.
- Epävarmuudet voiti ottaa myös annosvasteisiin.
- Pitoisuusjakaumat voisi toteuttaa oikeasti jakaumina olettaen esim. lognormaalijakauman epävarmoilla parametreilla joka maakuntaan. Nyt kuvaajiin tulee harhaisia piikkejä. Jos olisi alkuperäisdata, niin voisi tehdä pikku Bayes-mallin.
- Kartan piirtäminen ja muutamat muut jutut voisi tehdä funktioiksi ja pistää jollekin järkevälle sivulle, josta ne inkludeerataan tähän.
- Miksi yksikköriski näyttää tosi isolta, mutta kun summataan yli koko väestön, talo*tupakointikohtaiset luvut näyttävät tosi pieniltä.
- Pitäisi katsoa, onko puuttuvia arvoja, jotka mergatessa slaissaavat dataa pois.
- Satunnaistaminen pitäisi tehdä sellaisissa vaiheissa, että se olisi nopeaa.
- Miten pitäisi käsitellä asuntojen radonpitoisuuksien vaihtelu vs. epävarmuus syöpäriskistä? Meneekö 2DMC liian raskaaksi ja onko siitä vastaavaa hyötyä? Voiko saman toteuttaa 1DMC:na siten, että haluttu epävarmuus käsitellään vaihteluna eri tavalla kuin muut?
Laskenta
- Axis formatting (e.g. log2 format)
- vaikutusrr poistettu kokonaan toistaiseksi, koska se ei toimi. Löytyy vanhasta versiosta.
- Tolkullinen versio
Riippuvuudet
- Talotyypit Suomessa
- Suomen kunnat
- Radon sisäilmassa
- Päivittäin tupakoivien osuus Suomessa: Tupakoivat [1]
- Tupakan annosvaste: UK: päivittäin tupakoivia 22 % Miehet, 20 % Naiset. Tämä aiheuttaa 88 % ja 84 % keuhkosyövistä vastaavasti. [2] Tämän perusteella voidaan laskea riskisuhde RR = AF / (EF(RR-1)+1), missä AF on attributable fraction eli altisteen aiheuttama osuus koko tautikuormasta ja EF on altistuneiden osuus koko väestöstä. Tämän perusteella päivittäisen tupakoinnin riskisuhteeksi keuhkosyövälle saadaan 20 - 30. (Laskennassa käytetään 20:tä.)
- Syöpäkuolleisuus Suomessa
- en:Attributable risk#Combined_PAR
- op_en:Population attributable fraction
- op_en:OpasnetUtils/Drafts
Katso myös
- op_en:File:Cost effectiveness and health benefits of radon control strategies.pdf
- Radonin terveysvaikutukset Euroopassa
- op_en:Health impacts of radon in Europe
- heande:Radon sisäilma altistus Suomi
- op_en:Radon
- Suomen kunnat
- Radon sisäilmassa
- Talotyypit Suomessa
- STUK:n radonsivusto
- RADPAR project: radon prevention and remediation
- SETURI/TEKAISU: Ympäristön tupakansavun tautitapausmäärä ja tautitaakka arviot
- SETURI/TEKAISU: Sisäilman radonin tautitapausmäärä ja tautitaakka arviot
- op_en:Health impact assessment
Viitteet
Aiheeseen liittyviä tiedostoja
<mfanonymousfilelist></mfanonymousfilelist>