MATLAB案例 | 沪深股市收益率的二元Copula模型

沪深股市收益率的二元Copula模型

  • 1. 案例描述
  • 2.实现流程
    • 2.1 确定随机变量的边缘分布
      • 2.1.1 参数法计算流程
      • 2.1.2 非参数法
    • 2.2 选取适当的Copula函数
    • 2.3 参数估计
  • 3. 完整代码
    • 参考资料

1. 案例描述

现有上海和深圳股市同时期日开盘价、最高价、最低价、收盘价、收益率等数据,跨度为2000年1月至2007年4月,各1696组数据。完整数据保存在文件hushi.xls和shenshi.xIs中,其中部分数据如表6-3和6-4所列。

其中,收益率=(收盘价-开盘价)/开盘价。根据收集到的1696组数据研究沪、深两市日收益率之间的关系,构建二元Copula模型,描述沪、深两市日收益率的相关结构。

在这里插入图片描述
在这里插入图片描述

2.实现流程

根据Copula理论,可以按照以下步骤构建Copula模型:

➢确定随机变量的边缘分布;

➢选取适当的,能够描述随机变量间相关结构的Copula函数;.

➢估计Copula模型中的未知参数。

2.1 确定随机变量的边缘分布

令X,Y分别表示沪、深两市的日收益率。首先,确定随机变量X,Y的分布。

确定随机变最分布的方法有两种:参数法和非参数法。

参数法:假定随机变量服从某种含有参数的分布,例如正态分布、t分布等常见分布,然后根据样本观测值估计分布中的参数,最后作出检验。

非参数法:基于经验分布和核光滑方法(核密度估计)把样本的经验分布函数作为总体随机变最的分布的近似,也可以根据样本观测数据,利用核密度估计的方法确定总体的分布。

2.1.1 参数法计算流程

为了确定随机变量X,Y的分布类型,首先作出它们的频率直方图。

%--------------------------------------------------------------------------
clear
clc
%******************************读取数据*************************************
% 从文件hushi.xls中读取数据
hushi = xlsread('hushi.xls');
% 提取矩阵hushi的第5列数据,即沪市的日收益率数据
X = hushi(:,5);
% 从文件shenshi.xls中读取数据
shenshi = xlsread('shenshi.xls');
% 提取矩阵shenshi的第5列数据,即深市的日收益率数据
Y = shenshi(:,5);%****************************绘制频率直方图*********************************
% 调用ecdf函数和ecdfhist函数绘制沪、深两市日收益率的频率直方图
[fx, xc] = ecdf(X);
figure;
ecdfhist(fx, xc, 30);
xlabel('沪市日收益率');  % 为X轴加标签
ylabel('f(x)');  % 为Y轴加标签
[fy, yc] = ecdf(Y);
figure;
ecdfhist(fy, yc, 30);
xlabel('深市日收益率');  % 为X轴加标签
ylabel('f(y)');  % 为Y轴加标签

频率直方图
图1 频率直方图

%****************************计算偏度和峰度*********************************
% 计算X和Y的偏度
xs = skewness(X)
ys = skewness(Y)% 计算X和Y的峰度
kx = kurtosis(X)
ky = kurtosis(Y)

结果如下:

xs =  -0.025299871279193ys =  -0.003554260594235kx =   6.377426684827699ky =   6.633941978467045

图1以及X,Y的偏度、峰度反映出:随机变量X,Y的分布均是比较对称的,并且呈现出尖峰厚尾(或重尾)的特点。正态分布是轻尾(或薄尾)分布,可以初步断定X,Y不服从正态分布。

下面调用jbtest、kstest和llietest函数分别对X和Y进行正态性检验。

%******************************正态性检验***********************************
% 分别调用jbtest、kstest和lillietest函数对X进行正态性检验
[h_X_jb,p_X_jb] = jbtest(X)                                                      % Jarque-Bera检验
[h_X_ks,p_X_ks] = kstest(X,[X,normcdf(X,mean(X),std(X))])  % Kolmogorov-Smirnov检验
[h_X_lillie, p_X_lillie] = lillietest(X)                                           % Lilliefors检验% 分别调用jbtest、kstest和lillietest函数对Y进行正态性检验
[h_Y_jb,p_Y_jb] = jbtest(Y)                                                     % Jarque-Bera检验
[h_Y_ks,p_Y_ks] = kstest(Y,[Y,normcdf(Y,mean(Y),std(Y))])  % Kolmogorov-Smirnov检验
[h_Y_lillie, p_Y_lillie] = lillietest(Y)                                          % Lilliefors检验

计算结果如下:

h_X_jb =     1
p_X_jb =     1.000000000000000e-03h_X_ks =  logical   1
p_X_ks =     9.280192003436800e-07h_X_lillie =     1
p_X_lillie =     1.000000000000000e-03h_Y_jb =     1
p_Y_jb =     1.000000000000000e-03h_Y_ks =  logical   1
p_Y_ks =     4.846695681424169e-06h_Y_lillie =     1
p_Y_lillie =     1.000000000000000e-03

以上三种检验的h值均为1,p值均小于0.01,说明X和Y都不服从正态分布,而是服从某种对称的尖峰厚尾分布。遗憾的是,常见分布中难以找到这种类型的分布。下面利用非参数法确定X,Y的分布。

2.1.2 非参数法

当总体的分布不好确定时,可以调用ecdf函数求样本经验分布函数,作为总体分布函数的近似,或调用ksdensity函数,用核光滑方法估计总体的分布

  1. 调用ecdf函数求样本经验分布函数
    ecdf函数返回的向量Xsort和Ysort是各自经过排序后的样本数据,fx和fy是分别与向量Xsort和Ysort对应的经验分布函数值向量。为了求原始样本(未经排序的样本)观测值所对应的经验分布函数值,上面用到了样条插值法。当然也可以不用样条插值法,利用反排序也行,命令如下:
%****************************求经验分布函数值*******************************
% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值
U1 = spline(Xsort(2:end),fx(2:end),X);
V1 = spline(Ysort(2:end),fy(2:end),Y);% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 提取fx和fy的第2个至最后一个元素,即排序后样本点处的经验分布函数值
fx = fx(2:end);
fy = fy(2:end);% 通过排序和反排序恢复原始样本点处的经验分布函数值U1和V1
[Xsort,id] = sort(X);
[idsort,id] = sort(id);
U1 = fx(id);
[Ysort,id] = sort(Y);
[idsort,id] = sort(id);
V1 = fy(id);

两次得到的U1完全一样,V1也完全一样。

  1. 调用ksdensity函数进行总体分布的估计
%*******************************核分布估计**********************************
% 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值
U2 = ksdensity(X,X,'function','cdf');
V2 = ksdensity(Y,Y,'function','cdf');

调用ecdf函数得到的U1和调用ksdensity函数得到的U2不完全相同,V1和V2也不完全相同,但是U1和U2、V1和V2的差别都非常微小,如图2所示,经验分布函数图和核分布估计图几乎重合。

% **********************绘制经验分布函数图和核分布估计图**********************
[Xsort,id] = sort(X);  % 为了作图的需要,对X进行排序
figure(2);  % 新建一个图形窗口
subplot(1,2,1)
plot(Xsort,U1(id),'c','LineWidth',5); % 绘制沪市日收益率的经验分布函数图
hold on
plot(Xsort,U2(id),'k-.','LineWidth',2); % 绘制沪市日收益率的核分布估计图
legend('经验分布函数','核分布估计', 'Location','NorthWest'); % 加标注框
xlabel('沪市日收益率');  % 为X轴加标签
ylabel('F(x)');  % 为Y轴加标签[Ysort,id] = sort(Y);  % 为了作图的需要,对Y进行排序
subplot(1,2,2)
plot(Ysort,V1(id),'c','LineWidth',5); % 绘制深市日收益率的经验分布函数图
hold on
plot(Ysort,V2(id),'k-.','LineWidth',2); % 绘制深市日收益率的核分布估计图
legend('经验分布函数','核分布估计', 'Location','NorthWest'); % 加标注框
xlabel('深市日收益率');  % 为X轴加标签
ylabel('F(x)');  % 为Y轴加标签

在这里插入图片描述图2 经验分布函数图

2.2 选取适当的Copula函数

在确定X的边缘分布U= F(x)和Y的边缘分布V=G(x)之后,就可以根据(U_i,V_i,)(i=1,2…n)的二元直方图的形状选取适当的Copula函数。绘制二元频数直方图的命令如下:

%****************************绘制二元频数直方图*****************************
% 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值
U = ksdensity(X,X,'function','cdf');
V = ksdensity(Y,Y,'function','cdf');
figure;  % 新建一个图形窗口
% 绘制边缘分布的二元频数直方图,
hist3([U(:) V(:)],[30,30])
xlabel('U(沪市)');  % 为X轴加标签
ylabel('V(深市)');  % 为Y轴加标签
zlabel('频数');  % 为z轴加标签

在这里插入图片描述
图3 二元频数直方图

以上命令作出的频数直方图如图3所示,在频数直方图的基础上还可以绘制频率直方图,并且频率直方图可以作为(U,V)的联合密度函数(即Copula密度函数)的估计。由频数直方图绘制频率直方图的命令如下:

%****************************绘制二元频率直方图*****************************
figure
hist3([U(:) V(:)],[30,30])
h = get(gca, 'Children');
cuv = get(h, 'ZData');
set(h, 'ZData', cuv * 30 * 30 / length(X));
xlabel('U(沪市)');  % 为X轴加标签
ylabel('V(深市)');  % 为Y轴加标签
zlabel('频数');  % 为z轴加标签

在这里插入图片描述
图4 二元频率直方图

作出的二元频率直方图如图4所示,可以看出,频率直方图具有基本对称的尾部,也就是说(U,V)的联合密度函数(即Copula密度函数)具有对称的尾部,因此可以选取二元正态Copula函数或二元t-Copula函数来描述原始数据的相关结构。

2.3 参数估计

考虑一般情况,边缘分布中可能含有未知参数,并且选取的Copula函数中也含有未知参数,因此需要进行参数估计。常用的参数估计方法有最大似然估计、分步估计和半参数估计
对于选取的二元正态Copula和二元t-Copula,用核分布估计求随机变量X,Y的边缘分布,然后调用copulafit 函数估计Copula中的参数,命令如下:

%***********************求Copula中参数的估计值******************************
% 调用copulafit函数估计二元正态Copula中的线性相关参数
rho_norm = copulafit('Gaussian',[U(:), V(:)])
% 调用copulafit函数估计二元t-Copula中的线性相关参数和自由度
[rho_t,nuhat,nuci] = copulafit('t',[U(:), V(:)])

计算结果如下:

rho_norm =1.000000000000000          0.9264233961812860.926423396181286         1.000000000000000rho_t =1.000000000000000         0.9325388380728730.932538838072873         1.000000000000000nuhat =4.008923194828739nuci =2.983921553182909         5.033924836474569

在这里插入图片描述

估计出Copula中的参数之后,可以调用copulapdf函数和copulacdf函数分别计算Copula密度函数和分布函数值,然后绘制Copula密度函数和分布函数图,相应的MATIAB命令如下:

%********************绘制Copula的密度函数和分布函数图************************
[Udata,Vdata] = meshgrid(linspace(0,1,31));  % 为绘图需要,产生新的网格数据
% 调用copulapdf函数计算网格点上的二元正态Copula密度函数值
Cpdf_norm = copulapdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);
% 调用copulacdf函数计算网格点上的二元正态Copula分布函数值
Ccdf_norm = copulacdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);
% 调用copulapdf函数计算网格点上的二元t-Copula密度函数值
Cpdf_t = copulapdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);
% 调用copulacdf函数计算网格点上的二元t-Copula分布函数值
Ccdf_t = copulacdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);
% 绘制二元正态Copula的密度函数和分布函数图
figure(5);  % 新建图形窗口
subplot(1,2,1)
surf(Udata,Vdata,reshape(Cpdf_norm,size(Udata)));  % 绘制二元正态Copula密度函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('c(u,v)');  % 为z轴加标签
title('二元正态Copula的密度函数')
subplot(1,2,2)
surf(Udata,Vdata,reshape(Ccdf_norm,size(Udata)));  % 绘制二元正态Copula分布函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('C(u,v)');  % 为z轴加标签
title('二元正态Copula的分布函数')
% 绘制二元t-Copula的密度函数和分布函数图
figure(6);  % 新建图形窗口
subplot(1,2,1)
surf(Udata,Vdata,reshape(Cpdf_t,size(Udata)));  % 绘制二元t-Copula密度函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('c(u,v)');  % 为z轴加标签
title('二元t-Copula的密度函数')
subplot(1,2,2)
surf(Udata,Vdata,reshape(Ccdf_t,size(Udata)));  % 绘制二元t-Copula分布函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('C(u,v)');  % 为z轴加标签
title('二元t-Copula的分布函数')

在这里插入图片描述
图5 二元正态Copula密度函数和分布函数

在这里插入图片描述
图6 二元t-Copula密度函数和分布函数

以上命令绘制的图形如图5和图6所示,可以看出,与线性相关参数为p=0.9264的二元正态Copula相比,线性相关参数为p=0.9325,自由度为k=4的二元t-Copula的密度函数具有更厚的尾部,更能反映变量之间的尾部相关性。
从图4可以看出沪、深两市日收益率之间有较强的尾部相关性,再将图4图3和图6密度函数图加以对比,可知线性相关参数为ρ=0.9325,自由度为k=4的二元t-Copula较好地反映了沪、深两市日收益率之间的尾部相关性,计算出的尾部相关系数为:0.6934,计算过程如下:

k = 4
pho = 0.932538838072873
x = sqrt(k+1)*sqrt(1-pho )/sqrt(1+pho )
lammda = 2 - tcdf(x, k+1)*2

估计出Copula中的参数之后,还可以调用copulastat 函数求Kendall 秩相关系数、Spearman秩相关系数的估计。

%**************求Kendall秩相关系数和Spearman秩相关系数***********************
% 调用copulastat函数求二元正态Copula对应的Kendall秩相关系数
Kendall_norm = copulastat('Gaussian',rho_norm)
% 调用copulastat函数求二元正态Copula对应的Spearman秩相关系数
Spearman_norm = copulastat('Gaussian',rho_norm,'type','Spearman')
% 调用copulastat函数求二元t-Copula对应的Kendall秩相关系数
Kendall_t = copulastat('t',rho_t)
% 调用copulastat函数求二元t-Copula对应的Spearman秩相关系数
% Spearman_t = copulastat('t',rho_t,nuhat,'type','Spearman')
Spearman_t = copulastat('t',rho_t,nuhat,'type','Spearman') % Yue
% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Kendall秩相关系数
Kendall = corr([X,Y],'type','Kendall')
% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Spearman秩相关系数
Spearman = corr([X,Y],'type','Spearman')

计算结果如下:

Kendall_norm =1.000000000000000           0.7542664351199280.754266435119928           1.000000000000000Spearman_norm =1.000000000000000           0.9198182496003970.919818249600397           1.000000000000000Kendall_t =1.000000000000000           0.7648232954196390.764823295419639           1.000000000000000Spearman_t =1.000000000000000           0.9179236381166160.917923638116616           1.000000000000000Kendall =1.000000000000000           0.757242444481550        0.757242444481550           1.000000000000000  Spearman =1.000000000000000          0.9126258482330550.912625848233055           1.000000000000000

将以上求出的Kendall秩相关系数Kendall_ norm. Kendall t和Kendall加以对比,将求出的Spearman秩相关系数Spearman_ norm 、Spearman_ t和Spearman加以对比。可以看出,Kendall norm更接近Kendall, Spearman_norm更接近Spearman,说明了线性相关参数为p=0.9264的二元正态Copula较好地反映了沪.深两市日收益率之间的秩相关性。

对于沪深两市日收益率的观测数据,我们构建了二元正态Copula模型和二元t-Copula模型,为了评价两个模型的优劣,下面引入经验Copula的概念。
在这里插入图片描述在这里插入图片描述

%******************************模型评价*************************************
% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值
U = spline(Xsort(2:end),fx(2:end),X);
V = spline(Ysort(2:end),fy(2:end),Y);
% 定义经验Copula函数C(u,v)
C = @(u,v)mean((U <= u).*(V <= v));
% 为作图的需要,产生新的网格数据
[Udata,Vdata] = meshgrid(linspace(0,1,31));
% 通过循环计算经验Copula函数在新产生的网格点处的函数值
for i=1:numel(Udata)CopulaEmpirical(i) = C(Udata(i),Vdata(i));
endfigure(7);  % 新建图形窗口
% 绘制经验Copula分布函数图像
surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('Empirical Copula C(u,v)');  % 为z轴加标签% 通过循环计算经验Copula函数在原始样本点处的函数值
CUV = zeros(size(U(:)));
for i=1:numel(U)CUV(i) = C(U(i),V(i));
end% 计算线性相关参数为0.9264的二元正态Copula函数在原始样本点处的函数值
rho_norm = 0.9264;
Cgau = copulacdf('Gaussian',[U(:), V(:)],rho_norm);
% 计算线性相关参数为0.9325,自由度为4的二元t-Copula函数在原始样本点处的函数值
rho_t = 0.9325;
k = 4.0089;
Ct = copulacdf('t',[U(:), V(:)],rho_t,k);
% 计算平方欧氏距离
dgau2 = (CUV-Cgau)'*(CUV-Cgau)
dt2 = (CUV-Ct)'*(CUV-Ct)

计算结果如下:

dgau2 =   0.018623588951791dt2 =   0.014494967967151

在这里插入图片描述
图7 经验Copula分布函数图

以上命令绘制出的经验Copula分布函数图如图7所示。由计算出的平方欧氏距离可知,线性相关参数为0.9264的二元正态Copula与经验Copula的平方欧氏距离d=0. 0186;线性相关参数为0. 9325,自由度为4的二元t- Copula与经验Copula的平方欧氏距离d =0.014 5。因此在平方欧氏距离标准下,可以认为二元t - Copula模型能更好地拟合沪、深两市的日收益率观测数据。

3. 完整代码

%--------------------------------------------------------------------------
%                         Copula理论及应用实例
%--------------------------------------------------------------------------
clear
clc
%******************************读取数据*************************************
% 从文件hushi.xls中读取数据
hushi = xlsread('hushi.xls');
% 提取矩阵hushi的第5列数据,即沪市的日收益率数据
X = hushi(:,5);
% 从文件shenshi.xls中读取数据
shenshi = xlsread('shenshi.xls');
% 提取矩阵shenshi的第5列数据,即深市的日收益率数据
Y = shenshi(:,5);%****************************绘制频率直方图*********************************
% 调用ecdf函数和ecdfhist函数绘制沪、深两市日收益率的频率直方图
[fx, xc] = ecdf(X);
figure;
subplot(1,2,1)
ecdfhist(fx, xc, 30);
xlabel('沪市日收益率');  % 为X轴加标签
ylabel('f(x)');  % 为Y轴加标签
[fy, yc] = ecdf(Y);
subplot(1,2,2)
ecdfhist(fy, yc, 30);
xlabel('深市日收益率');  % 为X轴加标签
ylabel('f(y)');  % 为Y轴加标签%****************************计算偏度和峰度*********************************
% 计算X和Y的偏度
xs = skewness(X)
ys = skewness(Y)% 计算X和Y的峰度
kx = kurtosis(X)
ky = kurtosis(Y)%******************************正态性检验***********************************
% 分别调用jbtest、kstest和lillietest函数对X进行正态性检验
[h_X_jb,p_X_jb] = jbtest(X)  % Jarque-Bera检验
[h_X_ks,p_X_ks] = kstest(X,[X,normcdf(X,mean(X),std(X))])  % Kolmogorov-Smirnov检验
[h_X_lillie, p_X_lillie] = lillietest(X)  % Lilliefors检验% 分别调用jbtest、kstest和lillietest函数对Y进行正态性检验
[h_Y_jb,p_Y_jb] = jbtest(Y)  % Jarque-Bera检验
[h_Y_ks,p_Y_ks] = kstest(Y,[Y,normcdf(Y,mean(Y),std(Y))])  % Kolmogorov-Smirnov检验
[h_Y_lillie, p_Y_lillie] = lillietest(Y)  % Lilliefors检验%****************************求经验分布函数值*******************************
% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值
U1 = spline(Xsort(2:end),fx(2:end),X);
V1 = spline(Ysort(2:end),fy(2:end),Y);% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 提取fx和fy的第2个至最后一个元素,即排序后样本点处的经验分布函数值
fx = fx(2:end);
fy = fy(2:end);% 通过排序和反排序恢复原始样本点处的经验分布函数值U1和V1
[Xsort,id] = sort(X);
[idsort,id] = sort(id);
U1 = fx(id);
[Ysort,id] = sort(Y);
[idsort,id] = sort(id);
V1 = fy(id);%*******************************核分布估计**********************************
% 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值
U2 = ksdensity(X,X,'function','cdf');
V2 = ksdensity(Y,Y,'function','cdf');% **********************绘制经验分布函数图和核分布估计图**********************
[Xsort,id] = sort(X);  % 为了作图的需要,对X进行排序
figure(2);  % 新建一个图形窗口
subplot(1,2,1)
plot(Xsort,U1(id),'c','LineWidth',5); % 绘制沪市日收益率的经验分布函数图
hold on
plot(Xsort,U2(id),'k-.','LineWidth',2); % 绘制沪市日收益率的核分布估计图
legend('经验分布函数','核分布估计', 'Location','NorthWest'); % 加标注框
xlabel('沪市日收益率');  % 为X轴加标签
ylabel('F(x)');  % 为Y轴加标签[Ysort,id] = sort(Y);  % 为了作图的需要,对Y进行排序
subplot(1,2,2)
plot(Ysort,V1(id),'c','LineWidth',5); % 绘制深市日收益率的经验分布函数图
hold on
plot(Ysort,V2(id),'k-.','LineWidth',2); % 绘制深市日收益率的核分布估计图
legend('经验分布函数','核分布估计', 'Location','NorthWest'); % 加标注框
xlabel('深市日收益率');  % 为X轴加标签
ylabel('F(x)');  % 为Y轴加标签%****************************绘制二元频数直方图*****************************
% 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值
U = ksdensity(X,X,'function','cdf');
V = ksdensity(Y,Y,'function','cdf');
figure(3);  % 新建一个图形窗口
% 绘制边缘分布的二元频数直方图,
hist3([U(:) V(:)],[30,30])
xlabel('U(沪市)');  % 为X轴加标签
ylabel('V(深市)');  % 为Y轴加标签
zlabel('频数');  % 为z轴加标签%****************************绘制二元频率直方图*****************************
figure(4);  % 新建一个图形窗口
% 绘制边缘分布的二元频数直方图,
hist3([U(:) V(:)],[30,30])
h = get(gca, 'Children');  % 获取频数直方图的句柄值
cuv = get(h, 'ZData');  % 获取频数直方图的Z轴坐标
set(h,'ZData',cuv*30*30/length(X));  % 对频数直方图的Z轴坐标作变换
xlabel('U(沪市)');  % 为X轴加标签
ylabel('V(深市)');  % 为Y轴加标签
zlabel('c(u,v)');  % 为z轴加标签%***********************求Copula中参数的估计值******************************
% 调用copulafit函数估计二元正态Copula中的线性相关参数
rho_norm = copulafit('Gaussian',[U(:), V(:)])
% 调用copulafit函数估计二元t-Copula中的线性相关参数和自由度
[rho_t,nuhat,nuci] = copulafit('t',[U(:), V(:)])%********************绘制Copula的密度函数和分布函数图************************
[Udata,Vdata] = meshgrid(linspace(0,1,31));  % 为绘图需要,产生新的网格数据
% 调用copulapdf函数计算网格点上的二元正态Copula密度函数值
Cpdf_norm = copulapdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);
% 调用copulacdf函数计算网格点上的二元正态Copula分布函数值
Ccdf_norm = copulacdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);
% 调用copulapdf函数计算网格点上的二元t-Copula密度函数值
Cpdf_t = copulapdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);
% 调用copulacdf函数计算网格点上的二元t-Copula分布函数值
Ccdf_t = copulacdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);
% 绘制二元正态Copula的密度函数和分布函数图
figure(5);  % 新建图形窗口
subplot(1,2,1)
surf(Udata,Vdata,reshape(Cpdf_norm,size(Udata)));  % 绘制二元正态Copula密度函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('c(u,v)');  % 为z轴加标签
title('二元正态Copula的密度函数')
subplot(1,2,2)
surf(Udata,Vdata,reshape(Ccdf_norm,size(Udata)));  % 绘制二元正态Copula分布函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('C(u,v)');  % 为z轴加标签
title('二元正态Copula的分布函数')
% 绘制二元t-Copula的密度函数和分布函数图
figure(6);  % 新建图形窗口
subplot(1,2,1)
surf(Udata,Vdata,reshape(Cpdf_t,size(Udata)));  % 绘制二元t-Copula密度函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('c(u,v)');  % 为z轴加标签
title('二元t-Copula的密度函数')
subplot(1,2,2)
surf(Udata,Vdata,reshape(Ccdf_t,size(Udata)));  % 绘制二元t-Copula分布函数图
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('C(u,v)');  % 为z轴加标签
title('二元t-Copula的分布函数')%**************求Kendall秩相关系数和Spearman秩相关系数***********************
% 调用copulastat函数求二元正态Copula对应的Kendall秩相关系数
Kendall_norm = copulastat('Gaussian',rho_norm)
% 调用copulastat函数求二元正态Copula对应的Spearman秩相关系数
Spearman_norm = copulastat('Gaussian',rho_norm,'type','Spearman')
% 调用copulastat函数求二元t-Copula对应的Kendall秩相关系数
Kendall_t = copulastat('t',rho_t)
% 调用copulastat函数求二元t-Copula对应的Spearman秩相关系数
% Spearman_t = copulastat('t',rho_t,nuhat,'type','Spearman')
Spearman_t = copulastat('t',rho_t,nuhat,'type','Spearman') % Yue
% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Kendall秩相关系数
Kendall = corr([X,Y],'type','Kendall')
% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Spearman秩相关系数
Spearman = corr([X,Y],'type','Spearman')%******************************模型评价*************************************
% 调用ecdf函数求X和Y的经验分布函数
[fx, Xsort] = ecdf(X);
[fy, Ysort] = ecdf(Y);
% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值
U = spline(Xsort(2:end),fx(2:end),X);
V = spline(Ysort(2:end),fy(2:end),Y);
% 定义经验Copula函数C(u,v)
C = @(u,v)mean((U <= u).*(V <= v));
% 为作图的需要,产生新的网格数据
[Udata,Vdata] = meshgrid(linspace(0,1,31));
% 通过循环计算经验Copula函数在新产生的网格点处的函数值
for i=1:numel(Udata)CopulaEmpirical(i) = C(Udata(i),Vdata(i));
endfigure(7);  % 新建图形窗口
% 绘制经验Copula分布函数图像
surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))
xlabel('U');  % 为X轴加标签
ylabel('V');  % 为Y轴加标签
zlabel('Empirical Copula C(u,v)');  % 为z轴加标签% 通过循环计算经验Copula函数在原始样本点处的函数值
CUV = zeros(size(U(:)));
for i=1:numel(U)CUV(i) = C(U(i),V(i));
end% 计算线性相关参数为0.9264的二元正态Copula函数在原始样本点处的函数值
rho_norm = 0.9264;
Cgau = copulacdf('Gaussian',[U(:), V(:)],rho_norm);
% 计算线性相关参数为0.9325,自由度为4的二元t-Copula函数在原始样本点处的函数值
rho_t = 0.9325;
k = 4.0089;
Ct = copulacdf('t',[U(:), V(:)],rho_t,k);
% 计算平方欧氏距离
dgau2 = (CUV-Cgau)'*(CUV-Cgau)
dt2 = (CUV-Ct)'*(CUV-Ct)

参考资料

《MATLAB统计分析与应用:40个案例分析》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1545444.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[笔记]某川电机变频器指标与参数

变频器是进行电机控制的一个参考源&#xff0c;所有这些电机厂商的产品中提及的功能模块&#xff0c;项点&#xff0c;都需要关注。 某些功能点&#xff0c;自定义的分类&#xff0c;都是一些可以用作参考和进一步扩展的一些基本的技术点。软硬件接口&#xff0c;可以在设计自…

经验——CLion通过SSH远程开发__imx6ull的linux开发

CLion&#xff1a;2024.2.2 引言 初学嵌入式linux开发看的是正点原子的imx6ull教学视频&#xff0c;使用的是VS Code。虽然VS Code的代码补全和界面还可以&#xff0c;也能使用诸如通义灵码等插件&#xff0c;但相比之下&#xff0c;CLion更为出色。 虽然在嵌入式Linux开发里&a…

怎样才能远程了解在iPhone、iPad上看了什么网站、用了什么APP?

有不少家长在网上吐槽&#xff1a; ——自家小孩每天抱着手机看&#xff0c;一看就两三个小时&#xff0c;到底在看什么&#xff1f; ——没有不允许小孩玩手机&#xff0c;但他一玩就一整天&#xff0c;用什么户外活动、家庭活动都吸引不回来。 ——每次问小孩在手机上看什…

Python酷玩之旅_如何在Centos8顺利安装Python最新版(3.12)

全文导览 前言Q&#xff1a;如何在Centos8顺利安装Python最新版一. 下载安装包1.1 wget1.2. 官网下载 二. 执行安装2.1. 检查环境2.2. 安装依赖2.3. 解压tgz包2.4. 编译2.5. 安装2.6. 设置环境变量2.6.1 编辑/etc/profile2.6.2 激活生效 三. 操作示例3.1. helloworld 结语 前言…

研一上课计划2024/9/23有感

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、需要认真上课的1.应用数理统计&#xff08;开卷考试&#xff09;2.最优化方法&#xff08;开卷考试&#xff09;3.跨文化交际&#xff08;主题演讲20课堂讨…

基于微信小程序的童装商城的设计与实现+ssm论文源码调试讲解

2 系统开发环境 2.1微信开发者工具 微信开发者工具现在已经被小程序开发团队开发运行&#xff0c;目前微信开发者工具任然在不断的完善中&#xff0c;在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具&#xff0c;开发者工具将使用这个微信帐号的信息进行小程…

【设计模式-迭代】

定义 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;用于提供一种顺序访问集合对象元素的方式&#xff0c;而不暴露该对象的内部表示。通过迭代器&#xff0c;客户端可以在不需要了解集合实现的细节的情况下遍历集合中的元素。 UML图 …

基于TRIZ理论的创新设计流程是怎样的?

TRIZ&#xff08;TheoryofInventiveProblemSolving&#xff09;&#xff0c;即发明问题解决理论&#xff0c;是一套基于知识的、面向设计者的系统化创新方法学。Altshuller通过对数百万份专利文献的研究&#xff0c;发现了技术问题解决过程中的普遍模式和规律&#xff0c;从而建…

Cloudera安装指南:新手也能轻松搞定!

回顾&#xff1a;之前《深度挖掘&#xff5c;Cloudera安装不再难&#xff01;基础环境搭建全解析》中&#xff0c;我们深入探讨了如何在企业环境中精心准备系统环境&#xff0c;为大数据平台Cloudera 搭建奠定坚实基础。今天&#xff0c;我们将正式进行Cloudera Manager的下载安…

网络PPP协议802.11协议以太网协议IPV4协议在思科模拟器的实现

1&#xff09;PPP协议 1. 选择2620系列交换机&#xff0c;添加WIC-2t模块&#xff0c;具有两个serial串行接口&#xff1b; 2.Router>enable:进入特权模式 Router#configure terminal&#xff1a;全局配置模式 Enter configuration commands, one per line. End with CNTL…

低成本搭建企业专属云电脑 贝锐向日葵推出私有化云电脑服务

作为一种硬件虚拟化技术&#xff0c;云电脑的优势是十分显著的&#xff0c;比如可以随时随地访问&#xff0c;拥有较高的性能、无需我们购买昂贵的实体硬件、计算资源可以按需灵活拓展等等。 如今&#xff0c;越来越多的企业也开始认识到云电脑所带来的优势&#xff0c;将云电…

视频压缩怎么操作?3款工具轻松告别内存不足的困扰

是不是越来越多的朋友都在用视频记录日常的点滴啊&#xff1f; 是不是想着把视频发到分享平台上&#xff0c;却发现视频的时长超过了平台的限制&#xff0c;没办法直接上传&#xff1f; 想找好用的视频压缩软件手机版&#xff0c;却发现都是需要付费的&#xff1f; 别急&…

基于springboot在线点餐系统

基于springbootvue实现的点餐系统 &#xff08;源码L文ppt&#xff09;4-077 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入点餐系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使用…

vue3的生命周期有哪些

vue3的生命周期&#xff1a;1、beforecreate&#xff1b;2、created&#xff1b;3、beforemount&#xff1b;4、mounted&#xff1b;5、beforeupdate&#xff1b;6、updated&#xff1b;7、beforedestroy&#xff1b;8、destroyed&#xff1b;9、activated&#xff1b;10、deac…

STM32基础学习笔记-DHT11单总线协议面试基础题7

第七章、DHT11: 单总线协!议 常见问题 1、DHT11是什么 &#xff1f;有什么特性 &#xff1f; 2、单总线协议是什么 &#xff1f;原理 &#xff1f;DHT11的单总线协议的组成 &#xff1f; ## 1、DHT11定义 单总线协议是一种用于在多个设备之间进行通信的协议&#xff0c;所有…

Calcite第一课

Calcite 是什么&#xff1f; 2024 年 9 月&#xff0c;最新版本 1.37.0 。前面三节我们先不看任何的源码&#xff0c;只从背景、介绍、概念、原理层面入手&#xff0c;作为深入学习和源码分析的预备。 如果用一句话形容 Calcite&#xff0c;Calcite 是一个用于优化异构数据源的…

2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析

2024 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40 分) 第一题 01 #include <iostream>…

【C++进阶】2024年了set、map还搞不懂底层细节?

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 一、前情提要1、什么是关联式容器&#xff1f;2、键值对又是什么&#xff1f; 二、树形结构的关联式容器1、set1.1…

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1)

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

【CoppeliaSim V4.7】The Python interpreter could not handle the wrapper script

[sandboxScript:error] The Python interpreter could not handle the wrapper script (or communication between the launched subprocess and CoppeliaSim could not be established via sockets). Make sure that the Python modules ‘cbor2’ and ‘zmq’ are properly i…