2012-03-31 70 views
3

我试图用R中的sn包中的rmsn命令生成具有多变量歪斜正态分布的随机数。我希望理想情况下能够获得三列数字指定的方差和协方差,而有一列强烈倾斜。但我正在努力同时实现两个目标。R中的多变量歪斜

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)) 

列手段和SDS是第二和第三列(其中有没有歪斜),正确的,但不是第一次(它)。任何人都可以澄清我的代码在哪里,或者我的想法出了什么问题?我可能会误解如何使用rmsn或输出。任何援助将不胜感激。

回答

1

位置不是平均值(除非没有歪斜)。从文档:

注意,位置矢量“XI”并不代表分布的平均值 矢量(其实际上可能根本不存在,如果“DF < = 1”),并且类似地“欧米茄“是不是的 分布

协方差矩阵和您可能需要使用Omega=w更换Omega=s。 这应该是一个方差矩阵:应该没有平方根。