最近我們被客戶要求撰寫關於Copula的研究報告,包括一些圖形和統計輸出。
這篇文章是關於 copulas 和重尾的。在全球金融危機之前,許多投資者是多元化的。
看看下面這張熟悉的圖:
黑線是近似正態的。紅線代表Cauchy分布,它是具有一個自由度的T分布的一個特殊情況。也許是因為Cauchy和t分布混在一起。我們總是可以計算出經驗方差。請看下圖。這是對1自由度的t分布(紅色的Cauchy分布)和5自由度的t分布(藍色)的模擬結果。
為了比較不同的尾部行為,我們有我們所謂的尾部指數。簡而言之,在幾乎任何分布中,某個閾值之後的觀測值(比如說最差的5%的情況下的觀測值)都是漸進式的帕累托分布。
其中x_m是截止點,α將決定尾巴的形狀。α也被稱為尾部指數。
現在大家都知道,金融收益呈現出厚尾。這使得保持投資組合為左尾事件做好準備變得更加重要,因為在那個區域,由於相關性的增加,你會同時受到所有資產的影響(正如金融危機所證明的那樣)。在這個討論中,copulas發揮了重要的作用。copulas的概念是相當巧妙的。copula這個詞起源於拉丁語,它的意思是捆綁。當我們有兩個(或更多)資產類別的收益,我們可以假設或模擬它們的分布。做完這些之後,我們可以把它們 "粘貼 "在一起,只對相關部分進行建模,而不考慮我們最初對它們各自分布的建模方式。怎麼做?
我們從英國統計學家 Ronald Fisher 開始,他在 1925 年證明了一個非常有用的性質,即任何連續隨機變量的累積分布函數都是均勻分布的。形式上,對於任何隨機變量 X,如果我們表示 作為 X 的累積分布,則 。請記住,當我們說 ,它僅意味著機率, 。這就是 [0,1] 的來源,因為它只是一個機率。從三種不同的分布進行模擬:指數、伽瑪和學生-t,變換它們並繪製直方圖:
par(mfrow=c(3,1)) # 分割螢幕
apply(tm, 2, hist,xlab="", col = "azue") # 繪製
您可以通過這種方式轉換任何連續分布。現在,將兩個變換後的隨機數表示為 和 . 我們可以將它們「綁定」(copula): . 其中, 是一些函數,並且因為原始變量是「不可見的」(當我們將其轉換為 Uniform 時消失了),所以我們現在只討論兩個變量之間的相關性。例如 可以是具有一些相關參數的二元正態分布。我不會在這裡寫出雙變量正態密度,但它只是一個密度,因此,它將說明在中心地帶觀察到兩個變量在一起的機率,和/或在尾部一起的機率。這是繞過原始變量的分布,只談相關結構的一種方式。
現在讓我們對金融和消費必需品之間的相關結構進行建模。從拉取數據開始:
da0 = (getSymbols(sym[1])
for (i in 1:l){
da0 = getSymbols
w <- dailyReturn
w0 <- cbind(w0,w1)
}
apply(rt0, 2, mean) # 定義平均數
apply(rt0, 2, var) # 和標準差
cor(et0) # 無條件的相關關係。
我們現在要做的是按照討論的方法對數據進行轉換(稱之為機率積分轉換),並將其繪製出來。同時,我們模擬兩個具有相同(量化-非條件)相關性的隨機常模,並比較這兩個數字。
desiy <- kde2d
contour
# 現在從兩個具有相同相關性進行模擬。
smnom <- rmvnorm
trnorim_rm <- appl
mdni_im <- kde2d
plot
contour
title
乍一看,這兩個數字看起來差不多。但更詳細的觀察發現,角落更快地收斂到(0,0)、(1,1)坐標。這也是由這些區域的深色等值線顏色表明的。請記住,模擬數據使用的是與真實數據相同的經驗相關性,所以我們在這裡討論的其實只是結構。
現在讓我們生成一個copula函數,我們可以用它來 "包裹 "或 "捆綁 "我們的轉換後的收益。我們定義了一個重尾(df=1)和一個輕尾(df=6)的copula。我們可以直觀地看到這個函數實際上是什麼樣子的。這樣做的方式與我們可視化正態密度的方式差不多,但現在因為它是一個雙變量函數,所以它是一個三維圖。
she <- 0.3
persp(colahevy)
接下來你可以看到通常的相關性度量是相同的,除了尾部指數,因為我們只討論結構,而不是大小。
tau(colight)
tau(coheavy)
rho(colight)
rho(copheavy)
tailIpulight)
tailIheavy)
上下尾不一定相同。這只是 t-copula 是對稱函數的一個特徵。在應用中,應該使用更真實的非對稱 copula。
現在我們定義邊緣,並估計 copula 參數。為簡單起見,我為收益定義了 Normal 邊緣分布,但 copula 仍然是 t-dist 且重尾:
# 用從數據中估計的參數來定義你的邊際。
copurmal <- mvdc
# 擬合copula。這個函數的默認值是隱藏警告,所以如果發生錯誤。
# 添加 "hideWarnings=FALSE",這樣它就會告訴你是否有什麼錯誤
coporm <- fitMvdc
該函數返回一個有那些可用的S4類。
copurm@mvc@cpla
coporm@estiat
coporm@fittng.sas
coporm@va.st
summary
est <- coeffic # 我們自己的估計值
mycop <- mvdc
# 從擬合的copula進行模擬
simd <- rMvdc
plot
相關結構看起來還不錯--但你肯定可以看到正態邊緣是不夠的,有幾個黑點(真實數據)在紅色模擬簇之外。
順便提一下,現在我們也可以估計那些沒有預先指定形狀的copulas,比如正態或t,但它們本身就是估計。這屬於 "非參數copulas "這個更複雜的主題。
最受歡迎的見解
1.R語言基於ARMA-GARCH-VaR模型擬合和預測實證研究
2.r語言實現copula算法建模依賴性案例
3.R語言COPULAS和金融時間序列數據VaR分析
4.R語言多元COPULA GARCH 模型時間序列預測
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.matlab使用Copula仿真優化市場風險數據分析
7.R語言實現向量自動回歸VAR模型
8.R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
9.R語言VAR模型的不同類型的脈衝響應分析