基于R語言股票市場收益的統(tǒng)計可視化分析|附代碼數(shù)據(jù)
全文鏈接:http://tecdat.cn/?p=16453?
最近我們被客戶要求撰寫關(guān)于股票市場的研究報告,包括一些圖形和統(tǒng)計輸出。
金融市場上最重要的任務(wù)之一就是分析各種投資的歷史收益
要執(zhí)行此分析,我們需要資產(chǎn)的歷史數(shù)據(jù)。數(shù)據(jù)提供者很多,有些是免費的,大多數(shù)是付費的。在本文中,我們將使用Yahoo金融網(wǎng)站上的數(shù)據(jù)。
在這篇文章中,我們將:
下載收盤價
計算收益率
計算收益的均值和標準差
讓我們先加載庫。
library(tidyquant)library(timetk)
我們將獲得Netflix價格的收盤價。
netflix?<-?tq_get("NFLX",????????????????????
??????????????????from?=?'2009-01-01',
??????????????????to?=?"2018-03-01",
??????????????????get?=?"stock.prices")
接下來,我們將繪制Netflix的調(diào)整后收盤價。
netflix?%>%
??ggplot(aes(x?=?date,?y?=?adjusted))?+
??geom_line()?+
??ggtitle("Netflix?since?2009")?+
??labs(x?=?"Date",?"Price")?+
??scale_x_date(date_breaks?=?"years",?date_labels?=?"%Y")?+
??labs(x?=?"Date",?y?=?"Adjusted?Price")?+
??theme_bw()

計算單個股票的每日和每月收益率
一旦我們從Yahoo Finance下載了收盤價,下一步便是計算收益。我們將再次使用tidyquant包進行計算。我們已經(jīng)在上面下載了Netflix的價格數(shù)據(jù),如果您還沒有下載,請參見上面的部分。
#?計算每日收益netflix_daily_returns?<-?netflix?%>%??tq_transmute(select?=?adjusted,??????????這指定要選擇的列
???????????????mutate_fun?=?periodReturn,???#?這指定如何處理該列???????????????period?=?"daily",??????#?此參數(shù)計算每日收益???????????????col_rename?=?"nflx_returns")?#?重命名列#計算每月收益netflix_monthly_returns?<-?netflix?%>%??tq_transmute(select?=?adjusted,
???????????????mutate_fun?=?periodReturn,
???????????????period?=?"monthly",??????#?此參數(shù)計算每月收益???????????????col_rename?=?"nflx_returns")
繪制Netflix的每日和每月收益圖表
#?我們將使用折線圖獲取每日收益
?
??ggplot(aes(x?=?date,?y?=?nflx_returns))?+
??geom_line()?+
??theme_classic()?+

查看Netflix的每日收益圖表后,我們可以得出結(jié)論,收益波動很大,并且股票在任何一天都可以波動+/- 5%。為了了解收益率的分布,我們可以繪制直方圖。
netflix_daily_returns?%>%
??ggplot(aes(x?=?nflx_returns))?+
??geom_histogram(binwidth?=?0.015)?+
??theme_classic()?+

接下來,我們可以繪制自2009年以來Netflix的月度收益率。我們使用條形圖來繪制數(shù)據(jù)。
#?繪制Netflix的月度收益圖表。?使用條形圖??ggplot(aes(x?=?date,?y?=?nflx_returns))?+
??geom_bar(stat?=?"identity")?+
??theme_classic()?+

計算Netflix股票的累計收益
繪制每日和每月收益對了解投資的每日和每月波動很有用。要計算投資的增長,換句話說,計算投資的總收益,我們需要計算該投資的累積收益。要計算累積收益,我們將使用??cumprod()??函數(shù)。
?
??mutate(cr?=?cumprod(1?+?nflx_returns))?%>%??????#?使用cumprod函數(shù)
?
??ggplot(aes(x?=?date,?y?=?cumulative_returns))?+
??geom_line()?+
??theme_classic()?+

點擊標題查閱往期內(nèi)容

R語言ARMA GARCH COPULA模型擬合股票收益率時間序列和模擬可視化

左右滑動查看更多

01

02

03

04

該圖表顯示了自2009年以來Netflix的累計收益。有了事后分析的力量,?自2009年以來,_可以_用1美元的投資賺取85美元。但據(jù)我們所知,說起來容易做起來難。在10年左右的時間里,在Qwickster慘敗期間投資損失了其價值的50%。在這段時期內(nèi),很少有投資者能夠堅持投資。
??ggplot(aes(x?=?date,?y?=?cumulative_returns))?+
??geom_line()?+
??theme_classic()?+

我們可以直觀地看到,月收益表比日圖表要平滑得多。
多只股票
下載多只股票的股票市場數(shù)據(jù)。
#將我們的股票代碼設(shè)置為變量tickers?<-?c("FB",?"AMZN",?"AAPL",?"NFLX",?"GOOG")?#?下載股價數(shù)據(jù)multpl_stocks?<-?tq_get(tickers,
繪制多只股票的股價圖
接下來,我們將繪制多只股票的價格圖表
multpl_stocks?%>%??ggplot(aes(x?=?date,?y?=?adjusted,

這不是我們預(yù)期的結(jié)果。由于這些股票具有巨大的價格差異(FB低于165,AMZN高于1950),因此它們的規(guī)模不同。我們可以通過按各自的y比例繪制股票來克服此問題。
?
??facet_wrap(~symbol,?scales?=?"free_y")?+??#?facet_wrap用于制作不同的頁面??theme_classic()?+

計算多只股票的收益
計算多只股票的收益與單只股票一樣容易。這里只需要傳遞一個附加的參數(shù)。我們需要使用參數(shù)??group_by(symbol)??來計算單個股票的收益。
#計算多只股票的每日收益????????????????????????????tq_transmute(select?=?adjusted,
???????????????mutate_fun?=?periodReturn,
???????????????period?=?'daily',
???????????????col_rename?=?'returns')#計算多只股票的月收益??????????????????????????????tq_transmute(select?=?adjusted,
???????????????mutate_fun?=?periodReturn,
???????????????period?=?'monthly',
???????????????col_rename?=?'returns')
繪制多只股票的收益圖表
一旦有了收益計算,就可以在圖表上繪制收益。
multpl_stock_daily_returns?%>%
??ggplot(aes(x?=?date,?y?=?returns))?+
??geom_line()?+
??geom_hline(yintercept?=?0)?+

multpl_stock_monthly_returns?%>%
??ggplot(aes(x?=?date,?y?=?return?
??scale_fill_brewer(palette?=?"Set1",???#?我們會給他們不同的顏色,而不是黑色

在FAANG股票中,蘋果的波動最小,而Facebook和Netflix的波動最大。對于他們從事的業(yè)務(wù)而言,這是顯而易見的。Apple是一家穩(wěn)定的公司,擁有穩(wěn)定的現(xiàn)金流量。它的產(chǎn)品受到數(shù)百萬人的喜愛和使用,他們對Apple擁有極大的忠誠度。Netflix和Facebook也是令人難以置信的業(yè)務(wù),但它們處于高增長階段,任何問題(收益或用戶增長下降)都可能對股票產(chǎn)生重大影響。
計算多只股票的累計收益
通常,我們希望看到過去哪種投資產(chǎn)生了最佳效果。為此,我們可以計算累積結(jié)果。下面我們比較自2013年以來所有FAANG股票的投資結(jié)果。哪項是自2013年以來最好的投資?
multpl_stock_monthly_returns?%>%
??mutate(returns?e_returns?=?cr?-?1)?%>%
??ggplot(aes(x?=?date,?y?=?cumulative_returns,?color?=?symbol))?+
??geom_line()?+
??labs(x?=?"Date"

毫不奇怪,Netflix自2013年以來獲得了最高的收益。亞馬遜和Facebook位居第二和第三。
統(tǒng)計數(shù)據(jù)
計算單個股票的均值,標準差
我們已經(jīng)有了Netflix的每日和每月收益數(shù)據(jù)?,F(xiàn)在我們將計算收益的每日和每月平均數(shù)和標準差。?為此,我們將使用??mean()??和??sd()?函數(shù)。
#?計算平均值
?
??.[[1]]?%>%??mean(na.rm?=?TRUE)
nflx_monthly_mean_ret?<-?netfl?turns)?%>%??.[[1]]?%>%??mean(na.rm?=?TRUE)
#?計算標準差
nflx_daily_sd_ret?<-?netflirns)?%>%??.[[1]]?%>%??sd()
nflx_monthly_sd_ret?<-?netflix_rns)?%>%??.[[1]]?%>%??sd()
?nflx_stat
##?#?A?tibble:?2?x?3##???period?????mean?????sd##???<chr>?????<dbl>??<dbl>##?1?Daily???0.00240?0.0337##?2?Monthly?0.0535??0.176
我們可以看到Netflix的平均每日收益為0.2%,標準差為3.3%。它的月平均回報率是5.2%和17%標準差。該數(shù)據(jù)是自2009年以來的整個時期。如果我們要計算每年的均值和標準差,該怎么辦。我們可以通過按年份對Netflix收益數(shù)據(jù)進行分組并執(zhí)行計算來進行計算。
netflix??%>%
??summarise(Monthly_Mean_Returns?=?mean(nflx_returns),
????????????MOnthly_Standard_Deviation?=?sd(nflx_returns)
##?#?A?tibble:?10?x?3##?????year?Monthly_Mean_Returns?MOnthly_Standard_Deviation##????<dbl>????????????????<dbl>??????????????????????<dbl>##??1??2009??????????????0.0566??????????????????????0.0987##??2??2010??????????????0.110???????????????????????0.142?##??3??2011?????????????-0.0492??????????????????????0.209?##??4??2012??????????????0.0562??????????????????????0.289?##??5??2013??????????????0.137???????????????????????0.216?##??6??2014??????????????0.00248?????????????????????0.140?##??7??2015??????????????0.0827??????????????????????0.148?##??8??2016??????????????0.0138??????????????????????0.126?##??9??2017??????????????0.0401??????????????????????0.0815##?10??2018??????????????0.243???????????????????????0.233
我們還可以繪制結(jié)果更好地理解。
netflix_monthly_returns?%>%
??mutate(year?=?rns,?Standard_Deviation,?keyistic))?+
??geom_bar(stat?=?"identity",?position?=?"dodge")?+
??scale_y_continuous(b?)?+
??theme_bw()?+

我們可以看到,自2009年以來,每月收益和標準差波動很大。2011年,平均每月收益為-5%。
計算多只股票的均值,標準差
接下來,我們可以計算多只股票的均值和標準差。
??group_by(symbol)?%>%??summarise(mean?=?mean(returns),
????????????sd?=?sd(returns))
##?#?A?tibble:?5?x?3##???symbol?????mean?????sd##???<chr>?????<dbl>??<dbl>##?1?AAPL???0.00100??0.0153##?2?AMZN???0.00153??0.0183##?3?FB?????0.00162??0.0202##?4?GOOG???0.000962?0.0141##?5?NFLX???0.00282??0.0300
group_by(symbol)?%>%??summarise(mean?=?mean(returns),
????????????sd?=?sd(returns))
##?#?A?tibble:?5?x?3##???symbol???mean?????sd##???<chr>???<dbl>??<dbl>##?1?AAPL???0.0213?0.0725##?2?AMZN???0.0320?0.0800##?3?FB?????0.0339?0.0900##?4?GOOG???0.0198?0.0568##?5?NFLX???0.0614?0.157
計算收益的年均值和標準差。
???%>%??group_by(symbol,?year)?%>%??summarise(mean?=?mean(returns),
????????????sd?=?sd(returns))
##?#?A?tibble:?30?x?4##?#?Groups:???symbol?[?]##????symbol??year??????mean?????sd##????<chr>??<dbl>?????<dbl>??<dbl>##??1?AAPL????2013??0.0210???0.0954##??2?AAPL????2014??0.0373???0.0723##??3?AAPL????2015?-0.000736?0.0629##??4?AAPL????2016??0.0125???0.0752##??5?AAPL????2017??0.0352???0.0616##??6?AAPL????2018??0.0288???0.0557##??7?AMZN????2013??0.0391???0.0660##??8?AMZN????2014?-0.0184???0.0706##??9?AMZN????2015??0.0706???0.0931##?10?AMZN????2016??0.0114???0.0761##?#?...?with?20?more?rows
我們還可以繪制此統(tǒng)計數(shù)據(jù)。
multpl_stock_monthly_returns?%>%
??mutate(year?=?year(date))?%>%
??group_by(symbol,?yea?s?=?seq(-0.1,0.4,0.02),
?????????????????????labels?=?scales::percent)?+
??scale_x_continuous(breaks?=?seq(2009,2018,1))?+
??labs(x?=?"Year",?y?=?Stocks")?+
??ggtitle

multpl_stock_monthly_returns?%>%
??mutate(year?=?year(date))?%>%?
??ggplot(aes(x?=?year,?y?=?sd,?fill?=?symbol))?+
??geom_bar(stat?=?"identity",?position?=?"dodge",?width?=?0.7)?+
??scale_y_continuous(breaks?=?seq(-0.1,0.4,0.02),
?????????????????????labels?=?scales::p?
??scale_fill_brewer(palette?=?"Set1",
計算多只股票的協(xié)方差和相關(guān)性
另一個重要的統(tǒng)計計算是股票的相關(guān)性和協(xié)方差。為了計算這些統(tǒng)計數(shù)據(jù),我們需要修改數(shù)據(jù)。我們將其轉(zhuǎn)換為xts對象。
協(xié)方差表
#計算協(xié)方差??tk_xts(silent?=?TRUE)?%>%
??cov()
##???????????????AAPL????????AMZN??????????FB?????????GOOG??????????NFLX##?AAPL??5.254736e-03?0.001488462?0.000699818?0.0007420307?-1.528193e-05##?AMZN??1.488462e-03?0.006399439?0.001418561?0.0028531565??4.754894e-03##?FB????6.998180e-04?0.001418561?0.008091594?0.0013566480??3.458228e-03##?GOOG??7.420307e-04?0.002853157?0.001356648?0.0032287790??3.529245e-03##?NFLX?-1.528193e-05?0.004754894?0.003458228?0.0035292451??2.464202e-02
相關(guān)表
#?計算相關(guān)系數(shù)?%>%
??tk_xts(silent?=?TRUE)?%>%
??cor()
##??????????????AAPL??????AMZN????????FB??????GOOG?????????NFLX##?AAPL??1.000000000?0.2566795?0.1073230?0.1801471?-0.001342964##?AMZN??0.256679539?1.0000000?0.1971334?0.6276759??0.378644485##?FB????0.107322952?0.1971334?1.0000000?0.2654184??0.244905437##?GOOG??0.180147089?0.6276759?0.2654184?1.0000000??0.395662114##?NFLX?-0.001342964?0.3786445?0.2449054?0.3956621??1.000000000
我們可以使用corrplot()
?包來繪制相關(guān)矩陣圖。
##?corrplot?0.84?loaded
??cor()?%>%??corrplot()
點擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《基于R語言股票市場收益的統(tǒng)計可視化分析》。
點擊標題查閱往期內(nèi)容
ARMA-GARCH-COPULA模型和金融時間序列案例
時間序列分析:ARIMA GARCH模型分析股票價格數(shù)據(jù)
GJR-GARCH和GARCH波動率預(yù)測普爾指數(shù)時間序列和Mincer Zarnowitz回歸、DM檢驗、JB檢驗
【視頻】時間序列分析:ARIMA-ARCH / GARCH模型分析股票價格
時間序列GARCH模型分析股市波動率
PYTHON用GARCH、離散隨機波動率模型DSV模擬估計股票收益時間序列與蒙特卡洛可視化
極值理論 EVT、POT超閾值、GARCH 模型分析股票指數(shù)VaR、條件CVaR:多元化投資組合預(yù)測風險測度分析
Garch波動率預(yù)測的區(qū)制轉(zhuǎn)移交易策略
金融時間序列模型ARIMA 和GARCH 在股票市場預(yù)測應(yīng)用
時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言風險價值:ARIMA,GARCH,Delta-normal法滾動估計VaR(Value at Risk)和回測分析股票數(shù)據(jù)
R語言GARCH建模常用軟件包比較、擬合標準普爾SP 500指數(shù)波動率時間序列和預(yù)測可視化
Python金融時間序列模型ARIMA 和GARCH 在股票市場預(yù)測應(yīng)用
MATLAB用GARCH模型對股票市場收益率時間序列波動的擬合與預(yù)測R語言GARCH-DCC模型和DCC(MVT)建模估計
Python 用ARIMA、GARCH模型預(yù)測分析股票市場收益率時間序列
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言ARIMA-GARCH波動率模型預(yù)測股票市場蘋果公司日收益率時間序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預(yù)測
R語言時間序列GARCH模型分析股市波動率
R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進行預(yù)測
matlab實現(xiàn)MCMC的馬爾可夫轉(zhuǎn)換ARMA - GARCH模型估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預(yù)測
使用R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列數(shù)據(jù)建模
R語言股票市場指數(shù):ARMA-GARCH模型和對數(shù)收益率數(shù)據(jù)探索性分析
R語言多元Copula GARCH 模型時間序列預(yù)測
R語言使用多元AR-GARCH模型衡量市場風險
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言用Garch模型和回歸模型對股票價格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計arma garch 條件均值和方差模型R語言POT超閾值模型和極值理論EVT分析