Ero sivun ”Radonin terveysvaikutukset” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
(→‎Laskenta: tuntuu toimivan)
Rivi 56: Rivi 56:


# Yksinkertaista talotyyppiluokittelua ja summaa taloista pois perhekoko.
# Yksinkertaista talotyyppiluokittelua ja summaa taloista pois perhekoko.
#talot@output <- talot@output[talot@output$Kunta == "Akaa" , ] ########### POISTA TÄMÄ


levels(talot@output$Talotyyppi) <- ifelse(
levels(talot@output$Talotyyppi) <- ifelse(
Rivi 71: Rivi 69:


objects.latest('Op_fi3907', code_name = 'alusta') # [[Suomen kunnat]], ovariable kunnat.
objects.latest('Op_fi3907', code_name = 'alusta') # [[Suomen kunnat]], ovariable kunnat.
kunnat <- EvalOutput(kunnat, N = N)


### TUPAKOINTI JA ALUEVASTAAVUUS
### TUPAKOINTI JA ALUEVASTAAVUUS


tupakointi <- EvalOutput(Ovariable("tupakointi",  # Tupakoivien osuus väestöstä. Result-sarake summautuu ykköseen.
tupakointi <- Ovariable("tupakointi",  # Tupakoivien osuus väestöstä. Result-sarake summautuu ykköseen.
data = data.frame(
data = data.frame(
Sukupuoli = rep(c("Miehet", "Naiset"), 2),  
Sukupuoli = rep(c("Miehet", "Naiset"), 2),  
Rivi 82: Rivi 78:
Result = c(0.11, 0.08, 0.39, 0.42)
Result = c(0.11, 0.08, 0.39, 0.42)
)
)
), N = N)
)


 
aluevastaavuus <- Ovariable("aluevastaavuus",  
aluevastaavuus <- EvalOutput(Ovariable("aluevastaavuus",  
data = {
data = {
dat <- tidy(opbase.data("Op_fi2760.maakunnat_ja_sairaanhoitopiirit"))
dat <- tidy(opbase.data("Op_fi2760.maakunnat_ja_sairaanhoitopiirit"))
Rivi 92: Rivi 87:
dat
dat
}
}
))
)


### VÄESTÖN LASKENTA
### VÄESTÖN LASKENTA


väestö <- kunnat * talot * aluevastaavuus * tupakointi
väestö <- Ovariable("väestö",
dependencies = data.frame(Name = c("kunnat", "talot", "aluevastaavuus", "tupakointi")),
formula = function(...) {


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


###### OSA 2: RISKISUHTEET
###### OSA 2: RISKISUHTEET
Rivi 119: Rivi 109:
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.


radonpit <- EvalOutput(radonpit, N = N)
radon$Altiste <- "Radon" # Uusi sarake kuvaamaan sitä, minkä altisteen altistumisesta tai riskistä on kyse ko. rivillä.


#radonpit@output <- radonpit@output[radonpit@output$Maakunta == "Pirkanmaa" , ] ############# POISTA TÄMÄ


# TUPAKKA. Väestö on jo jaettu tupakoiviin ja tupakoimattomiin.
# TUPAKKA. Väestö on jo jaettu tupakoiviin ja tupakoimattomiin.


tupakkaaltistus <- EvalOutput(Ovariable("tupakkaaltistus",  
tupakkaaltistus <- Ovariable("tupakkaaltistus",  
data = data.frame(Tupakka = c("Kyllä", "Ei"), Result = c(1, 0))
data = data.frame(Tupakka = c("Kyllä", "Ei"), Altiste = "Tupakka", Result = c(1, 0))
), N = N)
)


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


altistus <- Ovariable("altistus",  
altistus <- Ovariable("altistus",  
Rivi 135: Rivi 124:
formula = function(...) {
formula = function(...) {


out <- orbind(
out <- orbind(tupakkaaltistus * 1, radonpit * 1)
data.frame(tupakkaaltistus@output, Altiste = "Tupakka"),
data.frame(radonpit@output, Altiste = "Radon")
)
out <- fillna(out, c("Tupakka", "Maakunta", "Talotyyppi"))
marginals <- c(
"Altiste",
colnames(tupakkaaltistus@output)[tupakkaaltistus@marginal],
colnames(radonpit@output)[radonpit@marginal]
)


variable <- new("ovariable", name = "altistus",
out <- out[!colnames(out) %in% c("tupakkaaltistusSource", "radonpitSource")]
altistus@marginal <- colnames(altistus@output) %in% marginals
out <- fillna(out, c("Tupakka", "Maakunta", "Talotyyppi")) # Tätä on muutettava, jos toiseen lisätään indeksejä.


return(out)
return(out)
}
}
)
)
altistus <- EvalOutput(altistus, N = N)
if(verbose) {
cat("Altistus\n")
oprint(head(altistus@output))
}


### SUHTEELLINEN RISKI
### SUHTEELLINEN RISKI
Rivi 165: Rivi 137:
# Annosvasteiden perustiedot.
# Annosvasteiden perustiedot.


ERF <- EvalOutput(Ovariable("ERF", data = data.frame(Altiste = c("Radon", "Tupakka"), Result = c(1.0016, 20))), N = N)
ERF <- Ovariable("ERF", data = data.frame(
Altiste = c("Radon", "Tupakka"),  
Primaaripaikka = "Keuhkot, henkitorvi", # ICD.10.koodi == "C33-34"
Result = c(1.0016, 20)
))


tausta.altistus <- 0 # Radonille voisi olla 5.
tausta.altistus <- 0 # Radonille voisi olla 5.


RR <- exp(log(ERF) * (altistus - tausta.altistus)) # Relative risk given the exposures
RR <- Ovariable("RR",
dependencies = data.frame(Name = c("ERF", "altistus", "tausta.altistus")),
formula = function(...) {


if(verbose) {
out <- exp(log(ERF) * (altistus - tausta.altistus)) # Relative risk given the exposures
cat("ERF\n")
 
oprint(head(ERF@output))
return(out)
cat("RR\n")
}
oprint(head(RR@output))
)
}


### SYÖPÄKUOLLEISUUS
### SYÖPÄKUOLLEISUUS
Rivi 182: Rivi 159:
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 <- syopakuolleisuus@data[syopakuolleisuus@data$Primaaripaikka == "Keuhkot, henkitorvi" , ] # ICD.10.koodi == "C33-34"
# syopakuolleisuus@data <- syopakuolleisuus@data[syopakuolleisuus@data$Primaaripaikka == "Keuhkot, henkitorvi" , ] # ICD.10.koodi == "C33-34"
 
#syopakuolleisuus <- EvalOutput(syopakuolleisuus, N = N)
 
###### 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
 
vaikutuspaf <- Ovariable("vaikutuspaf",
dependencies = data.frame(Name = c("väestöosuus", "RR", "väestö", "syopakuolleisuus")),
formula = function(...) {
 
PAF <- väestöosuus * (RR - 1) / (väestöosuus * (RR - 1) + 1)


syopakuolleisuus <- EvalOutput(syopakuolleisuus, N = N)
out <- väestö * syopakuolleisuus * PAF
 
return(out)
}
)


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


### TAUSTARISKI
### ARVIO PERUSTUEN TAUSTARISKIIN
# Tässä oletetaan, että on olemassa populaatiokohtainen taustariski, jota ei altistumisen takia havaita.
# Se voidaan kuitenkin laskea ottamalla havaittu tautikuorma ja poistamalla altistumisen vaikutus.
# Arvio lienee tarkempi kuin PAF-menetelmällä, mutta altistekohtainen tieto menetetään.


# 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 197: Rivi 194:
# by the subgroup-specific relative risk. In this way, the total burden of all subgroups equals to what is actually seen.
# by the subgroup-specific relative risk. In this way, the total burden of all subgroups equals to what is actually seen.


temp <- collapsemarg(RR, c("Altiste"), "prod")


temp1 <- temp * väestö # Population-weighted sum of the relative risk.
vaikutusrr <- Ovariable("RRkok",
#KORJAA temp1 <- collapsemarg(temp1, c("Maakunta"Sairaanhoitopiiri", "Sukupuoli", "Iter"), sum) # Aggregate to the same indices as kokonaisvaikutus.
dependencies = data.frame(Name = c("väestö", "RR")),
formula = function(...) {
 
RRkok <- collapsemarg(RR, c("Altiste"), "prod")
 
temp1 <- RRkok * väestö # Population-weighted sum of the relative risk.
temp2 <- (RRkok * 0 + 1) * väestö # Population-weighted sum of ones with the same dimensions.


temp2 <- (temp * 0 + 1) * väestö # Population-weighted sum of ones with the same dimensions.
integrate <- colnames(temp1)[
#KORJAA temp2 <- collapsemarg(temp2, c("Sairaanhoitopiiri", "Sukupuoli", "Iter"), sum)
colnames(temp1) %in% temp1@marginal & !
colnames(temp1) %in% c("Sairaanhoitopiiri", "Sukupuoli", "Iter")
]


tausta <- syopakuolleisuus / (temp1 / temp2) # syopakuolleisuus without any exposure
#c("Tupakka", "Maakunta", "Talotyyppi", "Primaaripaikka", "ERFSource", "altistusSource", "RRSource", "Kunta",
# "kunnatSource", "talotSource", "väkiSource", "aluevastaavuusSource", "Sukupuoli", "tupakointiSource", "väestöSource"
#)


if(verbose) {
temp1 <- collapsemarg(temp1, integrate, "sum") # Aggregate to the same indices as kokonaisvaikutus.
cat("Taustariski\n")
temp2 <- collapsemarg(temp2, integrate, "sum")
oprint(head(tausta@output))
}


###### OSA 3: TAUTIKUORMA
tausta <- syopakuolleisuus / (temp1 / temp2) # syopakuolleisuus without any exposure


### ARVIO PERUSTUEN POPULATION ATTRIBUTABLE FRACTIONIIN
out <- väestö * tausta * RRkok
# 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
# out <- collapsemarg(out, c("Iter", "Kunta", "Tupakka", "Talotyyppi"), "sum")


PAF <- väestöosuus * (RR - 1) / (väestöosuus * (RR - 1) + 1)
return(out)
}
)


vaikutuspaf <- väestö * syopakuolleisuus * PAF
#turhat <- c("Maakunta", "kunnatSource", "talotSource", "väkiSource", "Sairaanhoitopiiri", "aluevastaavuusSource",
# "tupakointiSource", "väestöSource", "ERFSource")


# Onko tarpeen integroida yli muiden indeksien?
vaikutuspaf <- EvalOutput(vaikutuspaf, N = N)
#vaikutuspaf <- collapsemarg(vaikutuspaf, c("Iter", "Kunta, ", "Tupakka", "Talotyyppi", "Altiste"), sum)
vaikutusrr <- EvalOutput(vaikutusrr, N = N)


### ARVIO PERUSTUEN TAUSTARISKIIN
if(verbose) {
# Tässä oletetaan, että on olemassa populaatiokohtainen taustariski, jota ei altistumisen takia havaita.
cat("Väestö\n")
# Se voidaan kuitenkin laskea ottamalla havaittu tautikuorma ja poistamalla altistumisen vaikutus.
oprint(head(väestö@output))
# Arvio lienee tarkempi kuin PAF-menetelmällä, mutta altistekohtainen tieto menetetään.
cat("Kunnat\n")
oprint(head(kunnat@output))
cat("Talot\n")
oprint(head(talot@output))
cat("Aluevastaavuus\n")
oprint(head(aluevastaavuus@output))
cat("Tupakointi\n")
oprint(head(tupakointi@output))


RRkok <- collapsemarg(RR, c("Iter", "Tupakka", "Maakunta", "Talotyyppi"), prod)
cat("Altistus\n")
oprint(head(altistus@output))


vaikutusrr <- väestö * tausta * RRkok
cat("ERF\n")
oprint(head(ERF@output), digits = 4)
cat("RR\n")
oprint(head(RR@output))


#vaikutusrr <- collapsemarg(vaikutusrr, c("Iter", "Kunta", "Tupakka", "Talotyyppi"), sum)
cat("Syöpäkuolleisuus\n")
oprint(head(syopakuolleisuus@output), digits = 6)


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



Versio 19. marraskuuta 2013 kello 21.47





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?

Laskenta

N:

Minkä tekijän mukaan haluat erotella terveysvasteen (x-akseli)?:

Minkä toisen tekijän mukaan haluat erotella terveysvasteen (väri)?:

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ä.)

Data

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

Katso myös

Viitteet


Aiheeseen liittyviä tiedostoja

<mfanonymousfilelist></mfanonymousfilelist>