閱讀全文:http://tecdat.cn/?p=6193
最近我們被客戶要求撰寫關於Copula的研究報告,包括一些圖形和統計輸出。
copula是將多變量分布函數與其邊緣分布函數耦合的函數,通常稱為邊緣。在本視頻中,我們通過可視化的方式直觀地介紹了Copula函數,並通過R軟體應用於金融時間序列數據來理解它 。
為什麼要引入Copula函數?
當邊緣分布(即每個隨機變量的分布)不同的隨機變量,互相之間並不獨立的時候,此時對於聯合分布的建模會變得十分困難。
讓我們從一個示例問題案例開始。假設我們測量兩個非正態分布且相關的變量。例如,我們查看各種河流,我們查看該河流在特定時間段內的最高水位。此外,我們還計算了每條河流造成洪水的月份。對於河流最高水位的機率分布,我們可以參考極值理論,它告訴我們最大值是Gumbel分布的。洪水發生的次數將根據Beta分布進行建模,該分布只是告訴我們發生洪水的機率是洪水與非洪水發生次數的函數。
假設洪水的最高水位和數量是相關的,這是非常合理的。然而,這裡我們遇到了一個問題:我們應該如何對機率分布進行建模?上面我們只指定了各個變量的分布,而與另一個變量無關(即邊緣分布)。實際上,我們正在處理這兩者的聯合分布。
此時,在已知多個已知 邊緣分布的隨機變量下,Copula函數則是一個非常好的工具來對其相關性進行建模。
copula 的主要吸引力在於,通過使用他們,您可以分別對相關結構和邊緣分布(即每個隨機變量的分布)進行建模。
因為對於某些邊緣分布組合,沒有內置函數來生成所需的多元分布。例如,在 R 中,很容易從多元正態分布中生成隨機樣本,但是對於邊緣分別為 Beta、Gamma 和 Student 的分布來說,這樣做並不容易。
copula 將邊緣分布與研究它們的「關係」分開,因此您無需擔心考慮可能的單變量分布類型的所有可能組合,從而大大簡化了所需的代碼量。
Copula可以同時處理多個變量,例如您可以在一個群組中處理多隻股票,而不僅僅是一對,以創建最終交易組合,以在更高的維度上發現錯誤定價。
什麼是copula
Copula 在拉丁語中的意思是「連結」,copula 是將多元分布函數與其邊緣分布函數耦合的函數,通常稱為邊緣或簡稱為邊緣。Copulas 是用於建模和模擬相關隨機變量的絕佳工具。
總的來說,copula 是一種統計方法,用於理解多元分布的聯合機率。
Copula是模擬多元相關數據的流行方法,是一個表示多元均勻分布的機率模型,它檢查許多變量之間的關聯或依賴關係。
今天,copulas 被用於高級財務分析,以更好地理解涉及厚尾和偏度的結果。用於幫助識別市場風險、信用風險和操作風險。它依賴於兩種或多種資產收益的相互依賴關係。相關性最適合 正態分布,而金融市場中的分布本質上通常是非正態分布。因此,copula 已應用於諸如期權定價和投資組合風險價值等金融領域,以處理偏斜或不對稱分布。
如何使用copula 分析數據
回想一下,您可以使用累積分布函數將任何分布轉換為均勻分布。同樣,您可以使用逆累積分布函數將均勻分布轉換為任何分布。例如要模擬來自高斯 copula 的相關多元數據,請執行以下三個步驟:
1.從相關矩陣模擬相關的多元正態數據。邊緣分布都是標準正態分布。
2.使用標準正態累積分布函數將正態邊緣轉換為均勻分布。
3.使用逆累積分布函數將均勻邊緣分布轉換為 您想要的任何分布。
第二步和第三步中的轉換是在數據矩陣的各個列上執行的。變換是單調的,這意味著它們不會改變列之間的等級相關性。因此,最終數據與第一步中的多元正態數據具有相同的秩相關性。
首先我們可以生成均勻分布的隨機變量
下面,我們想要轉化這些樣本使他們變成正態分布。那麼,我們只需要以 x為累積分布函數值,對正態分布求逆即可,
如果我們將 x 和轉化後的x 的分布畫在一張圖中,就可以直觀的看出逆累積分布函數的樣子。
同理,我們也可以基於 beta 分布或者gumbel 分布來得到類似的圖像,這種機率積分變換的本質是相同的。
而我們如果想要從一個任意的分布到均勻分布,那麼我們只需要進行一次累積分布函數就可以了。這裡我將 轉換後的x 再做一次轉化
簡單的高斯Copula例子
我們構建一個簡單的例子,來看如何利用機率積分變換來認識高斯copula。首先從二元正態分布中生成樣本:
通過給 x1和x2的累積分布函數進行採樣,我們可以將其轉化成均勻分布。
現在,我們在上面的基礎上(構建的高斯Copula函數),把邊緣分布換成Beta分布和Gumbel分布:
那如果沒有二者的耦合關係,這個圖是怎樣的呢?
兩張圖對比一下,還是很容易看出區別的吧!這就是我們使用copula函數內在的方法了,其核心還是通過均勻分布。
Copula的數學定義
它是一個多元分布C,邊緣分布為均勻分布。它實際上只是一個具有均勻分布邊緣屬性的函數。它確實只有在與另一個變換結合以獲得我們想要的邊緣分布時才有用。
我們也可以更好地理解高斯 copula 的數學描述:
對於給定的R, 具有參數矩陣的高斯copula可以寫成 ,其中Φ− 1是標準正態的逆累積分布函數,並且ΦR是平均向量為零且協方差矩陣等於相關矩陣的多元正態分布的聯合累積分布函數R.
請注意,在上面的例子中,我們採用相反的方式從該分布創建樣本。此處表示的高斯 copula 採用 均勻分布輸入,將它們轉換為高斯,然後應用相關性並將它們轉換回均勻分布。
Copula函數主要應用在哪裡呢?
該工具最初是用在金融衍生品領域,該函數建模作為衍生品風險度量的工作進行使用。在2008年金融危機中,這個工具被人廣泛的提及,認為當時採用的高斯copula沒有能夠完整度量衍生品連帶之間的風險,從而導致一系列的違約,進而引發次貸危機、經濟危機。
也有人事後寫了文章來介紹這個工具和現實社會經濟的關係,包括很有名的電影《大空頭》,也有這段的描寫。
說回工具本身,除了金融領域,現在很多研究機率分布的領域都在使用copula,例如電力系統領域研究風電、光伏等間歇性能源,也在使用這種方法進行建模。
接下來我們在R軟體中對金融時間序列進行copula建模。
首先,讓我們了解copula的工作方式。
set.seed(100)
m < - 3
n < - 2000
z < - mvrnorm(n,mu = rep(0,m),Sigma = sigma,empirical = T)
我們使用cor()和散點圖矩陣檢查樣本相關性。
pairs.panels(Z)
[,1] [,2] [,3]
[1,] 1.0000000 0.3812244 0.1937548
[2,] 0.3812244 1.0000000 -0.7890814
[3,] 0.1937548 -0.7890814 1.0000000
pairs.panels(U)
這是包含新隨機變量的散點圖矩陣u。
點擊標題查閱往期內容
R語言多元Copula GARCH 模型時間序列預測
左右滑動查看更多
01
02
03
04
我們可以繪製矢量的3D圖表示u。
現在,作為最後一步,我們只需要選擇邊緣並應用它。我選擇了邊緣為Gamma,Beta和Student,並使用下面指定的參數。
x1 < - qgamma(u [,1],shape = 2,scale = 1)
x2 < - qbeta(u [,2],2,2)
x3 < - qt(u [,3],df = 5)
下面是我們模擬數據的3D圖。
df < - cbind(x1,x2,x3)
pairs.panels(DF)
x1 x2 x3
x1 1.0000000 0.3812244 0.1937548
x2 0.3812244 1.0000000 -0.7890814
x3 0.1937548 -0.7890814 1.0000000
這是隨機變量的散點圖矩陣:
讓我們使用copula複製上面的過程。
現在我們已經通過copula(普通copula)指定了相依結構並設置了邊緣,mvdc()函數生成了所需的分布。然後我們可以使用rmvdc()函數生成隨機樣本。
colnames(Z2)< - c(「x1」,「x2」,「x3」)
pairs.panels(Z2)
模擬數據當然非常接近之前的數據,顯示在下面的散點圖矩陣中:
現在為現實世界的例子。我們將擬合兩個股票 ,並嘗試使用copula模擬 。
讓我們在R中加載 :
cree < - read.csv('cree_r.csv',header = F)$ V2
yahoo < - read.csv('yahoo_r.csv',header = F)$ V2
在直接進入copula擬合過程之前,讓我們檢查兩個股票收益之間的相關性並繪製回歸線:
我們可以看到 正相關 :
在上面的第一個例子中,我選擇了一個正態的copula模型,但是,當將這些模型應用於實際數據時,應該仔細考慮哪些更適合數據。例如,許多copula更適合建模非對稱相關,其他強調尾部相關性等等。我對股票收益率的猜測是,t-copula應該沒問題,但是猜測肯定是不夠的。本質上, 允許我們通過函數使用BIC和AIC執行copula選擇 :
pobs(as.matrix(cbind(cree,yahoo)))[,1]
selectedCopula
$ PAR
[1] 0.4356302
$ PAR2
[1] 3.844534
擬合算法確實選擇了t-copula並為我們估計了參數。
讓我們嘗試擬合建議的模型,並檢查參數擬合。
t.cop
set.seed(500)
m < - pobs(as.matrix(cbind(cree,yahoo)))
COEF(FIT)
rho.1 df
0.43563 3.84453
我們來看看我們剛估計的copula的密度
rho < - coef(fit)[1]
df < - coef(fit)[2]
現在我們只需要建立Copula並從中抽取3965個隨機樣本。
rCopula(3965,tCopula( = 2, ,df = df))
[,1] [,2]
[1,] 1.0000000 0.3972454
[2,] 0.3972454 1.0000000
這是包含的樣本的圖:
t-copula通常適用於在極值(分布的尾部)中存在高度相關性的現象。
現在我們面臨困難:對邊緣進行建模。為簡單起見,我們將假設正態分布 。因此,我們估計邊緣的參數。
直方圖顯示如下:
現在我們在函數中應用copula,從生成的多變量分布中獲取模擬觀測值。最後,我們將模擬結果與原始數據進行比較。
這是在假設正態分布邊緣和相依結構的t-copula的情況下數據的最終散點圖:
正如您所看到的,t-copula導致結果接近實際觀察結果 。
讓我們嘗試df=1和df=8:
顯然,該參數df對於確定分布的形狀非常重要。隨著df增加,t-copula傾向於正態分布copula。
本文摘選 《 R語言實現 Copula 算法建模相依性案例分析報告 》 ,點擊「閱讀原文」獲取全文完整資料。
點擊標題查閱往期內容
Copula估計邊緣分布模擬收益率計算投資組合風險價值VaR與期望損失ES
MATLAB用COPULA模型進行蒙特卡洛(MONTE CARLO)模擬和擬合股票收益數據分析
python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化R語言中的copula GARCH模型擬合時間序列並模擬分析
matlab使用Copula仿真優化市場風險數據VaR分析
R語言多元Copula GARCH 模型時間序列預測
R語言Copula函數股市相關性建模:模擬Random Walk(隨機遊走)
R語言實現 Copula 算法建模依賴性案例分析報告
R語言ARMA-GARCH-COPULA模型和金融時間序列案例
R語言基於copula的貝葉斯分層混合模型的診斷準確性研究
R語言COPULA和金融時間序列案例
matlab使用Copula仿真優化市場風險數據VaR分析
matlab使用Copula仿真優化市場風險
R語言多元CopulaGARCH模型時間序列預測
R語言Copula的貝葉斯非參數MCMC估計
R語言COPULAS和金融時間序列R語言乘法GARCH模型對高頻交易數據進行波動性預測
R語言GARCH-DCC模型和DCC(MVT)建模估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測
R語言時間序列GARCH模型分析股市波動率
R語言ARMA-EGARCH模型、集成預測算法對SPX實際波動率進行預測
matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測
使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列數據建模
R語言股票市場指數:ARMA-GARCH模型和對數收益率數據探索性分析
R語言多元Copula GARCH 模型時間序列預測
R語言使用多元AR-GARCH模型衡量市場風險
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言用Garch模型和回歸模型對股票價格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計arma garch 條件均值和方差模型
R語言ARMA-GARCH-COPULA模型和金融時間序列案例