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

R语言如何嵌套循环实现250次模拟,每次输出1000条观测数据

实现方案

你不需要编写双层循环,原有的单组序列生成逻辑本身已经包含内层迭代,仅需在外层套一个控制模拟次数的循环即可。

1. 嵌套for循环版本

# 提前定义固定参数,方便后续修改
n_simulation <- 250  # 总模拟次数
valid_length <- 1000 # 每组有效观测数
burn_in_length <- 100 # 预热期长度
total_length <- valid_length + burn_in_length
error_sd <- 0.2

# 提前初始化结果容器(矩阵,每列存1组模拟结果,效率远高于动态拼接)
sim_result <- matrix(NA, nrow = valid_length, ncol = n_simulation)

# 外层循环:控制重复模拟250次
for (sim_idx in 1:n_simulation) {
  # 直接复用你原来的单组模拟逻辑
  e <- rnorm(total_length, mean = 0, sd = error_sd)
  Y_t <- c(0, 0)
  for (i in 3:total_length) {
    f1 <- 0.138 + (0.316 + 0.982 * Y_t[i-1]) * exp(-3.89 * (Y_t[i-1])^2)
    f2 <- -0.437 - (0.659 + 1260 * Y_t[i-1]) * exp(-3.89 * (Y_t[i-1])^2)
    Y_t[i] <- f1 * Y_t[i-1] + f2 * Y_t[i-2] + e[i]
  }
  # 去掉预热期后存入结果矩阵对应列
  sim_result[, sim_idx] <- Y_t[(burn_in_length + 1):total_length]
}

执行完成后sim_result是1000行、250列的矩阵,第k列就是第k次模拟得到的1000条有效观测。

2. 更简洁的R风格实现(无需显式写外层循环)

可以把单组模拟逻辑封装为函数,用R原生的replicate函数直接完成重复模拟,代码更简洁不易出错:

# 封装单组模拟函数
sim_single_group <- function(total_len = 1100, burn_in = 100, sd = 0.2) {
  e <- rnorm(total_len, mean = 0, sd = sd)
  Y_t <- c(0, 0)
  for (i in 3:total_len) {
    f1 <- 0.138 + (0.316 + 0.982 * Y_t[i-1]) * exp(-3.89 * (Y_t[i-1])^2)
    f2 <- -0.437 - (0.659 + 1260 * Y_t[i-1]) * exp(-3.89 * (Y_t[i-1])^2)
    Y_t[i] <- f1 * Y_t[i-1] + f2 * Y_t[i-2] + e[i]
  }
  return(Y_t[(burn_in + 1):total_len])
}

# 直接重复250次,得到的结果和循环版本完全一致
sim_result <- replicate(n = 250, expr = sim_single_group())

补充说明

  • 如果需要单独处理每组结果,可以选择用列表存储:将初始化代码改为sim_result <- vector("list", 250),赋值时改为sim_result[[sim_idx]]即可
  • 如需复现模拟结果,运行所有代码前执行set.seed(自定义整数)固定随机种子即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:36:00