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

如何在R中循环200次生成数据并回归提取系数存入列表?

循环生成二元正态数据并提取回归系数的R实现

方案一:基础for循环(易理解,适合新手)

先给出完整可运行代码,注意要先加载MASS包:

# 加载生成多元正态分布所需的MASS包
library(MASS)

# 设置循环次数
n_iterations <- 200
# 提前创建指定长度的空列表,存储每次的系数结果
coefficient_results <- vector("list", length = n_iterations)

# 开始200次循环
for (i in 1:n_iterations) {
  # 1. 生成二元正态分布数据
  sample_size <- 200                                       
  sample_mean <- c(3, 4)                                   
  sample_cov <- matrix(c(2, 1, 1, 2), ncol = 2)
  
  # 生成样本
  sample_data <- mvrnorm(n = sample_size, mu = sample_mean, Sigma = sample_cov)
  df <- as.data.frame(sample_data)
  
  # 构造Y变量
  df$Y <- 1 + df$V1*2 + df$V2 + rnorm(200, 0, 1)
  # 重命名列
  colnames(df)[1:2] <- c("X1", "X2")
  
  # 2. 执行Y~X1的线性回归
  model <- lm(Y ~ X1, data = df)
  
  # 3. 提取X1的斜率系数,存入列表
  coefficient_results[[i]] <- coef(model)[["X1"]]
}

# 可选:查看前6次的结果
head(coefficient_results)

方案二:用lapply的函数式实现(更符合R语言习惯)

把单次流程封装成函数,用lapply批量执行,代码更简洁:

library(MASS)

n_iterations <- 200

# 定义单次迭代的函数:生成数据、回归、返回系数
single_run <- function() {
  # 生成数据
  sample_size <- 200                                       
  sample_mean <- c(3, 4)                                   
  sample_cov <- matrix(c(2, 1, 1, 2), ncol = 2)
  
  sample_data <- mvrnorm(n = sample_size, mu = sample_mean, Sigma = sample_cov)
  df <- as.data.frame(sample_data)
  
  df$Y <- 1 + df$V1*2 + df$V2 + rnorm(200, 0, 1)
  colnames(df)[1:2] <- c("X1", "X2")
  
  # 回归并提取X1的系数
  coef(lm(Y ~ X1, data = df))[["X1"]]
}

# 执行200次,结果自动存入列表
coefficient_results <- lapply(1:n_iterations, function(x) single_run())

# 可选:将列表转为向量方便后续统计分析
coefficient_vector <- unlist(coefficient_results)
# 比如查看系数的均值和标准差
mean(coefficient_vector)
sd(coefficient_vector)

关键细节说明

  • 必须加载MASS包:mvrnorm()函数属于这个包,遗漏会导致函数未找到的错误。
  • 提前初始化列表:vector("list", length = n_iterations)比循环中动态添加元素(如c(coefficient_results, new_coef))效率更高,尤其是迭代次数较多时。
  • 提取系数的简洁方式:用coef(model)[["X1"]]直接获取X1的斜率,比summary(model)$coefficients[2,1]更高效且易读。
  • 结果转换:如果后续需要做统计分析(比如计算系数的分布),用unlist()把列表转为数值向量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:05:24