拓端tecdat|R語言單變量和多變量(多元)動態(tài)條件相關(guān)系數(shù)DCC-GARCH模型分析股票收益
原文鏈接:http://tecdat.cn/?p=25957?
原文出處:拓端數(shù)據(jù)部落公眾號
介紹
當(dāng)您處理金融時間序列時,我們通??梢垣@得相對高頻的觀察結(jié)果。例如,每天進(jìn)行觀察是很常見的。事實上,現(xiàn)在可以獲得每小時、分鐘、秒甚至毫秒的觀測值。
使用的包
有許多軟件包可以使我們能夠估計波動率模型。我們還將使用該?quantmod
?軟件包,因為它可以讓我們輕松訪問一些標(biāo)準(zhǔn)財務(wù)數(shù)據(jù)。
數(shù)據(jù)上傳
在這里,我們將使用包提供的方便的數(shù)據(jù)檢索功能(getSymbols
)?quantmod
?來檢索一些數(shù)據(jù)。例如,此函數(shù)可用于檢索股票數(shù)據(jù)。默認(rèn)來源是?Yahoo Finance. 如果您想找出哪些股票有哪個符號,您應(yīng)該能夠在互聯(lián)網(wǎng)上搜索以找到股票代碼列表。下面介紹如何使用該功能。但請注意,我的經(jīng)驗是有時連接不起作用,您可能會收到錯誤消息。在這種情況下,只需在幾秒鐘后重試,它就可以正常工作。
getSymbols("IBM")
## [1] "IBM"
getSymbols("GOOG")
## [1] "GOOG"
getSymbols("BP")
## [1] "BP"
在您的環(huán)境中,您可以看到這些命令中的每一個都使用各自的股票代碼名稱加載一個對象。讓我們看一下這些數(shù)據(jù)框之一,以了解這些數(shù)據(jù)是什么:

您可以看到該對象包含一系列每日觀察結(jié)果(??Open
、?High
和?Close
股價??)。我們還了解到對象被格式化為xts
?對象,??是一種時間序列格式,實際上我們了解到數(shù)據(jù)范圍從 2007-01-03 到 2022-03-24。
使用以下命令生成一個看起來有點花哨的圖表

當(dāng)我們估計波動率模型時,我們使用收益率。有一個函數(shù)可以將數(shù)據(jù)轉(zhuǎn)換為收益率。
dailyReturn(IBM)
單變量 GARCH 模型
您需要做的第一件事是確保您知道要估計的 GARCH 模型類型,然后讓 R 知道這一點。讓我們看看:

這里的關(guān)鍵問題是?Mean Model
?(這里是 ARMA(1,1) 模型)和?GARCH Model
, 這里?sGARCH(1,1)
?基本上是 GARCH(1,1) 的模型。
假設(shè)您要將平均模型從 ARMA(1,1) 更改為 ARMA(1,0),即 AR(1) 模型。
uec <- ugarchspec
以下是 EWMA 模型示例。
ewm = ugarchspe
模型估計
現(xiàn)在我們已經(jīng)指定了一個模型來估計,我們需要找到最好的參數(shù),即我們需要估計模型。這一步是通過?it
?函數(shù)來實現(xiàn)的。
fit(specrIBM)
fit
?現(xiàn)在是一個包含一系列估計結(jié)果的列表。讓我們看看結(jié)果

??


ar1
?是均值模型的 AR1 系數(shù)(這里非常小且基本上不顯著),?alpha1
?是 GARCH 方程中殘差平方?beta1
?的系數(shù),是滯后方差的系數(shù)。
通常,您會希望使用模型輸出進(jìn)行一些進(jìn)一步的分析。因此,了解如何提取參數(shù)估計值、標(biāo)準(zhǔn)誤差或殘差等信息非常重要。該對象?ugfit
?包含所有信息。
names
如果您想提取估計的系數(shù),您可以通過以下方式進(jìn)行:

讓我們繪制平方殘差和估計的條件方差:

模型預(yù)測
通常您會希望使用估計模型來隨后預(yù)測條件方差。用于此目的的函數(shù)是?forecast
?函數(shù)。該應(yīng)用程序相當(dāng)簡單:
hforecast(ugfit

正如你所看到的,我們已經(jīng)對未來十天進(jìn)行了預(yù)測,包括預(yù)期收益 (?Series
) 和條件波動率(條件方差的平方根)。您可以提取條件波動率預(yù)測如下:
forecast$sigmaFor
plot

請注意,波動率是條件方差的平方根。
為了將這些預(yù)測放在上下文中,讓我們將它們與估計中使用的最后 50 個觀察值一起顯示。
(tail(ug_var,20) ) ?# 得到最后20個觀察值
tail(ug_res2,20 )) ?# 得到最后的20個觀測值

您可以看到條件方差的預(yù)測是如何從上次估計的條件方差中得出的。事實上,它從那里慢慢地向無條件方差值遞減。
多元 GARCH 模型
通常,您需要對波動性進(jìn)行建模。這可以通過單變量 GARCH 模型的多變量版本來完成。估計多變量 GARCH 模型比單變量 GARCH 模型要困難得多,但幸運的是,已經(jīng)開發(fā)了處理大多數(shù)這些問題的程序。
在這里,我們來估計 BP、Google/Alphabet 和 IBM 股票收益率的多元波動率模型。
在這里,我們堅持使用動態(tài)條件相關(guān) (DCC) 模型。在估計 DCC 模型時,基本上是估計單個 GARCH 類型模型。然后將這些用于標(biāo)準(zhǔn)化各個殘差。作為第二步,必須指定這些標(biāo)準(zhǔn)化殘差的相關(guān)動態(tài)。
模型設(shè)置
在這里,我們假設(shè)我們對三種資產(chǎn)中的每一種都使用相同的單變量波動率模型。
# DCC (MVN)
u.n = multispec
這個命令有什么作用?它指定了一個 AR(1)-GARCH(1,1) 模型。將這個模型復(fù)制了 3 次(因為我們擁有三種股票,IBM、Google/Alphabet 和 BP)。
我們現(xiàn)在使用命令估計
結(jié)果保存在?multf
?其中,您可以?multf
?在命令窗口中鍵入以查看這三個模型的估計參數(shù)。但是我們將在這里繼續(xù)指定 DCC 模型。
spec
模型估計
現(xiàn)在我們可以使用該?fit
?函數(shù)來估計模型了。
fit1 =fit(spec1)
當(dāng)您估計像 DCC 模型這樣的多元波動率模型時,您通常對估計的協(xié)方差或相關(guān)矩陣感興趣。畢竟,這些模型的核心是允許股票之間的相關(guān)性隨時間變化。因此,我們現(xiàn)在將學(xué)習(xí)如何提取這些。
# 獲取基于模型的時間變化協(xié)方差(陣列)和相關(guān)矩陣
rcov(fit1) # 提取協(xié)方差矩陣
rcor(fit1) # 提取相關(guān)矩陣
要了解我們手頭的數(shù)據(jù),我們可以看一下維度:

我們得到三個輸出,告訴我們我們有一個三維對象。前兩個維度各有 3 個元素(想想一個 3×3 相關(guān)矩陣),然后是第三個維度,有 3834個元素。這告訴我們?cor1
?存儲了 3834(3×3) 個相關(guān)矩陣,一個用于每天的數(shù)據(jù)。
讓我們看看最后一天的相關(guān)矩陣,第 3834天;

因此,假設(shè)我們要繪制 Google 和 BP 之間的時變相關(guān)性,即最后一天的 0.1924。在我們的收益矩陣中,??rX
?BP 是第二個資產(chǎn),而 Google 是第三個。因此,在任何特定的相關(guān)矩陣中,我們都需要第 2 行和第 3 列中的元素。
cor1[2,1,] # 將最后一個維度留空意味著我們需要所有元素
as.xts(c G) # 采用xts的時間序列格式--對繪圖很有用
現(xiàn)在我們繪制這個。

如您所見,隨著時間的推移存在顯著變化,相關(guān)性通常在 0.2 和 0.5 之間變化。
讓我們繪制三種資產(chǎn)之間的所有三種相關(guān)性。

預(yù)測
通常您會希望使用您的估計模型來生成協(xié)方差或相關(guān)矩陣的預(yù)測

?

相關(guān)性的實際預(yù)測可以通過
mforecast$R ? ?# 用H來預(yù)測協(xié)方差
檢查結(jié)構(gòu)時?Rf

您意識到該對象?Rf
?是一個包含一個元素的列表。事實證明,這個列表項是一個 3 維矩陣/數(shù)組,其中包含 3×3 相關(guān)矩陣的 10 個預(yù)測。例如,如果我們想提取 IBM(第一項資產(chǎn))和 BP(第二項資產(chǎn))之間相關(guān)性的 10 個預(yù)測,我們必須按以下方式進(jìn)行:
Rf[[1]][1,2,] # IBM和BP之間的相關(guān)預(yù)測值
Rf[[1]][1,3,] # IBM和谷歌之間的相關(guān)預(yù)測
Rf[[1]][2,3,] # BP和Google之間的相關(guān)性預(yù)測
至于單變量波動性模型,讓我們將預(yù)測與相關(guān)性的最后樣本內(nèi)估計一起顯示。
# 這將創(chuàng)建一個有3個窗口的框架,由圖畫來填充
c(tail(cor1[1,2,],20),rep(NA,10)) ?# 得到最后20個相關(guān)觀測值
c(rep(NA,20),corf_IB) # 得到10個預(yù)測值
plot
c(tail(cor1[1,3,],20),rep(NA,10)) ?# 得到最后20個相關(guān)觀測值
c(rep(NA,20),corf_IG) # 得到10個預(yù)測值
c(tail(cor1[2,3,],20),rep(NA,10)) ?# 獲得最后20個相關(guān)觀測值
c(rep(NA,20),corf_BG) # 得到10個預(yù)測值


最受歡迎的見解
1.HAR-RV-J與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)混合模型預(yù)測和交易大型股票指數(shù)的高頻波動率
2.R語言中基于混合數(shù)據(jù)抽樣(MIDAS)回歸的HAR-RV模型預(yù)測GDP增長
3.波動率的實現(xiàn):ARCH模型與HAR-RV模型
4.R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進(jìn)行預(yù)測
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.R語言多元COPULA GARCH 模型時間序列預(yù)測
7.R語言基于ARMA-GARCH過程的VAR擬合和預(yù)測
8.matlab預(yù)測ARMA-GARCH 條件均值和方差模型
9.R語言對S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略