如何生成5维多变量法线

时间:2017-10-08 19:54:56

标签: r

如何使用名称(Y,X1,X2,Z1,Z2)和5347个观察值生成具有双边相关性的5维多元法线

相关性:

Y x1 x2 Z1 Z2
Y 1.0 0.2 0.1 0.35 0.0
x1 0.2 1.0 0.0 0.4 0.0
x2 0.1 0.0 1.0 0.0 0.4
Z1 0.35 0.4 0.0 1.0 0.6
Z2 0.0 0.0 0.4 0.6 1.0

我尝试生成矩阵和mvtnorm以及MASS包

1 个答案:

答案 0 :(得分:1)

来自mvrnorm()

MASS对我来说效果很好(请参阅下面的代码)。话虽如此,如果输入相关性与协方差矩阵,则从函数输出的随机变量将与原始数据处于不同的比例(即,每个将被缩放以具有单位方差)。

如果出于某种原因你不能计算协方差矩阵但你知道你的变量的标准偏差,dayne's answer提供了一种从相关矩阵中获取它的方法。

library(MASS)

# Make covariance matrix. See note above re the implications of using a correlation matrix.
S = matrix(c(1.0, 0.2, 0.1, 0.35, 0.0,
             0.2, 1.0, 0.0, 0.4, 0.0,
             0.1, 0.0, 1.0, 0.0, 0.4,
             0.35, 0.4, 0.0, 1.0, 0.6,
             0.0, 0.0, 0.4, 0.6, 1.0), ncol = 5)
colnames(S) = c("Y1", "X1", "X2", "Z1" ,"Z2")
rownames(S) = colnames(S)

# Make mean vector
mus = c(1, 2, 3, 4, 5); names(mus) = colnames(S)

# Generate 5347 observations
obs = mvrnorm(n = 5347, mu = mus, Sigma = S)
head(obs)