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

如何在R中对样本量100-200的场景执行1000次模拟?

解决方案

优化后的完整代码

library(tibble)
library(dplyr)
library(purrr)

# 定义模拟函数(优化统计量计算逻辑,避免重复调用aggregate)
simulation <- function(n){
  id <- 1:n
  trt <- rbinom(n, 1, 0.2)
  x <- rnorm(n, 0, 1)
  data <- data.frame(id, trt, x)
  
  # 一次性按trt分组计算均值、标准差和样本量
  stats <- data %>%
    group_by(trt) %>%
    summarize(
      mean_x = mean(x),
      sd_x = sd(x),
      n_x = n(),
      .groups = "drop"
    )
  
  # 处理极端情况:某组样本量为0(trt全为0或全为1)
  if(nrow(stats) < 2){
    return(tibble(d_con = NA_real_, z_con = NA_real_))
  }
  
  # 提取两组统计量
  Mean.1 <- stats$mean_x[stats$trt == 0]
  Mean.2 <- stats$mean_x[stats$trt == 1]
  s.1 <- stats$sd_x[stats$trt == 0]
  s.2 <- stats$sd_x[stats$trt == 1]
  n.1 <- stats$n_x[stats$trt == 0]
  n.2 <- stats$n_x[stats$trt == 1]
  
  # 计算SMD和z值
  d_con <- (Mean.1 - Mean.2) / sqrt((s.1^2 + s.2^2)/2)
  z_con <- (Mean.1 - Mean.2) / sqrt(s.1^2/n.1 + s.2^2/n.2)
  
  tibble(d_con, z_con)
}

# 定义需覆盖的样本量范围
sample_sizes <- 100:200

# 遍历每个样本量,执行1000次模拟并计算均值
final_results <- map_dfr(sample_sizes, function(n){
  # 批量生成1000次模拟结果
  sim_results <- map_df(1:1000, ~simulation(n))
  # 计算当前样本量下的均值(忽略极端情况的NA)
  tibble(
    sample_size = n,
    mean_d = mean(sim_results$d_con, na.rm = TRUE),
    mean_z = mean(sim_results$z_con, na.rm = TRUE)
  )
})

# 查看最终结果
print(final_results)

关键改进说明

  • 简化统计计算:用dplyr的分组汇总一次性计算均值、标准差和样本量,替代重复调用aggregate,代码更简洁高效。
  • 异常防护:处理了trt全为0或1的极端情况,避免因分组缺失导致的程序报错。
  • 高效批量模拟:用purrr::map_df替代循环拼接结果,大幅提升模拟数据生成效率;外层用map_dfr直接汇总所有样本量的结果,无需手动管理数据框拼接。

传统for循环写法(若偏好显式循环)

如果习惯用for循环实现外层遍历,可替换为以下代码:

# 初始化空结果数据框
final_results <- tibble(
  sample_size = integer(),
  mean_d = numeric(),
  mean_z = numeric()
)

for(n in sample_sizes){
  sim_results <- map_df(1:1000, ~simulation(n))
  mean_d <- mean(sim_results$d_con, na.rm = TRUE)
  mean_z <- mean(sim_results$z_con, na.rm = TRUE)
  
  final_results <- bind_rows(final_results, 
                            tibble(sample_size = n, mean_d = mean_d, mean_z = mean_z))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:09:53