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).