R語言代寫實現 Copula 建模依賴性案例分析報告


原文鏈接:http://tecdat.cn/?p=6193

 

copula是將多變量分布函數與其邊際分布函數耦合的函數,通常稱為邊緣或簡單的邊緣。Copula是建模和模擬相關隨機變量的絕佳工具。

Copula的主要吸引力在於,通過使用它們,您可以分別對相關結構和邊緣(即每個隨機變量的分布)進行建模。  例如,在R中,很容易從多元正態分布中生成隨機樣本,但是對於分別其邊緣分別為Beta,Gamma和Student的分布來說,這樣做並不容易。  

copulas如何工作 

但首先,讓我們試着了解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。 



 我們可以繪制矢量的漂亮3D表示u。 

 

現在,作為最后一步,我們只需要選擇邊距並應用它們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(普通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應該沒問題,但是猜測肯定是不夠的。幸運的是,該 軟件包提供了一個很好的功能,告訴我們應該使用什么copula。本質上, 允許我們通過函數使用BIC和AIC執行copula選擇 

 
  pobs(as.matrix(cbind(cree,yahoo)))[,1]
  selectedCopula
 

$ PAR
[1] 0.4356302

$ PAR2
[1] 3.844534

 
擬合算法確實選擇了t-copula(在$family參考中編碼為2 )並為我們估計了參數。 
讓我們嘗試使用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

這是載體中包含的樣本的圖u

 
t-copula強調極端結果:它通常適用於在極值(分布的尾部)中存在高度相關性的建模現象。
 

現在我們正面臨着困難:對邊緣進行建模。為簡單起見,我們將假設正態分布 。因此,我們估計邊際的參數

讓我們根據直方圖繪制配件,以便直觀地了解我們正在做的事情:

兩個直方圖顯示如下

 現在我們在函數中應用copula, ()然后用於 ()從生成的多變量分布中獲取模擬觀測值。最后,我們將模擬結果與原始數據進行比較。

 

這是在假設正常邊緣和依賴結構的t-copula的情況下數據的最終散點圖:

正如您所看到的,t-copula導致結果接近實際觀察結果 。 

 讓我們嘗試df=1df=8

 
顯然,該參數df對於確定分布的形狀非常重要。隨着df增加,t-copula傾向於高斯copula。

如果您有任何疑問,請在下面發表評論。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM