关于数据挖掘:R语言Fama-French-FF-三因子模型和CAPM多因素扩展模型分析股票市场投资组合风险收益可视化

128次阅读

共计 4016 个字符,预计需要花费 11 分钟才能阅读完成。

 原文链接:http://tecdat.cn/?p=24983

本文咱们超过了 CAPM 的简略线性回归,摸索了 Fama French (FF) 股票危险 / 收益的多因素模型。

FF 模型通过回归除市场收益之外的几个变量的投资组合收益来扩大 CAPM。从个别数据迷信的角度来看,FF 将 CAPM 的简略线性回归(咱们有一个自变量)扩大到多元线性回归(咱们有许多自变量)。

咱们要看的是 FF 三因素模型,它测试的是(1)市场收益(与 CAPM 雷同),(2)公司规模(小与大)和(3)公司价值(账面市值比)的解释能力。公司价值因素在 FF 中被标记为 HML,代表高 - 低,指的是公司的账面与市场比率。当咱们将投资组合的收益率与 HML 因子进行回归时,咱们正在考察有多少收益是因为包含高账面市值比率的股票(有时被称为价值溢价,因为高账面市值的股票被称为价值股票)。
 

这篇文章的很大一部分内容波及从 FF 网站导入数据,并对其进行整顿,以用于咱们的投资组合收益。咱们将看到,解决数据在概念上很容易了解,但在实际操作中却很耗时。然而,对于任何领有来自不同供应商的数据流并想创造性地应用它们的行业来说,将不同起源的数据混在一起是一项必要的技能。一旦数据被整顿好,拟合模型就不费时间了。

明天,咱们将应用咱们通常的投资组合,其中包含:

+ SPY(规范普尔 500 基金)权重 25%。+ EFA(一个非美国股票基金),权重 25%。+ IJS(一个小盘股价值基金)权重 20%。+ EEM (一只新兴市场基金)权重 20%。+ AGG(一只债券基金)权重 10%。

在计算该投资组合的 beta 之前,咱们须要找到投资组合的月收益率。

mbls <- c("SPY","EFA", "IJS", "EEM","AGG")

pes <- 
  getSymbols
w <- c(0.25, 0.25, 0.20, 0.20, 0.10)

as\_t\_ng <-  
  res %>% 
  to.monthly %>% 
  tk_tbl %>%
  gather %>% 
  group_by%>% 
p_tuaeoly <- 
  ase\_un\_lng %>%
  tq_portfolio

咱们将解决投资组合收益的一个对象。

Fama French 因子的导入和整顿

咱们的首要任务是获取 FF 数据,侥幸的是,FF 在互联网上提供了他们的因子数据。咱们将记录导入和清理这些数据的每个步骤,在某种程度上可能有点过头了。当初让咱们感到丧气,然而当咱们须要更新此模型或扩大到 5 因素案例时,能够节省时间。

看看 FF website. 数据被打包为 zip 文件,所以咱们须要做的不仅仅是调用 read_csv()。让咱们应用tempfile() 根底 R 中的 函数来创立一个名为 temp. 这是咱们将搁置压缩文件的中央。

temp <- tempfile()

R 创立了一个名为的临时文件 temp。下载 3-factor zip。咱们想将它传递给 download.file() 并将后果存储在 temp.

首先,咱们将把这个字符串分成三块:base、factor 和 format– 这对明天的工作来说不是必须的,然而如果咱们想建设一个 Shiny 应用程序让用户从 FF 网站上抉择一个因子,或者咱们只是想用一组不同的 FF 因子从新运行这个剖析,它就会很不便。而后咱们会把这些货色粘在一起,并把字符串保留为 full_url。
 

be
faor 

fmt

furl <-
  glue

当初咱们传递 full_url 给 download.file().

download.file

最初,咱们能够在应用 函数read_csv() 解压缩数据后 读取 csv 文件 unz()

Go\_3\_Fars <- 
  read_csv

head(Go\_3\_Fars)

咱们曾经导入了数据集,但咱们没有看到任何因素,只是一个带有奇怪格局日期的列。

产生这种状况时,_通常_ 能够通过跳过肯定数量的蕴含元数据的行来修复它。看看如果咱们跳过 6 行。

Glo_as <- 
  read_csv(skip = 6)

head(Glo_as)

这就是咱们所期待的,5 个列:一个叫做 X1 的列,保留着奇怪的格式化日期,而后是 Mkt-Rf,示意高于无风险利率的市场收益,SMB 示意规模因子,HML 示意价值因子,RF 示意无风险利率。

然而,这些数据曾经被转化为字符格局 – 看看每一列的类别。
 

map(Gob3s, class)

咱们有两个选项能够将这些列强制转换为正确的格局。首先,咱们能够在导入时这样做,通过cl_yps = cols 为每个数字列提供参数。

Gll3Ftrs <- 
  read_csv(unz
head(Gll3Ftrs)

这很好用,但它特定于具备这些特定列名的 FF 3 因子集。如果咱们导入不同的 FF 因子集,咱们将须要指定不同的列名。

作为一种代替办法,上面的代码块在导入后将列转换为数字,但更通用。它能够利用于其余 FF 因子汇合。

为了做到这一点,咱们将 X1 列重命名为 date,而后将咱们的列格局改为数字。vars()函数的操作与 select()函数相似,咱们能够通过在 date 后面加一个负号来通知它对所有列进行操作,除了 date 列。

Gloa\_3\_Fars <- 
  read_csv(unz %>%
  rename%>% 
  mutate_at

head(Gloa\_3\_Fars)

当初咱们的因子有了数字数据,日期列有更好的标签,但格局谬误。

咱们能够应用该 lubridate 包将该日期字符串解析为更好的日期格局。咱们将应用该 parse_date_time() 函数,并调用该 ymd() 函数以确保最终后果为日期格局。同样,在解决来自新起源的数据时,日期,事实上,任何列都能够有多种格局。

Gll\_3\_ts <- 
  read_csv %>%
  rename %>% 
  mutate_at%>% 
  mutate

head(Gll\_3\_ts)

日期格局看起来不错,这很重要,因为咱们想要修剪 FF 日期与咱们的投资组合日期匹配的因子数据。然而,请留神 FF 应用当月的第一天,而咱们的投资组合收益应用的是当月的最初一天。这会将每月日期回滚到上个月的最初一天。咱们 FF 数据中的第一个日期是“1990-07-01”。让咱们回滚。

Gol3Frs %>% 
  select %>%
  mutate %>% 
  head

如果咱们想将日期重置为月末,咱们须要先增加一个,而后回滚。

Gob3Fars %>% 
  select%>%
  mutate %>% 
  head

咱们还有其余办法能够解决这个问题 – 一开始,咱们就能够将咱们的投资组合收益率索引到 indexAt = firstof。

最初,咱们只想要与咱们的投资组合数据统一的 FF 因子数据,因而咱们  在投资组合返回对象中 按 日期 first() 和 last() 日期filter()

Glb3Ftos <- 
  read_csv(unz %>% 
  rename%>% 
  mutate_at %>% 
  mutate) + months) %>% 
  filte

head(Glb3Ftos , 3)

tail(Glaos, 3)

咱们用 left\_join(…by = “date”)将这些数据对象合并起来。还将 FF 数据转换为十进制,并创立了一个名为 R\_excess 的新列,保留高于无风险利率的收益。

ff\_proio\_tns <- 
  piruq\_ealaed\_ntly %>% 
  left_join %>% 
  mutate


head(ff_poleus, 4)

咱们当初有了一个蕴含咱们的投资组合收益和 FF 因子的对象,并且能够从编码的角度进行咱们练习中最简略的局部,也是咱们的老板 / 共事 / 客户 / 投资者惟一关怀的局部:建模和可视化.

当初咱们有了格局不错的数据。CAPM 应用简略的线性回归,而 FF 应用具备许多自变量的多元回归。因而,咱们的 3 因子 FF 方程为 lm(R_excess ~ MKT_RF + SMB + HML

咱们将在 CAPM 代码流中增加一项,即为咱们的系数包含 95% 的置信区间。

ffdlrhd <-
  ffptoltus %>% 
  do) %>% 
  tidy(conf.level = .95)

fdlyd %>% 
  mutate_if %>% 
  select

咱们的模型对象当初蕴含一个 conf.high 和 conf.low 列来保留咱们的置信区间最小值和最大值。

咱们能够将这些后果通过管道传输到 ggplot() 并创立具备置信区间的系数散点图。我不想绘制截距,因而会将其从代码流中过滤掉。

咱们用 errorbar 增加置信区间。

fdpynd %>% 
  mutate_if%>%
  filter %>% 
  ggplot+ 
  geom_point +
  geom_errorbar +
  labs +
  theme_minimal +
  theme

这里的后果是能够预测的,因为与 CAPM 一样,咱们正在回归一个蕴含 3 个因素的市场的投资组合,其中一个是市场。因而,市场因素在该模型中占主导地位,而其余两个因素的置信区间为零。


最受欢迎的见解

1.R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略

2.R 语言改良的股票配对交易策略剖析 SPY—TLT 组合和中国股市投资组合

3.R 语言工夫序列:ARIMA GARCH 模型的交易策略在外汇市场预测利用

4.TMA 三均线期指高频交易策略的 R 语言实现

5.r 语言多均线量化策略回测比拟

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

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

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

9.matlab 应用 Copula 仿真优化市场危险

正文完
 0