I denne labben skal vi se litt nærmere på finanskrisen i USA, der den verdensomspennende økonomiske krisen ble utløst.

Vi laster inn noen pakker:

library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.0.6     ✓ dplyr   1.0.4
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

En bra kilde for finansielle data i USA er St. Louis Federal Reserve sin økonomisk data webside: FRED: Federal Reserve Economic Data.

En mulighet er å finne en data-serie man er interessert i på websiden, laste den ned til datamaskinen, og da laste den inn til R ved å bruke data_series = read_csv(“homefolder/data_series.csv”).

Finanskrisen i USA ble utløst av en fall i boligpriser. Så, først vil vi finne data på boligpriser. Dataene som er mest brukt er en indeks av priser i de største byene. Indeksen ble laget av to akademikere: case-shiller indeks.

Jeg har lastet ned dataene i forkant, så vi kan bare importere dataene fra kurs-websiden:

case_shiller = read_csv("https://jmaurit.github.io/anvendt_macro/data/case_shiller.csv")
## Parsed with column specification:
## cols(
##   date = col_date(format = ""),
##   case_shiller = col_double()
## )

Vi kan begynne med å formattere variablene til henholdsvis date og numerisk

str(case_shiller)
## spec_tbl_df [209 × 2] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ date        : Date[1:209], format: "2000-01-01" "2000-02-01" ...
##  $ case_shiller: num [1:209] 101 102 103 104 105 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   date = col_date(format = ""),
##   ..   case_shiller = col_double()
##   .. )
case_shiller$date = as.Date(case_shiller$date)
case_shiller$case_shiller = as.numeric(case_shiller$case_shiller)

Og plotte:

ggplot(case_shiller, aes(x=date, y=case_shiller)) +
  geom_line()

Hva kan man se fra denne figuren?

Når begynte boligprisene å falle?

Hvorfor begynte boligprisene å falle?

Hvor langt tid tok det før prisene hadde nådd bunnen? Hvorfor tok det så mye tid?

La oss se på noen andre data serier om lønn, forbruk og sparing. Dette kan også finnes på FRED, men jeg har kombinert de til en dataframe og vi kan laste det ned fra kurswebsiden.

fed_DF <- read.csv("https://jmaurit.github.io/anvendt_macro/data/fed_DF.csv")
fed_DF["date"] <- as.Date(fed_DF$date)
str(fed_DF)
## 'data.frame':    32 obs. of  4 variables:
##  $ date           : Date, format: "1984-01-01" "1985-01-01" ...
##  $ median.wages   : int  48720 49631 51388 52032 52432 53367 52684 51145 50725 50478 ...
##  $ personal.saving: num  9.4 9.7 8 9.1 7.5 8 7.4 8.7 8.8 8.3 ...
##  $ debt.service   : num  10.5 11.3 11.8 11.9 11.8 ...

Isteden for å ha forskjellige data frames, så skal vi sette de sammen ved å bruke en join funksjon. Du kan lese mer om join her. Vi bruker en utgave som heter inner_join, som betyr at rader som ikke har en felles verdi i begge datasett er droppet fra analysen.

makro_DF = fed_DF %>% inner_join(case_shiller, by="date")
head(makro_DF)
##         date median.wages personal.saving debt.service case_shiller
## 1 2000-01-01        57790             4.7     11.51895       100.59
## 2 2001-01-01        56531             4.0     12.19412       113.05
## 3 2002-01-01        55871             5.6     12.40500       121.36
## 4 2003-01-01        55823             4.5     12.36663       136.47
## 5 2004-01-01        55629             4.5     12.16459       152.62
## 6 2005-01-01        56224             3.2     12.52438       177.55

Deretter skal vi omforme datasettet til lang formatt ved å bruke funksjonen gather.

makro_DF_long = makro_DF %>% gather(median.wages, personal.saving, debt.service, case_shiller, key="variabel", value="verdi") 

Nå kan vi plotte alle figurene sammen ved å bruke facets. Facets er del-figurer - så man lager mange små plotter innenfor en figure. Vi bruker facet_grid fra ggplot2:

ggplot(makro_DF_long, aes(x=date, y=verdi)) +
  geom_line() +
  facet_wrap(~variabel,  ncol=1, scales="free")

Alternativt, hvis vi vil vise seriene i 2x2 formatt:

ggplot(makro_DF_long, aes(x=date, y=verdi)) +
  geom_line() +
  facet_wrap(~variabel, ncol=2, scales="free")

Hvordan kan du tolke disse figurene? Kan du fortelle en historie som binder sammen disse seriene?

Hvilken betydning hadde personal savings og debt service i forkant av finanskrisen? Burde man ha vært bekymret over utviklingen av disse variablene?

Hvordan har median wages utviklet seg i USA? BNP er en god del høyere enn det var i 2000. Hvorfor har ikke median-lønn vokst?

##Oppgave: Krise, banker og risiko

Det som preget finanskrisen var at flere av de store bankene gikk konkurs, og det var stor frykt for at de andre bankene skulle følge. Et viktig utfall var at finansinstitusjoner ville få bedre betalt for å låne ut penger, siden risikoen for å tape penger var høyere. Samtidig jobbet sentralbanken for å senke styringsrenten for å prøve å beskytte økonomien.

I finans bruker man ofte forskjellen mellom to ulike obligasjoner til å si noe om risiko i markedet. Dette kalles ofte for “spread”.

Jeg har lastet ned ulike renter/avkastninger fra FRED og kombinert de i en dataframe, som du kan laste ned fra kurswebsiden, https://jmaurit.github.io/anvendt_macro/data/yields.csv

yields = read_csv("https://jmaurit.github.io/anvendt_macro/data/yields.csv")
## Parsed with column specification:
## cols(
##   date = col_date(format = ""),
##   `10-Year Treasury Constant Maturity Rate` = col_double(),
##   `1-Year Treasury Constant Maturity Rate` = col_double(),
##   `Moody's Seasoned Aaa Corporate Bond Yield©` = col_double(),
##   `Moody's Seasoned Baa Corporate Bond Yield©` = col_double(),
##   `BofA Merrill Lynch US High Yield CCC or Below Option-Adjusted Spread©` = col_double()
## )
str(yields)
## spec_tbl_df [161 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ date                                                                 : Date[1:161], format: "1997-01-01" "1997-04-01" ...
##  $ 10-Year Treasury Constant Maturity Rate                              : num [1:161] NA 6.9 6.69 6.45 6.2 6.04 5.86 NA 5.62 5.67 ...
##  $ 1-Year Treasury Constant Maturity Rate                               : num [1:161] NA 6 5.89 5.64 5.52 5.44 5.56 NA 5.37 5.41 ...
##  $ Moody's Seasoned Aaa Corporate Bond Yield©                           : num [1:161] 7.42 7.73 7.58 7.14 7.22 7 6.76 6.61 6.69 6.69 ...
##  $ Moody's Seasoned Baa Corporate Bond Yield©                           : num [1:161] 8.09 8.34 8.2 7.75 7.82 7.57 7.32 7.19 7.33 7.3 ...
##  $ BofA Merrill Lynch US High Yield CCC or Below Option-Adjusted Spread©: num [1:161] NA 6.59 6.8 6.68 6.35 5.72 7.05 NA 6.89 7.11 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   date = col_date(format = ""),
##   ..   `10-Year Treasury Constant Maturity Rate` = col_double(),
##   ..   `1-Year Treasury Constant Maturity Rate` = col_double(),
##   ..   `Moody's Seasoned Aaa Corporate Bond Yield©` = col_double(),
##   ..   `Moody's Seasoned Baa Corporate Bond Yield©` = col_double(),
##   ..   `BofA Merrill Lynch US High Yield CCC or Below Option-Adjusted Spread©` = col_double()
##   .. )
#Først, må vi gjøre om *date* variablen til *date* formatt. Vi kan deretter forkorte og forenkle variable-navnene. Sist må vi gjøre om dataframen til "long" formatt ved bruk av *melt* fra *reshape2*

yields$date <- as.Date(yields$date)
colnames(yields) = c("date", "treasury_10yr", "treasury_1yr", "AAA", "BAA", "Junk")

yields_long = yields %>% gather(treasury_10yr, treasury_1yr, AAA, BAA, Junk, key="obligasjon", value="avkastning")
#Vi kan bruke ggplot til å plotte datasettet:

ggplot(yields_long, aes(x=date, y=avkastning, color=obligasjon)) +
  geom_line()
## Warning: Removed 3 row(s) containing missing values (geom_path).

#Avkastningen på en 10-årig treasury er ofte sett som "risk free rate (RFR)". Dette er på grunn av at det er sett som nærmest umulig at USA misligholder på sin gjeld. Vi kan da bruke "spread" mellom RFR og de andre avkastningene til å gi en ide om Markedsrisikooppfattelsen. 

yields["spread_Junk"] = yields["Junk"] - yields["treasury_10yr"]
yields["spread_AAA"] = yields["AAA"] - yields["treasury_10yr"]

Vi kan filtrer ut disse spreads og da plotte dem:

spreads = yields[c("date", "spread_AAA", "spread_Junk")]
spreads_long= spreads %>% gather(spread_AAA, spread_Junk, key="spread", value="value")
ggplot(spreads_long, aes(x=date, y=value, color=spread)) +
  geom_line()
## Warning: Removed 2 row(s) containing missing values (geom_path).

#Det vi ser er at i forkant av krisen hadde spreaden på junk blitt veldig lite: kanskje en varsel? I etterkant gikk spreaden raskt opp. Markedet vurderte selkskap med dårlig betalingsevne som ekstra risikofylt i denne perioden. Det some er kanskje mer interessant var at spreaden på AAA obligasjoner også økte. Det vil si at markedet så en økt risiko for at noen av de største og mest stabile selskap, GE, Goldman Sachs, osv, ikke kunne betale sin gjeld.