python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化|附代碼數據
全文下載鏈接:http://tecdat.cn/?p=23646
最近我們被客戶要求撰寫關于copula的研究報告,包括一些圖形和統(tǒng)計輸出。
你可能會問,為什么是copulas?我們指的是數學上的概念。簡單地說,copulas是具有均勻邊緣分布的聯合分布函數 。
最重要的是,它們允許你將依賴關系與邊緣分布分開研究。有時你對邊緣分布的信息比對數據集的聯合函數的信息更多,而copulas允許你建立關于依賴關系的 "假設 "情景。copulas可以通過將一個聯合分布擬合到均勻分布的邊緣分布上而得到,這個邊緣分布是通過對你感興趣的變量的cdf進行量化轉換而得到的。?
這篇文章是關于Python的(有numpy、scipy、scikit-learn、StatsModels和其他你能在Anaconda找到的好東西),但是R對于統(tǒng)計學來說是非常棒的。我重復一遍,R對統(tǒng)計學來說是非常棒的。如果你是認真從事統(tǒng)計工作的,不管你是否喜歡R,你至少應該看看它,看看有哪些包可以幫助你。很有可能,有人已經建立了你所需要的東西。?而且你可以從python中使用R(需要一些設置)。
說了這么多關于R的好處,我們還是要發(fā)一篇關于如何在python中使用一個特定的數學工具的文章。因為雖然R很牛,但python確實有令人難以置信的靈活性,可以用來處理其他事務。
這篇文章中即將出現的大部分內容都會用Jupyter Notebooks來構建。
軟件
我很驚訝,scikit-learn或scipy中沒有明確的copula包的實現。
2D數據的Frank、Clayton和Gumbel copula
測試
第一個樣本(x)是從一個β分布中產生的,(y)是從一個對數正態(tài)中產生的。β分布的支持度是有限的,而對數正態(tài)的右側支持度是無窮大的。對數的一個有趣的屬性。兩個邊緣分布都被轉換到了單位范圍。
我們對樣本x和y擬合了三個族(Frank, Clayton, Gumbel)的copulas,然后從擬合的copulas中提取了一些樣本,并將采樣輸出與原始樣本繪制在一起,以觀察它們之間的比較。
????#等同于ppf,但直接從數據中構建?????sortedvar=np.sort(var)????
????#繪制????for?index,family?in?enumerate(['Frank',?'clayton',?'gumbel']):
????????????#獲得偽觀測值????????????u,v?=?copula_f.generate_uv(howmany)
????????#畫出偽觀測值????????axs[index][0].scatter(u,v,marker='o',alpha=0.7)
??????
????plt.show()#總樣本與偽觀測值的對比sz=300loc=0.0?#對大多數分布來說是需要的sc=0.5y=lognorm.rvs(sc,loc=loc,?size=sz)
獨立(不相關)數據
我們將從β分布中抽取(x)的樣本,從對數正態(tài)中抽?。▂)的樣本。這些樣本是偽獨立的(我們知道,如果你用計算機來抽取樣本,就不會有真正的獨立,但好在是合理的獨立)。
#不相關的數據:一個β值(x)和一個對數正態(tài)(y)。a=?0.45#2.?#alphab=0.25#5.?#beta#畫出不相關的x和y?plt.plot(t,?beta.pdf(t,a,b),?lw=5,?alpha=0.6,?label='x:beta')#繪制由不相關的x和y建立的共線性圖title='來自不相關數據的共線性?x:?beta,?alpha?{}?beta?{},?y:?lognormal,?mu?{},?sigma?dPlot(title,x,y,pseudoobs)
?
相依性(相關)數據
自變量將是一個對數正態(tài)(y),變量(x)取決于(y),關系如下。初始值為1(獨立)。然后,對于每一個點i, 如果?
, 那么?
, 其中c是從1的分數列表中統(tǒng)一選擇的,否則,?
.
#相關數據:一個對數正態(tài)(y)。#畫出相關數據?np.linspace(0,?lognorm.ppf(0.99,?sc),?sz)
plt.plot(t,?gkxx.pdf(t),?lw=5,?alpha=0.6,
擬合copula參數
沒有內置的方法來計算archimedean copulas的參數,也沒有橢圓elliptic copulas的方法。但是可以自己實現。選擇將一些參數擬合到一個scipy分布上,然后在一些樣本上使用該函數的CDF方法,或者用一個經驗CDF工作。這兩種方法在筆記本中都有實現。
點擊標題查閱相關內容
R語言實現 COPULA 算法建模相依性案例分析
左右滑動查看更多
01
02
03
04
因此,你必須自己寫代碼來為archimedean獲取參數,將變量轉化為統(tǒng)一的邊緣分布,并對copula進行實際操作。它是相當靈活的。
#用于擬合copula參數的方法?#?===?Frank參數擬合????"""
????對這個函數的優(yōu)化將給出參數?
????"""???#一階debye函數的積分值????int_debye?=?lambda?t:?t/(npexp(t)-1.)?????debye?=?lambda?alphaquad(int_debye?,?
???????????????????????????????alpha
??????????????????????????????)[0]/alpha
????diff?=?(1.-kTau)/4.0-(debye(-alpha)-1.)/alpha#================#clayton?參數方法def?Clayton(kTau):
????try:
????????return?2.*kTau/(1.-kTau)
?#Gumbel參數方法def?Gumbel(kTau):
????try:
????????return?1./(1.-kTau)#================#copula生成????#得到協方差矩陣P????#x1=norm.ppf(x,loc=0,scale=1)????#y1=norm.ppf(y,loc=0,scale=1)????#return?norm.cdf((x1,y1),loc=0,scale=P)#================#copula繪圖????fig?=?pylab.figure()
????ax?=?Axes3D(fig)
????????ax.text2D(0.05,?0.95,?label,?transform=ax.transAxes)
????????ax.set_xlabel('X:?{}'.format(xlabel))
????????ax.set_ylabel('Y:?{}'.format(ylabel))
????#sample是一個來自U,V的索引列表。這樣,我們就不會繪制整個copula曲線。????if?plot:
??
????????print?"繪制copula?{}的樣本".format(copulaName)
????????returnable[copulaName]=copulapoints
????????if?plot:
????????????zeFigure=plot3d(U[樣本],V[樣本],copulapoints[樣本],?label=copulaName,
生成一些輸入數據
在這個例子中,我們使用的是與之前相同的分布,探索copula 。如果你想把這段代碼改編成你自己的真實數據。
t?=?np.linspace(0,?lognorm.ppf(0.99,?sc),?sz)#從一些df中抽取一些樣本X=beta.rvs(a,b,size=sz)Y=lognorm.rvs(sc,size=sz)#通過對樣本中的數值應用CDF來實現邊緣分布U=beta.cdf(X,a,b)V=lognorm.cdf(Y,sc)#畫出它們直觀地檢查獨立性plt.scatter(U,V,marker='o',alpha=0.7)
plt.show()
可視化Copulas
沒有直接的構造函數用于高斯或t_Copulas_,可以為橢圓_Copulas_(Elliptic?Copulas)建立一個更通用的函數。
Samples=700#選擇用于抽樣的copula指數np.random.choice(range(len(U)),Samples)
Plot(U,V)
<IPython.core.display.Javascript?object>
Frechét-H?ffding邊界可視化
根據定理,我們將copula畫在一起,得到了Frechét-H?ffding邊界。
#建立邊界為copula的區(qū)域plot_trisurf(U[樣本],V[樣本],copula['min'][樣本],
??????????c='red')?#上限plot_trisurf(U[樣本],V[樣本],copula['max'][樣本],
???????????c='green')?#下限
點擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化》。
點擊標題查閱往期內容
R語言和Python對copula模型Gaussian、t、Clayton 和Gumbel族可視化理論概念和文獻計量使用情況
R語言ARMA GARCH COPULA模型擬合股票收益率時間序列和模擬可視化
ARMA-GARCH-COPULA模型和金融時間序列案例
時間序列分析:ARIMA GARCH模型分析股票價格數據
GJR-GARCH和GARCH波動率預測普爾指數時間序列和Mincer Zarnowitz回歸、DM檢驗、JB檢驗
【視頻】時間序列分析:ARIMA-ARCH / GARCH模型分析股票價格
時間序列GARCH模型分析股市波動率
PYTHON用GARCH、離散隨機波動率模型DSV模擬估計股票收益時間序列與蒙特卡洛可視化
極值理論 EVT、POT超閾值、GARCH 模型分析股票指數VaR、條件CVaR:多元化投資組合預測風險測度分析
Garch波動率預測的區(qū)制轉移交易策略
金融時間序列模型ARIMA 和GARCH 在股票市場預測應用
時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言風險價值:ARIMA,GARCH,Delta-normal法滾動估計VaR(Value at Risk)和回測分析股票數據
R語言GARCH建模常用軟件包比較、擬合標準普爾SP 500指數波動率時間序列和預測可視化
Python金融時間序列模型ARIMA 和GARCH 在股票市場預測應用
MATLAB用GARCH模型對股票市場收益率時間序列波動的擬合與預測R語言GARCH-DCC模型和DCC(MVT)建模估計
Python 用ARIMA、GARCH模型預測分析股票市場收益率時間序列
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言ARIMA-GARCH波動率模型預測股票市場蘋果公司日收益率時間序列
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語言POT超閾值模型和極值理論EVT分析