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

求助:生成符合指定协方差矩阵的100组观测数据——扰动项构建难题

生成符合指定协方差矩阵的100个观测值数据(R实现)

方法一:按给定变量生成规则构建

按照你提供的变量生成逻辑,先确定各扰动项的分布参数,再逐步生成变量:

set.seed(123) # 设置随机种子,保证结果可复现
n <- 100

# 生成独立正态分布的x1、x2
x1 <- rnorm(n, mean = 0, sd = 1)
x2 <- rnorm(n, mean = 0, sd = 1)

# 计算e3的方差,匹配x3的目标方差1.350
var_x3_target <- 1.350
var_e3 <- (var_x3_target - 0.25*var(x1) - 0.25*var(x2)) / (0.5^2)
e3 <- rnorm(n, mean = 0, sd = sqrt(var_e3))
x3 <- 0.5*x1 + 0.5*x2 + 0.5*e3

# 构造e4、e5的联合正态分布(协方差0.5),匹配x4、x5的目标方差
var_e4_target <- (1.265 - 0.25*var_x3_target) / (0.707^2)
var_e5_target <- (0.949 - 0.25*var_x3_target) / (0.707^2)
e_cov <- matrix(c(var_e4_target, 0.5, 0.5, var_e5_target), nrow = 2)
e4e5 <- MASS::mvrnorm(n, mu = c(0,0), Sigma = e_cov)
e4 <- e4e5[,1]
e5 <- e4e5[,2]

# 生成x4、x5
x4 <- 0.5*x3 + 0.707*e4
x5 <- 0.5*x3 + 0.707*e5

# 合并为数据集
data <- data.frame(x1, x2, x3, x4, x5)

# 查看样本协方差矩阵(保留3位小数)
round(cov(data), 3)

注:由于仅生成100个观测值,样本协方差会与目标值存在轻微偏差,增大样本量可缩小差异。


方法二:直接基于目标协方差矩阵生成

如果需要更精准匹配给定的协方差矩阵,可直接生成多元正态分布数据:

# 补全目标协方差矩阵(对称结构)
target_cov <- matrix(
  c(0.931, 0.171, 0.630, 0.384, 0.324,
    0.171, 1.094, 0.762, 0.368, 0.385,
    0.630, 0.762, 1.350, 0.743, 0.611,
    0.384, 0.368, 0.743, 1.265, 0.624,
    0.324, 0.385, 0.611, 0.624, 0.949),
  nrow = 5, byrow = TRUE,
  dimnames = list(c("x1","x2","x3","x4","x5"),
                  c("x1","x2","x3","x4","x5"))
)

set.seed(123)
n <- 100
data <- MASS::mvrnorm(n, mu = rep(0,5), Sigma = target_cov)
data <- as.data.frame(data)

# 查看样本协方差矩阵
round(cov(data), 3)

这种方法无需手动推导扰动项参数,直接生成符合要求的数据集,效率更高。


内容的提问来源于stack exchange,提问作者Ramakrishna S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:15:40