【金融统计】R语言风险回报权衡。风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。
金融统计
风险回报权衡
风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。
其中的数据来源::F-F_Research_Data_Factors.txt
下载网站:http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
Step1:数据导入
#读取文件
FF.raw <- read.fwf(file="F-F_Research_Data_Factors.txt", widths=c(6,8,8,8,8),skip=4)
head(FF.raw)
V1 V2 V3 V4 V5
1 192607 2.96 -2.56 -2.43 0.22
2 192608 2.64 -1.17 3.82 0.25
3 192609 0.36 -1.40 0.13 0.23
4 192610 -3.24 -0.09 0.70 0.32
5 192611 2.53 -0.10 -0.51 0.31
6 192612 2.62 -0.03 -0.05 0.28
#获取最后几行数据
tail(FF.raw)
V1 V2 V3 V4 V5
1248 2018 -6.95 -3.21 -9.73 1.83
1249 2019 28.28 -6.10 -10.34 2.15
1250 2020 23.66 13.17 -46.57 0.45
1251 2021 23.56 -3.92 25.57 0.04
1252 <NA> <NA> <NA> <NA> <NA>
1253 Copyri ght 2022 Kenneth R. Fren ch
Step2:数据处理
由于文件后面包含汇总的年度数据,这是我们不需要的,所以需要删除。
FF.raw<-FF.raw[-1154:-1253,]
#命名
names(FF.raw)<-paste(c("text.date","RmxRf","SMB","HML","Rf"))
head(FF.raw)
text.date RmxRf SMB HML Rf
1 192607 2.96 -2.56 -2.43 0.22
2 192608 2.64 -1.17 3.82 0.25
3 192609 0.36 -1.40 0.13 0.23
4 192610 -3.24 -0.09 0.70 0.32
5 192611 2.53 -0.10 -0.51 0.31
6 192612 2.62 -0.03 -0.05 0.28
tail(FF.raw)
text.date RmxRf SMB HML Rf
1148 202202 -2.29 2.23 3.04 0.00
1149 202203 3.05 -1.60 -1.80 0.01
1150 202204 -9.46 -1.41 6.19 0.01
1151 202205 -0.34 -1.85 8.41 0.03
1152 202206 -8.43 2.09 -5.97 0.06
1153 202207 9.56 2.78 -4.08 0.08
#显示内部结构
str(FF.raw)
'data.frame': 1153 obs. of 5 variables:$ text.date: chr "192607" "192608" "192609" "192610" ...$ RmxRf : chr " 2.96" " 2.64" " 0.36" " -3.24" ...$ SMB : chr " -2.56" " -1.17" " -1.40" " -0.09" ...$ HML : chr " -2.43" " 3.82" " 0.13" " 0.70" ...$ Rf : chr " 0.22" " 0.25" " 0.23" " 0.32" ...
FF.raw<-FF.raw[,c(-1,-3,-4)]
#将数据数值化并计算
FF.raw$RmxRf<-as.numeric(as.character(FF.raw$RmxRf))/100
FF.raw$Rf<-as.numeric(as.character(FF.raw$Rf))/100
FF.raw$date<-seq(as.Date("1926-07-01"),as.Date("2022-07-01"),by="months")
FF.raw[c(1:3,nrow(FF.raw)),]
RmxRf Rf date
1 0.0296 0.0022 1926-07-01
2 0.0264 0.0025 1926-08-01
3 0.0036 0.0023 1926-09-01
1153 0.0956 0.0008 2022-07-01
str(FF.raw)
'data.frame': 1153 obs. of 3 variables:$ RmxRf: num 0.0296 0.0264 0.0036 -0.0324 0.0253 0.0262 -0.0006 0.0418 0.0013 0.0046 ...$ Rf : num 0.0022 0.0025 0.0023 0.0032 0.0031 0.0028 0.0025 0.0026 0.003 0.0025 ...$ date : Date, format: "1926-07-01" "1926-08-01" "1926-09-01" "1926-10-01" ...
Step3:计算原始市场回报量
数据给出了超额市场回报率,即市场回报率减去无风险利率,我们需要的是原始的市场回报。
FF.raw$Rm<-FF.raw$RmxRf+FF.raw$Rf
FF.raw[c(1:3,nrow(FF.raw)),]
RmxRf Rf date Rm
1 0.0296 0.0022 1926-07-01 0.0318
2 0.0264 0.0025 1926-08-01 0.0289
3 0.0036 0.0023 1926-09-01 0.0059
1153 0.0956 0.0008 2022-07-01 0.0964
Step4:子集数据
FF<-subset(FF.raw,FF.raw$date>="1963-12-01" & FF.raw$date<="2013-12-31")
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm
450 0.0183 0.0029 1963-12-01 0.0212
451 0.0224 0.0030 1964-01-01 0.0254
452 0.0154 0.0026 1964-02-01 0.0180
1050 0.0281 0.0000 2013-12-01 0.0281
Step5:市场总回报率和无风险利率
FF$Gross.Rm<-1+FF$Rm
FF$Gross.Rm[1]<-1
FF$Gross.Rf<-1+FF$Rf
FF$Gross.Rf[1]<-1
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm Gross.Rm Gross.Rf
450 0.0183 0.0029 1963-12-01 0.0212 1.0000 1.0000
451 0.0224 0.0030 1964-01-01 0.0254 1.0254 1.0030
452 0.0154 0.0026 1964-02-01 0.0180 1.0180 1.0026
1050 0.0281 0.0000 2013-12-01 0.0281 1.0281 1.0000
Step6:市场累计收益和无风险利率
FF$cum.Rm<-cumprod(FF$Gross.Rm)
FF$cum.Rf<-cumprod(FF$Gross.Rf)
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm Gross.Rm Gross.Rf cum.Rm cum.Rf
450 0.0183 0.0029 1963-12-01 0.0212 1.0000 1.0000 1.000000 1.000000
451 0.0224 0.0030 1964-01-01 0.0254 1.0254 1.0030 1.025400 1.003000
452 0.0154 0.0026 1964-02-01 0.0180 1.0180 1.0026 1.043857 1.005608
1050 0.0281 0.0000 2013-12-01 0.0281 1.0281 1.0000 124.745642 12.099660
Step7:数据可视化
#获取最大最小值
y.range<-range(FF$cum.Rm,FF$cum.Rf);y.range
[1] 1.0000 124.7456
par(mfrow=c(1,1))
title1<-"Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$cum.Rm,type="l",xlab="Date",ylab="Value of $1 Investment ($)",ylim=y.range,main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$cum.Rf,lty=2)
legend("topleft",c("Stocks (2013 Ending Value: $124.89)","Bonds (2013 Ending Value: $12.10)"),lty=c(1,2))
根据图中结果可以看出,股票的一美元投资价值总体大于债券投资价值,但是债券的价值显示为逐步增长,而股票的波动率较大。
Step8:绘制股票和债券收益图
#最大最小值
y.range<-range(FF$Rm,FF$Rf);y.range
[1] -0.2264 0.1661
title1<-"Volatility of Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$Rm,type="l",xlab="Date",ylab="Returns (%)",ylim=y.range,col="gray50",main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$Rf)
abline(h=0)
legend("topleft",c("Stocks","Bonds"),lty=c(1,2))
【金融统计】R语言风险回报权衡。风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。相关推荐
- R语言ggplot2可视化可视化聚类图、使用geom_encircle函数绘制多边形标定属于同一聚类簇的数据点、并自定义每个聚类簇数据点的颜色、多边形框的颜色(Cluster Plot)、主副标题题注
R语言ggplot2可视化可视化聚类图.使用geom_encircle函数绘制多边形标定属于同一聚类簇的数据点.并自定义每个聚类簇数据点的颜色.多边形框的颜色(Cluster Plot).主副标题题注 ...
- R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理
R语言机器学习Caret包(Caret包是分类和回归训练的简称).数据划分.数据预处理.模型构建.模型调优.模型评估.多模型对比.模型预测推理 目录
- R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据、单的黑白主题theme_bw主题(theme)、默认的主题(theme)可视化数据
R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据.单的黑白主题theme_bw主题(theme).默认的主题(theme)可视化数据 目录
- R语言head函数和tail函数获取dataframe、列表list、向量vector的头部和尾部数据:tail提取数据对象的尾部数据、head提取数据对象的头部数据、默认6条数据、自定义设置返回条数
R语言head函数和tail函数获取dataframe.列表list.向量vector的头部和尾部数据:tail提取数据对象的尾部数据.head提取数据对象的头部数据.默认6条数据.自定义设置返回条数 ...
- R语言Kaplan-Meier绘制生存分析、Log-rank假设检验、Cox回归曲线实战案例:恶性黑色素瘤的术后数据生存分析
R语言Kaplan-Meier绘制生存分析.Log-rank假设检验.Cox回归曲线实战案例:恶性黑色素瘤的术后数据生存分析 目录
- R语言dplyr包as.tbl函数(转化为tibble类型)和is.tbl函数(检查数据是否为tibble类型)实战
R语言dplyr包as.tbl函数(转化为tibble类型)和is.tbl函数(检查数据是否为tibble类型)实战 目录
- R语言使用fmsb包可视化基本雷达图(radar chart、蜘蛛图spider plot)、数据预处理(计算每个变量的最大值和最小值、并合并到原数据集)、可视化单个数据对象的雷达图
R语言使用fmsb包可视化基本雷达图(radar chart.蜘蛛图spider plot).数据预处理(计算每个变量的最大值和最小值.并合并到原数据集).可视化单个数据对象的雷达图 目录
- R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据
接上一篇用R语言爬取中国天气网单个城市的7天实时天气预报数据,这篇文章综合一下,使用R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据,这里的步数跨度可能有点长,但思路确实是3 ...
- R语言常用线性模型特征筛选(feature selection)技术实战:基于前列腺特异性抗原(PSA)数据
R语言常用线性模型特征筛选(feature selection)技术实战 目录 R语言常用线性模型特征筛选(feature selection)技术实战
最新文章
- Go 学习笔记(74)— Go 标准库之 unsafe
- 如何遍历字符串中的单词?
- 使用Sencha Designer来快速开发web用户界面 -- 初识Designer
- 计算机网络-信道的极限容量
- Ipython中如何输入汉字
- Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战
- 2017.9.18 数颜色 思考记录
- 35款非常有创意的透明名片设计作品
- tcpip网络编程 尹圣雨源码_网络编程——学习笔记
- 【干货】Kaggle 数据挖掘比赛经验分享
- 链接在HTML的英文,html超链接学习(适于初学者)(国外英文资料).doc
- CString类简介
- ThinkPHP中create()方法自动验证表单信息
- postgresql 数据库连接数查询
- 如何免费下载百度文库、豆丁网等网站的文档
- 搞懂PDCA循环,学会闭环思维
- 面向AMD64的文件xxx与项目的目标平台x86不兼容
- Ionic4.x ion-refresher 下拉更新
- noip赛后【微笑】
- 使用win10自带录屏软件录制视频