关于数据挖掘:python中的copulaFrankClayton和Gumbel-copula模型估计与可视化附代码数据

59次阅读

共计 5073 个字符,预计需要花费 13 分钟才能阅读完成。

全文下载链接:http://tecdat.cn/?p=23646

最近咱们被客户要求撰写对于 copula 的钻研报告,包含一些图形和统计输入。

你可能会问,为什么是 copulas?咱们指的是数学上的概念。简略地说,copulas 是具备平均边缘散布的联结散布函数。

最重要的是,它们容许你将依赖关系与边缘散布离开钻研。有时你对边缘散布的信息比对数据集的联结函数的信息更多,而 copulas 容许你建设对于依赖关系的 “ 假如 “ 情景。copulas 能够通过将一个联结散布拟合到均匀分布的边缘散布上而失去,这个边缘散布是通过对你感兴趣的变量的 cdf 进行量化转换而失去的。

这篇文章是对于 Python 的(有 numpy、scipy、scikit-learn、StatsModels 和其余你能在 Anaconda 找到的好货色),然而 R 对于统计学来说是十分棒的。我反复一遍,R 对统计学来说是十分棒的。如果你是认真从事统计工作的,不论你是否喜爱 R,你至多应该看看它,看看有哪些包能够帮忙你。很有可能,有人曾经建设了你所须要的货色。而且你能够从 python 中应用 R(须要一些设置)。

说了这么多对于 R 的益处,咱们还是要发一篇对于如何在 python 中应用一个特定的数学工具的文章。因为尽管 R 很牛,但 python 的确有令人难以置信的灵活性,能够用来解决其余事务。

这篇文章中行将呈现的大部分内容都会用 Jupyter Notebooks 来构建。

软件

我很诧异,scikit-learn 或 scipy 中没有明确的 copula 包的实现。

2D 数据的 Frank、Clayton 和 Gumbel copula

测试

第一个样本(x)是从一个 β 散布中产生的,(y)是从一个对数正态中产生的。β 散布的反对度是无限的,而对数正态的右侧反对度是无穷大的。对数的一个乏味的属性。两个边缘散布都被转换到了单位范畴。

咱们对样本 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=300
loc=0.0 #对大多数散布来说是须要的
sc=0.5
y=lognorm.rvs(sc,loc=loc, size=sz)

独立(不相干)数据

咱们将从 β 散布中抽取(x)的样本,从对数正态中抽取(y)的样本。这些样本是伪独立的(咱们晓得,如果你用计算机来抽取样本,就不会有真正的独立,但好在是正当的独立)。

# 不相干的数据:一个 β 值(x)和一个对数正态(y)。a= 0.45#2. #alpha
b=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)

 

相依性(相干)数据

自变量将是一个对数正态(y),变量(x)取决于(y),关系如下。初始值为 1(独立)。而后,对于每一个点 i, 如果 , 那么 , 其中 c 是从 1 的分数列表中对立抉择的,否则, .

# 相干数据:一个对数正态(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 获取参数,将变量转化为对立的边缘散布,并对 copula 进行实际操作。它是相当灵便的。

# 用于拟合 copula 参数的办法 

# === Frank 参数拟合
    """对这个函数的优化将给出参数"""
   #一阶 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 的区域
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 稳定率预测的区制转移交易策略
金融工夫序列模型 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 剖析

正文完
 0