R语言Markowitz马克维茨投资组合理论分析和可视化
时间:2022-07-22
本文章向大家介绍R语言Markowitz马克维茨投资组合理论分析和可视化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接: http://tecdat.cn/?p=14200
之前我们在关于投资组合优化相关的内容中已经看到了Markowitz的理论,其中给出了预期收益和协方差矩阵
> pzoo = zoo ( StockIndex , order.by = rownames ( StockIndex ) )> rzoo = ( pzoo / lag ( pzoo , k = -1) - 1 ) * 100> ans <- do.call ( method , list ( x = x , ... ) ) + return ( getCov ( ans ) )} > covmat=Moments(as.matrix(rzoo),"CovClassic")> (covmat=round(covmat,1))SP500 N225 FTSE100 CAC40 GDAX HSISP500 17.8 12.7 13.8 17.8 19.5 18.9N225 12.7 36.6 10.8 15.0 16.2 16.7FTSE100 13.8 10.8 17.3 18.8 19.4 19.1CAC40 17.8 15.0 18.8 30.9 29.9 22.8GDAX 19.5 16.2 19.4 29.9 38.0 26.1HSI 18.9 16.7 19.1 22.8 26.1 58.1
现在,我们可以可视化下面的有效边界(和可接受的投资组合)
> points(sqrt(diag(covmat)),er,pch=19,col="blue")> text(sqrt(diag(covmat)),er,names(er),pos=4, col="blue",cex=.6)> polygon(u,v,border=NA,col=rgb(0,0,1,.3))
实际上很难在该图上将重要的东西可视化:收益之间的相关性。它不是点(单变量,具有预期收益和标准差),而是有效边界。例如,这是我们的相关矩阵
SP500 N225 FTSE100 CAC40 GDAX HSISP500 1.00 0.50 0.79 0.76 0.75 0.59N225 0.50 1.00 0.43 0.45 0.43 0.36FTSE100 0.79 0.43 1.00 0.81 0.76 0.60CAC40 0.76 0.45 0.81 1.00 0.87 0.54GDAX 0.75 0.43 0.76 0.87 1.00 0.56HSI 0.59 0.36 0.60 0.54 0.56 1.00
我们实际上可以更改FT500和FTSE100之间的相关性(此处为.786)
courbe=function(r=.786){ef plot(ef$sd,ef$er,type="l",xlab="Standard Deviation",ylab="Expected Return",points(sqrt(diag(covmat)),er,pch=19,col=c("blue","red")[c(2,1,2,1,1,1)])polygon(u,v,border=NA,col=rgb(0,0,1,.3))}
例如,相关系数为0.6,我们得到以下有效边界
> courbe(.6)
并具有更强的相关性
> courbe(.9)
很明显,相关性很重要。但更重要的是,期望收益和协方差不是给出而是估计的。以前,我们确实将标准估计量用于方差矩阵。但是可以考虑使用另一个更可靠的估计器
covmat=Moments(as.matrix(rzoo),"CovSde")points(sqrt(diag(covmat)),er,pch=19,col="blue")text(sqrt(diag(covmat)),er,names(er),pos=4,col="blue",cex=.6)polygon(u,v,border=NA,col=rgb(0,0,1,.3))
它确实影响了点的(水平)位置,因为方差现在以及有效边界都不同,而方差明显更低。
为了说明最后一点,说明我们确实有基于观察到的收益的估计量,如果我们观察到不同的收益怎么办?了解可能发生的情况的一种方法是使用引导程序,例如每日收益。
> plot(ef$sd,ef$er,type="l",xlab="Standard Deviation",ylab="Expected Return", xlim=c(3.5,11),ylim=c(0,2.5),col="white",lwd=1.5)> polygon(u,v,border=NA,col=rgb(0,0,1,.3))> for(i in 1:100){+ + + er=apply(as.matrix(rzoo)[id,],2,mean)+ points(sqrt(diag(covmat))[k],er[k],cex=.5)+ }
或其他资产
这是我们在(估计的)有效边界上得到的
> polygon(u,v,border=NA,col=rgb(0,0,1,.3))> for(i in 1:100){+ + + + ef <- efficient.frontier(er, covmat, alpha.min=-2.5, alpha.max=2.5, nport=50)+ lines(ef$sd,ef$er,col="red")+ }
因此,至少在统计学的角度上,要评估一个投资组合是否最优是很困难的。
参考文献
1.用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用
5.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
8.R语言如何做马尔科夫转换模型markov switching model
- idea 远程调试 tomcat web应用
- Java 中冷门的 synthetic 关键字原理解读
- Spring 数据库连接(Connection)绑定线程(Thread)的实现
- Golang语言实现AzDG可逆加密算法实例
- python django整理(五)配置favicon.ico,解决警告Not Found: /favicon.ico
- SpringMVC + Mybatis bug调试 SQL正确,查数据库却返回NULL
- 原生javascript实现图片轮播效果代码
- Spring AOP中 args和arg-names的区别
- Golong 语言开发 go-websocket-sample 测试值得拥有
- Java面试系列23-spring(2)-配置数据库驱动、依赖、Mapping等
- 【Golang语言社区】 Go语言中使用 Protobuf
- Java面试系列21-xml
- tensorflow载入数据的三种方式 之 TF生成数据的方法
- JS游戏开发 可移动地图的实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java入门006~springboot+freemarker+bootstrap快速实现管理后台
- Java入门007~springboot+freemarker+bootstrap快速实现分页功能
- ToolBar使用方法详解
- Android 中WallpaperManager用法实例
- Android实现屏幕各尺寸的获取的示例
- Android 中ContentProvider的实例详解
- Android Intent调用 Uri的方法总结
- Android 调用发送短信的方法
- Android 开发之Dialog中隐藏键盘的正确使用方法
- Android基于HttpUrlConnection类的文件下载实例代码
- Android ListView之setEmptyView正确使用方法
- 腾讯云Linux服务器安装Mysql8并实现远程访问
- Android实现动态改变app图标的示例代码
- 浅谈Android 的线程和线程池的使用
- 点餐系统的部署,Java点餐系统部署到腾讯云Linux服务器