利率及中国常见利率展示

张剑

2020/03/09

Categories: 投资学 Tags: 投资 R

R中安装包和调用包——jrvFinance

1. R或python之所以强大是应为包多,包多干的事就多。安装和调用包非常简单,在Rstudio里直接使用右边的Packages对包进行管理,用鼠标就能完成。

使用代码安装install.packages(‘包的名字’),不过我还是建议在Rstudio里直接点击安装。

我们先安装一个现代R里最重要的一个套包,安装前请同学们调整好自己tools菜单,option选项里安装镜像站点的位置。

调用包也非常简单,直接使用library()加包的名字,每次运行脚本时都需要把重要的包调用,首当其冲的肯定是tidyverse包,当然也可以使用pacman包对调用包进行集中管理。

#install.packages("tidyverse")
pacman::p_load(tidyverse)

接下来我们可以安装一个和我们接下来课程相关的金融包,代码前我加了一个“#”代表这条被注释了,大家可以用快捷键ctrl+shift+c进行注释或取消注释。

#install.packages("jrvFinance") 
pacman::p_load(jrvFinance)

介绍如何计算NPV和IRR

接下来先给大家展示一下jrvFinance包的简单用法,计算一系列现金流的PV,计算一个5年的现金流,贴现率为0.05,现金流分别为100,200,400,300,200

#library(jrvFinance) #先调入包
# 我们现在只做最基本的演示,其他包可以不用调入
pv <- npv(cf = c(100,200,400,300,200),rate =0.05,immediate.start=T ) ## 注意最后这个参数,上课是讲一下
paste('我们要计算的现值是:',pv)
## [1] "我们要计算的现值是: 1076.97975637723"

如果要计算IRR,也可以使用jrvFinance这个包,同样假设一系列现金流,0期支付200,后续每年回报80,持续4年,问这一组现金流的IRR是多少?

#library(jrvFinance) #如果你前面一个框框里调入了jrvFinance,也没有必要再次调入了
irr <- irr(cf=c(-200,80,80,80,80))
paste("我们要计算的IRR是:",irr)
## [1] "我们要计算的IRR是: 0.218622696098342"
#嗯,确实非常简单

如果不用包,如何计算npv?

下面直接写一下,按照公式很简单的也能得到,我们将使用tribble函数建立一个DataFrame(数据框)后面有机会和大家详细讲一下数据框和所谓的tidy data。这里的语法大家可能有点困惑,不过熟悉以后就会觉得非常直观。

#library(tidyverse)

# 我们使用tribble函数
cf <- tribble(~Year,~cash_flow,
              1,100,
              2,300,
              3,200,
              4,1000)
cf
## # A tibble: 4 x 2
##    Year cash_flow
##   <dbl>     <dbl>
## 1     1       100
## 2     2       300
## 3     3       200
## 4     4      1000
# 给定贴现率r=0.03
r <- 0.03
npv <- cf %>%
  mutate(pv = cash_flow/(1+r)^Year) %>%
  select(pv) %>% sum()
paste("我们要求的npv是:",npv)
## [1] "我们要求的npv是: 1451.38153116722"

中国重要利率的趋势图

对教材的数据进行了更新

setwd("~/我的坚果云/2020年MOOC")
readr::guess_encoding("data.csv")
## # A tibble: 4 x 2
##   encoding confidence
##   <chr>         <dbl>
## 1 GB18030        1   
## 2 EUC-JP         0.67
## 3 Big5           0.54
## 4 EUC-KR         0.45
data <- read_csv("data.csv",locale = locale(encoding = "GB18030"))
## Parsed with column specification:
## cols(
##   指标名称 = col_character(),
##   `贷款市场报价利率(LPR):1年` = col_character(),
##   `贷款市场报价利率(LPR):5年` = col_character(),
##   `SHIBOR:隔夜` = col_character(),
##   `SHIBOR:1周` = col_character(),
##   `国债到期收益率:10年` = col_character(),
##   `企业债到期收益率(AA):10年` = col_character(),
##   `企业债到期收益率(AAA):10年` = col_character()
## )
data <-data[-1,]
str(data)
## tibble [297 x 8] (S3: tbl_df/tbl/data.frame)
##  $ 指标名称                  : chr [1:297] "2019-01" "2019-01" "2019-01" "2019-01" ...
##  $ 贷款市场报价利率(LPR):1年 : chr [1:297] "4.3100" "4.3100" "4.3100" "4.3100" ...
##  $ 贷款市场报价利率(LPR):5年 : chr [1:297] NA NA NA NA ...
##  $ SHIBOR:隔夜               : chr [1:297] "2.3000" "1.9680" "1.6490" "1.4470" ...
##  $ SHIBOR:1周                : chr [1:297] "2.6340" "2.5470" "2.5630" "2.4750" ...
##  $ 国债到期收益率:10年       : chr [1:297] "3.2042" "3.1517" "3.1316" "3.1509" ...
##  $ 企业债到期收益率(AA):10年 : chr [1:297] "5.3754" "5.3291" "5.3166" "5.3056" ...
##  $ 企业债到期收益率(AAA):10年: chr [1:297] "4.3120" "4.2550" "4.2369" "4.2187" ...
data <- data %>%
  rename(time = `指标名称`) %>%
  mutate(time = anytime::anytime(time),LPR1 = as.numeric(`贷款市场报价利率(LPR):1年`),
         LPR1 = as.numeric(`贷款市场报价利率(LPR):1年`),shibor_on = as.numeric(`SHIBOR:隔夜`),shibor_week = as.numeric(`SHIBOR:1周`),Ndebt=as.numeric(`国债到期收益率:10年`),AAdebt=as.numeric(`企业债到期收益率(AA):10年`),AAAdebt = as.numeric(`企业债到期收益率(AAA):10年`),) %>%
  filter(!is.na(time) ) %>%
  select(time,shibor_on ,shibor_week,Ndebt,AAdebt,AAAdebt,LPR1) %>%
  gather(key='type',value = 'value',-time)
  

ggplot(data,aes(x=time, y = value, color=type))+
  geom_line( size = 1.3,alpha=0.6)+
  tidyquant::theme_tq()+xlab("时间") +
  ylab("收益率%") + ggtitle("2019年至2020年中国主要利率",subtitle="包含AAA级债,LPR,隔夜shibor,AA级债,国债,周shibor")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Warning: Removed 17 row(s) containing missing values (geom_path).