library(tidyverse)
## ── Attaching packages ──────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0 ✔ purrr 0.3.0
## ✔ tibble 2.0.1 ✔ dplyr 0.8.0.1
## ✔ tidyr 0.8.2 ✔ 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()
library(stringr)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
##
## date
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(knitr)
This markdown merges the corrected (of 102 x 5 data frame of FOMC statements) with the classification data. We assume the fomc_data.rds and the raw classification file is located in the working directory.
d4<-readRDS(file = "fomc_data.rds")
dim(d4)
## [1] 102 5
str(d4)
## 'data.frame': 102 obs. of 5 variables:
## $ year : chr "2007" "2007" "2007" "2007" ...
## $ statement.dates : chr "20070131" "20070321" "20070509" "20070628" ...
## $ links : chr "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
## $ statement.content: chr "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
## $ statement.length : int 181 167 168 179 207 130 260 304 281 255 ...
We explicitly override the Date column to be imported as string because we will join these two dataframes on this data.
classificationFile = "Classification_FOMC_Statements.csv"
cls = read_csv(classificationFile , col_types = cols( Date = col_character() ) )
cls %>% rename( Economic.Growth = "Economic Growth", Employment.Growth = "Employment Growth", Medium.Term.Rate = "Medium Term Rate", Policy.Rate = "Policy Rate") -> cls
str(cls)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 102 obs. of 8 variables:
## $ Index : num 1 2 3 4 5 6 7 8 9 10 ...
## $ Date2 : chr "1/31/07" "3/21/07" "5/9/07" "6/28/07" ...
## $ Date : chr "20070131" "20070321" "20070509" "20070628" ...
## $ Economic.Growth : chr "Up" "Flat" "Down" "Up" ...
## $ Employment.Growth: chr "Flat" "Flat" "Flat" "Flat" ...
## $ Inflation : chr "Down" "Up" "Up" "Down" ...
## $ Medium.Term.Rate : chr "Hawk" "Hawk" "Hawk" "Hawk" ...
## $ Policy.Rate : chr "Flat" "Flat" "Flat" "Flat" ...
## - attr(*, "spec")=
## .. cols(
## .. Index = col_double(),
## .. Date2 = col_character(),
## .. Date = col_character(),
## .. `Economic Growth` = col_character(),
## .. `Employment Growth` = col_character(),
## .. Inflation = col_character(),
## .. `Medium Term Rate` = col_character(),
## .. `Policy Rate` = col_character()
## .. )
d4 %>% inner_join( cls , by = c("statement.dates" = "Date")) %>%
mutate( date_mdy = mdy(Date2)) %>%
select(Index,
year ,
statement.dates,
links,
statement.content,
statement.length ,
date_mdy,
Economic.Growth,
Employment.Growth,
Inflation,
Medium.Term.Rate,
Policy.Rate ) -> mgData
str(mgData)
## 'data.frame': 102 obs. of 12 variables:
## $ Index : num 1 2 3 4 5 6 7 8 9 10 ...
## $ year : chr "2007" "2007" "2007" "2007" ...
## $ statement.dates : chr "20070131" "20070321" "20070509" "20070628" ...
## $ links : chr "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
## $ statement.content: chr "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
## $ statement.length : int 181 167 168 179 207 130 260 304 281 255 ...
## $ date_mdy : Date, format: "2007-01-31" "2007-03-21" ...
## $ Economic.Growth : chr "Up" "Flat" "Down" "Up" ...
## $ Employment.Growth: chr "Flat" "Flat" "Flat" "Flat" ...
## $ Inflation : chr "Down" "Up" "Up" "Down" ...
## $ Medium.Term.Rate : chr "Hawk" "Hawk" "Hawk" "Hawk" ...
## $ Policy.Rate : chr "Flat" "Flat" "Flat" "Flat" ...
Let us view the sample data from the statements
mgData %>% select( Index, date_mdy, Economic.Growth, Employment.Growth, Inflation, Medium.Term.Rate, Policy.Rate) %>% kable() %>% kable_styling(bootstrap_options = c("hover", "striped")) %>%
scroll_box(width = "90%", height = "300px")
| Index | date_mdy | Economic.Growth | Employment.Growth | Inflation | Medium.Term.Rate | Policy.Rate |
|---|---|---|---|---|---|---|
| 1 | 2007-01-31 | Up | Flat | Down | Hawk | Flat |
| 2 | 2007-03-21 | Flat | Flat | Up | Hawk | Flat |
| 3 | 2007-05-09 | Down | Flat | Up | Hawk | Flat |
| 4 | 2007-06-28 | Up | Flat | Down | Hawk | Flat |
| 5 | 2007-08-07 | Up | Flat | Flat | Hawk | Flat |
| 6 | 2007-08-17 | Down | Flat | Flat | Dove | Flat |
| 7 | 2007-09-18 | Flat | Flat | Down | Dove | Lower |
| 8 | 2007-10-31 | Up | Flat | Down | Dove | Lower |
| 9 | 2007-12-11 | Down | Flat | Down | Dove | Lower |
| 10 | 2008-01-22 | Down | Down | Flat | Dove | Lower |
| 11 | 2008-01-30 | Down | Down | Flat | Dove | Lower |
| 12 | 2008-03-18 | Down | Down | Up | Dove | Lower |
| 13 | 2008-04-30 | Down | Down | Up | Dove | Lower |
| 14 | 2008-06-25 | Up | Down | Up | Hawk | Flat |
| 15 | 2008-08-05 | Up | Down | Up | Hawk | Flat |
| 16 | 2008-09-16 | Down | Down | Up | Dove | Flat |
| 17 | 2008-10-08 | Down | Flat | Down | Dove | Lower |
| 18 | 2008-10-29 | Down | Flat | Down | Dove | Lower |
| 19 | 2008-12-16 | Down | Down | Down | Dove | Lower |
| 20 | 2009-01-28 | Down | Down | Down | Dove | Flat |
| 21 | 2009-03-18 | Down | Down | Down | Dove | Flat |
| 22 | 2009-04-29 | Down | Down | Flat | Dove | Flat |
| 23 | 2009-06-24 | Down | Down | Down | Dove | Flat |
| 24 | 2009-08-12 | Flat | Down | Down | Dove | Flat |
| 25 | 2009-09-23 | Up | Down | Down | Dove | Flat |
| 26 | 2009-11-04 | Up | Down | Down | Dove | Flat |
| 27 | 2009-12-16 | Up | Flat | Down | Dove | Flat |
| 28 | 2010-01-27 | Flat | Flat | Down | Dove | Flat |
| 29 | 2010-03-16 | Flat | Flat | Down | Dove | Flat |
| 30 | 2010-04-28 | Flat | Flat | Flat | Dove | Flat |
| 31 | 2010-06-23 | Flat | Up | Down | Dove | Flat |
| 32 | 2010-08-10 | Down | Down | Down | Dove | Flat |
| 33 | 2010-09-21 | Down | Down | Flat | Dove | Flat |
| 34 | 2010-11-03 | Flat | Flat | Down | Dove | Flat |
| 35 | 2010-12-14 | Flat | Down | Down | Dove | Flat |
| 36 | 2011-01-26 | Flat | Down | Down | Dove | Flat |
| 37 | 2011-03-15 | Up | Flat | Up | Dove | Flat |
| 38 | 2011-04-27 | Up | Flat | Up | Dove | Flat |
| 39 | 2011-06-22 | Flat | Down | Up | Dove | Flat |
| 40 | 2011-08-09 | Flat | Down | Down | Dove | Flat |
| 41 | 2011-09-21 | Flat | Down | Down | Dove | Flat |
| 42 | 2011-11-02 | Up | Down | Flat | Dove | Flat |
| 43 | 2011-12-13 | Up | Flat | Down | Dove | Flat |
| 44 | 2012-01-25 | Up | Up | Flat | Dove | Flat |
| 45 | 2012-03-13 | Up | Up | Flat | Dove | Flat |
| 46 | 2012-04-25 | Up | Up | Up | Dove | Flat |
| 47 | 2012-06-20 | Up | Flat | Down | Dove | Flat |
| 48 | 2012-08-01 | Down | Flat | Down | Dove | Flat |
| 49 | 2012-09-13 | Up | Flat | Flat | Dove | Flat |
| 50 | 2012-10-24 | Up | Flat | Up | Dove | Flat |
| 51 | 2012-12-12 | Up | Up | Flat | Dove | Flat |
| 52 | 2013-01-30 | Flat | Up | Flat | Dove | Flat |
| 53 | 2013-03-20 | Up | Up | Flat | Dove | Flat |
| 54 | 2013-05-01 | Up | Up | Flat | Dove | Flat |
| 55 | 2013-06-19 | Up | Up | Down | Dove | Flat |
| 56 | 2013-07-31 | Up | Up | Flat | Dove | Flat |
| 57 | 2013-09-18 | Up | Up | Flat | Dove | Flat |
| 58 | 2013-10-30 | Up | Up | Flat | Dove | Flat |
| 59 | 2013-12-18 | Up | Up | Flat | Dove | Flat |
| 60 | 2014-01-29 | Up | Up | Flat | Dove | Flat |
| 61 | 2014-03-19 | Down | Up | Flat | Dove | Flat |
| 62 | 2014-04-30 | Up | Up | Flat | Dove | Flat |
| 63 | 2014-06-18 | Up | Up | Flat | Dove | Flat |
| 64 | 2014-07-30 | Up | Up | Up | Dove | Flat |
| 65 | 2014-09-17 | Up | Up | Flat | Dove | Flat |
| 66 | 2014-10-29 | Up | Up | Down | Dove | Flat |
| 67 | 2014-12-17 | Up | Up | Down | Dove | Flat |
| 68 | 2015-01-28 | Up | Up | Down | Dove | Flat |
| 69 | 2015-03-18 | Flat | Up | Down | Dove | Flat |
| 70 | 2015-04-29 | Down | Flat | Flat | Dove | Flat |
| 71 | 2015-06-17 | Up | Up | Flat | Dove | Flat |
| 72 | 2015-07-29 | Up | Up | Flat | Dove | Flat |
| 73 | 2015-09-17 | Up | Up | Down | Dove | Flat |
| 74 | 2015-10-28 | Up | Flat | Down | Dove | Flat |
| 75 | 2015-12-16 | Up | Up | Flat | Dove | Raise |
| 76 | 2016-01-27 | Down | Up | Down | Dove | Flat |
| 77 | 2016-03-16 | Up | Up | Up | Dove | Flat |
| 78 | 2016-04-27 | Down | Up | Flat | Dove | Flat |
| 79 | 2016-06-15 | Up | Flat | Down | Dove | Flat |
| 80 | 2016-07-27 | Up | Up | Flat | Dove | Flat |
| 81 | 2016-09-21 | Up | Up | Flat | Dove | Flat |
| 82 | 2016-11-02 | Flat | Up | Flat | Dove | Flat |
| 83 | 2016-12-14 | Up | Up | Up | Dove | Raise |
| 84 | 2017-02-01 | Up | Up | Up | Dove | Flat |
| 85 | 2017-03-15 | Up | Up | Flat | Hawk | Raise |
| 86 | 2017-05-03 | Down | Up | Down | Hawk | Flat |
| 87 | 2017-06-14 | Up | Up | Down | Hawk | Raise |
| 88 | 2017-07-26 | Up | Up | Down | Hawk | Flat |
| 89 | 2017-09-20 | Up | Up | Down | Hawk | Flat |
| 90 | 2017-11-01 | Up | Up | Down | Hawk | Flat |
| 91 | 2017-12-13 | Up | Up | Down | Hawk | Raise |
| 92 | 2018-01-31 | Up | Up | Flat | Hawk | Flat |
| 93 | 2018-03-21 | Up | Up | Up | Hawk | Raise |
| 94 | 2018-05-02 | Up | Up | Flat | Hawk | Flat |
| 95 | 2018-06-13 | Up | Up | Flat | Hawk | Raise |
| 96 | 2018-08-01 | Up | Up | Flat | Hawk | Flat |
| 97 | 2018-09-26 | Up | Up | Flat | Hawk | Raise |
| 98 | 2018-11-08 | Up | Up | Flat | Hawk | Flat |
| 99 | 2018-12-19 | Up | Up | Flat | Hawk | Raise |
| 100 | 2019-01-30 | Up | Up | Down | Dove | Flat |
| 101 | 2019-03-20 | Flat | Flat | Down | Dove | Flat |
| 102 | 2019-05-01 | Up | Up | Flat | Dove | Flat |
We export the merged dataframe as a single RDS object for research use.
rds_filename = "fomc_merged_data_v2.rds"
saveRDS(mgData, file = rds_filename)
Let us also validate its contents.
mgData_validated = readRDS(rds_filename)
str(mgData_validated)
## 'data.frame': 102 obs. of 12 variables:
## $ Index : num 1 2 3 4 5 6 7 8 9 10 ...
## $ year : chr "2007" "2007" "2007" "2007" ...
## $ statement.dates : chr "20070131" "20070321" "20070509" "20070628" ...
## $ links : chr "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
## $ statement.content: chr "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
## $ statement.length : int 181 167 168 179 207 130 260 304 281 255 ...
## $ date_mdy : Date, format: "2007-01-31" "2007-03-21" ...
## $ Economic.Growth : chr "Up" "Flat" "Down" "Up" ...
## $ Employment.Growth: chr "Flat" "Flat" "Flat" "Flat" ...
## $ Inflation : chr "Down" "Up" "Up" "Down" ...
## $ Medium.Term.Rate : chr "Hawk" "Hawk" "Hawk" "Hawk" ...
## $ Policy.Rate : chr "Flat" "Flat" "Flat" "Flat" ...