引导样本表示在R中使用boot Package,为boot()函数创建统计函数

时间:2016-10-13 15:28:39

标签: r bootstrapping

我有一个包含15个密度计算的数据集,每个都来自不同的横断面。我想用替换重新采样这些,取15个横断面中15个随机选择的样本,然后得到这些重新采样的平均值。在这个过程中,每个样带都应该有自己的个人采样概率。这应该做5000次。我有一个代码,它不使用启动功能,但如果我想使用启动包计算BCa 95%CI,它需要首先通过启动功能完成引导。 我一直在尝试创建一个函数但我不能得到任何似乎工作。我希望引导程序从某个列中选择(数据$ xs),并且要使用的概率在列数据$ prob中。

我认为可能有用的功能是;

library(boot)
meanfun <- function (data, i){
    d<-data [i,]
    return (mean (d))   }
bo<-boot (data$xs, statistic=meanfun, R=5000)
#boot.ci (bo, conf=0.95, type="bca")  #obviously `bo` was not made

但是这告诉我“维数不正确”

我理解如何在正常意义上创建一个函数,但是这个函数在启动时是如何工作的似乎很奇怪。由于该函数仅用于按名称引导,并且没有指定要传递给函数的参数,我似乎仅限于引导本身作为参数传入的内容(例如,我无法将数据$ xs in作为参数传递给数据,我无法传递数据$ prob作为概率的参数,等等)。它似乎真的限制了可以做的事情。也许我错过了一些东西?

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:6)

出现此错误的原因是data$xs返回了一个向量,然后您尝试按data [i, ]进行子集化。

解决此问题的一种方法是将其更改为data[i]或使用data[, "xs", drop = FALSE]drop = FALSE避免类型强制,即。将其保留为data.frame

我们尝试

data <- data.frame(xs = rnorm(15, 2))

library(boot)
meanfun <- function(data, i){
  d <- data[i, ]
  return(mean(d))   
}
bo <- boot(data[, "xs", drop = FALSE], statistic=meanfun, R=5000)
boot.ci(bo, conf=0.95, type="bca")

并获得:

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 5000 bootstrap replicates

CALL : 
boot.ci(boot.out = bo, conf = 0.95, type = "bca")

Intervals : 
Level       BCa          
95%   ( 1.555,  2.534 )  
Calculations and Intervals on Original Scale

答案 1 :(得分:1)

一个人可以使用boot.array提取全部或部分重采样集。在这种情况下:

bo.ci<-boot.ci(boot.out = bo, conf = 0.95, type = "bca")


resampled.data<-boot.array(bo,1)

要提取第一组和第二组重采样数据:

resample.1<-resampled.data[1,]
resample.2<-resampled.data[2,]

然后继续从任何子集中提取所需的单个统计信息。例如,如果您假设正常,则可以在第一个子集上运行学生的t.test:

t.test(resample.1)

在此示例中,特定的种子值给出:

数据:重新采样。1
t = 6.5216,df = 14,p值= 1.353e-05
替代假设:真实均值不等于0
95%置信区间:
5.234781 10.365219
样本估算值:
x的均值
7.8