Packages

R kommer med mange innebygde funksjoner og kommandoer. I lab 1 lærte vi hvordan å bruke plot() funksjonen, for eksempel. Men det som gjør R virkelig viktig er muligheten til å laste ned og bruke ekstra-funksjoner. En gruppe med ekstra-funksjoner heter package.

Du kan tenke på en package, eller pakke, som en app fra en app store. Hvis du vil ta i bruk en app, så må du først laste ned appen, og deretter må du åpne appen hver gang du skal bruke den.

En package med mange nyttige funksjoner som vi kommer til å bruke heter tidyverse.

For å laste ned tidyverse fra R app store, som heter CRAN, må vi skrive følgende kommando inn i console:

install.packages("tidyverse")

Vi skal også bruke en pakke som heter readr

install.packages("readr")

Dette trenger vi bare å gjøre en gang, så lenge man ikke må oppdatere pakken eller installere den på en ny datamaskin eller nytt operativsystem.

For å åpne denne pakken skriver vi inn følgende kommando:

library(tidyverse)
## ── Attaching packages ──────────────────────────────────── tidyverse 1.3.0 ──
## ✔ ggplot2 3.2.1     ✔ purrr   0.3.3
## ✔ tibble  2.1.3     ✔ dplyr   0.8.3
## ✔ tidyr   1.0.0     ✔ stringr 1.4.0
## ✔ readr   1.3.1     ✔ forcats 0.4.0
## ── Conflicts ─────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

Nå kan vi ta i bruk de mange funksjonene som kommer med tidyr. Du kan lese mer om tidyr her.

Innhtenting av data

Før man kan utføre en analyse må man selvfølgelig få inn data. Dette kan være overraskende komplisert. Det finnes mange ulike formatter av data: excel, csv, Stata, osv. Dataseriene kan også være i mange ulike formatter: dato, tall, eller tekst.

R har noen innebgyde funksjoner for å få inn data på. Du kan også bruke RStudio menyene under Environment boksen på venstresiden. Vi skal bruke kommandoene i pakken readr som kommer som en del av tidyr pakken. Du kan lese mer her.

I prinsipp burde vi allerede få disse funksjonene ved å ha skrevet library(tidyverse), men det kan henne du må skrive inn library(readr) også.

library(readr)

Nasjonalregnskapsdata

Nasjonalregnskapsdata er tilgjengelig fra SSB. Vi skal laste inn noen serier som jeg har allerede behandlet, og vi skal laste de inn direkt fra min webside:

Dataseriene er i .csv formatt, som er en generelle format der kolonene i datasettet er separert med kolon eller semikolon (“Comma Separated Version”). Du kan for eksempel lagre Excel filer som .csv.

Vi laster inn data på total bnp i Norge og kaller det for “bnp”. Vi bruker kommandoen read_csv fra readr og tidyr.

bnp = read_csv("http://jmaurit.github.io/norwayeconomy/data_series/bnp.csv")
## Parsed with column specification:
## cols(
##   kvartal = col_date(format = ""),
##   bnp = col_double()
## )

Vi kan se på vår data ved å bare skrive navnet, bnp is consolen:

bnp
## # A tibble: 75 x 2
##    kvartal       bnp
##    <date>      <dbl>
##  1 2000-03-01 607318
##  2 2000-06-01 598547
##  3 2000-09-01 604356
##  4 2000-12-01 604594
##  5 2001-03-01 611667
##  6 2001-06-01 610581
##  7 2001-09-01 618097
##  8 2001-12-01 623469
##  9 2002-03-01 618016
## 10 2002-06-01 630856
## # … with 65 more rows

Det vi har nå gjort er å skapt en tibble. Vi kan tenke på en tibble som en Excel-ark, der variablene er koloner og hver rad er en observasjon. tibble kommer fra tidyr og er enkel å jobbe med. R har også sin egen innebygd utgave som heter Data Frame, som fungerer veldig likt.

Under kolonenavnene, ser vi at det står date og int, det betyr at readr har kjent igjen formattet til de to kolonnene som dato og heltall (integer).

Hvis vi vil ha tilgang til en av kolonene, så bruker vi $

bnp$bnp
##  [1] 607318 598547 604356 604594 611667 610581 618097 623469 618016 630856
## [11] 621494 628512 628727 625733 634524 634728 657036 658388 650786 657180
## [21] 668071 671574 677146 678669 683039 683892 690911 703556 704076 704065
## [31] 713099 720859 712091 712446 711144 713372 707593 701369 701821 702195
## [41] 716010 708399 690819 710213 710486 707548 718949 719320 734701 736433
## [51] 725758 731689 733289 738586 745830 744509 748235 753765 756934 766187
## [61] 764247 768298 777301 770475 777810 775498 769534 784852 788296 794507
## [71] 798720 800333 802927 806538 811190

Vi kan plotte vår BNP tall ved å bruke den innebygde plot kommandoen. Vi setter inn x-verdier (datoer), y-verdier (bnp) og type plot (l for linje).

plot(x= bnp$kvartal, y=bnp$bnp, type="l")

La oss importere mer data, denne gangen av norsk eksport.

export = read_csv("http://jmaurit.github.io/norwayeconomy/data_series/export.csv")
## Warning: Missing column names filled in: 'X1' [1]
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   date = col_date(format = ""),
##   petroleum_export = col_double(),
##   non_petroleum_export = col_double(),
##   perc_petroleum_export = col_double(),
##   smooth_petroleum_export = col_double(),
##   perc_non_petroleum_export = col_double(),
##   smooth_non_petroleum_export = col_double()
## )
export
## # A tibble: 468 x 8
##       X1 date       petroleum_export non_petroleum_e… perc_petroleum_…
##    <dbl> <date>                <dbl>            <dbl>            <dbl>
##  1     0 1980-01-01             3586             3872               NA
##  2     1 1980-02-01             3482             4005               NA
##  3     2 1980-03-01             3563             4272               NA
##  4     3 1980-04-01             3513             3602               NA
##  5     4 1980-05-01             3483             3802               NA
##  6     5 1980-06-01             3356             4281               NA
##  7     6 1980-07-01             2071             3554               NA
##  8     7 1980-08-01             3475             3050               NA
##  9     8 1980-09-01             3174             3863               NA
## 10     9 1980-10-01             3870             4161               NA
## # … with 458 more rows, and 3 more variables:
## #   smooth_petroleum_export <dbl>, perc_non_petroleum_export <dbl>,
## #   smooth_non_petroleum_export <dbl>

Det vi vil gjøre her er å plotte både eksport av petroleumsprodukter fra norge og eksport av ikke-petroleumsprodukter.

plot(x=export$date, y=export$petroleum_export, type="l", col="red")
lines(x=export$date, y=export$non_petroleum_export)

Her har vi først plottet petroleum eksport som den røde linjen over tid. Deretter bruker vi kommandoen lines til å legge til en ekstra plot av ikke-petroleumseksport. Fra denne plotten kan vi se et par ting:

  • Petroleumseksport er like stor og ofte større en alt annet eksport.

  • Petroleumseksport varierer mye. Dette er hovedsakelig på grunn av svingninger i oljeprisen.

  • Petroleumseksport falt kraftig etter 2012 når oljeprisen sank. Hva var grunnene for at oljeprisen gikk ned etter 2012?

KPI

KPI (Konsumprisindeks) forteller om verdien av en krone og endring av priser over tid. Det er igjen SSB som beregner og gir ut KPI-indeksen. Vi kan lese en oversikt her.

Vi kan laste ned historisk data om kpi direkt fra SSB ved å sette inn linken til data-tabellen.

Fra siden https://www.ssb.no/kpi fant jeg tabellen (Tabell 1) jeg ville laste ned, og da kopierte jeg linken der det sto .

Jeg bruker kommandoen read_csv2 isteden for read_csv fordi norsk (og mye Europeisk) data bruker , som desimal og dermed brukes ; til å skille kolonene.

kpi = read_csv2("https://www.ssb.no/eksport/tabell.csv?key=371408")
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Warning: Missing column names filled in: 'X1' [1], 'X15' [15]
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   `Y-avg` = col_character(),
##   Jan = col_number(),
##   Feb = col_number(),
##   Mar = col_number(),
##   Apr = col_number(),
##   May = col_number(),
##   Jun = col_number(),
##   Jul = col_number(),
##   Aug = col_number(),
##   Sep = col_number(),
##   Oct = col_number(),
##   Nov = col_number(),
##   Dec = col_character(),
##   X15 = col_logical()
## )

Vi kan se på vår indeks.

kpi
## # A tibble: 94 x 15
##       X1 `Y-avg`   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep
##    <dbl> <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  2018 .        1060  1070  1073  1077  1078  1085  1093  1089  1095
##  2  2017 105.5    1043  1047  1050  1052  1054  1058  1061  1053  1059
##  3  2016 103.6    1015  1021  1025  1029  1032  1038  1045  1039  1042
##  4  2015 100.0     986   989   992   996   998  1001  1001   999  1006
##  5  2014 97.9      966   971   973   977   978   975   983   979   985
##  6  2013 95.9      945   951   954   959   960   957   961   960   964
##  7  2012 93.9      932   942   941   942   942   937   933   929   939
##  8  2011 93.3      927   931   934   939   937   934   931   926   934
##  9  2010 92.1      909   920   925   927   922   921   916   914   920
## 10  2009 89.9      887   894   894   897   899   904   899   897   904
## # … with 84 more rows, and 4 more variables: Oct <dbl>, Nov <dbl>,
## #   Dec <chr>, X15 <lgl>

Vi endrer navnent på de første kolonen:

colnames(kpi)[1] = "Aar"
colnames(kpi)[2] = "Aar_gjennomsnitt"

Vi kan også legge merke til at read_csv2 kommandoen tolket den andre kolonen som en kolone med tekst ( eller characters). Vi kan fortelle r at kolonen innholder tall ved å bruke kommandoen as.numeric():

kpi["Aar_gjennomsnitt"] = as.numeric(kpi$Aar_gjennomsnitt)
## Warning: NAs introduced by coercion
kpi
## # A tibble: 94 x 15
##      Aar Aar_gjennomsnitt   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug
##    <dbl>            <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  2018             NA    1060  1070  1073  1077  1078  1085  1093  1089
##  2  2017            106.   1043  1047  1050  1052  1054  1058  1061  1053
##  3  2016            104.   1015  1021  1025  1029  1032  1038  1045  1039
##  4  2015            100     986   989   992   996   998  1001  1001   999
##  5  2014             97.9   966   971   973   977   978   975   983   979
##  6  2013             95.9   945   951   954   959   960   957   961   960
##  7  2012             93.9   932   942   941   942   942   937   933   929
##  8  2011             93.3   927   931   934   939   937   934   931   926
##  9  2010             92.1   909   920   925   927   922   921   916   914
## 10  2009             89.9   887   894   894   897   899   904   899   897
## # … with 84 more rows, and 5 more variables: Sep <dbl>, Oct <dbl>,
## #   Nov <dbl>, Dec <chr>, X15 <lgl>

Vi kan merke at referanse-året er 2015, der indeksen er lik 100.

Vi kan beregne inflasjon i 2016 som 3.6%:

\(\frac{103,6-100}{100}*100=3,6%\).

Vi kan også plotte vår KPI serie:

plot(x=kpi$Aar, y=kpi$Aar_gjennomsnitt, type="line")
## Warning in plot.xy(xy, type, ...): plot type 'line' will be truncated to
## first character

Fra plotten kan vi se at Norge opplevde forholdsvis lav prisvekst fra til omtrent 1970-tallet. Gjennom 70- og 80-tallet var det høy prisvekst. Siden den tiden har veksten i prisen stabilisert seg.