利率作业

张剑

2020/03/21

Categories: 投资学 Tags: R

介绍如果安装和调用包

介绍如何计算NPV和IRR

简单展示画图——非完美版

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

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

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

调用包也非常简单,直接使用library()加包的名字,每次运行脚本时都需要把重要的包调用,首当其冲的肯定是tidyverse包

#install.packages("tidyverse")
library(tidyverse)
## -- Attaching packages ---------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.0     √ purrr   0.3.3
## √ tibble  2.1.3     √ dplyr   0.8.5
## √ tidyr   1.0.2     √ stringr 1.4.0
## √ readr   1.3.1     √ forcats 0.5.0
## -- Conflicts ------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

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

#install.packages("jrvFinance") 
library(jrvFinance)

接下来先给大家展示一下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"