【问题标题】:Bootstrapping sample means in R using boot Package, Creating the Statistic Function for boot() Function引导示例意味着在 R 中使用引导包,为 boot() 函数创建统计函数
【发布时间】:2017-02-22 19:45:24
【问题描述】:

我有一个包含 15 个密度计算的数据集,每个都来自不同的样带。我想用替换对这些进行重新采样,从 15 个样带中随机选择 15 个样本,然后获得这些重新采样的平均值。在此过程中,每个样带都应该有自己的被采样概率。这应该做 5000 次。我有一个代码可以在不使用引导功能的情况下执行此操作,但如果我想使用引导包计算 BCa 95% CI,则需要先通过引导功能完成引导。 我一直在尝试创建一个功能,但我无法获得任何似乎有效的功能。我希望引导程序从某个列 (data$xs) 中进行选择,并且要使用的概率在 data$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

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

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

感谢大家的帮助

【问题讨论】:

  • 您应该提供带有示例输入的reproducible example,以便我们也可以运行和测试该功能。使示例尽可能少。这样我们也可以运行代码来看看出了什么问题。

标签: r statistics-bootstrap


【解决方案1】:

此错误的原因是,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

【讨论】:

  • 好的,谢谢,我会试一试。但是,有没有办法插入每个样本被选中的概率?这非常重要,据我所知,我在包中没有看到任何这样的选项......也许有一种方法可以将它构建到函数中?
  • 为什么boot() 中的weights 参数不够用?我正在尝试了解您想要什么。
【解决方案2】:

可以使用 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)

对于这个例子和特定的种子值给出了:

数据:resample.1
t = 6.5216,df = 14,p 值 = 1.353e-05
备择假设:真实均值不等于 0
95% 置信区间:
5.234781 10.365219
样本估计:
x的平均值
7.8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多