I denne labben skal vi lære flere verktøy som skal hjelpe oss laste inn, behandle og plotte data.

Gjeld, renter og inntekt

For å vurdere spørsmålet om huspriser er for høy, så må man også se på andre faktorer. Det kan være gode grunner for at huspriser har økt.

Hvilket faktorer påvirker hva folk er villig til å betale for et hus? Lønn og rente er da to viktige faktorer. Vi kan se på hvordan disse har utviklet seg i norge.

Vi kan laste inn rente-data fra Norges Bank:

renter <- read.csv("http://www.norges-bank.no/WebDAV/stat/en/renter/v2/renter_mnd.csv", na.strings="ND")
head(renter)
##    DATES FOLIO.NOM RESERVE.NOM DLAAN.NOM STATSVKL.3M.EFF STATSVKL.6M.EFF
## 1 Jan-86        NA          NA     12.02              NA              NA
## 2 Feb-86        NA          NA     13.57              NA              NA
## 3 Mar-86        NA          NA     13.00              NA              NA
## 4 Apr-86        NA          NA     13.00              NA              NA
## 5 May-86        NA          NA     19.47              NA              NA
## 6 Jun-86        NA          NA     14.00              NA              NA
##   STATSVKL.9M.EFF STATSVKL.12M.EFF STATSOBL.3Y.EFF STATSOBL.5Y.EFF
## 1              NA               NA              NA           13.62
## 2              NA               NA              NA           13.60
## 3              NA               NA              NA           13.57
## 4              NA               NA              NA           13.48
## 5              NA               NA              NA           13.46
## 6              NA               NA              NA           13.54
##   STATSOBL.10Y.EFF NOWA.RATE NOWA.VOLUME
## 1            13.49        NA          NA
## 2            13.48        NA          NA
## 3            13.37        NA          NA
## 4            13.05        NA          NA
## 5            13.02        NA          NA
## 6            13.27        NA          NA

Vi skal igjen bruke pakkene ggplot2, men vi skal også introdusere pakkene zoo og reshape2, som skal hjelpe oss omformattere datasettet.

library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(reshape2)

Først, skal vi omformattere dato-variablen. Under kan vi se at det er i form av jan-95.

head(renter$DATES)
## [1] Jan-86 Feb-86 Mar-86 Apr-86 May-86 Jun-86
## 379 Levels: Apr-00 Apr-01 Apr-02 Apr-03 Apr-04 Apr-05 Apr-06 ... Sep-99

Vi vil formattere til dato-formatt. For å hjelpe oss med dette skal vi bruke noen funksjoner i pakken zoo. zoo er en pakke designet for tidsrekke-data, så vi kommer til å bruke mye av den. Her må vi bruke funksjonen as.yearmon() fra zoo pakken, deretter skal vi formatere variablen til vanlig dato-formatt med funksjonen as.Date()

dates <- as.yearmon(renter$DATES, format="%b-%y") 
renter$DATES <- as.Date(dates)
head(renter$DATES)
## [1] "1986-01-01" "1986-02-01" "1986-03-01" "1986-04-01" "1986-05-01"
## [6] "1986-06-01"

Nå velger vi ut de rente-typene vi vil inkludere: styringsrenten (FOLIO), Statskasseveksler med termin 3, 6 og 12 måneders termin og statsobligasjoner med 5 og 10 års termin.

Kan du forklare hva disse rentene betyr?

colnames(renter)
##  [1] "DATES"            "FOLIO.NOM"        "RESERVE.NOM"     
##  [4] "DLAAN.NOM"        "STATSVKL.3M.EFF"  "STATSVKL.6M.EFF" 
##  [7] "STATSVKL.9M.EFF"  "STATSVKL.12M.EFF" "STATSOBL.3Y.EFF" 
## [10] "STATSOBL.5Y.EFF"  "STATSOBL.10Y.EFF" "NOWA.RATE"       
## [13] "NOWA.VOLUME"
rente_typer <- c( "DATES","FOLIO.NOM", "STATSVKL.3M.EFF","STATSVKL.6M.EFF", "STATSVKL.12M.EFF","STATSOBL.5Y.EFF", "STATSOBL.10Y.EFF")

renter <- renter[,rente_typer]

Nå bruker vi melt() funksjonen fra reshape2 pakken til å omforme dataen så at vi får en “lang” datasett der de ulike rentetype-variablene er blitt gjort om til en lang variabel.

renter_long <- melt(renter, id.vars ="DATES")
head(renter_long)
##        DATES  variable value
## 1 1986-01-01 FOLIO.NOM    NA
## 2 1986-02-01 FOLIO.NOM    NA
## 3 1986-03-01 FOLIO.NOM    NA
## 4 1986-04-01 FOLIO.NOM    NA
## 5 1986-05-01 FOLIO.NOM    NA
## 6 1986-06-01 FOLIO.NOM    NA
colnames(renter_long)<- c("dato", "rente_type", "rente")

Da kan vi plotte:

ggplot(renter_long, aes(x=dato, y=rente, color=rente_type)) +
geom_line()
## Warning: Removed 672 rows containing missing values (geom_path).

Hva kan man si utfra rentedataen?

Lønn

Lønnsdata - vi kan få dette fra SSB - noen ganger har r problemer å lese inn norske bokstaver. Her har jeg fortalt R til å ikke se etter navn på koloner (header=FALSE), og isteden fortalt R til å skippe den første raden (skip=1)

loenn_data <- read.csv("http://data.ssb.no/api/v0/dataset/1124.csv?lang=no",
                       sep=";", header=FALSE, dec=",", na.strings = c(".", ".."),
                       skip=1)
head(loenn_data)
##                                                V1     V2
## 1 05-09b Olje- og gassutvinning og bergverksdrift 2000K1
## 2 05-09b Olje- og gassutvinning og bergverksdrift 2000K1
## 3 05-09b Olje- og gassutvinning og bergverksdrift 2000K2
## 4 05-09b Olje- og gassutvinning og bergverksdrift 2000K2
## 5 05-09b Olje- og gassutvinning og bergverksdrift 2000K3
## 6 05-09b Olje- og gassutvinning og bergverksdrift 2000K3
##                                                                                    V3
## 1                                         Indeks for gjennomsnittlig m\xe5nedsl\xf8nn
## 2 Endring fra samme periode \xe5ret f\xf8r for gj. snittl. m\xe5nedsl\xf8nn (prosent)
## 3                                         Indeks for gjennomsnittlig m\xe5nedsl\xf8nn
## 4 Endring fra samme periode \xe5ret f\xf8r for gj. snittl. m\xe5nedsl\xf8nn (prosent)
## 5                                         Indeks for gjennomsnittlig m\xe5nedsl\xf8nn
## 6 Endring fra samme periode \xe5ret f\xf8r for gj. snittl. m\xe5nedsl\xf8nn (prosent)
##     V4
## 1 78.1
## 2  0.0
## 3 78.4
## 4  0.0
## 5 80.4
## 6  0.0
colnames(loenn_data)<-c("industri", "kvartal", "type", "index")

Ved bruk av as.yearqtr() fra Zoo-pakken, konverterer vi kvartalsdata til vanlig dato-formatt

kvartal <- as.yearqtr(loenn_data$kvartal, format="%YK%q")
loenn_data$kvartal <- as.Date(kvartal)

Vi vil ha data på både en lønnsindeks og endring fra et år tidligere. Vi ser først på nivået på indeksen.

levels(loenn_data$type)
## [1] "Endring fra samme periode \xe5ret f\xf8r for gj. snittl. m\xe5nedsl\xf8nn (prosent)"
## [2] "Indeks for gjennomsnittlig m\xe5nedsl\xf8nn"
levels(loenn_data$type)<-c("Endring fra aaret før", "Indeks for gj. månedslønn")
#filter fra *dplyr* pakken
loennsindeks <- filter(loenn_data, type=="Indeks for gj. månedslønn")

Nå kan vi plotte dataene. Er det noe interessant her? Hvilken industrier har sett mest lønnsøkning? Er det overraskende?

ggplot(loennsindeks, aes(x=kvartal, y=index, color=industri)) +
  geom_line()

loennsendring

Nå kan vi se på lønsendringer.

loennsendring <- filter(loenn_data, type=="Endring fra aaret før")
ggplot(loennsendring, aes(x=kvartal, y=index, color=industri)) +
  geom_line()

Kanskje litt for mye informasjon på en figur. La oss begrense kategoriene.

levels(loennsendring$industri)
##  [1] "05-09b Olje- og gassutvinning og bergverksdrift"     
##  [2] "10-33 Industri"                                      
##  [3] "35 Kraftforsyning"                                   
##  [4] "36-39 Vannforsyning, avl\xf8p og renovasjon"         
##  [5] "41-43 Bygge- og anleggsvirksomhet"                   
##  [6] "45-47b Varehandel"                                   
##  [7] "49-53b Samferdsel"                                   
##  [8] "55-56b Hotell- og restaurantvirksomhet"              
##  [9] "58-63 Informasjon og kommunikasjon"                  
## [10] "68 Omsetning og drift av fast eiendom"               
## [11] "69-75 Faglig, vitenskapelig og teknisk tjenesteyting"
## [12] "77-82 Forretningsmessig tjenesteyting"               
## [13] "85 Undervisning"                                     
## [14] "86-88 Helse- og sosialtjenester"                     
## [15] "90-93 Kultur, underholdning og fritid i alt"         
## [16] "94-96 Personlig tjenesteyting"
industrier <- c("10-33 Industri", 
                "05-09b Olje- og gassutvinning og bergverksdrift",
                "69-75 Faglig, vitenskapelig og teknisk tjenesteyting",
                "86-88 Helse- og sosialtjenester" 
)
loennsendring_liten <- filter(loennsendring, industri %in% industrier)
ggplot(loennsendring_liten, aes(x=kvartal, y=index, color=industri)) +
  geom_line()

Ser vi noen trend her? La oss forenkle enda mer og tegne inn en trend (smooth)

loennsendring_industri <- filter(loennsendring, industri == "10-33 Industri")
ggplot(loennsendring_industri, aes(x=kvartal, y=index, color=industri)) +
  geom_line() +
  geom_smooth()
## `geom_smooth()` using method = 'loess'

Oppgaver

Gjeld

En viktig element av en boble er gjeld. Ofte når spekulasjon driver et marked, så bruker folk lånte penger til å gire avkastningen. Dette er ofte grunnen for krisene som kan følge en boble. Hvordan ser dette ut i Norge?

gjeld <- read.csv("https://data.ssb.no/api/v0/dataset/62264.csv?lang=no",
                  sep=";", dec=",", na.strings = c(".", ".."), header=FALSE, skip=1)
str(gjeld)
## 'data.frame':    46860 obs. of  6 variables:
##  $ V1: Factor w/ 3 levels "00 I alt","01 Norske kr",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ V2: Factor w/ 4 levels "Kred01 Publikum",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3: Factor w/ 11 levels "L201 Utl\xe5n fra statlige l\xe5neinstitutter",..: 11 11 11 11 11 11 11 11 11 11 ...
##  $ V4: Factor w/ 355 levels "1987M12","1988M01",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ V5: Factor w/ 1 level "Innenlandsk bruttogjeld": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V6: int  778063 781360 785926 794793 796097 801263 813960 818114 819239 830374 ...
  • endre navnene på variablene til: “valuta”, “sektor”, “kilde”, “dato”, “kategori”, “gjeld”
  • endre nivåene/levels på variablen kilde til “statlige låneinstitutter”, “banker”, “kredittforetak”, “finansieringsselskaper”, “livsforsikringsselskaper”,
    “skadeforsikringsselskaper”, “pensjonskasser”, “obligasjonsgjeld”, “sertifikatgjeld”, “andre kilder”, “kredittkilder i alt”
colnames(gjeld)<- c("valuta", "sektor", "kilde", "dato", "kategori", "gjeld")
print(levels(gjeld$kilde))
##  [1] "L201 Utl\xe5n fra statlige l\xe5neinstitutter"
##  [2] "L202 Utl\xe5n fra banker"                     
##  [3] "L203 Utl\xe5n fra kredittforetak"             
##  [4] "L204 Utl\xe5n fra finansieringsselskaper"     
##  [5] "L206 Utl\xe5n fra livsforsikringsselskaper"   
##  [6] "L207 Utl\xe5n fra skadeforsikringsselskaper"  
##  [7] "L209 Utl\xe5n fra pensjonskasser"             
##  [8] "L210 Obligasjonsgjeld"                        
##  [9] "L211 Sertifikatgjeld"                         
## [10] "L212 Utl\xe5n fra andre kilder"               
## [11] "LTOT Kredittkilder i alt"
levels(gjeld$kilde) <- c("statlige låneinstitutter", "banker", "kredittforetak", "finansieringsselskaper", "livsforsikringsselskaper",   
"skadeforsikringsselskaper",  
 "pensjonskasser",             
 "obligasjonsgjeld",                        
"sertifikatgjeld",                         
"andre kilder",               
"kredittkilder i alt")
  • omformatter dato-variablen til Date formatt.
dato <- as.yearmon(gjeld$dato, format="%YM%m")
gjeld$dato <- as.Date(dato)
  • Filtrer ut total gjeld for husholdninger (variabelen sektor) og plotte det over i tid med ulike linjer for kategoriene (variabelen kilde).
print(levels(gjeld$sektor))
## [1] "Kred01 Publikum"                 "Kred02 Kommuneforvaltningen"    
## [3] "Kred03 Ikke-finansielle foretak" "Kred04 Husholdninger mv."
print(levels(gjeld$kilde))
##  [1] "statlige låneinstitutter"  "banker"                   
##  [3] "kredittforetak"            "finansieringsselskaper"   
##  [5] "livsforsikringsselskaper"  "skadeforsikringsselskaper"
##  [7] "pensjonskasser"            "obligasjonsgjeld"         
##  [9] "sertifikatgjeld"           "andre kilder"             
## [11] "kredittkilder i alt"
hh_gjeld <- filter(gjeld, sektor=="Kred04 Husholdninger mv." & valuta == "00 I alt" )
ggplot(hh_gjeld, aes(x=dato, y=gjeld, color=kilde)) +
  geom_line()

  • Hva er de viktigste kildene. Filtrer ut disse og vis i en ny plott. Tolk resultatene.
kilder = c("banker", "finansieringsselskaper")
hh_gjeld <- filter(hh_gjeld, kilde%in%kilder)
ggplot(hh_gjeld, aes(x=dato, y=gjeld, color=kilde)) +
  geom_line()