首页 > > > R语言金融基础:构建CAPM模型
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
前文:
HopeR:R语言金融基础:tidyquant获取数据(标普500与纳斯达克)
HopeR:R语言金融基础:tidyquant获取数据(股票每日行情)
HopeR:R语言金融基础:tidyquant获取数据(宏观经济数据)
HopeR:R语言金融基础:tidyquant数据整理(日行情转月行情、MACD的使用)
HopeR:R语言金融基础:tidyquant数据整理(滑窗建模)
HopeR:R语言金融基础:tidyquant数据整理(算术/对数收益率)
CAPM模型(Capital Asset Pricing Model ),即资本资产定价模型,是由美国学者夏普(William Sharpe)、林特尔(John Lintner)、特里诺(Jack Treynor)和莫辛(Jan Mossin)等人于1964年在资产组合理论和资本市场理论的基础上发展起来的,主要研究证券市场中资产的预期收益率与风险资产之间的关系,以及均衡价格是如何形成的,是现代金融市场价格理论的支柱,广泛应用于投资决策和公司理财领域。资本资产定价模型假设所有投资者都按马克维茨的资产选择理论进行投资,对期望收益、方差和协方差等的估计完全相同,投资人可以自由借贷。基于这样的假设,资本资产定价模型研究的重点在于探求风险资产收益与风险的数量关系,即为了补偿某一特定程度的风险,投资者应该获得多少的报酬率(见资产定价模型(CAPM))。比较好的阐明这个模型的帖子有:
Capital Asset Pricing Model (CAPM)
本文会使用tidyquant包来建立这个模型,主要参考了:
Performance Analysis with tidyquant
首先大致了解这个工作流:

也就是说,做这个模型首先需要一个基线,然后再选择自己的资产组合。把两者都调整为一个时间间隔然后合并起来,建立模型进行评估。下面我们来实操一下:
1、个股选择
这里,首先选择了苹果(Apple)、谷歌(Google)和网飞(Netflix)公司三支股票在2010年到2015年的表现,然后得到各自的月收盘价(矫正后)。
library(tidyquant)
Ra <- c("AAPL", "GOOG", "NFLX") %>%
tq_get(get = "stock.prices",
from = "2010-01-01",
to = "2015-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Ra")
Ra
# A tibble: 216 x 3
# Groups: symbol [3]
symbol date Ra
<chr> <date> <dbl>
1 AAPL 2010-01-29 -0.103
2 AAPL 2010-02-26 0.0654
3 AAPL 2010-03-31 0.148
4 AAPL 2010-04-30 0.111
5 AAPL 2010-05-28 -0.0161
6 AAPL 2010-06-30 -0.0208
7 AAPL 2010-07-30 0.0227
8 AAPL 2010-08-31 -0.0550
9 AAPL 2010-09-30 0.167
10 AAPL 2010-10-29 0.0607
# ... with 206 more rows2、基线选择
把高科技指数(高科技指数ETF-SPDR(XLK)股票股价,实时行情,新闻,财报,研报评级_新浪财经_新浪网)作为基线,获得相同时间的月收盘价作为比较。
Rb <- "XLK" %>%
tq_get(get = "stock.prices",
from = "2010-01-01",
to = "2015-12-31") %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rb")
Rb
# A tibble: 72 x 2
date Rb
<date> <dbl>
1 2010-01-29 -0.0993
2 2010-02-26 0.0348
3 2010-03-31 0.0684
4 2010-04-30 0.0126
5 2010-05-28 -0.0748
6 2010-06-30 -0.0540
7 2010-07-30 0.0745
8 2010-08-31 -0.0561
9 2010-09-30 0.117
10 2010-10-29 0.0578
# ... with 62 more rows3、合并两个数据框
RaRb <- left_join(Ra, Rb, by = c("date" = "date"))
RaRb
# A tibble: 216 x 4
# Groups: symbol [3]
symbol date Ra Rb
<chr> <date> <dbl> <dbl>
1 AAPL 2010-01-29 -0.103 -0.0993
2 AAPL 2010-02-26 0.0654 0.0348
3 AAPL 2010-03-31 0.148 0.0684
4 AAPL 2010-04-30 0.111 0.0126
5 AAPL 2010-05-28 -0.0161 -0.0748
6 AAPL 2010-06-30 -0.0208 -0.0540
7 AAPL 2010-07-30 0.0227 0.0745
8 AAPL 2010-08-31 -0.0550 -0.0561
9 AAPL 2010-09-30 0.167 0.117
10 AAPL 2010-10-29 0.0607 0.0578
# ... with 206 more rows4、计算CAPM
RaRb_capm <- RaRb %>%
tq_performance(Ra = Ra,
Rb = Rb,
performance_fun = table.CAPM)
RaRb_capm
# A tibble: 3 x 13
# Groups: symbol [3]
symbol ActivePremium Alpha AnnualizedAlpha Beta `Beta-` `Beta+` Correlation
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AAPL 0.178 0.0127 0.163 1.14 0.638 0.981 0.653
2 GOOG 0.0345 0.0028 0.0344 1.14 1.39 1.16 0.645
3 NFLX 0.447 0.053 0.859 0.384 -1.52 0.0044 0.0817
# ... with 5 more variables: `Correlationp-value` <dbl>, InformationRatio <dbl>,
# `R-squared` <dbl>, TrackingError <dbl>, TreynorRatio <dbl>这样一来,我们就快速构建了CAPM模型。如果想专门看alpha和beta,可以这样操作:
RaRb_capm %>%
select(Alpha, Beta)
# A tibble: 3 x 3
# Groups: symbol [3]
symbol Alpha Beta
<chr> <dbl> <dbl>
1 AAPL 0.0127 1.14
2 GOOG 0.0028 1.14
3 NFLX 0.053 0.384关于这两个参数的解释,可以参照:
https://www.investopedia.com/ask/answers/102714/whats-difference-between-alpha-and-beta.asp总的来说,alpha代表无风险收益率,它是评价选股人能力的重要指标;beta代表个股与大盘的相关性,能够反映一支股票在多大程度上受到大盘的影响。搬运一段精华:
原文作者:;如有侵权,请联系管理员删除。