我正在尝试使用R中rmsn包中的sn命令生成具有多元偏态正态分布的随机数。理想情况下,我希望能够获得具有指定方差和协方差的三列数字,同时具有一个列严重偏斜。但是我正在努力同时实现两个目标。

skew normal distribution上的帖子是相关且有用的(以及下面的一些代码的来源),但尚未为我完全阐明问题。

我一直在尝试:

a <- c(5, 0, 0) # set shape parameter
s <- diag(3) # create variance-covariance matrix
w <- sqrt(1/(1-((2*(a^2)/(1 + a^2))/pi))) # determine scale parameter to get sd of 1
xi <- w*a/sqrt(1 + a^2)*sqrt(2/pi) # determine location parameter to get mean of 0

apply(rmsn(n=1000, xi=c(xi), Omega=s, alpha=a), 2, sd)
colMeans(rmsn(n=1000, xi=c(xi), Omega=s, alpha=a))

列均值和SD适用于第二列和第三列(没有倾斜),但不适用于第一列(包含)。任何人都可以澄清我上面的代码或我的想法在哪里出错了吗?我可能会误会如何使用rmsn或输出。任何援助将不胜感激。

最佳答案

该位置不是均值(没有倾斜时除外)。从文档中:

请注意,位置 vector “xi”不代表均值
分布的 vector (实际上,如果'df 1”),类似地,“Omega”不是商品的协方差矩阵
分配

您可能需要用Omega=s替换Omega=w
这应该是方差矩阵:不应有平方根。

关于r - R中的多元偏斜正态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9958120/

10-12 21:39