拓端tecdat|R語言計(jì)算資本資產(chǎn)定價(jià)模型(CAPM)中的Beta值和可視化
原文鏈接:http://tecdat.cn/?p=22588?
原文出處:拓端數(shù)據(jù)部落公眾號
今天我們將計(jì)算投資組合收益的CAPM貝塔。這需要擬合一個線性模型,得到可視化,從資產(chǎn)收益的角度考慮我們的結(jié)果的意義。
簡單的背景介紹,資本資產(chǎn)定價(jià)模型(CAPM)是由威廉·夏普(William Sharpe)創(chuàng)建的一個模型,它根據(jù)市場收益和資產(chǎn)與市場收益的線性關(guān)系來估算資產(chǎn)的收益。這種線性關(guān)系就是股票的貝塔系數(shù)。
計(jì)算CAPM的Betas可以作為一個團(tuán)隊(duì)工作中更復(fù)雜的模型的一個很好的模板。
我們將專注于CAPM的一個特定方面:β值。正如我們上面所指出的,貝塔系數(shù)是指一項(xiàng)資產(chǎn)的收益率回歸到市場收益率的結(jié)果。它抓住了資產(chǎn)與市場之間的線性關(guān)系
在計(jì)算該投資組合的貝塔值之前,我們需要找到投資組合的月度收益率。
我們將兩個投資組合收益和一個資產(chǎn)收益一起分析。
CAPM和市場收益
我們的第一步是做出選擇,用哪種資產(chǎn)作為市場收益的代理,我們將選擇SPY ETF,將標(biāo)準(zhǔn)普爾500指數(shù)視為市場收益。
讓我們計(jì)算一下SPY的市場收益。注意開始日期是 "2013-01-01",結(jié)束日期是 "2017-12-31",所以我們將使用五年的收益。
?我們還想要一個市場收益率的data.frame對象,并轉(zhuǎn)換xts對象。
?
我們有一個market_returns_tidy對象。我們確保它的周期性與投資組合周期一致
如果周期性不一致,mutate()就會拋出一個錯誤。
計(jì)算CAPM貝塔
計(jì)算投資組合的β值,首先讓我們看看這個方程式。
投資組合β等于投資組合收益和市場收益的協(xié)方差,除以市場收益的方差。
我們可以用cov計(jì)算分子,即投資組合和市場收益的協(xié)方差,用var計(jì)算分母。
我們的投資組合β值等于。
這個β值相當(dāng)接近于1,畢竟SPY是這個投資組合的一個重要部分。
我們也可以通過找到我們每個資產(chǎn)的貝塔值,然后乘以資產(chǎn)權(quán)重來計(jì)算組合貝塔值。也就是說,投資組合貝塔值的另一個方程式是資產(chǎn)貝塔值的加權(quán)和。
?
為了在R中使用這種方法,我們首先要找到我們每個資產(chǎn)的β值。
我們需要將每項(xiàng)資產(chǎn)的收益率回歸到市場收益率上。我們可以用lm()對資產(chǎn)1進(jìn)行回歸,然后再用lm()對資產(chǎn)2進(jìn)行回歸,等等。但如果我們有一個50個資產(chǎn)的投資組合,這將是不現(xiàn)實(shí)的。相反,我們寫一個代碼流程,使用map()來回歸我們所有的資產(chǎn),并通過一次調(diào)用計(jì)算Betas。
我們將從我們的returns_long整齊的數(shù)據(jù)框架開始。
收益
收益
我們現(xiàn)在有三列:之前的資產(chǎn),之前的數(shù)據(jù),以及我們剛剛添加的模型。模型一欄是我們對每項(xiàng)資產(chǎn)進(jìn)行回歸的結(jié)果lm(?)。這些結(jié)果是我們每個資產(chǎn)的β值和截距。
讓我們用tidy()函數(shù)整理一下我們的結(jié)果。我們想將該函數(shù)應(yīng)用于我們的模型列,并將再次使用mutate()和map()組合。
我們現(xiàn)在已經(jīng)很接近了,但是模型欄里有嵌套的數(shù)據(jù)框。它們是格式化很好的數(shù)據(jù)框架。
不過,我不喜歡最終出現(xiàn)嵌套的數(shù)據(jù)框架,所以我們調(diào)整模型列。
現(xiàn)在,這看起來比較整潔。我們將做進(jìn)一步的清理,去掉截距,因?yàn)槲覀冃枰愃怠?/p>
快速檢查應(yīng)該發(fā)現(xiàn)SPY與自身的貝塔為1。
現(xiàn)在讓我們看看我們對這些資產(chǎn)的組合如何影響投資組合的β值。
讓我們按照上面的選擇來分配投資組合的權(quán)重。
現(xiàn)在我們可以使用這些權(quán)重來獲得我們的投資組合的β值,基于每個資產(chǎn)的β值。
這個貝塔值與我們上面用協(xié)方差/方差法計(jì)算的是一樣的,現(xiàn)在我們知道投資組合收益和市場收益的協(xié)方差除以市場收益的方差等于我們把每項(xiàng)資產(chǎn)的收益回歸到市場收益上得到的加權(quán)估計(jì)。
xts計(jì)算CAPM的Beta值
使用內(nèi)置CAPM.Beta()函數(shù)。該函數(shù)需要兩個參數(shù):我們希望計(jì)算其β值的投資組合(或任何資產(chǎn))的收益,以及市場收益。
在Tidyverse中計(jì)算CAPM Beta
首先,我們將使用dplyr來抓取我們的投資組合貝塔。我們稍后會進(jìn)行一些可視化,但現(xiàn)在將提取投資組合的β值。
為了計(jì)算貝塔值,我們調(diào)用do(model = lm())。然后我們使用tidy()函數(shù),使模型結(jié)果更容易看懂。
Tidyquant計(jì)算CAPM的β值
使用tidyquant函數(shù)。能夠?qū)APM.Beta()函數(shù)應(yīng)用于一個數(shù)據(jù)框架。
穩(wěn)定的結(jié)果和接近1的貝塔值是比較理想的,因?yàn)槲覀兊耐顿Y組合有25%分配給標(biāo)準(zhǔn)普爾500指數(shù)。
CAPM Beta的可視化
在可視化之前,我們需要計(jì)算投資組合的收益,然后計(jì)算投資組合涉及到的單個資產(chǎn)的CAPMβ。
可視化投資組合收益、風(fēng)險(xiǎn)和市場收益之間的關(guān)系
CAPM的β值告訴我們投資組合收益與市場收益之間的線性關(guān)系。它還告訴我們投資組合的風(fēng)險(xiǎn)性--投資組合相對于市場的波動程度。在我們討論貝塔系數(shù)本身之前,讓我們先看看我們的資產(chǎn)的預(yù)期月度收益與我們個別資產(chǎn)的月度風(fēng)險(xiǎn)的對比。
我們的投資組合在這個散點(diǎn)圖上的位置如何?讓我們用geom_point()把它添加到ggplot()中。
我們的投資組合收益/風(fēng)險(xiǎn)看起來都不錯,盡管SP500指數(shù)的預(yù)期收益率更高,只是風(fēng)險(xiǎn)更大一些。在過去的五年里,要戰(zhàn)勝市場是很困難的。EEM和EFA有較高的風(fēng)險(xiǎn)和較低的預(yù)期收益,而IJS有較高的風(fēng)險(xiǎn)和較高的預(yù)期收益。
一般來說,散點(diǎn)是為我們的投資組合提供一些收益-風(fēng)險(xiǎn)的背景。它不是CAPM的直接組成部分。
接下來,讓我們更直接地轉(zhuǎn)向CAPM,用X軸上的市場收益和Y軸上的投資組合收益的散點(diǎn)圖來直觀地顯示我們的投資組合與市場之間的關(guān)系。首先,我們將通過調(diào)用mutate()將市場收益添加到我們的投資組合tibble中。然后,我們用ggplot()設(shè)置我們的x軸和y軸。
這個散點(diǎn)圖與β計(jì)算傳達(dá)了相同的強(qiáng)線性關(guān)系。我們可以用geom_smooth()給它添加一個簡單的回歸線。
線性回歸
在結(jié)束CAPM Beta的分析之前,讓我們來探討一下如何創(chuàng)建更有趣的可視化數(shù)據(jù)。
下面的代碼塊從lm()的模型結(jié)果開始,它將我們的投資組合收益率回歸到市場收益率上。我們將結(jié)果存儲在一個名為model的列表列中。接下來,我們調(diào)用augment(),將預(yù)測值添加到原始數(shù)據(jù)集,并返回一個tibble。
這些預(yù)測值將被放在.fitted列中。
讓我們用ggplot()來看看擬合的收益值與實(shí)際收益值的匹配程度。
這些月度收益和擬合值似乎重合得不錯。讓我們把實(shí)際收益和擬合收益都轉(zhuǎn)換為一元的增長,并進(jìn)行同樣的比較。
我們的擬合增長很好地預(yù)測了我們的實(shí)際增長,盡管在大部分時(shí)間里,實(shí)際增長低于預(yù)測值。
參考文獻(xiàn)?
The Capital Asset Pricing Model: Theory and Evidence Eugene F. Fama and Kenneth R. French, The Capital Asset Pricing Model: Theory and Evidence, The Journal of Economic Perspectives, Vol. 18, No. 3 (Summer, 2004), pp.?25-46?
最受歡迎的見解
1.在python中使用lstm和pytorch進(jìn)行時(shí)間序列預(yù)測
2.python中利用長短期記憶模型lstm進(jìn)行時(shí)間序列預(yù)測分析
3.使用r語言進(jìn)行時(shí)間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時(shí)間序列預(yù)測
5.r語言copulas和金融時(shí)間序列案例
6.使用r語言隨機(jī)波動模型sv處理時(shí)間序列中的隨機(jī)波動
7.r語言時(shí)間序列tar閾值自回歸模型
8.r語言k-shape時(shí)間序列聚類方法對股票價(jià)格時(shí)間序列聚類
9.python3用arima模型進(jìn)行時(shí)間序列預(yù)測