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