【问题标题】:Selecting the sample size of each bootstrap sample选择每个 bootstrap 样本的样本大小
【发布时间】:2021-10-24 17:13:41
【问题描述】:

我有一个数据框,在 29 个变量(列)中包含大约 1700 个观测值(行),我必须选择其中 7 个观测值的混合,其中(每个变量的)加权平均值与加权平均值尽可能相等1700 个观测值的平均值(每个变量的)。我尝试使用 boot() 引导 R 中的数据,目的是获得几种可能的混合物(计算所有可能的混合物需要很长时间),但我未能从整个数据集中仅选择 7 个观察值的样本。我知道自举通常会生成与原始数据集大小相同的样本。这是我尝试过的代码:

functionWAM<-function(data, i, p){
  data<-data[sample(nrow(data), p),];
  SAM<-weighted.mean(data[i,3], data[i,1]); 
  CAM<-weighted.mean(data[i,4], data[i,1]);
  return(cbind(SAM,CAM))
}

WAMresults<-boot(datamatrix, statistic=functionWAM, R=1000, p=7)

【问题讨论】:

    标签: r bootstrapping statistics-bootstrap sample-size


    【解决方案1】:

    引导将通过替换来完成,因此您有可能在 7 个值中获得两次相同的观察结果。如果您不希望这样做,您基本上可以创建自己的函数来执行此操作(实际上,您已经拥有它)。下面的函数返回所选择的七个观测值的加权平均值,但也作为向量的属性返回产生结果的观测值。

    functionWAM <- function(data, p){
      obs <- sample(1:nrow(data), 7, replace=FALSE)
      SAM<-weighted.mean(data[obs,3], data[obs,1]) 
      CAM<-weighted.mean(data[obs,4], data[obs,1])
      out <- structure(c(SAM, CAM), obs = obs)
      return(out)
    }
    

    这是一个假设的例子。它使用replicate() 进行多次迭代,在本例中为 3。

    dat <- data.frame(weight=runif(100,.5,1), x= rnorm(100), y=rnorm(100), z = rnorm(100))
    
    reps <- replicate(3, functionWAM(dat, 7), simplify=FALSE)
    reps
    # [[1]]
    # [1] 0.6418563 0.1982215
    # attr(,"obs")
    # [1] 54 83 12 26 51 35 50
    # 
    # [[2]]
    # [1]  0.8127784 -0.6235828
    # attr(,"obs")
    # [1] 47  8 35 16 87 26 92
    # 
    # [[3]]
    # [1] -0.20686227  0.09357421
    # attr(,"obs")
    # [1] 89 99 62 69 77 91 92
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多