关于MASS包mvrnorm输出含义及自定义my_mvrnorm函数的技术问询
多元正态分布模拟相关问题解答
1. MASS::mvrnorm()函数输出说明
- 该函数输出是一个n行p列的数值矩阵:
- n对应参数
n的取值(此处为10),代表模拟的抽样次数; - p对应多元正态分布的维度(此处
mu是长度为2的向量,因此是2维)。
- n对应参数
- 每一行是一次2维多元正态分布的完整抽样结果,第一列对应
mu中第一个元素(1)对应的边缘正态分布抽样值,第二列对应mu中第二个元素(5)对应的边缘正态分布抽样值。 - 生成两列各10个随机变量的原因:我们指定的是2维多元正态分布(
mu长度为2,Sigma是2×2协方差矩阵),同时要求模拟10次,因此每行是一组2维样本,最终得到10行2列的矩阵。
2. 自定义函数my_mvrnorm的完善
首先需要实现my_cov_matrix函数生成正确的2×2协方差矩阵,再完善my_mvrnorm的样本赋值逻辑:
步骤1:实现协方差矩阵生成函数
my_cov_matrix <- function(sigma_1, sigma_2, rho) { # 构建二元正态分布的协方差矩阵 matrix( c(sigma_1^2, rho * sigma_1 * sigma_2, rho * sigma_1 * sigma_2, sigma_2^2), nrow = 2, byrow = TRUE ) }
步骤2:完善my_mvrnorm函数
library(MASS) library(tibble) my_mvrnorm <- function(n, mu_1, mu_2, sigma_1, sigma_2, rho){ mu <- c(mu_1, mu_2) sigma <- my_cov_matrix(sigma_1, sigma_2, rho) # 生成n组二元正态分布样本 samples <- MASS::mvrnorm(n = n, mu = mu, Sigma = sigma) tb <- tibble( X = samples[, 1], # 提取样本矩阵第一列作为X列 Y = samples[, 2], # 提取样本矩阵第二列作为Y列 rho = rep(rho, n) # 生成重复rho值的列 ) return(tb) }
逻辑说明
- 调用
MASS::mvrnorm生成n行2列的样本矩阵,每行对应一组(X,Y)的二元正态抽样结果; - 将样本矩阵的第一列赋值给
tibble的X列,第二列赋值给Y列; - 通过
rep(rho, n)生成包含n个重复rho值的列,满足所有行填充指定rho的要求。
内容的提问来源于stack exchange,提问作者clementine1001
相关产品推荐
相关产品推荐

