+ Näytä koodi- Piilota koodi
cat("Ladataan funktioita. \n")
library(OpasnetBaseUtils)
library(xtable)
########################## tf is a function that takes one large table, finds matching rows and
#### produces a standard-format vector that can be operated with easily. Parameters:
# condition = a vector with conditions for each condition column. The length must be ncol(col.condition).
############ External parameters (these must be defined as objects before the function is run;
##### they are not given in the function but they are used by it):
# data = a data frame that contains the data
# col.condition = vector with names of columns that contain the indices that must match in the data
# col.common = vector with names of columns that are used as indices in calculations.
# col.result = the column that contains the actual values.
tf <- function(condition, ...) {
# Take the part of data that fits the condition. Drop all columns but col.common and col.result.
out <- data[data[col.condition] == condition, c(col.common, col.result)]
# Merge the selected data with all col.common and drop possible extra rows so that the outcome always has the same size.
out <- merge(unique(data[col.common]), out, all = TRUE)
out <- out[rownames(unique(out[col.common])), ]
return(out[, col.result])
}
####################Funktio väestön ympäristöperäisen haitta-ainealtistumisen määrittelyyn
########Saanti lasketaan yksikössä mg/kg/d kun ympäristön haitta-ainepitoisuudet on ilmoitettu yksiköissä mg/m3 (ilma), mg/l (vesi) sekä mg/kg (kiinteät väliaineet)
Chronic.environmental.exposure.to.toxic.substances <- function(C.air.outdoor, C.air.indoor, data, ...) {
##Hengitystiet
Air.inh <- ((C.air.outdoor * ((24 - tf("Ef.air.indoor")) / 24)) + (C.air.indoor * (tf("Ef.air.indoor") / 24))) * tf("Ir.air") / (tf("Bw") * tf("At"))
##Ruuansulatuskanava
###Juomavesi
Dw.ing <- C.dw * tf("Ir.dw") * tf("Ef.dw") / (tf("Bw") * tf("At"))
###Maaperä
Soil.ing <- C.soil * (tf("Ir.soil") / 1000000) * tf("Ef.soil") / (tf("Bw") * tf("At"))
###Vihannekset
Lfc.ing <- C.lfc * tf("Ir.lfc") * tf("F.lfc.loc") / tf("Bw")
###Juurekset
Tfc.ing <- C.tfc * tf("Ir.tfc") * tf("F.tfc.loc") / tf("Bw")
###Marjat
Berries.ing <- C.berries * tf("Ir.berries") * tf("F.berries.loc") / tf("Bw")
###Pintavesi
Sw.ing <- C.sw * tf("Ir.sw") * tf("Ef.sw") / (tf("Bw") * tf("At"))
##Iho
Skin.sa <- (4 * tf("Bw") + 7) / (tf("Bw") + 90) * 10000 #Lasketaan ihon kokonaispinta-ala
###Maaperä
Soil.derm <- C.soil * tf("Soil.ad.skin") * 0.000001 * Skin.sa * tf("F.skin.soil") * Abs.skin.soil * tf("Ef.soil") / (tf("Bw") * tf("At"))
###Pesuvesi
Bw.derm <- C.bw * 0.001 * Kp * tf("Ef.bw") * tf("Ed.bw") * Skin.sa * tf("F.skin.bw") / (tf("Bw") * tf("At"))
###Pintavesi
Sw.derm <- C.sw * 0.001 * Kp * tf("Ef.sw") * tf("Ed.sw") * Skin.sa * tf("F.skin.sw") / (tf("Bw") * tf("At"))
#Laskennan jälkeen lisätään yhteiset sarakkeet col.common ja kootaan altistuminen kaikkien altistumisreittien kautta allekkain yhteen tauluun.
common <- merge(unique(data[col.common]), data.frame(temp=1))[-(length(col.common)+1)]
out <- data.frame(common, Altistumisreitti = rep(c("Hengitystiet", "Juomavesi", "Maaperä (ruuansulatuskanava)", "Vihannekset", "Juurekset", "Marjat", "Pintavesi (ruuansulatuskanava)", "Maaperä (iho)", "Pesuvesi (iho)", "Pintavesi (iho)", "Taustasaanti"), each = nrow(common)), Result = c(Air.inh, Dw.ing, Soil.ing, Lfc.ing, Tfc.ing, Berries.ing, Sw.ing, Soil.derm, Bw.derm, Sw.derm, Background.intake.adult, Background.intake.child))
return(out)
}
#################Funktio ympäristön terveysperusteisen laadun tarkasteluun
Health.based.environmental.quality <- function(Concentration, EQC){
#Ympäristöpitoisuuksien vertailu haitta-aineen terveysperusteisiin ohjearvopitoisuuksiin
HEQ.air.outdoor <- C.air.outdoor / HEQC.air.outdoor #Ulkoilma
HEQ.air.indoor <- C.air.indoor / HEQC.air.indoor #Sisäilma
HEQ.dw <- C.dw / HEQC.dw #Juomavesi
HEQ.soil <- C.soil / HEQC.soil #Maaperä
HEQ.lfc <- C.lfc / HEQC.lfc #Vihannekset
HEQ.tfc <- C.tfc / HEQC.tfc #Juurekset
HEQ.berries <- C.berries / HEQC.berries #Marjat
HEQ.sw <- C.sw / HEQC.sw #Pintavesi
out <- data.frame(Väliaine = c("Ulkoilma", "Sisäilma", "Juomavesi", "Maaperä", "Vihannekset", "Juurekset", "Marjat", "Pintavesi"), Result = c(HEQ.air.outdoor, HEQ.air.indoor, HEQ.dw, HEQ.soil, HEQ.lfc, HEQ.tfc, HEQ.berries, HEQ.sw))
return(out)
}
#################Funktio väestön ympäristöperäisestä haitta-ainealtistumisesta aiheutuvan terveysriskin karakterisointiin
Health.risk.characterisation.of.chronic.exposure.to.toxic.substances <- function(Exposure, Toxicity){
###Päivittäinen kokonaissaanti
#####expo = Chronic.environmental.exposure.to.toxic.substances -funktion tuottama altistumistaulu
Tot.intake.adult <- expo[expo$Henkilö == "Aikuinen",]
Tot.intake.adult <- sum(Tot.intake.adult$Result)
HQ.intake.adult <- Tot.intake.adult / TDI
MOS.intake.adult <- NOAEL.ing / Tot.intake.adult
Tot.intake.child <- expo[expo$Henkilö == "Lapsi",]
Tot.intake.child <- sum(Tot.intake.child$Result)
HQ.intake.child <- Tot.intake.child / TDI
MOS.intake.child <- NOAEL.ing / Tot.intake.child
Tot.intake.lifetime <- (Tot.intake.child * 6 + Tot.intake.adult * 64) / 70
HQ.intake.lifetime <- Tot.intake.lifetime / TDI
MOS.intake.lifetime <- NOAEL.ing / Tot.intake.lifetime
###Päivittäinen hengitystiealtistuminen
#####Keskimääräinen hengitysilman haitta-ainepitoisuus eri altistujatyypeillä
Ef.air.indoor <- data[data$Lyhenne == "Ef.air.indoor",]
Ef.air.indoor.adult <- (Ef.air.indoor[Ef.air.indoor$Henkilö == "Aikuinen",])$Result
Ef.air.indoor.child <- (Ef.air.indoor[Ef.air.indoor$Henkilö == "Lapsi",])$Result
C.inhaled.air.adult <- (C.air.outdoor * ((24 - Ef.air.indoor.adult) / 24)) + (C.air.indoor * (Ef.air.indoor.adult / 24))
C.inhaled.air.child <- (C.air.outdoor * ((24 - Ef.air.indoor.child) / 24)) + (C.air.indoor * (Ef.air.indoor.child / 24))
C.inhaled.air.lifetime <- (C.inhaled.air.child * 6 + C.inhaled.air.adult * 64) / 70
HQ.inhalation.adult <- C.inhaled.air.adult / TCA
MOS.inhalation.adult <- NOAEC.inh / C.inhaled.air.adult
HQ.inhalation.child <- C.inhaled.air.child / TCA
MOS.inhalation.child <- NOAEC.inh / C.inhaled.air.child
HQ.inhalation.lifetime <- C.inhaled.air.lifetime / TCA
MOS.inhalation.lifetime <- NOAEC.inh / C.inhaled.air.lifetime
###Elinikäinen syöpäriski
Cancer.risk.intake <- Tot.intake.lifetime * Cancer.unit.risk.intake
Cancer.cases.intake <- Cancer.risk.intake * Population
Cancer.risk.inhalation <- C.inhaled.air.lifetime * Cancer.unit.risk.inhalation
Cancer.cases.inhalation <- Cancer.risk.inhalation * Population
###Kootaan kaikki riski-indikaattorit yhteen tauluun
Noncancer.risk <- data.frame(Altistumisreitti = rep(c("Kokonaissaanti", "Hengitystiet"), each=6), Terveysvaikutus = c("Muu kuin genotoksinen karsinogeneesi"), Riski.indikaattori = rep(rep(c("Vaaraosamäärä (HQ)", "Turvamarginaali (MOS)"), each=3), times=2), Altistumistaso = c("Aikuinen", "Lapsi", "Elinikäinen"), Result = c(HQ.intake.adult, HQ.intake.child, HQ.intake.lifetime, MOS.intake.adult, MOS.intake.child, MOS.intake.lifetime, HQ.inhalation.adult, HQ.inhalation.child, HQ.inhalation.lifetime, MOS.inhalation.adult, MOS.inhalation.child, MOS.inhalation.lifetime))
Cancer.risk <- data.frame(Altistumisreitti = rep(c("Kokonaissaanti", "Hengitystiet"), each=2), Terveysvaikutus = c("Genotoksinen karsinogeneesi"), Riski.indikaattori =c("Yksilön syöpäriski (per 100 000)", "Odotetut syöpätapaukset väestössä"), Altistumistaso = c("Elinikäinen"), Result = c(Cancer.risk.intake*100000, Cancer.cases.intake, Cancer.risk.inhalation*100000, Cancer.cases.inhalation))
out <- merge(Noncancer.risk, Cancer.risk, all=TRUE)
return(out)
}
###########Tuloslaskenta
cat("Ladataan dataa. \n")
####Parametrien määrittely
C.air.outdoor <- 0.118/1000
C.air.indoor <- 0.118/1000
C.soil <- 2645
C.dw <- 0.06
C.lfc <- 2.5
C.tfc <- 0.9
C.berries <- 1.9
C.bw <- 0.06
C.sw <- 0.003
Abs.skin.soil <- 0.003
Kp <- 0.001
Background.intake.adult <- 0
Background.intake.child <- 0
HEQC.air.outdoor <- 0.001
HEQC.air.indoor <- 0.001
HEQC.dw <- 2
HEQC.soil <- 10000
HEQC.lfc <- NaN
HEQC.tfc <- NaN
HEQC.berries <- NaN
HEQC.sw <- NaN
TCA <- 0.001
TDI <- 0.14
NOAEC.inh <- 0.6
NOAEL.ing <- 16.3
Cancer.unit.risk.intake <- 1.5
Cancer.unit.risk.inhalation <- 2
Population <- 10000
page <- "Op_fi2814"
data <- tidy(op_baseGetData("opasnet_base", page))
### Määritellään ulkoiset parametrit Altistumislaskennan taulukon muokkaamista varten.
col.common <- "Henkilö"
col.result <- "Result"
col.condition = "Yksikkö" # Tämä on vain tilapäinen demonstraatio siitä että eri sarakkeita voi käyttää.
col.condition <- "Lyhenne" # Varsinaisesti meitä kiinnostavat sarakkeen Lyhenne määrittämät asiat.
###Altistumisen arvioinnin perusteena käytetyt ympäristön haitta-ainepitoisuudet
Environmental.concentration <- data.frame(Väliaine=c("Ulkoilma","Sisäilma","Juomavesi","Maaperä","Vihannekset","Juurekset","Marjat","Pesuvesi","Pintavesi"), Pitoisuus=c(C.air.outdoor,C.air.indoor,C.dw,C.soil,C.lfc,C.tfc,C.berries,C.bw,C.sw))
cat("Altistumisen arvioinnin perusteena käytetyt ympäristön haitta-ainepitoisuudet (ilma: mg/m3, vesi: mg/l, kiinteät väliaineet: mg/kg) \n")
Environmental.concentration
#print(xtable(Environmental.concentration), type = 'html')
Abs.skin.soil <- 0.003
Kp <- 0.001
Background.intake.adult <- 0
Background.intake.child <- 0
###Altistumislaskennan tulostaulu
expo <- Chronic.environmental.exposure.to.toxic.substances(C.air.outdoor, C.air.indoor, data)
intake.adult <- expo[expo$Henkilö == "Aikuinen",]
intake.child <- expo[expo$Henkilö == "Lapsi",]
intake.tot <- data.frame(Altistumisreitti="Kokonaissaanti", Aikuinen=sum(intake.adult$Result)*1000, Lapsi=sum(intake.child$Result)*1000)
intake.table <- data.frame(Altistumisreitti=intake.adult$Altistumisreitti, Aikuinen=(intake.adult$Result*1000), Lapsi=(intake.child$Result*1000))
intake.table <- merge(intake.table,intake.tot,all=TRUE)
intake.table$Elinikäinen <- (intake.table$Lapsi * 6 + intake.table$Aikuinen * 64) / 70
intake.fractions.adult <- (intake.table$Aikuinen / intake.tot$Aikuinen)*100
intake.fractions.child <- (intake.table$Lapsi / intake.tot$Lapsi)*100
intake.fractions.lifetime <- intake.table$Elinikäinen / ((intake.tot$Lapsi * 6 + intake.tot$Aikuinen * 64)/70)
intake.fractions.table <- data.frame(Altistumisreitti=intake.table$Altistumisreitti, Aikuinen=intake.fractions.adult, Lapsi=intake.fractions.child, Elinikäinen=intake.fractions.lifetime)
cat("Altistumisen arviointi. \n")
cat("Keskimääräinen päivittäinen haitta-aineen saanti (µg/kg/vrk). \n")
print(xtable(intake.table), type = 'html')
cat("Eri altistumisreittien osuus päivittäisestä saannista (%). \n")
print(xtable(intake.fractions.table), type = 'html')
###Ympäristöpitoisuuksien terveysperusteisen viitearvovertailun tulostaulu
cat("Haitta-aineen pitoisuus ympäristössä suhteutettuna terveysperusteiseen viitearvoon.\n")
HEQ.table <- Health.based.environmental.quality(Concentration, EQC)
print(xtable(HEQ.table), type = 'html')
###Terveysriskin karakterisoinnin tulostaulu
risk <- Health.risk.characterisation.of.chronic.exposure.to.toxic.substances(Exposure, Toxicity)
risk.adult <- risk[risk$Altistumistaso == "Aikuinen",]
risk.child <- risk[risk$Altistumistaso == "Lapsi",]
risk.lifetime <- risk[risk$Altistumistaso == "Elinikäinen",]
risk.table.a <- data.frame(Altistumisreitti=risk.adult$Altistumisreitti, Terveysvaikutus=risk.adult$Terveysvaikutus, Riski.indikaattori=risk.adult$Riski.indikaattori, Aikuinen=risk.adult$Result, Lapsi=risk.child$Result)
risk.table.b <- data.frame(Altistumisreitti=risk.lifetime$Altistumisreitti, Terveysvaikutus=risk.lifetime$Terveysvaikutus, Riski.indikaattori=risk.lifetime$Riski.indikaattori, Elinikäinen=risk.lifetime$Result)
risk.table <- merge(risk.table.a, risk.table.b, all=TRUE)
cat("Kroonisesta ympäristöperäisestä haitta-ainealtistumisesta aiheutuvan terveysriskin karakterisointi. \n")
print(xtable(risk.table), type = 'html')
| |