本文将说明金融数学中的R 语言优化投资组合,因子模型的实现和使用。

具有单一市场因素的宏观经济因素模型

我们将从一个包含单个已知因子(即市场指数)的简单示例开始。该模型为

其中显式因子ft为S&P 500指数。我们将做一个简单的最小二乘(LS)回归来估计截距α和加载β:

大多数代码行用于准备数据,而不是执行因子建模。让我们开始准备数据:

# 设置开始结束日期和股票名称列表

begin_date

end_date

# 从YahooFinance下载数据

data_set

for (stock_index in 1:length(stock_namelist))

data_set

from = begin_date, to = end_date,

head(data_set)

#> AAPL AMD ADI ABBV AEZS A APD AA CF

#> 2016-01-04 98.74225 2.77 49.99239 49.46063 4.40 39.35598 107.89010 23.00764 35.13227

#> 2016-01-05 96.26781 2.75 49.62508 49.25457 4.21 39.22057 105.96097 21.96506 34.03059

#> 2016-01-06 94.38389 2.51 47.51298 49.26315 3.64 39.39467 103.38042 20.40121 31.08988

#> 2016-01-07 90.40047 2.28 46.30082 49.11721 3.29 37.72138 99.91463 19.59558 29.61520

#> 2016-01-08 90.87848 2.14 45.89677 47.77789 3.29 37.32482 99.39687 19.12169 29.33761

#> 2016-01-11 92.35001 2.34 46.98954 46.25827 3.13 36.69613 99.78938 18.95583 28.14919

head(SP500_index)

#> index

#> 2016-01-04 2012.66

#> 2016-01-05 2016.71

#> 2016-01-06 1990.26

#> 2016-01-07 1943.09

#> 2016-01-08 1922.03

#> 2016-01-11 1923.67

plot(SP500_index)

# 计算股票和SP500指数的对数收益率作为显式因子

X

N

T

现在我们准备进行因子模型拟合。LS拟合很容易在R中实现,如下所示:

beta

alpha

sigma2

print(alpha)

#> index

#> AAPL 0.0003999086

#> AMD 0.0013825599

#> ADI 0.0003609968

#> ABBV 0.0006684632

#> AEZS -0.0022091301

#> A 0.0002810616

#> APD 0.0001786375

#> AA 0.0006429140

#> CF -0.0006029705

print(beta)

#> index

#> AAPL 1.0957919

#> AMD 2.1738304

#> ADI 1.2683047

#> ABBV 0.9022748

#> AEZS 1.7115761

#> A 1.3277212

#> APD 1.0239453

#> AA 1.8593524

#> CF 1.5702493

或者,我们可以使用矩阵表示法进行拟合,我们定义和扩展因子。然后最小化

t(X) %*% F_ %*% solve(t(F_) %*% F_)

#> alpha beta

#> AAPL 0.0003999086 1.0957919

#> AMD 0.0013825599 2.1738304

#> ADI 0.0003609968 1.2683047

#> ABBV 0.0006684632 0.9022748

#> AEZS -0.0022091301 1.7115761

#> A 0.0002810616 1.3277212

#> APD 0.0001786375 1.0239453

#> AA 0.0006429140 1.8593524

#> CF -0.0006029705 1.5702493

E

另外,我们可以简单地使用R为我们完成工作:

cbind(alpha = factor_model$alpha, beta = factor_model$beta)

#> alpha index

#> AAPL 0.0003999086 1.0957919

#> AMD 0.0013825599 2.1738304

#> ADI 0.0003609968 1.2683047

#> ABBV 0.0006684632 0.9022748

#> AEZS -0.0022091301 1.7115761

#> A 0.0002810616 1.3277212

#> APD 0.0001786375 1.0239453

#> AA 0.0006429140 1.8593524

#> CF -0.0006029705 1.5702493

可视化协方差矩阵

有趣的是,可视化对数收益率[算术处理误差]以及残差Ψ的估计协方差矩阵。让我们从对数收益率的协方差矩阵开始:

main = "单因子模型对数收益的协方差矩阵")

我们可以观察到所有股票都是高度相关的,这是市场因素的影响。为了检查股票相关关系,我们绘制相关图:

plot(cov2cor(Psi),

main = "残差协方差矩阵")

cbind(stock_namelist, sector_namelist) # 股票的行业

#> stock_namelist sector_namelist

#> [1,] "AAPL" "Information Technology"

#> [2,] "AMD" "Information Technology"

#> [3,] "ADI" "Information Technology"

#> [4,] "ABBV" "Health Care"

#> [5,] "AEZS" "Health Care"

#> [6,] "A" "Health Care"

#> [7,] "APD" "Materials"

#> [8,] "AA" "Materials"

#> [9,] "CF" "Materials"

有趣的是,我们可以观察到对Ψ执行的自动聚类可以正确识别股票的行业。

评估投资资金

在此示例中,我们将基于因子模型评估几种投资基金的绩效。我们将标准普尔500指数作为明确的市场因素,并假设无风险收益为零 rf = 0。特别是,我们考虑六种交易所买卖基金(ETF):

我们首先加载数据:

# 设置开始结束日期和股票名称列表

begin_date

end_date

# 从YahooFinance下载数据

data_set

for (stock_index in 1:length(stock_namelist))

data_set

head(data_set)

#> SPY XIVH SPHB SPLV USMV JKD

#> 2016-10-03 203.6610 29.400 31.38322 38.55683 42.88382 119.8765

#> 2016-10-04 202.6228 30.160 31.29729 38.10687 42.46553 119.4081

#> 2016-10-05 203.5195 30.160 31.89880 38.02249 42.37048 119.9421

#> 2016-10-06 203.6610 30.160 31.83196 38.08813 42.39899 120.0826

#> 2016-10-07 202.9626 30.670 31.58372 37.98500 42.35146 119.8296

#> 2016-10-10 204.0197 31.394 31.87970 38.18187 42.56060 120.5978

head(SP500_index)

#> index

#> 2016-10-03 2161.20

#> 2016-10-04 2150.49

#> 2016-10-05 2159.73

#> 2016-10-06 2160.77

#> 2016-10-07 2153.74

#> 2016-10-10 2163.66

# 计算股票和SP500指数的对数收益率作为显式因子

X

N

T

现在我们可以计算所有ETF的alpha和beta:

#> alpha beta

#> SPY 7.142225e-05 1.0071424

#> XIVH 1.810392e-03 2.4971086

#> SPHB -2.422107e-04 1.5613533

#> SPLV 1.070918e-04 0.6777149

#> USMV 1.166177e-04 0.6511667

#> JKD 2.569578e-04 0.8883843

现在可以进行一些观察:

SPY是S&P 500的ETF,如预期的那样,其alpha值几乎为零,beta值几乎为1: α= 7.142211×10-5和 β= 1.0071423。

XIVH是具有高alpha值的ETF,计算出的alpha值是ETF中最高的(高1-2个数量级): α= 1.810392×10-3。

SPHB是一种ETF,据推测具有很高的beta,而计算出的beta却是最高的,但不是最高的:β= 1.5613531。有趣的是,计算出的alpha为负,因此,该ETF应谨慎。

SPLV是降低波动性的ETF,实际上,计算得出的beta偏低:β= 0.6777072。

USMV还是降低波动性的ETF,实际上,计算出的beta是最低的:β= 0.6511671。

JKD显示出很好的折衷。

我们可以使用一些可视化:

barplot(rev(alpha), horiz = TRUE, main = "alph

我们还可以使用例如Sharpe比率,以更系统的比较不同的ETF。回顾一种资产和一个因素的因子模型

我们获得

夏普比率如下:

假设。因此,基于Sharpe比率对不同资产进行排名的一种方法是根据α/β比率对它们进行排名:

print(ranking)

#> alpha/beta SR alpha beta

#> XIVH 7.249952e-04 0.13919483 1.810392e-03 2.4971086

#> JKD 2.892417e-04 0.17682677 2.569578e-04 0.8883843

#> USMV 1.790904e-04 0.12280053 1.166177e-04 0.6511667

#> SPLV 1.580189e-04 0.10887903 1.070918e-04 0.6777149

#> SPY 7.091574e-05 0.14170591 7.142225e-05 1.0071424

#> SPHB -1.551287e-04 0.07401566 -2.422107e-04 1.5613533

可以看到:

就α/β而言,XIVH最佳(α最大),而SPHB最差(α负)。

就夏普比率(更确切地说,是信息比率,因为我们忽略了无风险利率)而言,JDK是最好的,其次是SPY。这证实了大多数投资基金的表现不超过市场的观点。

显然,无论以哪种衡量标准,SPHB都是最差的:负α,负β比率和Sharpe比率。

JDK之所以能够取得最佳性能,是因为它的alpha值很好(尽管不是最好的),而同时具有0.88的中等beta值。

XIVH和SPHB有大量不同的beta,因此在市场上具有极端敞口。

USMV在市场上的曝光率最小,有可接受的alpha值,并且其Sharpe比率接近第二和第三高的位置。Fama-French三因子模型

该示例将说明使用标准普尔500指数中的九种股票的Fama-French三因子模型。让我们从加载数据开始:

# 设置开始结束日期和股票名称列表

begin_date

end_date

# 从YahooFinance下载数据

data_set

for (stock_index in 1:length(stock_namelist))

data_set

# 下载Fama-French因子

head(fama_lib)

#> Mkt.RF SMB HML

#> 1926-07-01 0.10 -0.24 -0.28

#> 1926-07-02 0.45 -0.32 -0.08

#> 1926-07-06 0.17 0.27 -0.35

#> 1926-07-07 0.09 -0.59 0.03

#> 1926-07-08 0.21 -0.36 0.15

#> 1926-07-09 -0.71 0.44 0.56

tail(fama_lib)

#> Mkt.RF SMB HML

#> 2017-11-22 -0.05 0.10 -0.04

#> 2017-11-24 0.21 0.02 -0.44

#> 2017-11-27 -0.06 -0.36 0.03

#> 2017-11-28 1.06 0.38 0.84

#> 2017-11-29 0.02 0.04 1.45

#> 2017-11-30 0.82 -0.56 -0.50

# 计算股票的对数收益率和Fama-French因子

X

N

现在我们在矩阵F中具有三个因子,并希望拟合模型,其中现在的载荷是一个beta矩阵:。我们可以做最小二乘拟合,最小化。更方便地,我们定义和扩展因子 。然后可以将LS公式写为最小化

print(Gamma)

#> alpha b1 b2 b3

#> AAPL 1.437845e-04 0.9657612 -0.23339130 -0.49806858

#> AMD 6.181760e-04 1.4062105 0.80738336 -0.07240117

#> ADI -2.285017e-05 1.2124008 0.09025928 -0.20739271

#> ABBV 1.621380e-04 1.0582340 0.02833584 -0.72152627

#> AEZS -4.513235e-03 0.6989534 1.31318108 -0.25160182

#> A 1.146100e-05 1.2181429 0.10370898 -0.20487290

#> APD 6.281504e-05 1.0222936 -0.04394061 0.11060938

#> AA -4.587722e-05 1.3391852 0.62590136 0.99858692

#> CF -5.777426e-04 1.0387867 0.48430007 0.82014523

另外,我们可以使用R完成:

#> alpha Mkt.RF SMB HML

#> AAPL 1.437845e-04 0.9657612 -0.23339130 -0.49806858

#> AMD 6.181760e-04 1.4062105 0.80738336 -0.07240117

#> ADI -2.285017e-05 1.2124008 0.09025928 -0.20739271

#> ABBV 1.621380e-04 1.0582340 0.02833584 -0.72152627

#> AEZS -4.513235e-03 0.6989534 1.31318108 -0.25160182

#> A 1.146100e-05 1.2181429 0.10370898 -0.20487290

#> APD 6.281504e-05 1.0222936 -0.04394061 0.11060938

#> AA -4.587722e-05 1.3391852 0.62590136 0.99858692

#> CF -5.777426e-04 1.0387867 0.48430007 0.82014523统计因子模型

现在让我们考虑统计因子模型或隐式因子模型,其中因子和载荷均不可用。调用具有 K因子的模型 XT =α1T+ BFT + ET的主成分方法:

PCA:样本均值:矩阵:样本协方差矩阵:特征分解:估计:更新特征分解:重复步骤2-3,直到收敛为止。

#> alpha

#> AAPL 0.0007074564 0.0002732114 -0.004631647 -0.0044814226

#> AMD 0.0013722468 0.0045782146 -0.035202146 0.0114549515

#> ADI 0.0006533116 0.0004151904 -0.007379066 -0.0053058139

#> ABBV 0.0007787929 0.0017513359 -0.003967816 -0.0056000810

#> AEZS -0.0041576357 0.0769496344 0.002935950 0.0006249473

#> A 0.0006902482 0.0012690079 -0.005680162 -0.0061507654

#> APD 0.0006236565 0.0005442926 -0.004229364 -0.0057976394

#> AA 0.0006277163 0.0027405024 -0.009796620 -0.0149177957

#> CF -0.0000573028 0.0023108605 -0.007409061 -0.0153425661

同样,我们可以使用R完成工作:

#> alpha factor1 factor2 factor3

#> AAPL 0.0007074564 0.0002732114 -0.004631647 -0.0044814226

#> AMD 0.0013722468 0.0045782146 -0.035202146 0.0114549515

#> ADI 0.0006533116 0.0004151904 -0.007379066 -0.0053058139

#> ABBV 0.0007787929 0.0017513359 -0.003967816 -0.0056000810

#> AEZS -0.0041576357 0.0769496344 0.002935950 0.0006249473

#> A 0.0006902482 0.0012690079 -0.005680162 -0.0061507654

#> APD 0.0006236565 0.0005442926 -0.004229364 -0.0057976394

#> AA 0.0006277163 0.0027405024 -0.009796620 -0.0149177957

#> CF -0.0000573028 0.0023108605 -0.007409061 -0.0153425661通过不同因子模型进行协方差矩阵估计的最终比较

我们最终将比较以下不同的因子模型:

样本协方差矩阵

宏观经济一因素模型

基本的三因素Fama-French模型

统计因素模型

我们在训练阶段估计模型,然后将估计的协方差矩阵与测试阶段的样本协方差矩阵进行比较。估计误差将根据PRIAL(平均损失提高百分比)进行评估:

加载训练和测试集:

# 设置开始结束日期和股票名称列表

begin_date

end_date

# 准备股票数据

data_set

for (stock_index in 1:length(stock_namelist))

data_set

# Fama-French 因子

mydata

# 准备指数

f_SP500

# 将数据拆分为训练数据和测试数据

T_trn

X_trn

X_tst

现在让我们用训练数据估算不同的因子模型:

# 样本协方差矩阵

Sigma_SCM

# 单因素模型

Gamma

E

# Fama-French三因子模型

Sigma_FamaFrench

# 统计单因子模型

while (norm(Sigma - Sigma_prev, "F")/norm(Sigma, "F") > 1e-3) {

B

# 统计三因子模型

K

while (norm(Sigma - Sigma_prev, "F")/norm(Sigma, "F") > 1e-3) {

B

Psi

Sigma_PCA3

# 统计五因子模型

K

eigSigma

while (norm(Sigma - Sigma_prev, "F")/norm(Sigma, "F") > 1e-3) {

B

Psi

最后,让我们比较测试数据中的不同估计:

Sigma_true

barplot(error, main = "协方差矩阵估计误差",

PRIAL

barplot(PRIAL, main = "协方差矩阵估计的先验方法",

最终可以看到使用因子模型进行协方差矩阵估计会有所帮助。

最受欢迎的见解

1.用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

2.R语言GARCH-DCC模型和DCC(MVT)建模估计

3.R语言实现 Copula 算法建模依赖性案例分析报告

4.R语言COPULAS和金融时间序列数据VaR分析

5.R语言多元COPULA GARCH 模型时间序列预测

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

9.matlab使用Copula仿真优化市场风险

html三因子模型,R语言Fama-French三因子模型实际应用:优化投资组合相关推荐

  1. 量化交易陷阱和R语言改进股票配对交易策略分析中国股市投资组合

    最近我们被客户要求撰写关于量化交易的研究报告,包括一些图形和统计输出. 计算能力的指数级增长,以及量化社区(日益增长的兴趣使量化基金成为投资者蜂拥而至的最热门领域. 量化交易陷阱和R语言改进股票配对交 ...

  2. 用Python对CAPM和Fama French Three Factor model的初步学习

    用Python对CAPM和Fama French Three Factor model的初步学习 概述 介绍 建模与分析 CAPM Fama French Three-Factor Model 总结 ...

  3. R语言量化技术分析的百度指数关注度交易策略可视化

    全文链接:http://tecdat.cn/?p=31556 传统的经济理论认为股票市场是有效的,价格波动是对市场信息的反应,投资者能够及时处理所有实时信息并做出最优决策(点击文末"阅读原文 ...

  4. 使用R语言获得16S物种丰度

    还是获得16S物种丰度得老问题,最近在一台新机器上安装qiime1,发现有报错,对于这种停止维护的软件,也是正常现象吧,于是想别的办法解决,恰巧最近读R几本R语言的入门书,发现prop.table() ...

  5. R语言选模型/用AIC BIC adjustRsq 十折交叉验证 LOOCV等验证/择参 以fama三因子模型和CAMP模型为例@[理科班的习习同学

    R语言选模型/用AIC BIC adjustRsq 十折交叉验证 LOOCV等验证/择参 以fama三因子模型和CAMP模型为例@理科班的习习同学 引入包与数据预处理 install.packages ...

  6. R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化

    R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...

  7. R语言计算资本资产定价模型(CAPM)中的Beta值和可视化

    原文链接:http://tecdat.cn/?p=22588 今天我们将计算投资组合收益的CAPM贝塔.这需要拟合一个线性模型,得到可视化,从资产收益的角度考虑我们的结果的意义. 简单的背景介绍,资本 ...

  8. R语言分位数回归Quantile Regression分析租房价格

    全文链接:http://tecdat.cn/?p=18422 本文想在R软件中更好地了解分位数回归优化.在查看分位数回归之前,让我们从样本中计算中位数或分位数(点击文末"阅读原文" ...

  9. 《量化金融R语言高级教程》一2.1 套利定价理论

    本节书摘来异步社区<量化金融R语言高级教程>一书中的第2章,第2.1节,作者: [匈牙利]Edina Berlinger(艾迪娜•伯林格) , 等 译者: 高蓉 责编: 胡俊英,更多章节内 ...

  10. Fama—French五因子模型在中国股票市场适用吗?

    资产定价历来是金融经济学研究的核心问题.自Sharpe,Lintner,Treynor等于1964年提出资本资产定价模型(CAPM)以来,通过单一风险因素确定资产收益率受到理论和市场等多方面的挑战.为 ...

最新文章

  1. 华为实习日记——第二十二天
  2. YOLO系列阅读(一) YOLOv1原文阅读:You Only Look Once: Unified, Real-Time Object Detection
  3. 2011年计算机等级考试二级java笔试练习题(10)_2010年3月计算机等级考试二级Java笔试题及答案...
  4. IPFS网络是如何运行的(p2p网络)
  5. [dp][前缀和] Jzoj P5907 轻功(qinggong)
  6. 直观判断图像是否可以被实时处理
  7. 超级好用的坐标转换软件
  8. 一道二叉树的题目--后序遍历+中序遍历确定二叉树
  9. mysql查找某连续字段中断的编号
  10. springboot报错Table 'wechat.hibernate_sequence' doesn't exist
  11. Tomcat部分目录作用
  12. AD14一般使用流程
  13. python语言实现医院管理系统
  14. JS基础——选项卡列表显示隐藏缩略图(函数传参)
  15. 爪哇国新游记之三十----十九个正则表达式示例
  16. 新房子没网络,怎么用光猫和路由器上网
  17. 给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(逐句精解)
  18. 腾讯云服务器java搭建教程_腾讯云服务器搭建
  19. 搜狗输入法 状态栏 自带的好用工具
  20. 疫情期间给女朋友敲段代码,给女朋友个小惊喜

热门文章

  1. python 列举图像颜色
  2. python胶水语言融合其他语言_1. Python中如何使用其他语言?(python的胶水作用,python又叫胶水语言)...
  3. SC-FDE 系统 基于导频的细小偏估计
  4. linux给普通用户添加管理员权限,linux 赋予普通用户管理员权限
  5. 计算机无法识别1136打印机,惠普HP M1136打印机驱动安装失败的多种解决办法
  6. 【硬石STM32f407开发板_DIY入门】模块化编程实例
  7. 利用python批量创建文件夹、批量创建文件、批量复制文件到指定文件夹
  8. windows扫雷的模拟实现(C语言)
  9. 树育发统系物生微归递递归微生物系统发育树
  10. FIB常见应用明细及原理分析