如何在R中从高斯分布创建二维数据集?

时间:2016-06-06 15:13:41

标签: r gaussian sample

我需要创建“使用具有非对角协方差矩阵的多元高斯分布创建的200个样本的2D数据集”,但我既不是统计学家也不是数学家,我并没有完全得到这个。 / p>

这是我的理解。对角矩阵是在主对角线外的条目中具有全零的矩阵。因此,我假设非对角线是指在主对角线外的条目中没有全零的矩阵,这样任何随机矩阵都可以,对吧?所以,我开始创建一个随机矩阵,因为它在这里没有说任何大小,我只是做了100x100:

m <- matrix(rnorm(100*100), 100, 100)

我不知道如何实现其余的。我知道创建样本的sample()函数,但是如何创建“使用多元高斯分布创建200个样本的2D数据集”?

1 个答案:

答案 0 :(得分:3)

只要你有平均向量和协方差矩阵,通过MASS:::mvrnorm模拟多变量法则非常简单。有关如何使用此功能,请查看?mvrnorm

如果对协方差矩阵没有特殊要求,即随机协方差矩阵就可以了。您需要首先创建一个合适的协方差矩阵。

协方差矩阵必须是正定的。我们可以通过采用全秩矩阵的交叉积来创建正定矩阵。也就是说,如果n * p (n >= p)矩阵X具有完整的列排名,则A = X' %*% X是正定的(因此是正确的协方差)。

让我们首先生成一个随机X矩阵:

p <- 100  ## we want p-dimensional multivariate normal
set.seed(0); X <- matrix(runif(p * p), p, p)  ## this random matrix has full rank

然后得到一个协方差矩阵:

COV <- crossprod(X)  ## t(X) %*% X but about 2 times faster

我们还需要平均向量。我们假设它们是0均值:

mu <- rep(0, p)

现在我们致电MASS:::mvrnorm进行随机抽样:

library(MASS)   ## no need to install
x <- mvrnorm(1000, mu, COV)  ## mvrnorm(sample.size, mean, covariance)

现在x包含来自100维(p维)多元正态分布的1000个样本,平均mu和协方差COV

> str(x)
 num [1:1000, 1:100] 1.66 -2.82 6.62 6.46 -3.35 ...
 - attr(*, "dimnames")=List of 2

x是一个矩阵,每行都是一个随机样本。总共我们有1000行。

对于多变量正常,边际分布仍然正常。因此,我们可以绘制边缘的直方图。以下是第1,第10,第20和第30边缘的草图:

par(mfrow = c(2,2))
hist(x[, 1], main = "1st marginal")
hist(x[, 10], main = "10th marginal")
hist(x[, 20], main = "20th marginal")
hist(x[, 30], main = "30th marginal")

enter image description here