Introduksjon til R for Anvendt Makroøkonomi, BI Trondheim

Dataanalyse og bruk av makroøkonomisk og finansiell data er et hovedfokus i kurset anvendt makroøkonomi. Ved BI Trondheim, skal vi bruke analyseverktøyet og programmeringspråket, R.

Hvorfor R?

Du har antakelig brukt andre statistikk-verktøy i tidligere kurs, som SAS, STATA, eller Excel. Hvorfor burde man bruke tid på å lære nok et verktøy?

Fordi R er mer enn bare et statistikk-verktøy. Det er et programmeringspråk og standard. Det brukes av nesten samtlige statistikkere, de fleste empiriske forskere, og i økende grad forskere innenfor økonomi.

Enda viktigere, brukes det av:

R har blitt hovedverktøyet til en hel profesjon - det som kalles Data Analyst eller Data Scientist. I arbeidsmarkedet er det økende behov for ansatte som har grunnleggende kunnskaper i både økonomi og data-håndtering og analyse. Å ha både en solid økonomiutdannelse og grunnleggende kunnskaper i bruk av R vil gi en reel fordel i dagens konkurranse-preget arbeidsmarked.

Hvordan å få hjelp eller lære mer

Det finnes mange kilder for å lære mer R og få hjelp på nettet. Man kan begynne med An Introduction to R. UCLA har også en nyttig webside om R og data analyse.

Kanskje den mest vanlig måte å få hjelp er å bruke google. Det holder vanligvis å skrive noe som: “How to load in data R” i søkemotoren til å finne fram til riktig svar.

Installering av R og R-Studio

R er en kraftig og anvendbar verktøy. Den er også gratis og kan lastes ned uten restriksjoner fra webben. Du kan også laste ned et tilleggsprogram som gjør R lettere å bruke som heter R-Studio.

Instruksene finner du under:

  1. I netleseren, finn fram til http://cran.uib.no/
  2. Klikk på riktiv utgave (Mac, PC, Linux) av R
  1. Etter R har blitt installert, gå til https://www.rstudio.com/products/rstudio/#Desktop
  2. Klikk på “Download RStudio Desktop”" knappen
  1. Etter R og RStudio har blitt installert, åpne RStudio. Nå er du klar til å begynne med data-analyse!

Litt øving i R

Etter man har åpnet RStudio, burde man se 4 forskjellige vinduer på skjermen.

På bunnen på venstre siden er det et vindu som heter “console”

prøv å skriv in følgende etter “>” symbolet:

print("Hello World!")
## [1] "Hello World!"

Hva har skjedd? Console er der vi kommunsirer med R. Vi forteller R til å printe “Hello World”, og da gjør det det.

Nå prøv å skrive

#This is a comment

Hvis du har gjort det riktig, så burde ingenting skje. Å bruke “#” forran noe betyr at man ikke vil ha noe respons

For det meste, skal vi ikke skrive direkte inn i console. Isteden skal vi samle våre kode i en “script”-fil. Dette er det man ser i vinduet på toppen til venstre. Filene slutter med “.r”, men filene er egentlig bare vanlige tekst-filer, men å kalle det for .r forteller datamaskinen at det innholder kode for R.

Skriv in følgende linjer i din “.r” fil:

print("hello")
print("R is fun")
print("holy cow")

Hvis du markerer en av linjene og da trykker på knappen der det står Run blir den linjen sendt til konsolen. Hvis du markerer alle linjene, så blir alle linjene sendt til konsolen.

R nettverket

Det som gjør R så viktig, kraftig og anvendbar er at hvis man får en ide for noe som r burde kunne gjøre, så kan man skrive en app og gjøre det tilgjengelig for alle andre r-brukere. Sånne “apps” heter “packages” i r, og vi skal bruke flere nyttige packages

En package som vi skal bruke mye av i framtiden heter ggplot2, som lar oss plotte data på en særlig fleksibel og lettvint måte. For å laste ned og installere pakken skriver vi i konsolen:

install.packages("ggplot2")

For å bruke ggplot2 må vi først laste den in til R ved å skrive

library(ggplot2)

Hva om vi hadde et spørsmål om en kommando og hvordan å bruke den? Da kan vi få opp hjelpe-filene ved å skrive inn kommandoen med spørsmålstegn i forkant, som:

?print

Labber

Nå skal vi øve litt med ekte datasett, vi begynner med data om oljeproduksjon fra norske felt.

Olje

Vi kan laste inn data direkt fra webben - her direkt fra min webside.

oil_fields<-read.csv("http://jmaurit.github.io/data/oil_fields_cross.csv", header=T, sep=",")

Hva har skjedd? I RStudio er det et vindu som heter Environment, der vi nå kan se en fil som heter oil_fields. Prøv å klikke på filen og se hva som skjer. Alternativt, skriv inn i konsolen

oil_fields er en objekt som kalles en data frame - man kan tenke på det som en excel-ark der kolonene er variabler og radene er observasjoner.

I konsolen, tast inn:

oil_fields

Hva skjer? Antakeligvis for mye informasjon.

Prøv isteden:

head(oil_fields, n=10)

Dette vil printe ut kun de første 10 radene av datasettet.

tail(oil_fields, n=10)

Dette vil printe ut de siste 10 radene av datasettet.

Nå, skriv inn:

str(oil_fields)

Dette viser strukturen av data-settet. Vi kan se at formattet til variablen producing_from er en factor faktor - som er vanligvis brukt til å definere en kategori, som bilmerke, eller farge, osv.

$ brukes til å nå individuelle variabler/koloner

head(oil_fields$recoverable_oil)

Vi kunne også sjekke formattet til variablen ved class kommandoen:

class(oil_fields$producing_from)

Vi vil konvertere variablen fra faktor til dato, dette kan vi gjøre ved å bruke kommandoen as.Date()

oil_fields$producing_from<-as.Date(oil_fields$producing_from,format="%Y-%m-%d")

Dette kan vi sjekke:

Nå kan vi begynne å plotte. Først kan vi se på størrelsen av oljefeltene, definert som utvinnbarolje (“recoverable oil”).

plot(oil_fields$producing_from, oil_fields$recoverable_oil)

Hva sier denne figuren om størrelsen på oljefunn over tid?

Vi kan endre titellen på plotten:

plot(oil_fields$producing_from, oil_fields$recoverable_oil, xlab="", ylab="recoverable oil, Mill SM3")

La oss også se på en histogram. Hvordan kan vi tolke denne histogrammen? Hva sier det om oljefelt i norske vann?

hist(oil_fields$recoverable_oil)
hist(oil_fields$recoverable_oil, breaks=50)

Nå kan vi lage noen nye variabler: Forskjellen mellom recoverable oil og remaining oil er hvor mye har allerede blitt pumpet ut. Vi lager denne variablen.

oil_fields$extracted<-oil_fields$recoverable_oil-oil_fields$remaining_oil

Nå kan vi lage en variabel som forteller oss investeringer (i dollar) per enhet utvunnet olje:

oil_fields$invest_per_millsm3<-oil_fields$total.invest/oil_fields$extracted

La oss prøve å plotte dette:

plot(oil_fields$recoverable_oil, oil_fields$invest_per_millsm3)

Kan du forklare mønsteret?

Prøv å plotte relativ til første produksjonsdato:

plot(oil_fields$producing_from,oil_fields$invest_per_millsm3)

La oss se på kun de store feltene: her vil vi vise kun felt som er større en 50 mill sm3,

oil_fields[oil_fields$recoverable_oil>50, ]
##         X         name      lon      lat recoverable_oil remaining_oil
## NA     NA         <NA>       NA       NA              NA            NA
## 5      64       ÅSGARD 6.728537 65.11635           100.4          18.6
## 7      85       BALDER 2.446895 59.30631            72.1          16.2
## 10    121        BRAGE 3.014216 60.58058            59.3           4.0
## 13    190      DRAUGEN 7.756043 64.33243           146.7          14.9
## 15    257      EKOFISK 3.218287 56.54663           569.2         129.8
## 16    301      ELDFISK 3.242870 56.39870           137.9          37.3
## NA.1   NA         <NA>       NA       NA              NA            NA
## 28    504        GRANE 2.506074 59.18574           124.6          36.1
## 30    524     GULLFAKS 2.130364 61.20896           365.5          11.6
## 31    557 GULLFAKS SØR 2.215286 61.10673            58.8          16.6
## 34    620      HEIDRUN 7.306980 65.32944           182.1          40.1
## 54    917        NORNE 8.147307 66.03421            90.8           3.8
## 57    971      OSEBERG 2.722425 60.54786           384.6          22.7
## 59   1020  OSEBERG SØR 2.760004 60.25226            61.0          17.2
## 71   1194       SNORRE 2.193464 61.49258           249.9          64.1
## 72   1220    STATFJORD 1.866338 61.26222           570.4           4.3
## 80   1409       TORDIS 2.117935 61.28220            61.2           6.0
## 81   1432        TROLL 3.552057 60.82293           263.8          36.0
## 85   1491          ULA 2.860582 57.10273            87.9          15.7
## 89   1553      VALHALL 3.393803 56.27577           147.4          41.5
## 92   1616   VESLEFRIKK 2.891658 60.78827            54.1           1.8
## 94   1684       VIGDIS 2.147171 61.40055            66.6          15.0
##      producing_from total.invest extracted invest_per_millsm3
## NA             <NA>           NA        NA                 NA
## 5        1999-05-19        65301      81.8           798.3007
## 7        1999-10-02        23198      55.9           414.9911
## 10       1993-09-23        17062      55.3           308.5353
## 13       1993-10-19        23291     131.8           176.7147
## 15       1971-06-15        94172     439.4           214.3195
## 16       1979-08-08        34963     100.6           347.5447
## NA.1           <NA>           NA        NA                 NA
## 28       2003-09-23        19746      88.5           223.1186
## 30       1986-12-22        74940     353.9           211.7547
## 31       1998-10-10        28340      42.2           671.5640
## 34       1995-10-18        52935     142.0           372.7817
## 54       1997-11-06        23806      87.0           273.6322
## 57       1988-12-01        66622     361.9           184.0895
## 59       2000-02-05        20108      43.8           459.0868
## 71       1992-08-03        65475     185.8           352.3950
## 72       1979-11-24        65264     566.1           115.2871
## 80       1994-06-03        12201      55.2           221.0326
## 81       1995-09-19       130620     227.8           573.3977
## 85       1986-10-06        14700      72.2           203.6011
## 89       1982-10-02        61511     105.9           580.8404
## 92       1989-12-26        16660      52.3           318.5468
## 94       1997-01-28        14829      51.6           287.3837

La merke til bruken av “[ ]” til å få tilgang til en subsett av koloner og rader i formen of mydataframe[rows, columns].

Her vil vi velge ut alle rader hvor oljefeltet er større enn 50 mill sm3.

Vi kan også velge å kun se på en variabel. Her skal vi se på navnene på alle felt som er større enn 50:

big_oil_fields<-oil_fields[oil_fields$recoverable_oil>50, "name"]

Hvis jeg har lyst på både navn og størrelse, bruker jeg c() funksjonen - “combine”:

big_oil_fields<-oil_fields[oil_fields$recoverable_oil>50, c("name", "recoverable_oil")]

Nå til noe litt mer avansert

Hensikten her er å vise hva du kan gjøre med R. Du kommer ikke til å forstå alt som skjer, men det er ingen grunn for bekymring.

Vi har lengdegrad og breddegrad data for alle oljefeltene - nå vil vi prøve å lage kart av oljefeltene.

Først, skal vi installere en package for å lage kart med bruk av google maps.

Vi trenger å installere pakken kun en gang.

install.packages("ggmap") 

Nå får å laste in pakken inn i R:

library(ggmap)

Først, skal vi laste ned kartdata fra google - dette gjør vi med commandoen fra ggmaps som heter “get_map.”

northsea<-get_map(location = c(lon = 2.74, lat = 59.00), zoom=6, maptype="satellite")
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=59,2.74&zoom=6&size=640x640&scale=2&maptype=satellite&language=en-EN&sensor=false

Og da kombinerer vi kartet som vi har lastet ned fra Google Maps med data.

Vi bruker farge som en indikator av hvor mye olje har blitt produsert fra feltet og størrelsen på sirkelen til å vise den estimerte størrelsen på oljefeltet.

ggmap(northsea) +
geom_point(aes(x = lon, y = lat, size=recoverable_oil, color=extracted),alpha=.7, data = oil_fields)+
scale_color_continuous(low="red", high="black")
## Warning: Removed 22 rows containing missing values (geom_point).

Oppgave