r - 选择每个 bootstrap 样本的样本大小
问题描述
我有一个数据框,在 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)
解决方案
引导将通过替换完成,因此您有可能在 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
推荐阅读
- python-3.x - 有没有一种方法可以在不使用 timedelta 的情况下使用 datetime 将字符串转换为毫秒?
- css - 样式未正确应用于背景图像
- html - 两个相邻的按钮 HTML CSS BOOTSTRAP
- python - 使用python删除文本文件中'-1'和','之间多行中的多个字符以及如何打开文件?
- python - 我怎样才能让这个物体发射弹丸?
- python - 如何为每个精灵分配图像?
- python - 取数据帧的导数
- javascript - 如何使用纯 Javascript 函数呈现多个 HTML 部分
- css - 使用自定义 SVG React 覆盖 AgGrid 行复选框
- python - EOFError:解压非空文件时输入不足