【问题标题】:selecting two random numbers via bootstrapping通过自举选择两个随机数
【发布时间】:2013-06-19 18:24:06
【问题描述】:

我有一个包含 1020 个尺寸测量值的数据集。我需要根据这 1020 个数字创建一个新数据集,方法是随机取出替换数字。但是,我需要通过以下方式进行随机抽样:

  1. 从原始数据集中随机取出两个数字。
  2. 选择这两个随机数中较大的一个。
  3. 将这个更大的数字添加到新数据集中。
  4. 重复步骤 1-3 多次,我有一个 1020 大小的新数据集(就像在原始数据集中一样),并且我总共有 10000 个大小为 1020 的新数据集。

我确实设法通过自举方法从原始数据集中随机挑选数字,在原始数据集的基础上创建了 10000 个新数据集:

a <- numeric(10000)
for(i in 1:10000) a[i] <- sample(size, replace = T)

但是我不知道,如何使用上面的这个命令来获得两个随机数,选择较大的一个,并将这个较大的一个放在新的数据集中。

会不会是下面的东西?

b <- numeric(10000)
for(i in 1:10000) b[i] <- sample(size, 2, ......, replace = T))

然后有一些命令(我不知道)有没有点是要从两个中获取更大的数字到新的数据集中?

【问题讨论】:

  • 我将编写一个函数来执行此操作,然后使用引导包中的boot 调用它

标签: r select random statistics-bootstrap


【解决方案1】:

我认为这可能会满足您的需求。 y1 将包含您的所有第一次抽奖,y2 将包含所有第二次抽奖。 pmax 函数采用其中较大的一个,matrix 命令将数据放入一个具有 1020 行和 10000 列的矩阵中。您可能想用脚本中的变量替换其中一些“神奇”数字,以便您可以轻松地尝试小样本进行测试。

y1 <- sample(data, 1020 * 10000, replace = TRUE)
y2 <- sample(data, 1020 * 10000, replace = TRUE)

bigDat <- matrix( pmax(y1, y2), nrow = 1020)

【讨论】:

  • 非常感谢!我设法用这个建议做我想做的事。 :)
【解决方案2】:

我很难想象你为什么要这样做,但是......这里有一个规模小得多的例子。我创建了一些假数据df,其中包含 10 个测量值并生成了 3 个引导样本,如您所描述的。在现实生活中,您可以将 df 替换为 1020 次测量的真实数据框,并将 nboots 设置为等于 10000。

# fake data
df <- data.frame(meas=rnorm(n))
# number of bootstrap samples you want
nboots <- 3

# number of rows in fake data
n <- dim(df)[1]
# array of initial double bootstrap sample
init <- array(sample(1:n, n*2*nboots, replace=TRUE), dim=c(n, nboots, 2))
# keep only the bigger measurement from each pair of bootstrap samples
bootmeas <- matrix(pmax(df$meas[init[, , 1]], df$meas[init[, , 2]]), nrow=n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2012-05-19
    • 2014-08-06
    • 2016-02-20
    • 1970-01-01
    • 2016-03-10
    • 2012-10-22
    相关资源
    最近更新 更多