生成相关非正态数据的方法

机器算法验证 多元分析 参考 随机生成 偏度 系词
2022-02-05 06:07:47

我有兴趣找出一种生成相关非正态数据的方法。因此,理想情况下,某种分布将协方差(或相关)矩阵作为参数并生成近似它的数据。但这里有一个问题:我试图找到的方法应该具有控制其多元偏度和/或峰度的灵活性。

我熟悉 Fleishman 的方法和正态变量的幂法的使用,但我相信大多数这些扩展只允许用户使用边际偏度和峰度的某些组合,而将多元偏度/峰度留在外面。我想知道是否有一种方法可以帮助指定多元偏度和/或峰度,以及一些相关/协方差结构。

大约一年前,我参加了一个关于 copula 分布的研讨会,我记得教授不经意地提到,通过使用 vine copula,可以生成数据,例如,在每个 1-D 边缘对称但共同偏斜,反之亦然-反之亦然。或者,更进一步,在保持最高维度对称(或不对称)的同时,任何较低维度的边距都可能有一些偏斜或峰度。我对可以存在这种灵活性的想法感到惊讶我对任何可行的事情都持开放态度。

编辑:我添加了一些 R 代码来尝试说明我的意思。到目前为止,我只熟悉 Mardia 对多元偏度和峰度的定义。当我第一次处理我的问题时,我天真地认为,如果我使用带有偏斜边际(在本例中为 beta)的对称 copula(在本例中为高斯),则对边际的单变量测试会产生显着性,但 Mardia 对多变量偏度/峰度的测试会不重要。我试过了,它并没有像我预期的那样出现:

library(copula)
library(psych)
set.seed(101)

cop1 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"), 
            c("beta", "beta"),list(list(shape1=0.5, shape2=5), 
            list(shape1=0.5, shape2=5)))}

            Q1 <- rmvdc(cop1, 1000)
            x1 <- Q1[,1]
            y1 <- Q1[,2]


cop2 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"), 
            c("norm", "norm"),list(list(mean=0, sd=1), 
            list(mean = 0, sd=1)))}

            Q2 <- rmvdc(cop2, 1000)
            x2 <- Q2[,1]
            y2 <- Q2[,2]

mardia(Q1)  

Call: mardia(x = Q1)

Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000   num.vars =  2 
b1p =  10.33   skew =  1720.98  with probability =  0
small sample skew =  1729.6  with probability =  0
b2p =  22.59   kurtosis =  57.68  with probability =  0

mardia(Q2)
Call: mardia(x = Q2)

Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000   num.vars =  2 
b1p =  0.01   skew =  0.92  with probability =  0.92
 small sample skew =  0.92  with probability =  0.92
b2p =  7.8   kurtosis =  -0.79  with probability =  0.43

在检查 'cop1' VS 'cop2' 的轮廓以及经验二元密度图时,我还可以看到它们看起来根本不是对称的。那时我意识到这可能比我想象的要复杂一些。

我知道 Mardia's 并不是多元偏度/峰度的唯一定义,因此我并不局限于寻找仅满足 Mardia 定义的方法。

谢谢你!

4个回答

经过大量搜索、浏览在线论坛、咨询教授并进行大量文献综述后,我得出的结论是,解决这个问题的唯一方法可能就是使用 vine copulas。它使您可以对成对偏度和峰度(或任何更高的矩)进行一些控制 - 对于 p 变量随机向量和指定 p-1 对 copula 和剩余 p*(p-1)/2 - ( p-1) 尺寸可以在某种条件连接中指定。

我欢迎人们可能遇到的其他方法,但至少我要把这个指针留给答案,因为我一辈子都找不到解决这个问题的任何其他方法。

您可以通过修改 Ruscio 和 Kaczetow 的 (2008) 算法来解决这个问题。他们的论文提供了一种迭代算法(使用 R 代码),可以最大限度地减少实际边缘形状和预期边缘形状之间的差异。您也许可以对其进行修改,使其针对多变量(而不是边缘)时刻。

Ruscio, J. 和 Kaczetow, W. (2008)。使用迭代算法模拟多元非正态数据。多元行为研究,43(3),355-381。doi:10.1080/00273170802285693

您可能需要检查Generalized Elliptical Distribution,它允许“经典”形状矩阵具有其他功能的灵活性。

我想出了一个简单的方法来做到这一点,它不涉及 coplas 和其他复杂的设计。尽管该方法似乎非常有效,但恐怕我没有任何正式的参考资料。

这个想法很简单。1. 从联合正态分布中抽取任意数量的变量。2. 应用变量的单变量正态 CDF 导出每个变量的概率。3. 最后应用任何分布的逆 CDF 来模拟从该分布中抽取。

我在 2012 年提出了这种方法,并使用Stata进行了演示。我还写了一篇最近的文章,展示了使用R的相同方法。