Ero sivun ”Radonin terveysvaikutukset” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
Rivi 28: Rivi 28:
<rcode graphics=1 embed=1 variables="
<rcode graphics=1 embed=1 variables="
name:N|default:100|
name:N|default:100|
name:talo|type:selection|options:'Kerrostalo';Kerrostalo;'Pientalo';Pientalo|default:'Pientalo'|
name:erottelu1|description:Minkä tekijän mukaan haluat erotella terveysvasteen?|type:selection|
name:tupakka|type:selection|options:'Kyllä';Kyllä;'Ei';Ei|
options:
name:vaste|type:selection|options:
'Tupakka';Tupakka;
5;Radon;
'Talotyyppi';Talotyyppi;
7;Asukkaita;
'Sukupuoli';Sukupuoli;
8;Sairastuvuus;
'Maakunta';Maakunta|
9;Tupakoivien osuus;
default:'Maakunta'|
11;Kokonaisvaikutus;
name:erottelu2|description:Minkä tekijän mukaan haluat erotella terveysvasteen?|type:selection|
12;Radonvaikutus|
options:
default:12
'Tupakka';Tupakka;
'Talotyyppi';Talotyyppi;
'Sukupuoli';Sukupuoli;
'Maakunta';Maakunta|
default:'Tupakka'|
name:verbose|description:Haluatko nähdä välivaiheet?|type:selection|options:FALSE;En;TRUE;Kyllä|default:FALSE
">
">
library(sorvi)
library(OpasnetUtils)
library(OpasnetUtils)
library(ggplot2)
library(ggplot2)


collapsemarg <- function(object, marginals, fun = sum) {
objects.latest('Op_en6007', code_name = 'answer') # [[OpasnetUtils/Drafts]] fetches fillna and collapsemarg function.


object@output <- dropall(object@output)
###### OSA 1: VÄESTÖ


temp <- as.data.frame(as.table(tapply(result(object), object@output[marginals], fun)))
### TALOT
 
colnames(temp)[colnames(temp) == "Freq"] <- "Result"
 
out <- EvalOutput(Ovariable(object@name, data = temp))
 
return(out)
}
 
objects.latest('Op_en6007', code_name = 'answer') # [[OpasnetUtils/Drafts]] fetches fillna function.
 
###### VÄESTÖ
 
objects.latest('Op_fi3907', code_name = 'alusta') # [[Suomen kunnat]], ovariable kunnat.


objects.latest('Op_fi2761', code_name = 'alusta') # [[Talotyypit Suomessa]], ovariable talot.
objects.latest('Op_fi2761', code_name = 'alusta') # [[Talotyypit Suomessa]], ovariable talot.


# Summaa taloista pois perhekoko ja muodosta uusi ovariable asukkaat.
# Yksinkertaista talotyyppiluokittelua ja summaa taloista pois perhekoko.


#talot@output <- talot@output[talot@output$Kunta == "Akaa" , ] ########### POISTA TÄMÄ
#talot@output <- talot@output[talot@output$Kunta == "Akaa" , ] ########### POISTA TÄMÄ
Rivi 73: Rivi 64:
"Pientalo"
"Pientalo"
)
)
talot@output <- dropall(talot@output)


talot <- collapsemarg(talot, c("Kunta", "Talotyyppi"), sum)
talot <- collapsemarg(talot, c("Kunta", "Talotyyppi"), sum)
### KUNNAT
objects.latest('Op_fi3907', code_name = 'alusta') # [[Suomen kunnat]], ovariable kunnat.


kunnat <- EvalOutput(kunnat, N = N)
kunnat <- EvalOutput(kunnat, N = N)
### TUPAKOINTI JA ALUEVASTAAVUUS


tupakointi <- EvalOutput(Ovariable("tupakointi",  # Tupakoivien osuus väestöstä. Result-sarake summautuu ykköseen.
tupakointi <- EvalOutput(Ovariable("tupakointi",  # Tupakoivien osuus väestöstä. Result-sarake summautuu ykköseen.
Rivi 96: Rivi 92:
}
}
))
))
### VÄESTÖN LASKENTA


väestö <- kunnat * talot * aluevastaavuus * tupakointi
väestö <- kunnat * talot * aluevastaavuus * tupakointi


cat("Väestö\n")
if(verbose) {
oprint(head(väestö@output))
cat("Väestö\n")
cat("Kunnat\n")
oprint(head(väestö@output))
oprint(head(kunnat@output))
cat("Kunnat\n")
cat("Talot\n")
oprint(head(kunnat@output))
oprint(head(talot@output))
cat("Talot\n")
cat("Aluevastaavuus\n")
oprint(head(talot@output))
oprint(head(aluevastaavuus@output))
cat("Aluevastaavuus\n")
cat("Tupakointi\n")
oprint(head(aluevastaavuus@output))
oprint(head(tupakointi@output))
cat("Tupakointi\n")
oprint(head(tupakointi@output))
}


###### OSA 2: RISKISUHTEET


###### altistus
### ALTISTUS
 
# RADON


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.
Rivi 117: Rivi 120:
radonpit <- EvalOutput(radonpit, N = N)
radonpit <- EvalOutput(radonpit, N = N)


radonpit@output <- radonpit@output[radonpit@output$Maakunta == "Pirkanmaa" , ] ############# POISTA TÄMÄ
#radonpit@output <- radonpit@output[radonpit@output$Maakunta == "Pirkanmaa" , ] ############# POISTA TÄMÄ
 
# TUPAKKA. Väestö on jo jaettu tupakoiviin ja tupakoimattomiin.


tupakkaaltistus <- EvalOutput(Ovariable("tupakkaaltistus",  
tupakkaaltistus <- EvalOutput(Ovariable("tupakkaaltistus",  
Rivi 123: Rivi 128:
), N = N)
), N = N)


# Altistuksessa lisätään uusi sarake Altiste kuvaamaan sitä, mikä altisteen altistumisesta tai riskistä on kyse ko. rivillä.


altistus <- orbind(
altistus <- orbind(
Rivi 132: Rivi 138:


altistus@output <- fillna(altistus@output, c("Tupakka", "Maakunta", "Talotyyppi"))
altistus@output <- fillna(altistus@output, c("Tupakka", "Maakunta", "Talotyyppi"))
#colnames(temp)[colnames(temp) == "altistusResult"] <- "Result"
#temp <- EvalOutput(Ovariable("temp", data = temp))


cat("Altistus\n")
if(verbose) {
oprint(head(altistus@output))
cat("Altistus\n")
oprint(head(altistus@output))
}
 
### SUHTEELLINEN RISKI


######## Syöpäkuolleisuus
# Annosvasteiden perustiedot.


objects.latest('Op_fi3912', code_name = 'alusta') # [[Syöpäkuolleisuus Suomessa]], ovariable syopakuolleisuus.
ERF <- EvalOutput(Ovariable("ERF", data = data.frame(Altiste = c("Radon", "Tupakka"), Result = c(1.006, 20))), N = N)


syopakuolleisuus@data <- syopakuolleisuus@data[syopakuolleisuus@data$Primaaripaikka == "Keuhkot, henkitorvi" , ] # ICD.10.koodi == "C33-34"
tausta.altistus <- 0 # Radonille voisi olla 5.


syopakuolleisuus <- EvalOutput(syopakuolleisuus, N = N)
RR <- exp(log(ERF) * (altistus - tausta.altistus)) # Relative risk given the exposures


cat("Syöpäkuolleisuus\n")
if(verbose) {
oprint(head(syopakuolleisuus@output))
cat("ERF\n")
oprint(head(ERF@output))
cat("RR\n")
oprint(head(RR@output))
}


####### Relative risk
### SYÖPÄKUOLLEISUUS


ERF <- EvalOutput(Ovariable("ERF", data = data.frame(Altiste = c("Radon", "Tupakka"), Result = c(1.006, 20))), N = N)
objects.latest('Op_fi3912', code_name = 'alusta') # [[Syöpäkuolleisuus Suomessa]], ovariable syopakuolleisuus.


tausta.altistus <- 0 # Radonille voisi olla 5.
syopakuolleisuus@data <- syopakuolleisuus@data[syopakuolleisuus@data$Primaaripaikka == "Keuhkot, henkitorvi" , ] # ICD.10.koodi == "C33-34"


RR <- exp(log(ERF) * (altistus - tausta.altistus)) # Relative risk given the exposures
syopakuolleisuus <- EvalOutput(syopakuolleisuus, N = N)


cat("ERF\n")
if(verbose) {
oprint(head(ERF@output))
cat("Syöpäkuolleisuus\n")
cat("RR\n")
oprint(head(syopakuolleisuus@output))
oprint(head(RR@output))
}


####### taustariski
### TAUSTARISKI


# Calculate subgroup-specific background risks by first calculating a temporary burden estimate.
# Calculate subgroup-specific background risks by first calculating a temporary burden estimate.
Rivi 178: Rivi 190:
tausta <- syopakuolleisuus / (temp1 / temp2) # syopakuolleisuus without any exposure
tausta <- syopakuolleisuus / (temp1 / temp2) # syopakuolleisuus without any exposure


cat("Taustariski\n")
if(verbose) {
oprint(head(tausta@output))
cat("Taustariski\n")
oprint(head(tausta@output))
}


########### PAF
###### OSA 3: TAUTIKUORMA
 
### ARVIO PERUSTUEN POPULATION ATTRIBUTABLE FRACTIONIIN
# Tässä oletetaan, että riskisuhteiden avulla voidaan suoraan laskea eri teijöiden osuus tautikuormasta.
# Luku on yliarvio, koska jokainen altiste lasketaan ikään kuin muita altisteita ei olisi tautia aiheuttamassa.
# Etuna on, että jokaiselle altisteelle saadaan arvio erikseen.


väestöosuus <- 1
väestöosuus <- 1
Rivi 187: Rivi 206:
PAF <- väestöosuus * (RR - 1) / (väestöosuus * (RR - 1) + 1)
PAF <- väestöosuus * (RR - 1) / (väestöosuus * (RR - 1) + 1)


######### vaikutus
vaikutuspaf <- väestö * syopakuolleisuus * PAF


vaikutus <- väestö * syopakuolleisuus * PAF
# Onko tarpeen integroida yli muiden indeksien?
#vaikutuspaf <- collapsemarg(vaikutuspaf, c("Iter", "Kunta, ", "Tupakka", "Talotyyppi", "Altiste"), sum)


vaikutus@output <- vaikutus@output[!is.na(vaikutus@output$Result) , ]
### ARVIO PERUSTUEN TAUSTARISKIIN
 
# Tässä oletetaan, että on olemassa populaatiokohtainen taustariski, jota ei altistumisen takia havaita.
kokonaisvaikutuspaf <- collapsemarg(vaikutus, c("Iter", "Tupakka", "Talotyyppi", "Altiste"), sum)
# Se voidaan kuitenkin laskea ottamalla havaittu tautikuorma ja poistamalla altistumisen vaikutus.
# Arvio lienee tarkempi kuin PAF-menetelmällä, mutta altistekohtainen tieto menetetään.


RRkok <- collapsemarg(RR, c("Iter", "Tupakka", "Maakunta", "Talotyyppi"), prod)
RRkok <- collapsemarg(RR, c("Iter", "Tupakka", "Maakunta", "Talotyyppi"), prod)
Rivi 199: Rivi 220:
vaikutusrr <- väestö * tausta * RRkok
vaikutusrr <- väestö * tausta * RRkok


kokonaisvaikutusrr <- collapsemarg(vaikutusrr, c("Iter", "Tupakka", "Talotyyppi"), sum)
#vaikutusrr <- collapsemarg(vaikutusrr, c("Iter", "Kunta", "Tupakka", "Talotyyppi"), sum)


cat("PAF\n")
if(verbose) {
oprint(head(PAF@output))
cat("PAF\n")
cat("VaikutusPAF\n")
oprint(head(PAF@output))
oprint(head(vaikutus@output))
cat("VaikutusPAF\n")
cat("Kokonaisvaikutus PAF-menetelmällä\n")
oprint(head(vaikutus@output))
oprint(head(kokonaisvaikutuspaf@output))
cat("Kokonaisvaikutus PAF-menetelmällä\n")
cat("RRkok\n")
oprint(head(kokonaisvaikutuspaf@output))
oprint(head(RRkok@output))
cat("RRkok\n")
cat("VaikutusRR\n")
oprint(head(RRkok@output))
oprint(head(vaikutusrr@output))
cat("VaikutusRR\n")
cat("Kokonaisvaikutus RR-menetelmällä\n")
oprint(head(vaikutusrr@output))
oprint(head(kokonaisvaikutusrr@output))
cat("Kokonaisvaikutus RR-menetelmällä\n")
oprint(head(kokonaisvaikutusrr@output))
}


geombar <- function(object, title = "", y = "", x = "") {
geombar <- function(object, title = "", y = "", x = "") {
Rivi 225: Rivi 248:
}
}


geombar(vaikutus, title = "Vaikutus PAF-menetelmällä")
ograph(RR, x = erottelu1, fill =  erottelu2, title = 'Suhteellinen yksilöriski altistumattomaan verrattuna')
 
geombar(vaikutuspaf, title = "Vaikutus PAF-menetelmällä")
geombar(vaikutusrr, title = "Vaikutus RR-menetelmällä")
geombar(vaikutusrr, title = "Vaikutus RR-menetelmällä")


Rivi 232: Rivi 257:
ggplot(altistus@output[altistus@output$Altiste == "Radon" , ], aes(x = altistusResult, fill = Talotyyppi)) + geom_density(alpha = 0.2)
ggplot(altistus@output[altistus@output$Altiste == "Radon" , ], aes(x = altistusResult, fill = Talotyyppi)) + geom_density(alpha = 0.2)


 
## POISTETTIIN KOKO KUNTAKARTTATOIMINNALLISUUS, KOSKA JOTKIN OSAT OVAT VANHENTUNEET. ON HELPOMPI RAKENTAA ALUSTA UUDESTAAN.
print("Yksikköriski: tapauksia tuhatta asukasta kohti vuodessa")
temp <- as.data.frame(as.table(tapply(out$Radonvaikutus/out$Asukkaita, list(out$Maakunta, out$Tupakka, out$Talo), sum)/n))
temp <- temp[!is.na(temp$Freq), ]
#head(temp)
temp$Freq <- temp$Freq*1000
colnames(temp) <- c("Maakunta", "Tupakka", "Talotyyppi", "Riski")
oprint(temp)
 
print("Radonin aiheuttama lisäriski, tapausta vuodessa")
oprint(as.data.frame(as.table(((tapply(out$Radonvaikutus, list(out$Talo, out$Tupakka), sum)/n)))))
 
ggplot(out, aes(x = Maakunta, weight = Kokonaisvaikutus, fill = Tupakka)) + geom_bar(position = "stack") # position = "dodge"
 
out$Radonvaikutus <- ifelse(out$Radonvaikutus < 0, 0, out$Radonvaikutus)
 
out$Radonsata <- round(as.numeric(as.character(out$Radon)), -2)
 
ggplot(out, aes(x = Radon, weight = Radonvaikutus)) + geom_density(alpha = 1)
ggplot(out, aes(x = Radonsata, weight = Radonvaikutus, fill = Talo)) + geom_bar(position = "stack")
 
###########################################################
# (C) 2011 Leo Lahti <leo.lahti[at]iki.fi> All rights reserved.
# License: FreeBSD, http://en.wikipedia.org/wiki/BSD_licenses
 
# Tama esimerkki on testattu sorvi-paketin versiolla 0.1.23
 
# Esimerkki Suomen kuntatason vaestonkasvutilastojen (Tilastokeskus)
# visualisoinnista Maanmittauslaitoksen karttadatalla (vuonna 2010)
 
 
###############################################
 
# Lue Suomen kuntarajat SpatialPolygon-muodossa
# (C) Maanmittauslaitos 2011
# http://www.maanmittauslaitos.fi/aineistot-palvelut/digitaaliset-tuotteet/ilmaiset-aineistot/hankinta
#LoadData(MML)
#sp <- MML[["1_milj_Shape_etrs_shape"]][["kunta1_p"]]
 
sp <- LoadMML(data.id = "kunta1_p", resolution = "1_milj_Shape_etrs_shape")
 
#################################################
 
# Lue kuntatason vaestonkasvutiedot tilastokeskuksen StatFin-tietokannasta
# http://www.stat.fi/tup/statfin/index.html
# PC Axis-muodossa
px <- statfin.px("vrm/synt/080_synt_tau_203.px")
# statfin.px-funktio käyttää soRvin read.px-funktiota hakemaan dataa URLista, joka alkaa "http://pxweb2.stat.fi/database/StatFin/"
# URLin loppuosa pitää antaa statfin.px:lle parametrina.
# Poimi taulukosta halutut tiedot
# pxs <- subset(as.data.frame(px), Väestönmuutos.ja.väkiluku == "Luonnollinen väestönlisäys" & Vuosi == year)
# pxs <- subset(as.data.frame(px), Väestönmuutos.ja.väkiluku == parameter & Vuosi == year)
# Putsaa data
# vaestonkasvu <- preprocess.px(pxs)
# head(vaestonkasvu)
################################################
vaestonkasvu <- out[out$Talo == talo & out$Tupakka == tupakka, ]
vaestonkasvu <- as.data.frame(as.table(tapply(vaestonkasvu[, vaste], list(vaestonkasvu$Kunta), sum)/n))
colnames(vaestonkasvu) <- c("Kunta", "Vaste")
head(vaestonkasvu)
vaestonkasvu[is.na(vaestonkasvu)] <- 0
##############################################
# Lisaa tiedot karttaobjektiin
sp@data$vaestonkasvu <- vaestonkasvu$Vaste[match(sp$Kunta.FI, vaestonkasvu$Kunta)]
# Korvaa puuttuvat arvot nollalla
sp[["vaestonkasvu"]][is.na(sp[["vaestonkasvu"]])] <- 0
#colnames(out)[vaste]
#vaestonkasvu$Vaste
################################################
 
# Maarittele varipaletti
my.palette <- colorRampPalette(c("white", "red"), space = "rgb") # , "blue"
ncol <- 40 # Number of colors
 
#################################################
 
# Piirra kuva
varname <- "vaestonkasvu"
int <- max(abs(vaestonkasvu$Vaste))
int
q <- spplot(sp, varname,
      col.regions = my.palette(ncol),
      main = paste(colnames(out)[vaste], talo, "Tupakointi: ", tupakka, sep = ", "),
      colorkey = TRUE,
      lwd = .4,
      col = "black",
      at = seq(0, 0 + int, length = ncol)
)
 
print(q)


</rcode>
</rcode>
Rivi 330: Rivi 266:
* [[Syöpäkuolleisuus Suomessa]]
* [[Syöpäkuolleisuus Suomessa]]
* [[:en:Attributable risk#Combined_PAR]]
* [[:en:Attributable risk#Combined_PAR]]
* [[:en:OpasnetUtils/Drafts]]


<t2b name="Maakunnat ja sairaanhoitopiirit" index="Maakunta" obs="Sairaanhoitopiiri" unit="-">
<t2b name="Maakunnat ja sairaanhoitopiirit" index="Maakunta" obs="Sairaanhoitopiiri" unit="-">

Versio 17. marraskuuta 2013 kello 11.07





Kysymys

Mitkä ovat radonin terveysvaikutukset Suomessa?

Vastaus

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?

Kaava

N:

Minkä tekijän mukaan haluat erotella terveysvasteen?:

Minkä tekijän mukaan haluat erotella terveysvasteen?:

Haluatko nähdä välivaiheet?:

+ Näytä koodi

  • 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ä.)
Maakunnat ja sairaanhoitopiirit(-)
ObsMaakuntaSairaanhoitopiiri
1AhvenanmaaÅland
2Etelä-KarjalaEtelä-Karjala
3Etelä-PohjanmaaEtelä-Pohjanmaa
4Etelä-SavoEtelä-Savo
5UusimaaHelsinki ja Uusimaa
6Itä-Uusimaa
7Itä-Savo
8KainuuKainuu
9Kanta-HämeKanta-Häme
10Keski-PohjanmaaKeski-Pohjanmaa
11Keski-SuomiKeski-Suomi
12Koko maa
13KymenlaaksoKymenlaakso
14Länsi-Pohja
15LappiLappi
16Päijät-HämePäijät-Häme
17PirkanmaaPirkanmaa
18Pohjanmaa
19Pohjois-KarjalaPohjois-Karjala
20Pohjois-PohjanmaaPohjois-Pohjanmaa
21Pohjois-SavoPohjois-Savo
22SatakuntaSatakunta
23Vaasa
24Varsinais-SuomiVarsinais-Suomi
25Yhteensä

Katso myös

Viitteet


Aiheeseen liittyviä tiedostoja

<mfanonymousfilelist></mfanonymousfilelist>