主要内容

使用介体模拟相关的随机变量

这个例子展示了如何使用介体生成的数据多元分布有复杂的变量之间的关系时,或者当个体变量从不同的分布。

MATLAB®是一个理想的工具运行模拟,结合随机输入或噪音。统计和机器学习工具箱™提供函数来创建随机数据序列根据许多常见的单变量分布。工具箱中还包括一些从多元分布函数来生成随机数据,如多元正态和多元t。然而,没有内置的方法来生成多元分布边际分布,或在单个变量的情况下从不同的分布。

最近,介体在仿真模型已经成为流行。接合部函数描述变量之间的依赖关系,提供一种方法来创建模型相关的多元数据分布。使用接合部,数据分析师可以构建一个多元分布通过指定边际单变量分布,并选择一个特定的介体提供一个变量之间的相关结构。二元分布以及分布在更高的维度,是可能的。在这个例子中,我们将讨论如何使用介体在MATLAB生成相关的多元随机数据,使用统计和机器学习工具。

模拟输入之间的依赖

的蒙特卡罗模拟的设计决策是一种选择的概率分布随机输入。选择为每个单独的变量分布通常是简单,但决定之间的依赖关系应该存在输入可能不是。理想情况下,输入数据模拟应该反映对依赖所谓真正的数量被模仿。然而,可能有很少或根本没有任何依赖信息,以此为基础的模拟,在这种情况下,这是一个好主意,尝试不同的可能性,以确定模型的灵敏度。

然而,实际上很难生成随机输入和依赖他们的分布不是从一个标准的多元分布。此外,一些标准的多元分布模型只能非常有限类型的依赖。它总是可以使输入独立,虽然这是一个简单的选择,它并不总是明智的,可能会导致错误的结论。

例如,蒙特卡罗模拟财务风险可能会随机输入,代表不同的保险损失的来源。这些输入可能被建模为对数正态随机变量。一个合理的问题是依赖这两个输入之间如何影响仿真的结果。事实上,它可能是已知的数据,同样的随机条件影响的来源,和忽视,在模拟可能导致错误的结论。

独立对数正态随机变量的模拟是微不足道的。最简单的方法是使用lognrnd函数。在这里,我们将使用mvnrnd函数来生成n双独立正常随机变量,然后取幂。注意,这里使用的协方差矩阵是对角,即。Z之间的、独立的列。

n = 1000;σ= 5;SigmaInd =σ。^ 2。* [1 0;0 1]
SigmaInd = 0.2500 0 0 0.2500
ZInd = mvnrnd ([0 0], SigmaInd n);XInd = exp (ZInd);情节(XInd (: 1) XInd (:, 2),“。”);轴平等的;轴([0 5 0 5]);包含(X1的);ylabel (“X2”);

二维对数正态r.v的依赖。也很容易生成,使用协方差矩阵非零非对角的条款。

ρ= 7;SigmaDep =σ。^ 2。*[1ρ;ρ1]
SigmaDep = 0.2500 0.1750 0.1750 0.2500
ZDep = mvnrnd ([0 0], SigmaDep n);XDep = exp (ZDep);

第二个散点图演示了这两种二元分布之间的差异。

情节(XDep (: 1) XDep (:, 2),“。”);轴平等的;轴([0 5 0 5]);包含(X1的);ylabel (“X2”);

很明显,有更多的倾向第二大值的数据集X1与大型X2的值有关,同样为小值。这种依赖是由相关参数,ρ,底层的二元正态。仿真得出的结论很可能取决于X1和X2是否生成与依赖。

二维对数正态分布是一个简单的解决方案在这种情况下,当然很容易推广到更高的维度和边际分布的情况不同的对数正态。其他多元分布也存在,例如,多元t和狄利克雷分布是用来模拟依赖t和β随机变量,分别。但简单的多元分布列表不长,和他们只适用于情况的人都是在同一个家庭(甚至完全相同的分布)。在很多情况下这是一个真正的限制。

一个更一般的方法构造二元分布的依赖

尽管上述建设,创建一个二维对数正态很简单,它说明一个更普遍适用的方法。首先,我们从二元正态分布生成的值。有统计这两个变量之间的依赖,每个人都有一个正常的边际分布。接下来,一个转换(指数函数)分别适用于每一个变量,改变边际分布为对数正态。转换后的变量还有统计依赖。

如果能找到一个合适的变换,该方法可以推广到创建相关的二元边际分布随机向量与其他。事实上,一般的方法构建这样一个转换确实存在,虽然不是那么简单就求幂。

根据定义,应用正常CDF(这里表示由φ)标准正态随机变量的结果在一个随机变数,统一在区间[0,1]。看到这个,如果Z标准正态分布,那么U =φ(Z)的提供

公关U < =情况}={公关{φ(Z) < =情况}=公关{Z <φ= ^(1)(情况)}=情况,

这就是CDF实验组的U (0, 1) r.v。直方图的一些模拟正常和转换值证明的事实。

n = 1000;z = normrnd (0, 1, n, 1);嘘(z, -3.75: .5:3.75);xlim ([4 4]);标题(1000年模拟N(0, 1)随机值的);包含(“Z”);ylabel (“频率”);

u = normcdf (z);嘘(u . 05。1: .95);标题(1000年模拟N(0,1)值转换为U (0,1) ');包含(“U”);ylabel (“频率”);

现在,借用单变量随机数生成理论,应用逆CDF任何分布F U(0, 1)随机变量的结果在一个随机变数的分布就是F .这就是所谓的反演方法。上述本质上就是个相反的证据证明提出的情况。另一个伽马分布柱状图展示了转换。

x = gaminv (u 2 1);嘘(x,二十五分:.5:9.75);标题(1000年模拟N(0,1)值转换为γ(2,1)”);包含(“X”);ylabel (“频率”);

这两步转换可以应用于每个标准的二元正态变量,创建r.v的依赖。具有任意的边际分布。因为转换工作在每个组件分别,这两个结果r.v。的甚至不需要有相同的边际分布。转换定义为

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

G1和G2逆CDFs的两个可能不同的分布。例如,我们可以生成随机向量的二维分布和t(5)和伽马(2,1)不着边际。

n = 1000;ρ= 7;Z = mvnrnd([0 0]、[1ρ;ρ1],n);U = normcdf (Z);X = [gaminv (U (: 1)、2、1) tinv (U (:, 2), 5)];

这个情节有柱状图和散点图显示两个边际分布,和依赖。

[n1, ctr1] =嘘(X (: 1), 20);[n2, ctr2] =嘘(X (:, 2), 20);次要情节(2,2,2);情节(X (: 1) X (:, 2),“。”);轴([0 12 8 8]);甘氨胆酸h1 =;标题(1000年模拟依赖t和伽马值);包含(“X1 ~γ(2,1)”);ylabel (“X2 ~ t (5)”);次要情节(2、2、4);酒吧(ctr1 n1 1);轴(12 -麦克斯(n1) * 1.1 0 [0]);轴(“关闭”);甘氨胆酸h2 =;次要情节(2 2 1);barh (ctr2 n2 1);轴([-麦克斯(n2) * 1.1 0 8 8]);轴(“关闭”);甘氨胆酸h3 =;h1。位置= (0.35 - 0.35 0.55 - 0.55);h2。位置= [。实施率达35。1。55];h3。位置= [。1 .35点酒精含量55]; colormap([.8 .8 1]);

等级相关系数

X1和X2之间的依赖在这个建筑是由相关参数,ρ,底层的二元正态。然而,它是真的,X1和X2是ρ的线性相关。例如,在最初的对数正态情况下,相关性是一个封闭的形式:

软木(X1, X2) = (exp(ρ*σ^ 2)- 1)。/ (exp(σ^ 2)- 1)

这是严格小于ρ除非ρ正是一个。在更一般的情况下,比如上面的γ/ t建设中,X1和X2之间的线性相关性是困难的或不可能表达的ρ,但模拟可以用来显示发生了同样的效果。

这是因为线性相关系数表达了线性r.v之间的依赖。的,当非线性转换应用于那些r.v。是不会保留,线性相关。相反,等级相关系数,比如肯德尔的τ或枪兵的ρ,是更合适的。

大致说来,这些等级相关性度量的程度大小值的随机变数与大小的值。然而,与线性相关系数不同,他们只测量协会的行列。因此,在任何单调变换保留了等级相关。特别是,刚刚描述的转换方法保留了等级相关。因此,知道等级相关的二元正态Z完全决定了最终改变了r.v的等级相关。的xρ时仍然需要参数化潜在的二元正态,肯德尔的τ或枪兵的ρ在描述r.v之间的依赖更有用。的,因为他们是不变的边缘分布的选择。

原来的二元正态之间存在简单的一对一的映射肯德尔的τ或枪兵的ρ,线性相关系数ρ:

τ=(2 /π)* arcsin(ρ)或ρ=罪(τ*π/ 2)rho_s =(6 /π)* arcsin(ρ/ 2)或ρ= 2 * sin (rho_s *π/ 6)
次要情节(1 1 1);ρ= 1:.01:1;τ= 2 * asin(ρ)。/π;rho_s = 6。* asin (rho. / 2)。/π;情节(ρ,τ,“- - -”,rho_sρ“- - -”[1],[1],凯西:”);轴([1 1 1 1]);包含(的ρ);ylabel (等级相关系数的);传奇(肯德尔”年代τ,斯皮尔曼”年代rho_s,“位置”,“西北”);

因此,很容易创建所需的X1和X2之间的等级相关,不管他们的边际分布,通过选择正确的ρ参数值之间的线性相关性Z1和Z2。

请注意,多元正态分布,斯皮尔曼等级相关的几乎相同的线性相关性。然而,这不是真的一旦我们改变最后一个随机变量。

连系动词

上述施工的第一步定义所谓的接合部,具体地说,一个高斯相关。二元介体是两个随机变量的概率分布,每一个的边际分布是均匀的。这两个变量可能是完全独立的,确定性相关(例如,U2 = U1),或者介于两者之间的任何东西。二维高斯接合部是参数化的家庭ρ=[1ρ;ρ1],线性相关矩阵。U1和U2方法线性相关ρ趋于+ / - 1,和方法完全独立ρ趋于零。

散点图的模拟随机值为各种水平的ρ说明高斯接合部的一系列不同的可能性:

n = 500;Z = mvnrnd ([0 0]、[1。8;1。8),n);U = normcdf (Z, 0,1);次要情节(2 2 1);情节(U (: 1), U (:, 2),“。”);标题(ρ= 0.8的);包含(‘U1’);ylabel (“U2”);Z = mvnrnd ([0 0]、[1。1;1。1,n);U = normcdf (Z, 0,1);次要情节(2,2,2);情节(U (: 1), U (:, 2),“。”);标题(ρ= 0.1的);包含(‘U1’);ylabel (“U2”);Z = mvnrnd([0 0]、[1约;-。1,n);U = normcdf (Z, 0,1);次要情节(2、2、3);情节(U (: 1), U (:, 2),“。”);标题(ρ= -0.1的);包含(‘U1’);ylabel (“U2”);Z = mvnrnd ([0 0]、[1。8;-。8 1],n);U = normcdf (Z, 0,1);次要情节(2、2、4);情节(U (: 1), U (:, 2),“。”);标题(ρ= -0.8的);包含(‘U1’);ylabel (“U2”);

之间的依赖U1和U2是完全分开的边际分布X1 = G (U1)和X2 = G (U2)。可以给X1和X2任何边际分布,仍然有相同的等级相关。这是连系动词的主要诉求之一——他们允许这种单独的依赖和边缘分布规范。

t连系动词

可以由不同家庭的接合部从二元t分布,并使用相应的t CDF转变。二元t分布参数化与ρ,线性相关性矩阵,ν,自由度。因此,例如,我们能说的t(1)或(5)介体,基于多元t和五个自由度,分别。

散点图的模拟随机值为各种水平的ρ说明不同的可能性的范围t(1)连系动词:

n = 500;ν= 1;T = mvtrnd ([1。8;8 1],ν,n);U = tcdf (T,ν);次要情节(2 2 1);情节(U (: 1), U (:, 2),“。”);标题(ρ= 0.8的);包含(‘U1’);ylabel (“U2”);T = mvtrnd ([1。1;1。1],ν,n);U = tcdf (T,ν);次要情节(2,2,2);情节(U (: 1), U (:, 2),“。”);标题(ρ= 0.1的);包含(‘U1’);ylabel (“U2”);T = mvtrnd([1约;-。1 1],ν,n);U = tcdf (T,ν);次要情节(2、2、3);情节(U (: 1), U (:, 2),“。”);标题(ρ= -0.1的);包含(‘U1’);ylabel (“U2”);T = mvtrnd ([1。8;-。8 1],ν,n);U = tcdf (T,ν);次要情节(2、2、4);情节(U (: 1), U (:, 2),“。”);标题(ρ= -0.8的);包含(‘U1’);ylabel (“U2”);

t接合部有统一的边际分布U1和U2,正如一个高斯相关。组件之间的等级相关τ或rho_s t接合部也是同样的ρ为一个高斯分布的函数。然而,随着这些情节表明,t(1)从高斯相关接合部相当不同,即使他们的组件相同的等级相关。不同的是在他们的依赖结构。毫不奇怪,作为自由度参数ν是大,t(ν)介体方法对应的高斯相关。

与高斯相关一样,可以对任何边际分布在t接合部。例如,使用一个t接合部1自由度,我们可以再次生成随机向量的二维分布与Gam(2, 1)和t(5)人:

次要情节(1 1 1);n = 1000;ρ= 7;ν= 1;T = mvtrnd([1ρ;ρ1],ν,n);U = tcdf (T,ν);X = [gaminv (U (: 1)、2、1) tinv (U (:, 2), 5)];[n1, ctr1] =嘘(X (: 1), 20);[n2, ctr2] =嘘(X (:, 2), 20); subplot(2,2,2); plot(X(:,1),X(:,2),“。”);轴([0 15 -10年10]);甘氨胆酸h1 =;标题(1000年模拟依赖t和伽马值);包含(“X1 ~γ(2,1)”);ylabel (“X2 ~ t (5)”);次要情节(2、2、4);酒吧(ctr1 n1 1);轴(15 -麦克斯(n1) * 1.1 0 [0]);轴(“关闭”);甘氨胆酸h2 =;次要情节(2 2 1);barh (ctr2 n2 1);轴([-麦克斯(n2) * 1.1 0 -10 10]);轴(“关闭”);甘氨胆酸h3 =;h1。位置= (0.35 - 0.35 0.55 - 0.55);h2。位置= [。实施率达35。1。55];h3。位置= [。1 .35点酒精含量55]; colormap([.8 .8 1]);

构造二元γ/ t分布相比,基于高斯相关,构造分布,基于t(1)连系动词,有相同的边际分布和相同的变量之间的等级相关,但不同结构的依赖。这说明这一事实多元分布定义为边际分布不是唯一的,或者他们的相关性。在应用程序中选择特定的相关可能根据实际观测数据,或不同的介体可用来确定输入分布仿真结果的敏感性。

高阶连系动词

高斯和t接合部被称为椭圆接合部。很容易概括椭圆接合部向更高的维度。例如,我们可以从一个小分布模拟数据与γ(2,1),β-(2,2)和t(5)人使用高斯相关,如下所示。

次要情节(1 1 1);n = 1000;ρ= [1。4。2;1。4。8;2 -。8 1];Z = mvnrnd([0 0 0],ρ,n);U = normcdf (Z, 0,1);X = [gaminv (U (: 1)、2、1) betainv (U (:, 2), 2, 2) tinv (U (:, 3), 5)];plot3 (X (: 1) X (:, 2), X (:, 3),“。”);网格;视图([15]-55年);包含(‘U1’);ylabel (“U2”);zlabel (U3的);

注意,线性相关参数ρ和之间的关系,例如,肯德尔的τ,适用于相关矩阵中的每个条目ρ这里使用。我们可以确认数据的样本秩相关性约等于理论值。

tauTheoretical = 2π* asin(ρ)。/
tauTheoretical = 1.0000 0.2620 0.1282 0.2620 1.0000 -0.5903 0.1282 -0.5903 1.0000
tauSample = corr (X,“类型”,“假象”)
tauSample = 1.0000 0.2655 0.1060 0.2655 1.0000 -0.6076 0.1060 -0.6076 1.0000

连系动词和实证边际分布

使用介体来模拟相关的多元数据,我们已经看到,我们需要指定

1)连系动词家族(和任何形状参数),2)等级变量之间的相关性,为每个变量和3)边际分布

假设我们有两套股票返回数据,我们希望运行一个遵循相同的蒙特卡罗模拟输入分布数据。

负载stockreturns脑袋=大小(股票,1);次要情节(2,1,1);嘘(股票(:1)10);包含(X1的);ylabel (“频率”);次要情节(2,1,2);嘘(股票(:,2),10);包含(“X2”);ylabel (“频率”);

(这两个数据向量具有相同的长度,但这不是关键。)

我们可以适应一个参数模型分别对每个数据集,并使用这些估计边际分布。然而,一个参数模型可能不足够灵活。相反,我们可以使用一个经验模型的边际分布。我们只需要一种方法来计算逆CDF。

实证逆CDF这些数据集是一个楼梯函数值与步骤1 /脑袋,2 /脑袋,……1。一步山庄只是排序的数据。

invCDF1 =排序(股票(:1));n1 =长度(股票(:1));invCDF2 =排序(股票(:,2));n2 =长度(股票(:,2));次要情节(1 1 1);楼梯(invCDF1(1:脑袋)/脑袋,“b”);持有;楼梯(invCDF2(1:脑袋)/脑袋,“r”);持有;传奇(X1的,“X2”);包含(“累积概率”);ylabel (“X”);

对于仿真,我们可能想要尝试不同的介体和相关性。在这里,我们将使用一个二元t(5)介体和一个相当大的负相关参数。

n = 1000;ρ=。8;ν= 5;T = mvtrnd([1ρ;ρ1],ν,n);U = tcdf (T,ν);X = [invCDF1(装天花板(n1 * U (: 1))) invCDF2(装天花板(n2 * U (:, 2))));[n1, ctr1] =嘘(X (: 1), 10);[n2, ctr2] =嘘(X (:, 2), 10);次要情节(2,2,2); plot(X(:,1),X(:,2),“。”);轴([-3.5 3.5 -3.5 3.5]);甘氨胆酸h1 =;标题(1000年模拟相关的值);包含(X1的);ylabel (“X2”);次要情节(2、2、4);酒吧(ctr1 n1 1);轴(3.5[-3.5 -麦克斯(n1) * 1.1 0]);轴(“关闭”);甘氨胆酸h2 =;次要情节(2 2 1);barh (ctr2 n2 1);轴([-麦克斯(n2) * 1.1 0 -3.5 3.5]);轴(“关闭”);甘氨胆酸h3 =;h1。位置= (0.35 - 0.35 0.55 - 0.55);h2。位置= [。实施率达35。1。55];h3。位置= [。1 .35点酒精含量55]; colormap([.8 .8 1]);

模拟数据的边缘直方图匹配的原始数据,并将成为我们模拟多个双值相同。注意值来自原始数据,在每个数据集,因为只有100的观察,模拟数据有些“离散”。解决这个问题的方法之一是增加少量的随机变异,可能是正态分布,最后模拟值。这相当于使用平滑版本的经验逆CDF。