You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于MASS包mvrnorm输出含义及自定义my_mvrnorm函数的技术问询

多元正态分布模拟相关问题解答

1. MASS::mvrnorm()函数输出说明

  • 该函数输出是一个n行p列的数值矩阵:
    • n对应参数n的取值(此处为10),代表模拟的抽样次数;
    • p对应多元正态分布的维度(此处mu是长度为2的向量,因此是2维)。
  • 每一行是一次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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:40:23