Skip to Main Content

Economics

Asset Prices Data

Charts in R

Preliminaries

Go to Session > Set Working Directory to select your working directory.

You'll want to install the following packages if you didn't in the previous R Session. This only has to be done once.

install.packages("TSA")
install.packages("pdfetch")

I've got a few more for you:

install.packages("ggplot2")
install.packages("stargazer")
install.packages("zoo")

Once we've installed, we load the libraries. This needs to be done in every new session.

library(TSA)
library(ggplot2)
library(stargazer)
library(zoo)
library(pdfetch)

Kinds of objects in R

Just to review, we could get spreadsheets into R like so:

oil <- read.csv("monthly_dataset_baseline.csv")

As you may have noticed, you can have many objects loaded into your environment in R at the same time, and they come in a variety of flavors. Now that we have an oil object, let's see what it is.

str(oil)

Remember the Johnson & Johnson data you loaded like this?

data(JJ)

What kind of object is it?

Making a table

We'll use the stargazer package to make tables of descriptive statistics.

stargazer(oil, type = "html", title="Descriptive statistics", digits=2, out="oil.htm",
 covariate.labels=c("Variable 1","Variable 2","Variable 3", "Variable 4","Variable 5", "Variable 6"))

You should have a document called oil.htm in your working directory. This can be opened in MS Word.

Making charts

Remember making a chart like this?

plot(JJ, ylab="USD$", las=1, col="blue", xlab="Year", 
     main="Earnings per Share (EPS) for Johnson & Johnson", lwd=2) 
     minor.tick(nx=5,ny=5)

We can map the same data using different packages. Let's try with the autoplot.zoo command, which is a way to access a package of graphing tools called ggplot2.

autoplot.zoo(JJ)

Let's say we want to make a chart that looks something like this:

Chart of 10-year treasury yield

Let's get similar data from FRED using pdfetch.

treasury <- pdfetch_FRED(c("THREEFY10", "THREEFYTP10"))
names(treasury) <- c("10 Year Treasury Yield","10 Year Term Premium")

You can find information on these series on the FRED website:

What kind of object is this?

Let's plot.

p <- autoplot.zoo(treasury, facets = NULL)
p

The facets = NULL put both series in the same plot. Now let's add some labels.

p1 <- p +  labs(title = "Ten Year Treasury Yield and Term Premium, 1990-2017",
      caption = "Sources: Federal Reserve Bank of New York, Federal Reserve", x = "Year")
p1

We can control the font style and size to an extent.

p2 <- p1 + theme(plot.title = element_text(family = "serif", color="#666666", face="bold", 
           size=16, hjust=0)) + theme(plot.caption = element_text(family = "serif", 
           color="#666666", face="italic")))
p2

You can change the color scale of the lines and also the background theme, like so:

p2 + scale_colour_grey() + theme_bw()
p2 + scale_colour_manual(values=c("blue", "red"))

We can change the legend.

p3 <- p2 + theme(legend.title = element_blank()) + theme(legend.justification=c(1,1), legend.position=c(.95,.95))
p3

We can add a horizontal line as well as an annotation of the line.

p4 <- p3 + geom_hline(yintercept = .0163, color= "blue") + annotate("text", x = as.Date("1995-01-01"), 
      y = 0, label = "your equation here") + annotate("text", x = as.Date("2006-01-01"), 
      y = .02, label = "Average = 1.63%")

Adding recession bars takes a couple of steps. First we need the beginning and end dates of recessions, which I am giving you here:

recessions.df = read.table(textConnection(
  "Peak, Trough
  1857-06-01, 1858-12-01
  1860-10-01, 1861-06-01
  1865-04-01, 1867-12-01
  1869-06-01, 1870-12-01
  1873-10-01, 1879-03-01
  1882-03-01, 1885-05-01
  1887-03-01, 1888-04-01
  1890-07-01, 1891-05-01
  1893-01-01, 1894-06-01
  1895-12-01, 1897-06-01
  1899-06-01, 1900-12-01
  1902-09-01, 1904-08-01
  1907-05-01, 1908-06-01
  1910-01-01, 1912-01-01
  1913-01-01, 1914-12-01
  1918-08-01, 1919-03-01
  1920-01-01, 1921-07-01
  1923-05-01, 1924-07-01
  1926-10-01, 1927-11-01
  1929-08-01, 1933-03-01
  1937-05-01, 1938-06-01
  1945-02-01, 1945-10-01
  1948-11-01, 1949-10-01
  1953-07-01, 1954-05-01
  1957-08-01, 1958-04-01
  1960-04-01, 1961-02-01
  1969-12-01, 1970-11-01
  1973-11-01, 1975-03-01
  1980-01-01, 1980-07-01
  1981-07-01, 1982-11-01
  1990-07-01, 1991-03-01
  2001-03-01, 2001-11-01
  2007-12-01, 2009-06-01"), sep=',',
colClasses=c('Date', 'Date'), header=TRUE)

We can use subset to pick out recessions within the date range of this chart.

recessions.trim = subset(recessions.df, Peak >= "1990-01-01" )

Now we can add the recession bars using this data.

p5 <- p4 + geom_rect(data=recessions.trim, inherit.aes = F, mapping = aes(xmin=Peak, 
      xmax=Trough, ymin=-Inf, ymax=+Inf), fill='pink', alpha=0.2)

You may have noticed that we used geom_rect() to add rectangles and geom_hline() to add a horizontal line. We can use geom_point() to add a highlighted point.

treasury['2013-12-02']
p6 <- p5 + annotate("point", x = rep(as.Date("2013-12-02"),2), 
      y = as.vector(treasury['2013-12-02']), colour = "red", 
      size = 3) + annotate("text", x = as.Date("2013-12-02")+100, y = 2.9484+.5, label="December 2013") 
p6