Levekårsundsersøkelsen i Bergen - lunsjprosjekt for å lære markdown i Rstudio

Bruker data fra levekårsundersøkelsen i Bergen. Data er tilgjengelig som en pdf fra Bergen kommune sine nettsider.


# Dataloading and preparations

library(ggplot2)                                      # loading ggplot for use in plotting
library(foreign)                                      # loading foreign for SPSS import
library(xtable)                                       # for describing data


levekar <- read.spss("data.sav", to.data.frame = TRUE, reencode = TRUE) 


scatterlabels <- c("Sosialhjelp til unge", 
                   "Barnevernstilfeller", 
                   "Lav utdanning", 
                   "Median bruttoinnt.", 
                   "Barnefattigdom", 
                   "Barneflytting", 
                   "Kommunale boliger", 
                   "Kriminalitet", 
                   "Uførepensjon", 
                   "Sykefravær", 
                   "Dødelighet")

scattersub <- data.frame(levekar$sosialhjelptilunge, 
                         levekar$barnevernstilfeller, 
                         levekar$lavutdannign, 
                         levekar$medianbruttoinntekt, 
                         levekar$barnefattigdom, 
                         levekar$barneflytting, 
                         levekar$kommunaleboliger,  
                         levekar$kriminalitet,  
                         levekar$uforepensjon,  
                         levekar$sykefraver, 
                         levekar$dodelighet)

names(scattersub) <- scatterlabels

# Subsetting data

income <- data.frame(levekar$medianbruttoinntekt,
                         levekar$sosialhjelptilunge, 
                         levekar$barnevernstilfeller, 
                         levekar$barnefattigdom, 
                         levekar$barneflytting, 
                         levekar$kommunaleboliger,  
                         levekar$kriminalitet,  
                         levekar$dodelighet)

incomelabs <- c("Median bruttoinntekt",
                "Sosialhjelp til unge",
                "Barnevernstilfeller",
                "Barnefattigdom",
                "Barneflytting",
                "Kommunale boliger",
                "Kriminalitet",
                "Dødelighet")

names(income) <- incomelabs



education <- data.frame(levekar$lavutdannign,
                         levekar$sosialhjelptilunge, 
                         levekar$barnevernstilfeller, 
                         levekar$barnefattigdom, 
                         levekar$barneflytting, 
                         levekar$kommunaleboliger,  
                         levekar$kriminalitet,  
                         levekar$dodelighet)

edulabs <-  c("Lav utdanning",
                "Sosialhjelp til unge",
                "Barnevernstilfeller",
                "Barnefattigdom",
                "Barneflytting",
                "Kommunale boliger",
                "Kriminalitet",
                "Dødelighet")


names(education) <- edulabs

Beskrivelse av datasettet

Bruker xtable sin html funksjon for å beskrive datasettet direkte i tabellform.

print(xtable(levekar[1:13]), type="html",include.rownames=FALSE)
id sone sosialhjelptilunge barnevernstilfeller lavutdannign medianbruttoinntekt barnefattigdom barneflytting kommunaleboliger kriminalitet uforepensjon sykefraver dodelighet
36.00 Alvøy 3.70 1.90 17.60 353000.00 2.40 3.20 0.00 9.00 2.30 6.60 7.10
11.00 Arna 5.00 4.30 18.50 322800.00 4.20 2.60 2.30 7.00 3.70 6.90 5.90
2.00 Breistein 5.70 3.40 22.50 318000.00 3.80 4.00 1.20 11.00 4.90 6.90 5.70
44.00 Bønesskogen 2.70 2.40 12.60 367600.00 3.40 4.50 0.90 7.00 2.30 5.30 5.10
12.00 Eidsvåg 4.00 2.60 13.80 343900.00 4.20 5.20 0.00 13.00 2.50 5.50 5.40
10.00 Espeland 9.20 3.80 23.50 308000.00 3.30 8.80 0.00 9.00 2.70 8.50 5.10
50.00 Fanabygda 2.50 4.20 15.70 350500.00 4.00 3.70 1.00 9.00 2.10 5.10 5.90
29.00 Fantoft 1.10 2.60 10.90 270000.00 10.80 24.30 2.00 4.00 2.10 5.00 7.70
15.00 Fjellsiden nord 3.80 5.60 12.30 335200.00 5.40 8.80 2.80 12.00 2.00 5.40 7.20
16.00 Fjellsiden sør 1.10 3.00 7.00 392100.00 4.10 9.90 0.30 8.00 1.30 4.10 5.20
8.00 Flaktveit 4.20 4.80 22.60 322400.00 7.30 6.50 1.90 8.00 3.50 8.10 6.60
48.00 Flesland 2.70 3.10 16.30 346800.00 3.20 5.70 0.00 9.00 1.70 6.10 5.40
33.00 Godvik 2.70 3.90 18.40 348500.00 4.70 3.90 2.30 11.00 2.60 6.40 6.20
39.00 Gravdal 4.10 3.40 18.60 321200.00 4.70 6.80 0.20 8.00 2.00 6.90 6.60
9.00 Gullfjellet 2.90 4.50 23.20 303400.00 3.40 5.30 0.30 7.00 2.70 7.60 4.20
7.00 Haukedal 3.50 4.30 17.60 327200.00 3.60 7.60 0.50 8.00 3.90 6.60 7.00
13.00 Hellen 3.90 2.40 13.60 329200.00 4.70 5.00 1.70 8.00 2.10 5.60 7.70
37.00 Hetlevik 2.70 4.60 23.10 330100.00 3.50 8.80 0.10 12.00 2.50 6.80 6.90
3.00 Hordvik 2.60 2.20 17.50 345100.00 3.20 3.20 0.00 7.00 2.60 7.20 5.20
35.00 Kjøkkelvik 3.90 5.90 22.50 334400.00 3.60 6.90 0.50 10.00 3.00 6.70 5.80
22.00 Kronstad 4.20 5.00 13.90 332600.00 6.70 10.40 2.60 12.00 1.80 4.40 6.20
45.00 Kyrkjetangen 2.00 2.20 10.70 365200.00 3.40 6.50 0.40 6.00 2.20 5.30 6.90
40.00 Laksevåg 7.20 7.60 22.30 296600.00 12.30 10.70 5.10 15.00 3.30 6.00 7.40
23.00 Landås 4.10 3.70 10.80 332300.00 2.90 8.00 1.40 7.00 1.90 5.50 6.10
38.00 Loddefjord 3.40 8.40 32.30 294100.00 9.30 9.50 0.60 9.00 5.10 9.00 9.90
24.00 Minde 6.90 5.30 15.00 312800.00 7.80 8.40 2.80 12.00 1.40 6.50 5.40
4.00 Mjølkeråen 5.90 3.80 24.20 304800.00 6.90 4.10 2.80 10.00 4.40 8.00 5.40
6.00 Morvik 3.10 2.70 14.60 346500.00 3.10 4.00 0.20 9.00 3.40 5.60 4.80
27.00 Nattlandsfjellet 3.50 1.70 6.40 390500.00 1.90 5.80 0.10 4.00 2.00 4.50 4.10
31.00 Nesttun 5.00 5.10 15.80 330600.00 3.40 5.80 1.30 9.00 3.20 6.10 6.70
42.00 Nordre Fyllingen 4.60 3.80 22.40 311100.00 4.40 8.50 1.00 8.00 4.50 7.40 8.00
1.00 Nyborg 4.70 4.40 20.70 315700.00 7.70 6.70 1.80 8.00 3.20 7.10 6.20
18.00 Nygårdsh./Møhlenpris 4.70 11.00 14.20 323100.00 14.70 11.40 6.10 11.00 1.90 4.40 10.30
34.00 Olsvik 4.80 8.20 27.60 310600.00 7.40 7.20 3.60 9.00 5.70 8.00 6.70
28.00 Paradis 2.40 2.90 9.60 366800.00 5.50 6.50 1.30 9.00 2.00 4.80 4.20
51.00 Rolland 3.70 1.70 17.10 338900.00 3.80 3.40 0.70 9.00 2.60 6.10 4.90
47.00 2.10 2.40 9.90 381600.00 2.60 5.70 0.80 6.00 1.70 5.10 4.60
46.00 Sandsli 3.00 3.80 13.90 362500.00 3.70 4.70 3.40 10.00 2.30 5.20 8.20
14.00 Sandviken 4.80 3.20 15.00 328400.00 8.10 7.90 2.80 11.00 2.20 5.30 8.10
19.00 Sentrum 5.50 7.10 14.00 304000.00 13.90 19.00 1.20 15.00 1.40 4.80 7.40
30.00 Skjold 3.00 4.20 13.10 349300.00 5.00 7.10 2.40 9.00 2.50 5.10 5.50
25.00 Slettebakken 9.40 9.90 19.90 293200.00 23.00 12.90 9.70 12.00 3.40 5.80 6.50
32.00 Smørås 2.90 3.50 14.40 357300.00 3.30 4.70 0.20 6.00 2.50 6.00 4.80
20.00 Solheim nord 10.60 10.40 27.30 258400.00 18.90 20.40 12.40 18.00 3.50 4.90 9.40
21.00 Solheim sør 10.60 6.40 19.00 290200.00 15.10 24.20 5.60 17.00 1.80 6.50 7.80
26.00 Sædalen 3.80 2.80 12.10 364700.00 4.40 6.40 1.90 8.00 2.20 5.20 5.30
43.00 Søndre Fyllingen 3.10 3.40 20.40 315700.00 4.00 4.70 1.90 10.00 4.30 7.50 5.90
17.00 Vågen 5.80 5.80 13.90 311700.00 13.80 9.90 1.00 13.00 1.30 4.40 6.90
5.00 Ytre Arna 9.00 4.30 24.90 288500.00 4.10 4.10 2.60 11.00 3.00 6.60 6.30
49.00 Ytrebygda 2.20 2.50 15.40 351000.00 4.20 3.60 0.00 7.00 2.30 6.10 6.40
41.00 Øvre Fyllingen 3.50 2.60 17.70 347500.00 2.80 4.00 0.20 10.00 4.40 6.20 9.10

Figur 1 - Sammenheng mellom utvalgte variabler i datasettet

En scattermatrise over alle råvariablene i datasettet. Dette inneholder også index-variabler, men disse er ekskludert i det følgende plottet.

pairs(scattersub, cex.labels = 1.1, 
      lower.panel=panel.smooth, 
      diag.panel=panel.hist, 
      upper.panel=panel.cor, 
      labels=scatterlabels)

plot of chunk unnamed-chunk-5

Plottet er en scattermatrise med histogram på diagnoalen, korrelasjoner i øvre halvdel og parvise scatterplot med smoother på nedre halvdel. For å lage plottet er følgende funksjoner definert (og endret) fra standardfunksjonenen i pairs

# Function panel.hist. Changed colour.
panel.hist <- function(x, ...) 
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col="grey80", ...)  # Endret standarfarge 
}
# Function panel.cor. Changed colour.
panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...) 
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits=digits)[1]
    txt <- paste(prefix, txt, sep="")
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt, cex = 1.5)                        # Fjernet fontstørrelse utfra korrelasjonsstørrelse
}
# Function panel.smooth. Changed colour.
panel.smooth <- function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
    cex = 1, col.smooth = "blue", span = 2/3, iter = 3, ...) # Endret standarfarge
{
    points(x, y, pch = pch, col = col, bg = bg, cex = cex)
    ok <- is.finite(x) & is.finite(y)
    if (any(ok)) 
        lines(stats::lowess(x[ok], y[ok], f = span, iter = iter), 
            col = col.smooth, ...)
}

Er utdanning og inntekt uniformt korrelert med andre indikatorer i datasettet?

Lager først en hjelpefunksjon, lånt fra denne siden.

# Helper function for making correlation table with significance indicator

corstarsl <- function(x) {
    require(Hmisc)
    x <- as.matrix(x)
    R <- rcorr(x)$r
    p <- rcorr(x)$P

    ## define notions for significance levels; spacing is important.
    mystars <- ifelse(p < 0.001, "***", ifelse(p < 0.01, "** ", ifelse(p < 0.05, 
        "* ", " ")))

    ## trunctuate the matrix that holds the correlations to two decimal
    R <- format(round(cbind(rep(-1.11, ncol(x)), R), 2))[, -1]

    ## build a new matrix that includes the correlations with their apropriate
    ## stars
    Rnew <- matrix(paste(R, mystars, sep = ""), ncol = ncol(x))
    diag(Rnew) <- paste(diag(R), " ", sep = "")
    rownames(Rnew) <- colnames(x)
    colnames(Rnew) <- paste(colnames(x), "", sep = "")

    ## remove upper triangle
    Rnew <- as.matrix(Rnew)
    Rnew[upper.tri(Rnew, diag = TRUE)] <- ""
    Rnew <- as.data.frame(Rnew)

    ## remove last column and return the matrix (which is now a data frame)
    Rnew <- cbind(Rnew[1:length(Rnew) - 1])
    return(Rnew)
}

Median bruttoinntekt korrelert med andre indikatorer.

print(xtable(corstarsl(income)), type="html")
Median bruttoinntekt Sosialhjelp til unge Barnevernstilfeller Barnefattigdom Barneflytting Kommunale boliger Kriminalitet
Median bruttoinntekt
Sosialhjelp til unge -0.66***
Barnevernstilfeller -0.61*** 0.57***
Barnefattigdom -0.64*** 0.62*** 0.80***
Barneflytting -0.57*** 0.42** 0.52*** 0.74***
Kommunale boliger -0.54*** 0.66*** 0.74*** 0.81*** 0.54***
Kriminalitet -0.49*** 0.68*** 0.61*** 0.62*** 0.46*** 0.60***
Dødelighet -0.47*** 0.25 0.55*** 0.50*** 0.45*** 0.44** 0.41**

Lav utdanning korrelert med andre indikatorer.

print(xtable(corstarsl(education)), type="html")
Lav utdanning Sosialhjelp til unge Barnevernstilfeller Barnefattigdom Barneflytting Kommunale boliger Kriminalitet
Lav utdanning
Sosialhjelp til unge 0.47***
Barnevernstilfeller 0.47*** 0.57***
Barnefattigdom 0.23 0.62*** 0.80***
Barneflytting 0.03 0.42** 0.52*** 0.74***
Kommunale boliger 0.26 0.66*** 0.74*** 0.81*** 0.54***
Kriminalitet 0.34* 0.68*** 0.61*** 0.62*** 0.46*** 0.60***
Dødelighet 0.32* 0.25 0.55*** 0.50*** 0.45*** 0.44** 0.41**

Noen utvalgte plott med bruk av ggplot2 pakken.

# krim-index

ikrim <- data.frame(levekar$sone, levekar$ikriminalitet)  # create dataframe with interesting variables
names(ikrim) <- c("sone", "ikrim")  # adding names to dataframe
ikrim <- ikrim[with(ikrim, order(ikrim)), ]  # ordering by ascending crimelevels

ikrim.s <- transform(ikrim, sone = reorder(sone, -ikrim))  # dataframe for plot, sorting descending on crimelevel

# krim-prosentskåre

krim <- data.frame(levekar$sone, levekar$kriminalitet)  # create dataframe with interesting variables
names(krim) <- c("sone", "krim")  # adding names to dataframe
krim <- krim[with(krim, order(krim)), ]  # ordering by ascending crimelevels

krim.s <- transform(krim, sone = reorder(sone, -krim))  # dataframe for plot, sorting descending on crimelevel

Figur 2 - Krim (index) i deler av Bergen

qplot(sone, ikrim, data=ikrim.s, geom="bar") +         # making baseplot
  geom_hline(yintercept=mean(ikrim.s$ikrim)) +         # adding a vertical line at mean
  theme (axis.text.x = element_text(angle = 0),            # rotating axis text
       axis.text.y = element_text(angle = 0, hjust=0)) + # rotating axis text and adjusting labels
         coord_flip()                                  # flipping coordinates to get plot sideways

plot of chunk unnamed-chunk-13

Figur 3 - Krim (prosent) i deler av Bergen

qplot(sone, krim, data=krim.s, geom="bar") +           # making baseplot
  geom_hline(yintercept=mean(krim.s$krim)) +           # adding a vertical line at mean
  theme (axis.text.x = element_text(angle = 0),            # rotating axis text
       axis.text.y = element_text(angle = 0, hjust=0)) + # rotating axis text and adjusting labels
         coord_flip()

plot of chunk unnamed-chunk-14