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

R语言基于现有测量值模拟额外观测/自助法采样实现咨询

R实现基于现有观测生成多组模拟测量值的两种方法

方法1:针对每行单独有放回采样(非参数自助法)

你之前直接调用sample()得到整列复制的结果,是因为没有按行单独遍历处理,用apply()按行执行采样即可解决问题,示例代码如下:

# 构造示例数据框
df <- data.frame(
  `1` = c(10, 20, 4, 10),
  `2` = c(15, 16, 6, 12),
  `3` = c(12, 24, 8, 9),
  row.names = c("A", "B", "C", "D"),
  check.names = FALSE
)

# 定义需要生成的新观测次数:第4到15次共12次
n_new <- 12

# 按行单独做有放回采样,生成新列
new_cols <- t(apply(df, 1, function(row_vals) {
  sample(row_vals, size = n_new, replace = TRUE)
}))

# 把新生成的列和原数据合并
colnames(new_cols) <- as.character(4:(3 + n_new))
df_full <- cbind(df, new_cols)

方法2:基于正态分布的参数自助法

你提到的参数自助法实现逻辑非常简单,只需要按行估计现有观测的均值和标准差作为正态分布参数,再生成随机值即可:

n_new <- 12
# 按行估计正态分布参数并生成新观测
new_cols_param <- t(apply(df, 1, function(row_vals) {
  mu <- mean(row_vals)
  sigma <- sd(row_vals)
  # 若需要限制生成值的合理范围,可在此处加截断逻辑
  rnorm(n = n_new, mean = mu, sd = sigma)
}))

# 合并到原数据
colnames(new_cols_param) <- as.character(4:(3 + n_new))
df_full_param <- cbind(df, new_cols_param)

两种方法的选择

  • 非参数自助法(方法1):生成的观测值只能是现有3次测量中的值,不需要做分布假设,实现最简单
  • 参数自助法(方法2):符合你提到的正态分布假设,生成的观测值可以是分布范围内的任意值,更符合真实测量的变异特征

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:00:06