前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分享|MATLAB、R基于Copula方法和k-means聚类的股票选择研究上证A股数据|附代码数据

数据分享|MATLAB、R基于Copula方法和k-means聚类的股票选择研究上证A股数据|附代码数据

原创
作者头像
拓端
发布2023-09-14 17:28:43
1780
发布2023-09-14 17:28:43
举报
文章被收录于专栏:拓端tecdat

全文链接:http://tecdat.cn/?p=31733

最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出。

Copula方法是测度金融市场间尾部相关性比较有效的方法,而且可用于研究非正态、非线性以及尾部非对称等较复杂的相依特征关系

因此,Copula方法开始逐渐代替多元GARCH模型的相关性分析,成为考察金融变量间关系的流行方法,被广泛地用于市场一体化、风险管理以及期货套期保值的研究中。

国内外学者对于尾部相关性和Copula方法已经有了深入的研究,提出多种Copula模型来不断优化尾部相关系数对于不同情况下股票之间相关性的刻画,对于股票的聚类方法也进行了改进和拓展,然而能够结合这些方法对于资产选择进行研究的较少。尤其是在面对现今股票市场海量级的股票数据,如何从股票间的尾部相关性挖掘到有效信息,得到能够有效规避风险的资产组合是很少有人研究的问题。并且大多尾部相关的分析都只停留在定性的分析中,并且多是在市场与市场之间,板块与板块之间的相关性分析,对于股票间定量的相关性研究还有不足。相信研究成果对于投资者有效的规避风险,寻求最佳的投资组合有较大的帮助。

本文结合Copula方法和聚类思想对大数量级的股票间尾部相关性进行分析,帮助客户构建混合Copula模型并计算股票间尾部相关系数,再根据尾部相关系数选用合理高效的聚类方法进行聚类,为投资者选择投资组合提供有效的建议。

上证A股数据

本文选取上证A股数据 查看文末了解数据免费获取方式 ,其数据来源于wind数据库。由于时间间隔较长,本文将通过对相关系数进行计算来分析其之间的相关性,然后再通过聚类分析将其合并来进行研究。具体步骤如下:

非参数核估计边缘分布

代码语言:javascript
复制
j=1077

aj=median(sy(:,j)); %(j=1(SZGY),2(SZSY),3(SZDC),4(GYSY))

bj=median(abs(sy(:,j)-aj))/0.6745;

hj=1.06*bj*1077^(-1/5);

1,固定函数的参数,选择权重的初值为:1/ 3。对权重进行估计。

代码语言:javascript
复制
d=cdf('Normal',(sy(n,j)-wj(i))/hj,0,1);

sum=sum+d;

end

2,固定权重为第 1 步的估计值,选择参数的初值为第上一节的估计值,对函数的参数进行估计。

代码语言:javascript
复制
%求似然值

%fenbu=xlsread('fenbu.xlsx'); %读取数据,

fenbu=sy;

u=mean(sy);

3,将第 2 步估计得到的参数值作为固定值,权重初值选择第 1 步的估计值,进行权重估计。

代码语言:javascript
复制
s(j)=s(j)+b(i); %求似然值

end

end

估计混合 Copula 权重

代码语言:javascript
复制
theta=0.5;
for j=1:1000;

k1(1)=0.2; %权重初值

k2(1)=0.3 ;

c3(i)=1077^(-1)*k3(j)*fr(i)*(k1(j)*gu(i)+k2(j)*cl(i)+k3(j)*fr(i))^(-1);

k1(j+1)=k1(j+1)+c1(i); %gu(i),cl(i),fr(i)表示三个函数的密度函数

abs(k3(j+1)-k3(j))<=0.000001); %满足收敛条件是跳出

end

l=length(k1') %收敛时的步骤数目

k1(l),k2(l),k3(l) %收敛时的结果

估计混合 Copula 模型的函数参数

代码语言:javascript
复制
%b=b(0); %参数初值

for j=1:1000; %运算步骤

h1(i)=k1*gu_p(i)*gu(i)/(gu_m(i)*(k1*gu(i)+k2*cl(i)+k3*fr(i)));

s1=s1+h1(i); %gu_p 是 Gumbel 密度函数,gu_m 是 Gumbel 的密度函数
代码语言:javascript
复制
n=13;d=array(0 dim=c(13 13))  
for(i in 1:(n-1)){  
  d[i i]=1  
  for(j in (i+1):n){
  
    clayton.cop=claytonCopula(3 dim=2);clayton.cop  
    u=pobs(b);u

生成随机数

代码语言:javascript
复制
M=0.247060*G'+0.441831*C'+0.311109*F'; %生成混合 Copula 随机数

计算每个不同类时的 k-means 聚类结果,并计算平均偏差,且画出图形

代码语言:javascript
复制
for c = 2:8

  [idx,ctrs] = kmeans(M,c);

01

02

03

04

代码语言:javascript
复制
[aic,bic] = aicbic([logL1;logL2;logL3;logL4],

当聚类数目为 7 时的 k-means 聚类

代码语言:javascript
复制
c=7;

  [idx,ctrs] = kmeans(M,c);

X=M

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)

上尾

代码语言:javascript
复制
hold on

plot(X(idx==4,1),X(idx==4,2),'b.','MarkerSize',12)

hold on

plot(X(idx==5,1),X(idx==5,2),'b.','MarkerSize',12)

hold on

plot(X(idx==6,1),X(idx==6,2),'b.','MarkerSize',12)

hold on

plot(X(idx==7,1),X(idx==7,2),'b.','MarkerSize',12)

hold on

plot(X(idx==8,1),X(idx==8,2),'b.','MarkerSize',12)

hold on

 plot(ctrs(:,1),ctrs(:,2),'kx',...

Average square within cluster

代码语言:javascript
复制
library(cluster)  
agn1=aes(delta method="average");agn1
plot(x with.ss")  
lines(x with.ss lty=2)

下尾

Average square within cluster

输出上尾和下尾相关系数

本文将 Copula方法应用到股票市场的相关分析中,以上证A股数据作为研究对象,基于 Copula方法构建了对不同投资组合的风险和收益的预测模型;其次,将聚类思想应用到股票选择中,将选择出来的股票进行聚类分析,得出各个聚类结果。本文不仅考虑了股票之间的相关关系,还考虑了它们之间的相关性。

输出股票类别

数据获取

在公众号后台回复“a股数****据”,可免费获取完整数据。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文链接:http://tecdat.cn/?p=31733
  • 上证A股数据
  • 非参数核估计边缘分布
  • 1,固定函数的参数,选择权重的初值为:1/ 3。对权重进行估计。
  • 2,固定权重为第 1 步的估计值,选择参数的初值为第上一节的估计值,对函数的参数进行估计。
  • 3,将第 2 步估计得到的参数值作为固定值,权重初值选择第 1 步的估计值,进行权重估计。
  • 估计混合 Copula 权重
  • 估计混合 Copula 模型的函数参数
  • 生成随机数
  • 计算每个不同类时的 k-means 聚类结果,并计算平均偏差,且画出图形
  • 上尾
  • Average square within cluster
  • 下尾
  • Average square within cluster
  • 输出上尾和下尾相关系数
  • 输出股票类别
相关产品与服务
数据万象
数据万象(Cloud Infinite,CI)是依托腾讯云对象存储的数据处理平台,涵盖图片处理、内容审核、媒体处理、AI 识别、文档预览等功能,为客户提供一站式的专业数据处理解决方案,满足您多种业务场景的需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档