+ Näytä koodi- Piilota koodi
library(sorvi)
library(OpasnetUtils)
library(ggplot2)
kunnat <- opbase.data("Op_fi3907") # [[Suomen kunnat]]
colnames(kunnat)[colnames(kunnat) == "Result"] <- "Maakunta"
# Luonnos uudemmaksi tavaksi kaivaa data.
rad <- opbase.data("Op_fi2759") # [[Radon sisäilmassa]]
colnames(rad)[colnames(rad) == "Havainto"] <- "Observation"
#rad <- tidy(rad, objname = "radon", direction = "long")
#print(xtable(rad), type = 'html')
oprint(head(rad))
radon <- opbase.data("op_fi2759")#[, 3:6]
head(radon)
#radon$Result <- ifelse(is.na(radon$Result.Text), radon$Result, as.numeric(as.character(radon$Result.Text)))
#radon <- radon[, 1:3]
colnames(radon)[3] <- "r"
#head(radon)
radon <- radon[substr(radon$Havainto, 1, 7) != "kaikki.", ]
radon <- radon[radon$Maakunta != "Yhteensä", ]
#print(xtable(reshape(radon, idvar = "Maakunta", timevar = "Havainto", direction = "wide")), type = 'html')
radon$Talo <- ifelse(substr(radon$Havainto, 1, 3) == "pt.", "Pientalo", "Kerrostalo")
radon$P <- substr(radon$Havainto, 4, 10)
radon <- radon[, colnames(radon)!="Havainto"]
radon <- reshape(radon, idvar = c("Maakunta", "Talo"), timevar = "P", direction = "wide")
radon[is.na(radon)] <- 0
#print(xtable(radon), type = 'html')
j <- 2/3 # c( rep(2/3, 8), 3/4, rep(2/3, 9), 3/4, rep(2/3, 21))
X2 <- radon$r.max
for(i in 1:nrow(radon)) {X2[i] <- min(radon$r.max[i], (radon$r.med[i] + 201)/2)}
X <- data.frame(P1 = radon$r.med, P2 = X2, P3 = radon$r.max, P4 = 201, P5 = 351, P6 = 401, P7 = 601, P8 = 801)
P <- data.frame(
P1 = 50,
P2 = (50 - radon$r.y200),
P3 = (radon$r.y800)*(1-j),
P4 = (radon$r.y200 - radon$r.y400)*j,
P5 = (radon$r.y200 - radon$r.y400)*(1-j),
P6 = (radon$r.y400 - radon$r.y800)*j,
P7 = (radon$r.y400 - radon$r.y800)*(1-j),
P8 = (radon$r.y800)*j)/100
#X <- data.frame(P1 = radon$r.Mediaani, P2 = radon$r.Maksimi, P3 = 201, P4 = 351, P5 = 401, P6 = 601, P7 = 801)
#P <- data.frame(P1 = 50, P2 = radon$r.Yli800*(1-j), P3 = radon$r.Yli200*j, P4 = radon$r.Yli200*(1-j), P5 = radon$r.Yli400*j, P6 = radon$r.Yli400*(1-j), P7 = radon$r.Yli800*j)/100
Xsort <- X
for(i in 1:nrow(X)){Xsort[i, ] <- sort.int(t(X[i, ]), index.return=TRUE)[[2]]}
for(i in 1:nrow(X)){X[i, ] <- X[i, t(Xsort[i, ])]}
for(i in 1:nrow(X)){P[i, ] <- P[i, t(Xsort[i, ])]}
#head(radon)
#print(xtable(Xsort), type = 'html')
#print(xtable(P), type = 'html')
#head(P)
X$P1 <- (radon$r.ka - rowSums((X*P)[, -1])) / 0.5
#print(xtable(X), type = 'html')
#rowSums(X*P)
#rowSums(P)
intP <- P
for(i in 2:ncol(P)){intP[, i] <- rowSums(P[, 1:i])}
#intP
out <- data.frame()
for(j in 1:n){
radoniter <- intP[, 1]
iter <- rowSums(runif(nrow(intP), 0, 1) > intP)+1
for(i in 1:nrow(intP)){radoniter[i] <- X[i, iter[i]]}
radon2 <- data.frame(Maakunta = radon$Maakunta, Talo = radon$Talo, obs = n, Radon = radoniter)
radon2
out <- rbind(out, radon2)
}
#radon2
#head(out)
#talot <- opbase.data("Op_fi2761")[, -c(1, 2, 8)]
talot <- opbase.data("Op_fi2761")
talot <- talot[talot$Talotyyppi != "Kaikki talotyypit" & talot$Kunta !="KOKO MAA - HELA LANDET" & talot$Asuntokunta != "Kaikki asuntokunnat", ]
talot$Talotyyppi <- ifelse(talot$Talotyyppi=="Asuinkerrostalo", "Kerrostalo", "Pientalo")
#head(talot)
väki <- data.frame(Asuntokunta = c("1 henk.", "2 henk.", "3 henk.", "4 henk.", "5 henk.", "6 henk.", "7+ henk."), n = 1:7)
talot <- merge(talot, väki)
#head(talot)
talot$Result <- talot$Result * talot$n
talot <- as.data.frame(as.table(tapply(talot$Result, list(talot$Kunta, talot$Talotyyppi), sum)))
colnames(talot) <- c("Kunta", "Talo", "Asukkaita")
#head(talot)
talot <- merge(talot, kunnat)
#head(talot)
out <- merge(out, talot)
#head(out)
rr.radon <- 1.0016
rr.tupakka <- 20
tausta.altistus <- 5
tausta.sairastuvuus <- data.frame( Maakunta = rep(c("Uusimaa", "Itä-Uusimaa", "Varsinais-Suomi", "Satakunta", "Kanta-Häme",
"Pirkanmaa", "Päijät-Häme", "Kymenlaakso", "Etelä-Karjala", "Etelä-Savo", "Itä-Savo", "Pohjois-Karjala", "Pohjois-Savo",
"Keski-Suomi", "Pohjanmaa", "Vaasa", "Keski-Pohjanmaa", "Pohjois-Pohjanmaa", "Kainuu", "Länsi-Pohja", "Lappi", "Ahvenanmaa", "Koko maa"), 2),
Sukupuoli = (rep( c("Miehet", "Naiset"), each = 23)), Sairastuvuus = c(29.5, 29.5, 26.3, 30.2, 30.3, 26.5, 26.9, 26.6, 29.0, 26.1, 28.7, 29.0, 26.7, 24.7, 26.1, 26.1, 29.8, 30.9, 28.3, 33.7, 34.3, 27.9, 28.2, 11.8, 11.8, 9.2, 7.7, 9.0, 7.7, 7.7, 9.5, 7.2, 7.4, 6.6, 5.8, 5.4, 6.0, 5.9, 8.7, 9.3, 8.7, 7.9, 10.1, 11.3, 13.9, 8.8))
tupakoivat <- data.frame(Sukupuoli = rep(c("Miehet", "Naiset"), 2), Tupakoivien.osuus = rep(c(0.22, 0.16), 2), Tupakka = rep(c("Kyllä", "Ei"), each = 2))
out <- merge(out, tausta.sairastuvuus)
out <- merge(out, tupakoivat)
out$Asukkaita <- out$Asukkaita/2 * ifelse(out$Tupakka == "Kyllä", out$Tupakoivien.osuus, 1-out$Tupakoivien.osuus)
out$Sairastuvuus <- out$Sairastuvuus * (1 - out$Tupakoivien.osuus * (rr.tupakka - 1) / (out$Tupakoivien.osuus * (rr.tupakka - 1) +1))
out$Kokonaisvaikutus <- exp(log(rr.tupakka)*ifelse(out$Tupakka == "Kyllä", 1,0) + log(rr.radon)*out$Radon)
out$Radonvaikutus <- out$Kokonaisvaikutus - exp(log(rr.tupakka)*ifelse(out$Tupakka == "Kyllä", 1,0))
out$Radonvaikutus <- out$Radonvaikutus * out$Sairastuvuus/100000 * out$Asukkaita
out$Kokonaisvaikutus <- out$Kokonaisvaikutus * out$Sairastuvuus/100000 * out$Asukkaita
oprint(out[1:20, ])
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)
| |