Skip to Main Content
It looks like you're using Internet Explorer 11 or older. This website works best with modern browsers such as the latest versions of Chrome, Firefox, Safari, and Edge. If you continue with this browser, you may see unexpected results.

Economics: ECON 304 - Macroeconomic Finance

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