乐趣区

关于数据挖掘:用COPULA模型进行蒙特卡洛MONTE-CARLO模拟和拟合股票收益数据分析附代码数据

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

最近,copula 在仿真模型中变得流行起来。Copulas 是形容变量之间依赖关系的函数,并提供了一种创立散布以对相干多元数据建模的办法

应用 copula,数据分析师能够通过指定边缘单变量散布并抉择特定的 copula 来提供变量之间的相干构造来构建多变量散布。双变量散布以及更高维度的散布都是可能的。

此示例阐明如何在变量之间存在简单关系或单个变量来自不同散布时应用 copula 从多元散布生成数据。

算法

默认状况下,fit 应用最大似然将 copula 拟合到 u。当 u 蕴含通过边缘累积散布函数的参数估计转换为单位超立方体的数据时,这称为边缘_推断函数 (IFM)_ 办法。

输出参数

Copula 值矩阵

Copula 值,指定为范畴 (0,1) 内的标量值矩阵。如果 u 是 n × p 矩阵,则其值示意 p_维单位超立方体 中的_n_个点。如果  是 _n ×2 矩阵,则其值示意  单位正方形中的_n_个点。u

如果指定二元阿基米德 copula 类型('Clayton''Frank'、或 'Gumbel'),则 u 必须是 n ×2 矩阵。

二元阿基米德 copula 族

'Clayton' | 'Frank' | 'Gumbel'

二元 copula 族,指定为以下之一。

'Clayton' Clayton copula
'Frank' Frank copula
'Gumbel' Gumbel copula

置信区间的显着性程度

置信区间的显着性程度,指定为逗号分隔的对,由'Alpha' 范畴 (0,1) 中的和 标量值组成。fit 返回大概 100 × (1–Alpha)% 的置信区间。

拟合_t_  copula 的办法 

拟合_t_  copula 的办法,指定为逗号分隔的对组,由'Method' 和 'ML' 或 组成 'ApproximateML'

如果指定 'ApproximateML',则  通过最大化一个近似于自由度参数的剖面对数似然的指标函数来 copulafit 拟合大样本的 t copula . 此办法可能比最大似然 ('ML') 快得多,但对于小到中等样本量,估计值和置信限可能不精确。

输入参数

拟合高斯 copula 矩阵的预计相干参数

拟合高斯 copula 的预计相干参数,以标量值矩阵模式返回。

拟合_t_  copula

预计自由度参数 

拟合_t_  copula 的预计自由度参数,以标量值模式返回。

自由度参数

近似置信区间

自由度参数的近似置信区间,以 1×2 标量值矩阵模式返回。第一列蕴含下边界,第二列蕴含上边界。默认状况下,fit 返回大概 95% 的置信区间。您能够应用'Alpha' 名称 - 值对指定不同的置信区间。

拟合的阿基米德 copula

预计 copula 参数

拟合的阿基米德 copula 的预计 copula 参数,以标量值模式返回。

copula 参数

近似置信区间

copula 参数的近似置信区间,以 1×2 标量值矩阵模式返回。第一列蕴含下边界,第二列蕴含上边界。默认状况下,fit 返回大概 95% 的置信区间。能够应用'Alpha' 名称 - 值对指定不同的置信区间。

例子

将_t_  Copula 拟合到股票收益数据

加载并绘制模仿股票收益数据。

hist(x,y)

应用累积散布函数的核预计器将数据转换为 copula。

density(x,x,'fuctin','cdf');

hist(u,v)

将_t_  copula 拟合 到数据中。

rng default  % 不便重现
fit('t',[u v]'ppomaeML')

从_t_  copula 生成随机样本。

rnd('t',Rho,nu,1000);

scatrhst(u1,v1)

将随机样本变换回数据的原始量纲。

figure;
scterhst(x1,y1)

应用 Copulas 模仿相干随机变量

在此示例中,咱们将探讨如何应用 copula 生成相干多元随机数据。


点击题目查阅往期内容

R 语言中的 copula GARCH 模型拟合工夫序列并模仿剖析

左右滑动查看更多

01

02

03

04

仿真输出之间的相关性

Monte-Carlo 模仿的设计决策之一是抉择随机输出的概率分布。为每个独自的变量抉择散布通常很简略,但决定输出之间应该存在什么依赖关系可能不是。现实状况下,模仿的输出数据应反映所建模的理论数量之间的相关性的已知信息。然而,在模仿中可能没有或简直没有信息可用于建设任何依赖关系,在这种状况下,最好尝试不同的可能性,以确定模型的敏感性。

然而,当随机输出的散布不是规范多元散布时,可能很难理论生成具备相关性的随机输出。此外,一些规范的多元散布只能模仿十分无限的依赖类型。总是能够使输出独立,尽管这是一个简略的抉择,但并不总是理智的,可能会导致谬误的论断。

例如,金融风险的蒙特卡罗模仿可能具备代表不同保险损失起源的随机输出。这些输出可能被建模为对数正态随机变量。一个正当的问题是这两个输出之间的依赖性如何影响模仿后果。事实上,从实在数据中能够晓得雷同的随机条件会影响两个起源,而在模仿中疏忽这一点可能会导致谬误的论断。

独立对数正态随机变量的模仿是微不足道的。最简略的办法是应用 lognrnd 函数。在这里,咱们将应用该 mvnrnd 函数生成 n 对独立的正态随机变量,而后对它们取幂。留神这里应用的协方差矩阵是对角的,即 Z 的列之间的独立性。

Sgand = siga.^2 .* [1 0; 0 1]
Ind = mvrn([0 0], Simand, n);
XIn = exp(ZId);

应用具备非零非对角项的协方差矩阵也很容易生成相干的双变量对数正态 rv。

Simep = sga.^2 .* [1 rho; rho 1]
mvnrnd([0 0], Siaep, n);

第二个散点图阐明了这两个二元散布之间的差别。

plot(XDp,'.');
axis equal;

很显著,在第二个数据集中,X1 的大值与 X2 的大值相关联的趋势更大,对于小值也是如此。这种依赖性由根底双变量正态的相干参数 rho 确定。从模仿中得出的论断很可能取决于 X1 和 X2 是否具备相关性。

在这种状况下,二元对数正态分布是一个简略的解决方案,当然很容易推广到更高维度和边缘散布是 不同 对数正态的状况。还存在其余多元散布,例如,多元 t 和 Dirichlet 散布别离用于模仿相干的 t 和 beta 随机变量。然而简略的多元散布的列表并不长,它们仅实用于边缘都在同一族(甚至完全相同的散布)中的状况。在许多状况下,这可能是一个真正的限度。

构建相依双变量散布的更通用办法

只管创立二元对数正态的上述结构很简略,但它用于阐明更广泛实用的办法。首先,咱们从二元正态分布生成值对。这两个变量之间存在统计相关性,且均具备正态边缘散布。接下来,对每个变量别离利用转换(指数函数),将边缘散布更改为对数正态分布。转换后的变量依然具备统计相关性。

如果能够找到适合的转换,则能够推广此办法以创立具备其余边缘散布的相干双变量随机向量。事实上,的确存在结构这种变换的通用办法,只管不像取幂那么简略。

依据定义,将正态 CDF(此处由 PHI 示意)利用于规范正态随机变量会导致在区间 [0, 1] 上平均的 rv。要看到这一点,如果 Z 具备规范正态分布,则 U = PHI(Z) 的 CDF 为

  Pr{U <= u0} = Pr{PHI(Z) <= u0} = Pr{Z <= PHI^(-1)(u0)} = u0,

这是一些模仿的正常值和转换值的 U(0,1) rv 直方图的 CDF 证实了这一事实。

hist(z);
u = normcdf(z);

当初,借用单变量随机数生成实践,将任何散布 F 的逆 CDF 利用于 U(0,1) 随机变量会产生一个 rv,其散布正好是 F。这被称为反演办法。该证实实质上与上述前向状况的证实相同。另一个直方图阐明了向伽马散布的转换。

gaminv(u,2,1);

这种两步变换能够利用于规范双变量正态的每个变量,创立具备任意边缘散布的相干 rv。因为转换别离作用于每个成分,所以两个后果 rv 甚至不须要具备雷同的边缘散布。变换定义为

  Z = [Z1 Z2] ~ N([0 0],[1 rho; rho 1])
  U = [PHI(Z1) PHI(Z2)]
  X = [G1(U1) G2(U2)]

其中 G1 和 G2 是两个可能不同散布的逆 CDF。例如,咱们能够从具备 t(5) 和 Gamma(2,1) 边缘的二元散布生成随机向量。

 nocf(Z);
 [gav(U(:,1),2,1) tin(U(:,2),5)];

该图在散点图旁边有直方图,以显示边缘散布和相关性。

hist(X);

plot(X,'.');

bar(ct1,-1,1);

等级相关系数

此结构中 X1 和 X2 之间的相关性由根底双变量正态的相干参数 rho 确定。然而,X1 和 X2 的线性相关性是 rho 是 _不_正确的。例如,在原始对数正态状况下,该相干有一个模式:

  cor(X1,X2) = (exp(rho.*sigma.^2) - 1) ./ (exp(sigma.^2) - 1)

除非 rho 恰好是 1,否则它严格小于 rho。然而,在更个别的状况下,例如下面的 Gamma/t 结构,X1 和 X2 之间的线性相关性很难或不可能用 rho 示意,但能够应用模仿来表明产生了雷同的成果。

那是因为线性相关系数示意 rv 之间的 _线性_相关性,并且当对这些 rv 利用非线性变换时,不会保留线性相关性。相同,秩相关系数(例如 Kendall’s tau 或 Spearman’s rho)更适合。

粗略地说,这些等级相关性掂量一个 rv 的大值或小值与另一个 rv 的大值或小值相关联的水平。然而,与线性相关系数不同,它们仅依据等级来掂量关联。因而,在任何枯燥变换下都保留了等级相关性。特地是,刚刚形容的变换办法保留了等级相关性。因而,晓得双变量正态 Z 的秩相干精确地确定了最终变换后的 rv 的 X 的秩相干。尽管依然须要 rho 来参数化潜在的双变量正态,但 Kendall 的 tau 或 Spearman 的 rho 在形容 rv 之间的相关性时更有用,因为它们对于边缘散布的抉择是不变的。

事实证明,对于二元正态分布,Kendall’s tau 或 Spearman’s rho 与线性相关系数 rho 之间存在简略的 1-1 映射:

  tau = (2/pi)*arcsin (rho) 或 rho = sin (tau*pi/2)
  rho_s = (6/pi)*arcsin(rho/2) 或 rho = 2*sin(rho_s*pi/6)
``````
subplot(1,1,1);

plot(rho,ta);

因而,通过为 Z1 和 Z2 之间的线性相关抉择正确的 rho 参数值,很容易在 X1 和 X2 之间创立所需的秩相干,而不论它们的边缘散布如何。

请留神,对于多元正态分布,Spearman 的秩相干简直与线性相关雷同。然而,一旦咱们转换为最终的随机变量,状况就不是这样了。

copula

上述结构的第一步定义了所谓的 copula,特地是高斯 copula。双变量 copula 只是两个随机变量的概率分布,每个变量的边缘散布都是平均的。这两个变量可能是齐全独立的、确定性相干的(例如,U2 = U1),或者介于两者之间。二元高斯 copulas 族由 Rho = [1 rho; rho 1],线性相关矩阵。当 rho 靠近 +/- 1 时,U1 和 U2 靠近线性相关,当 rho 靠近零时靠近齐全独立。

不同程度 rho 的一些模仿随机值的散点图阐明了高斯 copula 的不同可能性范畴:

U = nrf(Z,0,1);
plt(U,'.');

Z = vrd([0 0], n);
U = ncf(Z,0,1);

plt(U,'.');

Z = mnd([0 0], n);
U = nrcf(Z,0,1);
plt(U,'.');

Z = mrd([0 0], n);
U = nocdf(Z,0,1);
plt(U,'.');

U1 和 U2 之间的相关性与 X1 = G(U1) 和 X2 = G(U2) 的边缘散布齐全离开。X1 和 X2 能够被赋予 任何 边缘散布,并且依然具备雷同的秩相干。这是 copula 的次要吸引力之一——它们容许对依赖性和边缘散布进行这种独自的标准。

t Copulas

能够通过从二元 t 散布开始并应用相应的 t CDF 进行转换来构建不同的 copula 族。二元 t 散布应用 Rho(线性相关矩阵)和 nu(自由度)进行参数化。因而,例如,咱们能够说 at(1) 或 at(5) copula,别离基于具备 1 个和 5 个自由度的多元变量 t。

不同程度 rho 的一些模仿随机值的散点图阐明了 t(1) copulas 的不同可能性范畴:

T = mvd(, nu, n);
U = tcf(T,nu);
plot(U);

T = mvtn(nu, n);

plot(U);

t copula 对 U1 和 U2 具备平均的边缘散布,就像高斯 copula 一样。at copula 中成分之间的秩相干 tau 或 rho_s 也是与高斯函数雷同的 rho 函数。然而,正如这些图所示,at(1) copula 与高斯 copula 有很大不同,即便它们的成分具备雷同的等级相关性。不同之处在于它们的依赖构造。毫不奇怪,随着自由度参数 nu 变大,at(nu) copula 靠近相应的高斯 copula。

与高斯 copula 一样,能够在 copula 上施加任何边缘散布。例如,应用具备 1 个自由度的 copula,咱们能够再次从具备 Gam(2,1) 和 t(5) 边缘的二元散布生成随机向量:

[n1,cr] = hist(X(:,1);
[n2,c2] = hist(X(:,2));

plot(X,'.');

h1 = gca;

与之前构建的基于高斯 copula 的双变量 Gamma/t 散布相比,这里基于 at(1) copula 构建的散布具备雷同的边缘散布和雷同的变量之间的秩相干,但依赖性却大不相同构造体。这阐明了一个事实,即多元散布并不是由它们的边缘散布或它们的相关性惟一定义的。应用程序中特定 copula 的抉择可能基于理论察看到的数据,或者能够应用不同的 copula 来确定模仿后果对输出散布的敏感性。

高维 Copulas

Gaussian 和 t copula 被称为椭圆 copula。很容易将椭圆 copula 推广到更多维度。例如,咱们能够应用 Gaussian copula 模仿来自具备 Gamma(2,1)、Beta(2,2) 和 t(5) 边缘的三变量散布的数据,如下所示。

X = [gaminv betainv tinv(U)];
plot3(X,'.');

请留神,线性相关参数 rho 与例如 Kendall tau 之间的关系对于此处应用的相关矩阵 Rho 中的每个条目都成立。咱们能够验证数据的样本秩相干近似等于理论值。

 corr(X, 'type','Kendall')

Copulas 和教训边缘散布

为了应用 copula 模仿相干的多元数据,咱们曾经看到咱们须要指定

  1) copula 族(和任何形态参数),2) 变量之间的秩相干,以及
  3) 每个变量的边缘散布

假如咱们有两组股票收益数据,咱们想运行蒙特卡罗模仿,输出与咱们的数据遵循雷同的散布。

size(sos,1);
hist(stos(:,1),10);

(这两个数据向量具备雷同的长度,但这并不重要。)

咱们能够为每个数据集别离拟合一个参数模型,并将这些估计值用作咱们的边缘散布。然而,参数模型可能不够灵便。相同,咱们能够对边缘散布应用教训模型。咱们只须要一种办法来计算逆 CDF。

这些数据集的教训逆 CDF 只是一个阶梯函数,步长为 1/nobs、2/nobs、… 1。步长只是排序后的数据。

stairs(inCF1);

对于模仿,咱们可能想要尝试不同的联结和相关性。在这里,咱们将应用具备相当大的负相关参数的二元 t(5) copula。

tcdf(T,nu);
[inCDF1 inCDF2];

plot(X(:,1),X(:,2),'.');

模仿数据的边缘直方图与原始数据的边缘直方图十分匹配,并且随着咱们模仿更多对值而变得雷同。请留神,这些值是从原始数据中提取的,并且因为每个数据集中只有 100 个观测值,因而模仿数据有些“离散”。克服此问题的一种办法是向最终模仿值增加大量随机变动(可能为正态分布)。这等效于应用教训逆 CDF 的平滑版本。


本文摘选 MATLAB 用 COPULA 模型进行蒙特卡洛 (MONTE CARLO) 模仿和拟合股票收益数据分析 ,点击“ 浏览原文”获取全文残缺材料。


点击题目查阅往期内容

用 COPULA 模型进行蒙特卡洛 (MONTE CARLO) 模仿和拟合股票收益数据分析
Copula 算法建模相依性剖析股票收益率工夫序列案例
Copula 预计边缘散布模仿收益率计算投资组合危险价值 VaR 与冀望损失 ES
MATLAB 用 COPULA 模型进行蒙特卡洛 (MONTE CARLO) 模仿和拟合股票收益数据分析
R 语言多元 Copula GARCH 模型工夫序列预测
python 中的 copula:Frank、Clayton 和 Gumbel copula 模型预计与可视化
R 语言中的 copula GARCH 模型拟合工夫序列并模仿剖析
matlab 应用 Copula 仿真优化市场危险数据 VaR 剖析
R 语言多元 Copula GARCH 模型工夫序列预测
R 语言 Copula 函数股市相关性建模:模仿 Random Walk(随机游走)
R 语言实现 Copula 算法建模依赖性案例剖析报告
R 语言 ARMA-GARCH-COPULA 模型和金融工夫序列案例
R 语言基于 copula 的贝叶斯分层混合模型的诊断准确性钻研
R 语言 COPULA 和金融工夫序列案例
matlab 应用 Copula 仿真优化市场危险数据 VaR 剖析
matlab 应用 Copula 仿真优化市场危险
R 语言多元 CopulaGARCH 模型工夫序列预测
R 语言 Copula 的贝叶斯非参数 MCMC 预计
R 语言 COPULAS 和金融工夫序列 R 语言乘法 GARCH 模型对高频交易数据进行波动性预测
R 语言 GARCH-DCC 模型和 DCC(MVT)建模预计
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 语言 ARMA-GARCH-COPULA 模型和金融工夫序列案例

退出移动版