【问题标题】:How to create 2D data set from Gaussian distribution in R?如何从 R 中的高斯分布创建 2D 数据集?
【发布时间】:2016-06-06 15:13:40
【问题描述】:

我需要创建“包含 200 个样本的 2D 数据集,该样本由具有非对角协方差矩阵的多元高斯分布创建”,但我既不是统计学家也不是数学家,而且我没有完全明白这一点。

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

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

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

【问题讨论】:

    标签: r gaussian sample


    【解决方案1】:

    只要你有均值向量和协方差矩阵,通过MASS:::mvrnorm 模拟多元正态非常简单。看看?mvrnorm如何使用这个功能。

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

    协方差矩阵必须是正定的。我们可以通过取满秩矩阵的叉积来创建正定矩阵。也就是说,如果n * p (n &gt;= 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")
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多