通过bootstrapping选择两个随机数

时间:2013-06-19 18:24:07

标签: r select random statistics-bootstrap

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

  1. 从原始数据集中随机取出两个数字。
  2. 选择这两个随机数中较大的数字。
  3. 将此较大的数字输入新数据集。
  4. 重复步骤1-3,多次我拥有1020个大小的新数据集(如原始数据集中),并且我总共有10000个新数据集,大小为1020。
  5. 我设法根据原始数据集创建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))
    

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

2 个答案:

答案 0 :(得分:1)

我认为这可能会做你想要的。 y1将包含一对中的所有第一次抽奖,y2将包含所有第二次抽奖。 pmax函数占用每个函数中的较大者,矩阵命令将数据放入具有1020行和10000列的矩阵中。您可能希望用脚本中的变量替换其中一些“魔术”数字,以便您可以轻松地尝试使用小样本进行测试。

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

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

答案 1 :(得分:1)

我很难想象你为什么要这样做,但是......这是一个规模小得多的例子。我创建了一些假数据df,进行了10次测量并生成了3个bootstrap样本。在现实生活中,您将使用1020次测量的实际数据框架替换df,并将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)