繁体   English   中英

R:从引导结果向量计算BCa

[英]R: Calculate BCa from vector of bootstrapped results

我正在寻找一种使用引导结果向量(人口增长率的自举估计值-lambda)来计算R中经偏差校正的加速置信区间的方法。 但是,我找到的包要么使用特定的对象类型(例如在“ boot”包中),要么不计算BCa类型的置信区间。 我使用for循环引导结果,然后将结果存储在向量中的原因是,对于每个自举重采样,我首先得到一个80 x 33的结果矩阵,该矩阵定义了每年采样的每个总体的参数,而该参数又依次为每个人口定义lambda。 据我所知,这在启动包中很麻烦,并且很容易作为for循环进行编程。 实际的功能集相当复杂,因此不能在此包括。

我曾尝试使用此问题作为伪造“启动”对象的指南,但没有奏效: 如何使用预先引导的数据获取BCa置信区间?

可以说我有观察到的lambda估计值

lambda = 1.18

并模拟自举估计的向量

library(fGarch)
lambdaBS = rsnorm(999,mean=lambda-0.04,sd=0.11,xi=2.5)
plot(density(lambdaBS))

这是正确的偏见和偏见。

我希望使用此信息,可以有一个当前存在的函数来计算BCa置信区间,否则希望对函数进行编程很容易做到这一点。 到目前为止,我还没有发现这种情况。

与R的情况一样,某些实用程序在软件包之间分布很广,这是一个简单的解决方案,但是我花了数小时进行搜索才能找到,因此对于可能正在搜索某些内容的任何人,我都会回答我自己的问题类似。

使用问题中的示例数据,“自举” R包中的bca函数为自举结果向量提供了偏差校正和加速的置信区间。 我们可以将它们与其他置信区间进行比较。

library(fGarch)
library(coxed)

set.seed(15438)

#simulate bootstrap statistics
lambdaBS = rsnorm(9999,mean=lambda-0.04,sd=0.11,xi=2.5)

#bias-corrected and accelerated
bca(lambdaBS)

1.002437 1.452525

#confidence intervals using standard error (inappropriate)
c(lambda-(sd(lambdaBS)*2),lambda+(sd(lambdaBS)*2))

0.9599789 1.4000211

#percentile confidence intervals
quantile(lambdaBS, c(0.025,0.975))

    2.5%     97.5% 
0.9895892 1.4016528 

这似乎运作良好。 我不确定如何在不需要对相关统计数据进行初始估计的情况下纠正偏差,但是还没有阅读该方法所基于的论文。

另一个模拟显示了如何将其与使用bootboot.ci结果进行比较。

library(boot)

#generate data
set.seed(12345)
dat = rsnorm(500,mean=1.6,sd=0.5,xi=3.0)

#bootstrap the median
meanfun = function(x,id){ mean(x[id])}
test = boot(data=dat,R=999,statistic=meanfun)

#BCa using boot.ci
boot.ci(test,type="bca")

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates

CALL : 
boot.ci(boot.out = test, type = "bca")

Intervals : 
Level       BCa          
95%   ( 1.537,  1.626 )  
Calculations and Intervals on Original Scale


#BCa using bca function from coxed package
bca(test$t)

 1.536888 1.625524

在这种情况下,两个函数都给出相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM