最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化

2021-09-11 22:14 作者:拓端tecdat  | 我要投稿

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

原文出處:拓端數(shù)據(jù)部落公眾號

你可能會問,為什么是copulas?我們指的是數(shù)學(xué)上的概念。簡單地說,copulas是具有均勻邊際的聯(lián)合分布函數(shù)。最重要的是,它們允許你將依賴關(guān)系與邊際分開研究。有時你對邊際的信息比對數(shù)據(jù)集的聯(lián)合函數(shù)的信息更多,而copulas允許你建立關(guān)于依賴關(guān)系的 "假設(shè) "情景。copulas可以通過將一個聯(lián)合分布擬合到均勻分布的邊際上而得到,這個邊際是通過對你感興趣的變量的cdf進行量化轉(zhuǎn)換而得到的。?

這篇文章是關(guān)于Python的(有numpy、scipy、scikit-learn、StatsModels和其他你能在Anaconda找到的好東西),但是R對于統(tǒng)計學(xué)來說是非常棒的。我重復(fù)一遍,R對統(tǒng)計學(xué)來說是非常棒的。如果你是認(rèn)真從事統(tǒng)計工作的,不管你是否喜歡R,你至少應(yīng)該看看它,看看有哪些包可以幫助你。很有可能,有人已經(jīng)建立了你所需要的東西。?而且你可以從python中使用R(需要一些設(shè)置)。

說了這么多關(guān)于R的好處,我們還是要發(fā)一篇關(guān)于如何在python中使用一個特定的數(shù)學(xué)工具的文章。因為雖然R很牛,但python確實有令人難以置信的靈活性,可以用來處理其他事務(wù)。

這篇文章中即將出現(xiàn)的大部分內(nèi)容都會用Jupyter Notebooks來構(gòu)建。

軟件

我很驚訝,scikit-learn或scipy中沒有明確的copula包的實現(xiàn)。

2D數(shù)據(jù)的Frank、Clayton和Gumbel copula

測試

第一個樣本(x)是從一個β分布中產(chǎn)生的,(y)是從一個對數(shù)正態(tài)中產(chǎn)生的。β分布的支持度是有限的,而對數(shù)正態(tài)的右側(cè)支持度是無窮大的。對數(shù)的一個有趣的屬性。兩個邊際都被轉(zhuǎn)換到了單位范圍。

我們對樣本x和y擬合了三個族(Frank, Clayton, Gumbel)的copulas,然后從擬合的copulas中提取了一些樣本,并將采樣輸出與原始樣本繪制在一起,以觀察它們之間的比較。


  1. #等同于ppf,但直接從數(shù)據(jù)中構(gòu)建

  2. sortedvar=np.sort(var)


  3. #繪制


  4. for index,family in enumerate(['Frank', 'clayton', 'gumbel']):


  5. #獲得偽觀測值

  6. u,v = copula_f.generate_uv(howmany)


  7. #畫出偽觀測值

  8. axs[index][0].scatter(u,v,marker='o',alpha=0.7)




  9. plt.show()


  10. #總樣本與偽觀測值的對比

  11. sz=300

  12. loc=0.0 #對大多數(shù)分布來說是需要的

  13. sc=0.5

  14. y=lognorm.rvs(sc,loc=loc, size=sz)

獨立(不相關(guān))數(shù)據(jù)

我們將從β分布中抽?。▁)的樣本,從對數(shù)正態(tài)中抽?。▂)的樣本。這些樣本是偽獨立的(我們知道,如果你用計算機來抽取樣本,就不會有真正的獨立,但好在是合理的獨立)。


  1. #不相關(guān)的數(shù)據(jù):一個β值(x)和一個對數(shù)正態(tài)(y)。

  2. a= 0.45#2. #alpha

  3. b=0.25#5. #beta


  4. #畫出不相關(guān)的x和y

  5. plt.plot(t, beta.pdf(t,a,b), lw=5, alpha=0.6, label='x:beta')



  6. #繪制由不相關(guān)的x和y建立的共線性圖

  7. title='來自不相關(guān)數(shù)據(jù)的共線性 x: beta, alpha {} beta {}, y: lognormal, mu {}, sigma dPlot(title,x,y,pseudoobs)


?

?

相依性(相關(guān))數(shù)據(jù)

自變量將是一個對數(shù)正態(tài)(y),變量(x)取決于(y),關(guān)系如下。初始值為1(獨立)。然后,對于每一個點i, 如果?

, 那么?

, 其中c是從1的分?jǐn)?shù)列表中統(tǒng)一選擇的,否則,?

.


  1. #相關(guān)數(shù)據(jù):一個對數(shù)正態(tài)(y)。


  2. #畫出相關(guān)數(shù)據(jù)


  3. np.linspace(0, lognorm.ppf(0.99, sc), sz)

  4. plt.plot(t, gkxx.pdf(t), lw=5, alpha=0.6,

?

?

?

擬合copula參數(shù)

沒有內(nèi)置的方法來計算archimedean copulas的參數(shù),也沒有橢圓elliptic copulas的方法。但是可以自己實現(xiàn)。選擇將一些參數(shù)擬合到一個scipy分布上,然后在一些樣本上使用該函數(shù)的CDF方法,或者用一個經(jīng)驗CDF工作。這兩種方法在筆記本中都有實現(xiàn)。

因此,你必須自己寫代碼來為archimedean獲取參數(shù),將變量轉(zhuǎn)化為統(tǒng)一的邊際分布,并對copula進行實際操作。它是相當(dāng)靈活的。

  1. #用于擬合copula參數(shù)的方法


  2. # === Frank參數(shù)擬合

  3. """

  4. 對這個函數(shù)的優(yōu)化將給出參數(shù)

  5. """

  6. #一階debye函數(shù)的積分值 ? ?int_debye = lambda t: t/(npexp(t)-1.)

  7. debye = lambda alphaquad(int_debye ,

  8. alpha

  9. )[0]/alpha

  10. diff = (1.-kTau)/4.0-(debye(-alpha)-1.)/alpha




  11. #================

  12. #clayton 參數(shù)方法

  13. def Clayton(kTau):

  14. try:

  15. return 2.*kTau/(1.-kTau)



  16. #Gumbel參數(shù)方法

  17. def Gumbel(kTau):

  18. try:

  19. return 1./(1.-kTau)



  20. #================

  21. #copula生成


  22. #得到協(xié)方差矩陣P

  23. #x1=norm.ppf(x,loc=0,scale=1)

  24. #y1=norm.ppf(y,loc=0,scale=1)

  25. #return norm.cdf((x1,y1),loc=0,scale=P)





  26. #================

  27. #copula繪圖


  28. fig = pylab.figure()

  29. ax = Axes3D(fig)


  30. ax.text2D(0.05, 0.95, label, transform=ax.transAxes)

  31. ax.set_xlabel('X: {}'.format(xlabel))

  32. ax.set_ylabel('Y: {}'.format(ylabel))



  33. #sample是一個來自U,V的索引列表。這樣,我們就不會繪制整個copula曲線。

  34. if plot:


  35. print "繪制copula {}的樣本".format(copulaName)

  36. returnable[copulaName]=copulapoints

  37. if plot:

  38. zeFigure=plot3d(U[樣本],V[樣本],copulapoints[樣本], label=copulaName,



生成一些輸入數(shù)據(jù)

在這個例子中,我們使用的是與之前相同的分布,探索copula?。如果你想把這段代碼改編成你自己的真實數(shù)據(jù),。


  1. t = np.linspace(0, lognorm.ppf(0.99, sc), sz)


  2. #從一些df中抽取一些樣本

  3. X=beta.rvs(a,b,size=sz)

  4. Y=lognorm.rvs(sc,size=sz)

  5. #通過對樣本中的數(shù)值應(yīng)用CDF來實現(xiàn)邊緣分布

  6. U=beta.cdf(X,a,b)

  7. V=lognorm.cdf(Y,sc)


  8. #畫出它們直觀地檢查獨立性

  9. plt.scatter(U,V,marker='o',alpha=0.7)

  10. plt.show()

可視化Copulas

沒有直接的構(gòu)造函數(shù)用于高斯或tCopulas,可以為橢圓Copulas(Elliptic?Copulas)建立一個更通用的函數(shù)。


  1. Samples=700

  2. #選擇用于抽樣的copula指數(shù)

  3. np.random.choice(range(len(U)),Samples)



  4. Plot(U,V)




  1. <IPython.core.display.Javascript object>

Frechét-H?ffding邊界可視化

根據(jù)定理,我們將copula畫在一起,得到了Frechét-H?ffding邊界。



  1. #建立邊界為copula的區(qū)域

  2. plot_trisurf(U[樣本],V[樣本],copula['min'][樣本],

  3. c='red') #上限

  4. plot_trisurf(U[樣本],V[樣本],copula['max'][樣本],

  5. c='green') #下限



最受歡迎的見解

1.在python中使用lstm和pytorch進行時間序列預(yù)測

2.python中利用長短期記憶模型lstm進行時間序列預(yù)測分析

3.使用r語言進行時間序列(arima,指數(shù)平滑)分析

4.r語言多元copula-garch-模型時間序列預(yù)測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機波動模型sv處理時間序列中的隨機波動

7.r語言時間序列tar閾值自回歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進行時間序列預(yù)測


拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化的評論 (共 條)

分享到微博請遵守國家法律
黄骅市| 门源| 庆元县| 景东| 沅江市| 会昌县| 襄樊市| 滨州市| 温泉县| 郓城县| 苍南县| 高碑店市| 十堰市| 彭州市| 翼城县| 宝兴县| 依安县| 大化| 讷河市| 包头市| 米泉市| 报价| 阿鲁科尔沁旗| 九江市| 叶城县| 井研县| 安国市| 玉门市| 会同县| 梓潼县| 定边县| 汨罗市| 黑山县| 福安市| 梁河县| 东山县| 呈贡县| 潜山县| 沂水县| 延安市| 永和县|