python的var函数,var在python中的意思

  python的var函数,var在python中的意思

  Copula函数思想

  Copula函数可以将随机变量之间的相关性从变量的边缘分布中分离出来,这在多元统计分析中非常重要。直观上,联合分布H(x1,xn)=P(X1=x1,Xn=xn)可以分两步处理。第一步,对于所有单个随机变量Xi,我们可以通过累积分布函数得到UI=fi (Xi),它是一个均匀随机变量;第二步是随机变量之间的关联可以用N元Copula函数C(u1,un),它直接连接这些统一变量。

  Copula函数是一种域为[0,1]均匀分布的多维联合分布函数,其核心思想是将多个随机变量的边缘分布与Copula函数耦合起来。Copula函数的基本思想是通过将边缘变量转化为均匀分布变量来简化问题,而不需要考察许多不同的边缘分布,然后将相关性定义为均匀分布上的联合分布。

  Copula函数类型

  常用的Copula函数有wxdyCopula函数、Gumbel Copula函数、Clayton Copula函数和Frank Copula函数。

  在风险管理中,我们经常使用Copula函数来估计VAR。流程如下:

  选择Copula函数并估计参数(详见Copula理论及其在财务分析中的应用)

  第一步是选择能够描述资产收益的边际分布Fi和相关结构的Copula函数。

  其次,根据所有的边缘分布函数F和Copula函数,用最大对数似然函数估计边缘分布函数Fi和Copula函数的相应参数;

  蒙特卡罗模拟估计VAR

  第一步,生成两个独立的服从(0,1)均匀分布的随机数U和W,其中U是第一个要模拟的伪随机数,这样Cu(v)=w,另一个伪随机数V=Cu {-1} (W)可以通过Cu(v)的反函数计算出来,从而得到一个符合Copula函数的随机数对(U,V);

  第二步:通过随机数(u,v)和边缘分布函数的累积概率函数的反函数,得到各资产收益率的模拟序列;

  第三步:根据各资产的权重得到投资组合收益序列,取Q分位数作为VAR的估计值。

  Copula函数计算Var的Python实现

  这里我们用Python的pycopula包来实现。

  importnumpy as npimportpandas as pdimportmatplotlib . py plot as PLT from matplotlib importcm from py copula . copula importarchimedeancopula from py copula . visualization Import PDF _ 2D,CDF _ 2D from Scipy Import Stats #读取facebook和apple 14-19年的收盘数据,计算每日收益率。

  data_fb=pd.read_csv(FB.csv ,header=0,index_col=0,engine=python )

  data_apl=pd.read_csv(AAPL.csv ,header=0,index_col=0,engine=python )

  data=NP . array([data _ FB[ close ])。pct_change()。dropna(),

  Data _ APL [close]。pct _ change()。dropna()】。T #使用T分布来拟合其分布

  t=stats.t

  dt1=t.fit(数据[:0])

  dt2=t.fit(数据[:1])

  如下图所示

  #拟合Copula函数clayton,由于所有拟合边缘T分布参数都不理想,这里直接采用T分布之前拟合的自由度参数,只优化了clayton函数的loc和scale和theta。

  paramX1={df: 3.34, loc :无, scale :无}

  paramX2={df: 3.32, loc :无, scale :无}

  超参数=[paramX1,paramX2]

  param=clayton.fit(data,method=mle ,marginals=[t,t],

  hyper _ param=超参数,

  Hyper _ param _ bounds=[[-1,1],[0,1],[-1,1],[0,1]]) #蒙特卡罗模拟#第一个老师被分成两组服从[0,1]均匀分布的随机数(u,w)

  u=np.random.uniform(0,1,size=10000)

  W=NP。随机的。均匀(0,1,size=10000) # W=C_u(v),其中C_u(v)是C(u,V)对U取偏导数的结果,# V=C _ U {-1} (W)是用反函数法得到的。v)=(u^{-theta} v^{-theta}-1)^{-1/theta}#c_u(v)=(u^{-theta} v^{-theta}-1)^{-(1)/} * u^{-theta-1}#c_u^{-1}(w)=[(w^{-theta/(1 theta)}-1)*u^{-theta} 1]^{-theta}

  theta=param[0]

  v=((w * *(-/(1))-1)* u * *(-)1)* *(-)#用u,v来对应边缘分布函数的累积概率函数的反函数。

  x=t.ppf(u,df=param[1][0][df],loc=param[1][0][loc],scale=param[1][0][scale])

  y=t.ppf(v,df=param[1][1][df],loc=param[1][1][loc],scale=param[1][1][scale])

  # 假设两个公司资金投资权重分别为0.3和0.7,得到对应一分位、5分位、10分位的损失

  z=0.3 * x 0.7 * y

  p=np百分位(z,(1,5,10),插值=中点)

  #最后查看拟合得到的介体函数的累积分布函数(累积分布函数的缩写)和便携文档格式分布图

  u,v,C=cdf_2d(克莱顿)

  u,v,c=pdf_2d(克莱顿)

  图=plt .图()

  ax=fig.add_subplot(121,projection=3d ,title=Clayton copula CDF )

  x,Y=np.meshgrid(u,v)

  ax.set_zlim(0,1)

  ax.plot_surface(X,Y,C,cmap=cm .蓝调)

  ax.plot_wireframe(X,Y,C,color=black ,alpha=0.3)

  ax=fig.add_subplot(122,projection=3d ,title=Clayton copula PDF )

  ax.set_zlim(0,5)

  ax.plot_surface(X,Y,c,cmap=cm .蓝调)

  ax.plot_wireframe(X,Y,c,color=black ,alpha=0.3)

  plt.show()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: