【问题标题】:How do I use sample function for bootstrapping in R? Replacement row problem如何在 R 中使用示例函数进行引导?换行问题
【发布时间】:2019-10-25 09:45:46
【问题描述】:

我正在尝试为数据框“ev_all_clean”创建引导程序

set.seed(1315)
boot_s <- as.data.frame(matrix(NA, ncol = 19, nrow = 1000))
for(k in 1:19){
  for(l in 1:1000){
  boot_s[l,k]<- sample(ev_all_clean[,k], size=1, replace=T)
  }
}

以上代码返回

replacement element 1 has 768 rows to replace 1 rows

非常感谢您的帮助!提前谢谢你。

【问题讨论】:

  • 您能否也分享ev_all_clean df,以便测试提议的解决方案?
  • 您需要独立引导所有列,还是只按行引导数据帧?
  • @saudic 我需要独立引导所有列
  • @deepseefan 我无法共享数据,因为它是专有的,但它有 768 个条目,总共 20 列
  • 这里是变量列表: $gender "numeric" $area "factor" $age "numeric" $wdays "numeric" $order "numeric" $whours "numeric" $ni "factor" $aware "factor" $max_v "numeric" $accel "factor" $max_r "numeric" $m_charge "factor" $t_charge "numeric" $p_charge "numeric" $f_mt "numeric" $p_mt "numeric" $p_buy "numeric" $interest "因素" $purchase "因素"

标签: r sample statistics-bootstrap


【解决方案1】:

我刚刚根据您提供的规范创建了一个虚拟 ev_all_clean,看看这是否可以帮助您入门。

boot_s <- as.data.frame(matrix(NA, ncol = 19, nrow = 1000))
for(k in 1:19){
  for(l in 1:1000){
    boot_s[[l,k]]<- sample(ev_all_clean[,k], size=1, replace=TRUE)
  }
}

稍微解释一下脚本的作用:

ev_all_clean[,k] - 循环遍历单个列和 sample 1 元素并替换,该单个元素将用于替换 boot_s[[l,k]] 处的值。您可以阅读[[[ here 之间的区别。

由于您正在对单个元素进行采样,因此您可能想要替换单个元素,这就是错误消息试图告诉您的 - 我认为。

【讨论】:

  • 非常感谢!代码运行了,但最终在启动的数据帧上创建了向量作为数据点(因此在新数据集上,每个单元格都成为基于列的向量,每个单元格内有 768 个数据点)。我只想在启动的数据帧的每个单元格上都有一个数字。
【解决方案2】:

一旦你有了原始数据框 boot_s,你就可以做你的第一个引导程序

# first prepare a dataframe of the same shape as your original
samplemat=boot_s 
# then perform bootstrap for each column separately
for(k in 1:19){
  samplemat[,k] = boot_s[sample(1:nrow(boot_s),nrow(boot_s),T),k]
}

sample 准备一个包含行索引的向量,以保留在您的引导样本中。 您必须为您想要的每个引导操作执行此操作(您将需要很多)。

【讨论】:

  • 谢谢!代码有效,但我想扩大数据点的数量(例如从原来的 768 到 3000)。
  • 我的答案中没有硬编码行数,您可以放置​​任意行数的数据框。列数为 19,但您也可以将其视为变量,使用 ncol(boot_s) 而不是 19。
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 2019-03-18
  • 2022-12-31
  • 2020-02-26
  • 2017-02-22
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
相关资源
最近更新 更多