📜  在 R 中模拟二元和多元正态分布

📅  最后修改于: 2022-05-13 01:55:01.500000             🧑  作者: Mango

在 R 中模拟二元和多元正态分布

在本文中,我们将学习如何在 R 编程语言中模拟二元和多元正态分布。

为了在 R 语言中模拟多元正态分布,我们使用 MASS 包库的 mvrnorm()函数。 mvrnorm()函数用于在 R 语言中生成具有指定平均值的随机数的多元正态分布。 mvrnorm()函数采用随机样本大小、最终分布中每个变量的均值向量和指定变量协方差矩阵作为参数的正定对称矩阵,并返回具有所需正态分布的多元矩阵。

模拟二元正态分布

为了模拟二元正态分布,我们将 mvrnorm()函数的参数限制为两个变量值。我们将使用均值向量中的两个值和一个 2X2 矩阵分别作为 mu 和 sigma 参数。这样,mvrnorm()函数将创建一个二元正态分布,而不是多元正态分布。

示例:这里是双变量数据分布的模拟。

R
# load library MASS
library(MASS)
  
# set seed and create data vectors
set.seed(98989)
sample_size <- 100                                       
sample_meanvector <- c(10, 5)                                   
sample_covariance_matrix <- matrix(c(10, 5, 2, 9),
                                   ncol = 2)
  
# create bivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
                               mu = sample_meanvector, 
                               Sigma = sample_covariance_matrix)
  
# print top of distribution
head(sample_distribution)


R
# load library MASS
library(MASS)
  
# set seed and create data vectors
set.seed(98989)
sample_size <- 1000                                       
sample_meanvector <- c(10, 5, 7, 9, 20)                                   
sample_covariance_matrix <- matrix(c(5, 4, 3, 2, 1, 4, 5, 4, 3, 2,
                                    3, 4, 5, 4, 3, 2, 3, 4, 5, 4, 1, 
                                    2, 3, 4, 5), ncol = 5)
  
# create multivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
                               mu = sample_meanvector, 
                               Sigma = sample_covariance_matrix)
  
# print top of distribution
head(sample_distribution)


输出:

模拟多元正态分布:

为了模拟多元正态分布,我们将使用 MASS 包库的 mvrnorm()函数。如果我们需要 n 变量分布,我们将使用 n 变量均值向量和 nXn 矩阵分别作为 mvrnorm()函数的 mu 和 sigma 参数。这样,mvrnorm()函数将创建所需的变量正态分布。

示例:这里,是5个变量数据分布的模拟。

R

# load library MASS
library(MASS)
  
# set seed and create data vectors
set.seed(98989)
sample_size <- 1000                                       
sample_meanvector <- c(10, 5, 7, 9, 20)                                   
sample_covariance_matrix <- matrix(c(5, 4, 3, 2, 1, 4, 5, 4, 3, 2,
                                    3, 4, 5, 4, 3, 2, 3, 4, 5, 4, 1, 
                                    2, 3, 4, 5), ncol = 5)
  
# create multivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
                               mu = sample_meanvector, 
                               Sigma = sample_covariance_matrix)
  
# print top of distribution
head(sample_distribution)

输出: